From 2a9d03899cac227416b78fcd55b78d73c380105b Mon Sep 17 00:00:00 2001 From: Mugundh Date: Tue, 29 Oct 2024 14:19:13 +0530 Subject: [PATCH 1/3] Automated project structure updation using github workflows, python scripts and action bot --- .github/scripts/update_structure.py | 101 ++++++++++++++++++++++++++++ .github/workflows/update-readme.yml | 39 +++++++++++ PROJECT_STRUCTURE.md | 4 ++ README.md | 4 ++ 4 files changed, 148 insertions(+) create mode 100644 .github/scripts/update_structure.py create mode 100644 .github/workflows/update-readme.yml create mode 100644 PROJECT_STRUCTURE.md diff --git a/.github/scripts/update_structure.py b/.github/scripts/update_structure.py new file mode 100644 index 0000000..fdf8db3 --- /dev/null +++ b/.github/scripts/update_structure.py @@ -0,0 +1,101 @@ +import os +import github +from github import Github + +# Helper function to recursively build the repo structure and include file extensions +def get_repo_structure(path='.', prefix=''): + structure = [] + try: + items = sorted(os.listdir(path)) + except FileNotFoundError: + print(f"Path not found: {path}") + return structure + + for i, item in enumerate(items): + if item.startswith('.'): + continue # Skip hidden files and directories + item_path = os.path.join(path, item) + is_last = i == len(items) - 1 + current_prefix = '└── ' if is_last else '├── ' + + if os.path.isdir(item_path): + # Directory case + structure.append(f"{prefix}{current_prefix}{item}/") + next_prefix = prefix + (' ' if is_last else '│ ') + structure.extend(get_repo_structure(item_path, next_prefix)) + else: + # File case with extension + file_name, file_extension = os.path.splitext(item) + structure.append(f"{prefix}{current_prefix}{file_name}{file_extension}") + + return structure + +# Function to update the repo_structure.txt file +def update_structure_file(structure): + try: + with open('repo_structure.txt', 'w') as f: + f.write('\n'.join(structure)) + print("repo_structure.txt updated successfully.") + except IOError as e: + print(f"Error writing to repo_structure.txt: {e}") + +# Function to update the README.md with the new structure +def update_README(structure): + try: + with open('PROJECT_STRUCTURE.md', 'r') as f: + content = f.read() + except FileNotFoundError: + print("PROJECT_STRUCTURE.md not found.") + return + + start_marker = '' + end_marker = '' + + start_index = content.find(start_marker) + end_index = content.find(end_marker) + + if start_index != -1 and end_index != -1: + new_content = ( + content[:start_index + len(start_marker)] + + '\n```\n' + '\n'.join(structure) + '\n```\n' + + content[end_index:] + ) + try: + with open('PROJECT_STRUCTURE.md', 'w') as f: + f.write(new_content) + print("PROJECT_STRUCTURE.md updated with new structure.") + except IOError as e: + print(f"Error writing to PROJECT_STRUCTURE.md: {e}") + else: + print("Markers not found in PROJECT_STRUCTURE.md. Structure not updated.") + +# Main function to compare and update repository structure +def main(): + gh_token = os.getenv('GH_TOKEN') + gh_repo = os.getenv('GITHUB_REPOSITORY') + + if not gh_token or not gh_repo: + print("Environment variables GH_TOKEN and GITHUB_REPOSITORY must be set.") + return + + g = Github(gh_token) + repo = g.get_repo(gh_repo) + + current_structure = get_repo_structure() + + try: + # Fetch the contents of repo_structure.txt from GitHub + contents = repo.get_contents("repo_structure.txt") + existing_structure = contents.decoded_content.decode().split('\n') + except github.GithubException: + existing_structure = None + + if current_structure != existing_structure: + update_structure_file(current_structure) + update_README(current_structure) + print("Repository structure updated.") + else: + print("No changes in repository structure.") + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/.github/workflows/update-readme.yml b/.github/workflows/update-readme.yml new file mode 100644 index 0000000..6176e8e --- /dev/null +++ b/.github/workflows/update-readme.yml @@ -0,0 +1,39 @@ +name: Update Repository structure + +on: + schedule: + - cron: '0 * * * *' # Run every hour + workflow_dispatch: # Allow manual triggering + push: + branches: + - main + - master + +jobs: + detect-and-update-structure: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Set up Python + uses: actions/setup-python@v2 + with: + python-version: 3.12 + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install PyGithub + + - name: Run update script + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: python .github/scripts/update_structure.py + + - name: Commit and push if changed + run: | + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + git config user.name "github-actions[bot]" + git add . + git diff --quiet && git diff --staged --quiet || (git commit -m "Update repo structure" && git push) \ No newline at end of file diff --git a/PROJECT_STRUCTURE.md b/PROJECT_STRUCTURE.md new file mode 100644 index 0000000..e2e0db4 --- /dev/null +++ b/PROJECT_STRUCTURE.md @@ -0,0 +1,4 @@ +## Project Structure ✨ + + + \ No newline at end of file diff --git a/README.md b/README.md index 5edfc65..cce580f 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,10 @@ Welcome to **GlassyUI-Components**! This open-source library features stunning React components designed with a captivating glassmorphism effect, perfect for giving your web applications a modern and sleek design. +## Project Structure ✨ + +Check the project structure here [Project Structure](PROJECT_STRUCTURE.md) + ## 📚 Table of Contents From 7ecca0db4f4633308f97fed3d77faae52379d615 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 29 Oct 2024 08:49:58 +0000 Subject: [PATCH 2/3] Update repo structure --- PROJECT_STRUCTURE.md | 83 ++++++++++++++++++++++++++++++++++++++++++++ repo_structure.txt | 81 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 164 insertions(+) create mode 100644 repo_structure.txt diff --git a/PROJECT_STRUCTURE.md b/PROJECT_STRUCTURE.md index e2e0db4..5ea12ec 100644 --- a/PROJECT_STRUCTURE.md +++ b/PROJECT_STRUCTURE.md @@ -1,4 +1,87 @@ ## Project Structure ✨ +``` +├── CODE_OF_CONDUCT.md +├── CONTRIBUTING.md +├── Dockerfile +├── Images/ +│ ├── 212284100-561aa473-3905-4a80-b561-0d28506553ee.gif +│ ├── 329829127-e79eb6de-81b1-4ffb-b6ed-f018bb977e88.png +│ ├── Image +│ └── hacktober.png +├── PROJECT_STRUCTURE.md +├── README.md +├── docker-compose.yml +├── eslint.config.mjs +├── git +├── package-lock.json +├── package.json +├── postcss.config.js +├── public/ +│ ├── favicon.ico +│ ├── index.html +│ ├── manifest.json +│ └── robots.txt +├── src/ +│ ├── App.css +│ ├── App.test.tsx +│ ├── App.tsx +│ ├── components/ +│ │ ├── AboutUsPage.tsx +│ │ ├── Accordion.tsx +│ │ ├── AccordionDetails.tsx +│ │ ├── AuthenticationCards.tsx +│ │ ├── BackToTop.tsx +│ │ ├── BackToTopDetailsPage.tsx +│ │ ├── ButtonDetailsPage.tsx +│ │ ├── CalendarDetails.tsx +│ │ ├── CardDetailsPage.tsx +│ │ ├── Checkbox.tsx +│ │ ├── CheckboxDetails.tsx +│ │ ├── ContactUsDetailsPage.tsx +│ │ ├── ContributorsPage.tsx +│ │ ├── DonationPage.tsx +│ │ ├── DropdowndetailsPage.tsx +│ │ ├── Footer.tsx +│ │ ├── GalleryDetailsPage.tsx +│ │ ├── GlassMorphismGenrator.tsx +│ │ ├── GlassyUIComponentsPage.tsx +│ │ ├── GlassyUILandingPage.css +│ │ ├── GlassyUILandingPage.tsx +│ │ ├── GoogleTranslator.jsx +│ │ ├── Header.tsx +│ │ ├── InputDetailPage.tsx +│ │ ├── ModalDetailsPage.tsx +│ │ ├── NavigationDetailsPage.tsx +│ │ ├── NotFoundPage.tsx +│ │ ├── PaginationDetails.tsx +│ │ ├── PopupDetailPage.tsx +│ │ ├── PricingDetailPage.tsx +│ │ ├── ProductCardDetailsPage.tsx +│ │ ├── ProgressBarDetailPage.tsx +│ │ ├── ScrollProgress.tsx +│ │ ├── SliderDetailsPage.tsx +│ │ ├── SpeedDial.tsx +│ │ ├── SpeedDialDetailsPage.tsx +│ │ ├── SpinnerDetailsPage.tsx +│ │ ├── StatisticDetails.tsx +│ │ ├── TestimonialDetails.tsx +│ │ ├── TextareaDetailPage.tsx +│ │ ├── Toast.tsx +│ │ ├── ToastGenerator.tsx +│ │ ├── ToastPage.tsx +│ │ ├── Tooltip.tsx +│ │ ├── TooltipDetailsPage.tsx +│ │ └── badge.tsx +│ ├── index.css +│ ├── index.tsx +│ ├── logo.svg +│ ├── react-app-env.d.ts +│ ├── reportWebVitals.ts +│ ├── setupTests.ts +│ └── styled-jsx.d.ts +├── tailwind.config.js +└── tsconfig.json +``` \ No newline at end of file diff --git a/repo_structure.txt b/repo_structure.txt new file mode 100644 index 0000000..c346f94 --- /dev/null +++ b/repo_structure.txt @@ -0,0 +1,81 @@ +├── CODE_OF_CONDUCT.md +├── CONTRIBUTING.md +├── Dockerfile +├── Images/ +│ ├── 212284100-561aa473-3905-4a80-b561-0d28506553ee.gif +│ ├── 329829127-e79eb6de-81b1-4ffb-b6ed-f018bb977e88.png +│ ├── Image +│ └── hacktober.png +├── PROJECT_STRUCTURE.md +├── README.md +├── docker-compose.yml +├── eslint.config.mjs +├── git +├── package-lock.json +├── package.json +├── postcss.config.js +├── public/ +│ ├── favicon.ico +│ ├── index.html +│ ├── manifest.json +│ └── robots.txt +├── src/ +│ ├── App.css +│ ├── App.test.tsx +│ ├── App.tsx +│ ├── components/ +│ │ ├── AboutUsPage.tsx +│ │ ├── Accordion.tsx +│ │ ├── AccordionDetails.tsx +│ │ ├── AuthenticationCards.tsx +│ │ ├── BackToTop.tsx +│ │ ├── BackToTopDetailsPage.tsx +│ │ ├── ButtonDetailsPage.tsx +│ │ ├── CalendarDetails.tsx +│ │ ├── CardDetailsPage.tsx +│ │ ├── Checkbox.tsx +│ │ ├── CheckboxDetails.tsx +│ │ ├── ContactUsDetailsPage.tsx +│ │ ├── ContributorsPage.tsx +│ │ ├── DonationPage.tsx +│ │ ├── DropdowndetailsPage.tsx +│ │ ├── Footer.tsx +│ │ ├── GalleryDetailsPage.tsx +│ │ ├── GlassMorphismGenrator.tsx +│ │ ├── GlassyUIComponentsPage.tsx +│ │ ├── GlassyUILandingPage.css +│ │ ├── GlassyUILandingPage.tsx +│ │ ├── GoogleTranslator.jsx +│ │ ├── Header.tsx +│ │ ├── InputDetailPage.tsx +│ │ ├── ModalDetailsPage.tsx +│ │ ├── NavigationDetailsPage.tsx +│ │ ├── NotFoundPage.tsx +│ │ ├── PaginationDetails.tsx +│ │ ├── PopupDetailPage.tsx +│ │ ├── PricingDetailPage.tsx +│ │ ├── ProductCardDetailsPage.tsx +│ │ ├── ProgressBarDetailPage.tsx +│ │ ├── ScrollProgress.tsx +│ │ ├── SliderDetailsPage.tsx +│ │ ├── SpeedDial.tsx +│ │ ├── SpeedDialDetailsPage.tsx +│ │ ├── SpinnerDetailsPage.tsx +│ │ ├── StatisticDetails.tsx +│ │ ├── TestimonialDetails.tsx +│ │ ├── TextareaDetailPage.tsx +│ │ ├── Toast.tsx +│ │ ├── ToastGenerator.tsx +│ │ ├── ToastPage.tsx +│ │ ├── Tooltip.tsx +│ │ ├── TooltipDetailsPage.tsx +│ │ └── badge.tsx +│ ├── index.css +│ ├── index.tsx +│ ├── logo.svg +│ ├── react-app-env.d.ts +│ ├── reportWebVitals.ts +│ ├── setupTests.ts +│ └── styled-jsx.d.ts +├── tailwind.config.js +└── tsconfig.json \ No newline at end of file From bbadf018f24f08f2a96298d1f42c74dafb46123b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 29 Oct 2024 09:17:21 +0000 Subject: [PATCH 3/3] Update repo structure --- PROJECT_STRUCTURE.md | 1 + repo_structure.txt | 1 + 2 files changed, 2 insertions(+) diff --git a/PROJECT_STRUCTURE.md b/PROJECT_STRUCTURE.md index 5ea12ec..cc59799 100644 --- a/PROJECT_STRUCTURE.md +++ b/PROJECT_STRUCTURE.md @@ -23,6 +23,7 @@ │ ├── index.html │ ├── manifest.json │ └── robots.txt +├── repo_structure.txt ├── src/ │ ├── App.css │ ├── App.test.tsx diff --git a/repo_structure.txt b/repo_structure.txt index c346f94..6c3daf6 100644 --- a/repo_structure.txt +++ b/repo_structure.txt @@ -19,6 +19,7 @@ │ ├── index.html │ ├── manifest.json │ └── robots.txt +├── repo_structure.txt ├── src/ │ ├── App.css │ ├── App.test.tsx