From 56bfa7ace99c903739b7b8b5ec7e19dabb91cec8 Mon Sep 17 00:00:00 2001 From: Mugundh Date: Thu, 24 Oct 2024 16:28:34 +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 65b0dad..9a1e351 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,10 @@ Welcome to the official repository of the **GDG on Campus RCCIIT** website! This project is an open-source initiative aimed at building a modern, interactive, and feature-rich platform for our **Google Developer Group (GDG)**. We invite developers, designers, and content creators from all over to contribute and make this project a success! +## Project Structure ✨ + +Check the project structure here [Project Structure](PROJECT_STRUCTURE.md) + ## ✨ Tech Stack - **Frontend**: Next.js, Tailwind CSS From 658631b1f265cc58125a30631835460f12eef5c4 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 24 Oct 2024 10:59:40 +0000 Subject: [PATCH 2/3] Update repo structure --- PROJECT_STRUCTURE.md | 125 +++++++++++++++++++++++++++++++++++++++++++ repo_structure.txt | 123 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 248 insertions(+) create mode 100644 repo_structure.txt diff --git a/PROJECT_STRUCTURE.md b/PROJECT_STRUCTURE.md index e2e0db4..96e2c4c 100644 --- a/PROJECT_STRUCTURE.md +++ b/PROJECT_STRUCTURE.md @@ -1,4 +1,129 @@ ## Project Structure ✨ +``` +├── LICENSE +├── PROJECT_STRUCTURE.md +├── README.md +├── code_of_conduct.md +├── components.json +├── contributing.md +├── jsconfig.json +├── next.config.mjs +├── package-lock.json +├── package.json +├── postcss.config.mjs +├── public/ +│ ├── Logo.svg +│ ├── Newsletter.png +│ ├── avatar.png +│ ├── avatar1.png +│ ├── goal.webp +│ ├── hack1.jpg +│ ├── img1.jpg +│ ├── mission.webp +│ ├── sopt4.jpg +│ ├── spot1.jpg +│ ├── spot2.jpg +│ ├── spot3.jpg +│ └── vision.webp +├── src/ +│ ├── app/ +│ │ ├── (pages)/ +│ │ │ ├── About/ +│ │ │ │ └── page.jsx +│ │ │ ├── Events/ +│ │ │ │ ├── EventItem.js +│ │ │ │ ├── Events.css +│ │ │ │ └── page.jsx +│ │ │ ├── FAQsForum/ +│ │ │ │ ├── FAQs.js +│ │ │ │ ├── Posts.css +│ │ │ │ ├── Posts.js +│ │ │ │ └── page.jsx +│ │ │ ├── Hackathon/ +│ │ │ │ ├── Card.jsx +│ │ │ │ └── page.jsx +│ │ │ ├── Projects/ +│ │ │ │ ├── Card.jsx +│ │ │ │ └── page.jsx +│ │ │ ├── Resources/ +│ │ │ │ ├── [id]/ +│ │ │ │ │ └── page.jsx +│ │ │ │ ├── page.jsx +│ │ │ │ └── resources.js +│ │ │ ├── SignIn/ +│ │ │ │ └── page.jsx +│ │ │ ├── SignUp/ +│ │ │ │ └── page.jsx +│ │ │ ├── SingleEvent/ +│ │ │ │ └── [id]/ +│ │ │ │ └── page.jsx +│ │ │ ├── Subscribe/ +│ │ │ │ └── page.jsx +│ │ │ ├── TeamsGallery/ +│ │ │ │ ├── Teams.js +│ │ │ │ └── page.jsx +│ │ │ └── careers/ +│ │ │ └── page.jsx +│ │ ├── favicon.ico +│ │ ├── fonts/ +│ │ │ ├── GeistMonoVF.woff +│ │ │ └── GeistVF.woff +│ │ ├── globals.css +│ │ ├── images/ +│ │ │ ├── ai_img.jpg +│ │ │ └── teamMember.jpg +│ │ ├── layout.js +│ │ ├── not-found.jsx +│ │ └── page.js +│ ├── components/ +│ │ ├── Global/ +│ │ │ ├── Footer.jsx +│ │ │ ├── Header.jsx +│ │ │ └── Hero.jsx +│ │ └── ui/ +│ │ ├── aspect-ratio.jsx +│ │ ├── back2top.jsx +│ │ ├── badge.jsx +│ │ ├── breadcrumb.jsx +│ │ ├── button.jsx +│ │ ├── card.jsx +│ │ ├── carousel.jsx +│ │ ├── collapsible.jsx +│ │ ├── command.jsx +│ │ ├── dialog.jsx +│ │ ├── drawer.jsx +│ │ ├── dropdown-menu.jsx +│ │ ├── homepage.jsx +│ │ ├── hover-card.jsx +│ │ ├── input.jsx +│ │ ├── label.jsx +│ │ ├── menubar.jsx +│ │ ├── navigation-menu.jsx +│ │ ├── notification.jsx +│ │ ├── progress-bar.jsx +│ │ ├── progress.jsx +│ │ ├── resizable.jsx +│ │ ├── select.jsx +│ │ ├── separator.jsx +│ │ ├── sheet.jsx +│ │ ├── skeleton.jsx +│ │ ├── sonner.jsx +│ │ ├── switch.jsx +│ │ ├── tabs.jsx +│ │ ├── textarea.jsx +│ │ ├── toast.jsx +│ │ ├── toaster.jsx +│ │ └── tooltip.jsx +│ ├── hooks/ +│ │ └── use-toast.js +│ ├── lib/ +│ │ ├── Hackathon.js +│ │ ├── Projects.js +│ │ └── utils.js +│ └── public/ +│ └── GDSC-RCIIT Logo.png +└── tailwind.config.js +``` \ No newline at end of file diff --git a/repo_structure.txt b/repo_structure.txt new file mode 100644 index 0000000..a45d8a6 --- /dev/null +++ b/repo_structure.txt @@ -0,0 +1,123 @@ +├── LICENSE +├── PROJECT_STRUCTURE.md +├── README.md +├── code_of_conduct.md +├── components.json +├── contributing.md +├── jsconfig.json +├── next.config.mjs +├── package-lock.json +├── package.json +├── postcss.config.mjs +├── public/ +│ ├── Logo.svg +│ ├── Newsletter.png +│ ├── avatar.png +│ ├── avatar1.png +│ ├── goal.webp +│ ├── hack1.jpg +│ ├── img1.jpg +│ ├── mission.webp +│ ├── sopt4.jpg +│ ├── spot1.jpg +│ ├── spot2.jpg +│ ├── spot3.jpg +│ └── vision.webp +├── src/ +│ ├── app/ +│ │ ├── (pages)/ +│ │ │ ├── About/ +│ │ │ │ └── page.jsx +│ │ │ ├── Events/ +│ │ │ │ ├── EventItem.js +│ │ │ │ ├── Events.css +│ │ │ │ └── page.jsx +│ │ │ ├── FAQsForum/ +│ │ │ │ ├── FAQs.js +│ │ │ │ ├── Posts.css +│ │ │ │ ├── Posts.js +│ │ │ │ └── page.jsx +│ │ │ ├── Hackathon/ +│ │ │ │ ├── Card.jsx +│ │ │ │ └── page.jsx +│ │ │ ├── Projects/ +│ │ │ │ ├── Card.jsx +│ │ │ │ └── page.jsx +│ │ │ ├── Resources/ +│ │ │ │ ├── [id]/ +│ │ │ │ │ └── page.jsx +│ │ │ │ ├── page.jsx +│ │ │ │ └── resources.js +│ │ │ ├── SignIn/ +│ │ │ │ └── page.jsx +│ │ │ ├── SignUp/ +│ │ │ │ └── page.jsx +│ │ │ ├── SingleEvent/ +│ │ │ │ └── [id]/ +│ │ │ │ └── page.jsx +│ │ │ ├── Subscribe/ +│ │ │ │ └── page.jsx +│ │ │ ├── TeamsGallery/ +│ │ │ │ ├── Teams.js +│ │ │ │ └── page.jsx +│ │ │ └── careers/ +│ │ │ └── page.jsx +│ │ ├── favicon.ico +│ │ ├── fonts/ +│ │ │ ├── GeistMonoVF.woff +│ │ │ └── GeistVF.woff +│ │ ├── globals.css +│ │ ├── images/ +│ │ │ ├── ai_img.jpg +│ │ │ └── teamMember.jpg +│ │ ├── layout.js +│ │ ├── not-found.jsx +│ │ └── page.js +│ ├── components/ +│ │ ├── Global/ +│ │ │ ├── Footer.jsx +│ │ │ ├── Header.jsx +│ │ │ └── Hero.jsx +│ │ └── ui/ +│ │ ├── aspect-ratio.jsx +│ │ ├── back2top.jsx +│ │ ├── badge.jsx +│ │ ├── breadcrumb.jsx +│ │ ├── button.jsx +│ │ ├── card.jsx +│ │ ├── carousel.jsx +│ │ ├── collapsible.jsx +│ │ ├── command.jsx +│ │ ├── dialog.jsx +│ │ ├── drawer.jsx +│ │ ├── dropdown-menu.jsx +│ │ ├── homepage.jsx +│ │ ├── hover-card.jsx +│ │ ├── input.jsx +│ │ ├── label.jsx +│ │ ├── menubar.jsx +│ │ ├── navigation-menu.jsx +│ │ ├── notification.jsx +│ │ ├── progress-bar.jsx +│ │ ├── progress.jsx +│ │ ├── resizable.jsx +│ │ ├── select.jsx +│ │ ├── separator.jsx +│ │ ├── sheet.jsx +│ │ ├── skeleton.jsx +│ │ ├── sonner.jsx +│ │ ├── switch.jsx +│ │ ├── tabs.jsx +│ │ ├── textarea.jsx +│ │ ├── toast.jsx +│ │ ├── toaster.jsx +│ │ └── tooltip.jsx +│ ├── hooks/ +│ │ └── use-toast.js +│ ├── lib/ +│ │ ├── Hackathon.js +│ │ ├── Projects.js +│ │ └── utils.js +│ └── public/ +│ └── GDSC-RCIIT Logo.png +└── tailwind.config.js \ No newline at end of file From 010aa692acc93b992f6ea8fd4d9c728b0ac21d3d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 24 Oct 2024 11:18:37 +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 96e2c4c..36e437a 100644 --- a/PROJECT_STRUCTURE.md +++ b/PROJECT_STRUCTURE.md @@ -27,6 +27,7 @@ │ ├── spot2.jpg │ ├── spot3.jpg │ └── vision.webp +├── repo_structure.txt ├── src/ │ ├── app/ │ │ ├── (pages)/ diff --git a/repo_structure.txt b/repo_structure.txt index a45d8a6..3b80648 100644 --- a/repo_structure.txt +++ b/repo_structure.txt @@ -23,6 +23,7 @@ │ ├── spot2.jpg │ ├── spot3.jpg │ └── vision.webp +├── repo_structure.txt ├── src/ │ ├── app/ │ │ ├── (pages)/