Skip to content

Commit

Permalink
Merge pull request Harshdev098#248 from J-B-Mugundh/main
Browse files Browse the repository at this point in the history
Automated project structure updation using github workflows and action bot
  • Loading branch information
Harshdev098 authored Oct 26, 2024
2 parents b635de6 + 63787b4 commit 2bc8f95
Show file tree
Hide file tree
Showing 5 changed files with 361 additions and 0 deletions.
101 changes: 101 additions & 0 deletions .github/scripts/update_structure.py
Original file line number Diff line number Diff line change
@@ -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 = '<!-- START_STRUCTURE -->'
end_marker = '<!-- END_STRUCTURE -->'

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()
39 changes: 39 additions & 0 deletions .github/workflows/update-readme.yml
Original file line number Diff line number Diff line change
@@ -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)
112 changes: 112 additions & 0 deletions PROJECT_STRUCTURE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
## Project Structure ✨

<!-- START_STRUCTURE -->
```
├── Code_of_Conduct.md
├── Contributing.md
├── Image/
│ ├── 212284100-561aa473-3905-4a80-b561-0d28506553ee.gif
│ ├── 329829127-e79eb6de-81b1-4ffb-b6ed-f018bb977e88.png
│ ├── Images
│ └── hacktober.png
├── LICENSE
├── PROJECT_STRUCTURE.md
├── README.md
├── Research-Nexas - Application Architecture.png
├── backend/
│ ├── profile.js
│ └── stk_profile.js
├── config/
│ └── mysql_connection.js
├── file_upload/
│ ├── form_db.js
│ ├── upload.js
│ └── uploads/
│ ├── 1728284943729-pebble watch invoice.pdf
│ ├── 1728291889782-Essential_documents_for_admission.txt
│ └── 1728962999779-Screenshot from 2024-10-09 10-26-04.png
├── login-system/
│ ├── dbServer.js
│ ├── login.js
│ ├── logout.js
│ ├── notification.js
│ └── token.js
├── package-lock.json
├── package.json
├── public/
│ ├── allotment.html
│ ├── choose-file.html
│ ├── choose-signup-file.html
│ ├── contact-us.html
│ ├── contributor.html
│ ├── css/
│ │ ├── choosefile.css
│ │ ├── contact-us.css
│ │ ├── contributor.css
│ │ ├── faculty_styling.css
│ │ ├── faq_style.css
│ │ ├── form.css
│ │ ├── login_style.css
│ │ ├── main_page_style.css
│ │ ├── privacy_style.css
│ │ ├── profile.css
│ │ ├── stk_mainstyling.css
│ │ ├── style.css
│ │ └── uploadfile.css
│ ├── dashboard.html
│ ├── fac_login.html
│ ├── faculty.html
│ ├── form_filling.html
│ ├── gitContributors.html
│ ├── images/
│ │ ├── Design 1.webp
│ │ ├── badge.webp
│ │ ├── badges.webp
│ │ ├── boost.webp
│ │ ├── calm.jpg
│ │ ├── career.webp
│ │ ├── career_pic.webp
│ │ ├── collaborate.webp
│ │ ├── connect.webp
│ │ ├── connectpeers.webp
│ │ ├── dark_mode.webp
│ │ ├── explorepapers.webp
│ │ ├── follow.webp
│ │ ├── logo.webp
│ │ ├── moon.webp
│ │ ├── plagiarism.webp
│ │ ├── sun.webp
│ │ ├── upload-image.webp
│ │ └── wave.webp
│ ├── index.html
│ ├── login.html
│ ├── main_page.html
│ ├── password_reset.html
│ ├── privacy_policy.html
│ ├── script/
│ │ ├── approval.js
│ │ ├── contributor.js
│ │ ├── main-page-script.js
│ │ ├── paper_allotment.js
│ │ ├── script.js
│ │ ├── slider.js
│ │ └── stk_mainpage.js
│ ├── signup.html
│ ├── stk_dashboard.html
│ ├── stk_login.html
│ ├── stk_mainpage.html
│ ├── stk_signup.html
│ └── upload_file.html
├── pull_request_template.md
├── repo_structure.txt
├── stakeholder/
│ ├── allotment.js
│ ├── evaluation.js
│ ├── faculty.js
│ ├── login.js
│ └── stk_approval.js
└── views/
├── fac_signup.ejs
└── stk_papers.ejs
```
<!-- END_STRUCTURE -->
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,9 @@ With **Research-Nexas**, the future of research collaboration is smarter, faster

<img src="https://raw.githubusercontent.com/alo7lika/Research-Nexas/refs/heads/main/Image/212284100-561aa473-3905-4a80-b561-0d28506553ee.gif" width="900">

## Project Structure ✨

Check the project structure here [Project Structure](PROJECT_STRUCTURE.md)

## 📚 Table of Contents

Expand Down
106 changes: 106 additions & 0 deletions repo_structure.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
├── Code_of_Conduct.md
├── Contributing.md
├── Image/
│ ├── 212284100-561aa473-3905-4a80-b561-0d28506553ee.gif
│ ├── 329829127-e79eb6de-81b1-4ffb-b6ed-f018bb977e88.png
│ ├── Images
│ └── hacktober.png
├── LICENSE
├── PROJECT_STRUCTURE.md
├── README.md
├── Research-Nexas - Application Architecture.png
├── backend/
│ ├── profile.js
│ └── stk_profile.js
├── config/
│ └── mysql_connection.js
├── file_upload/
│ ├── form_db.js
│ ├── upload.js
│ └── uploads/
│ ├── 1728284943729-pebble watch invoice.pdf
│ ├── 1728291889782-Essential_documents_for_admission.txt
│ └── 1728962999779-Screenshot from 2024-10-09 10-26-04.png
├── login-system/
│ ├── dbServer.js
│ ├── login.js
│ ├── logout.js
│ ├── notification.js
│ └── token.js
├── package-lock.json
├── package.json
├── public/
│ ├── allotment.html
│ ├── choose-file.html
│ ├── choose-signup-file.html
│ ├── contact-us.html
│ ├── contributor.html
│ ├── css/
│ │ ├── choosefile.css
│ │ ├── contact-us.css
│ │ ├── contributor.css
│ │ ├── faculty_styling.css
│ │ ├── faq_style.css
│ │ ├── form.css
│ │ ├── login_style.css
│ │ ├── main_page_style.css
│ │ ├── privacy_style.css
│ │ ├── profile.css
│ │ ├── stk_mainstyling.css
│ │ ├── style.css
│ │ └── uploadfile.css
│ ├── dashboard.html
│ ├── fac_login.html
│ ├── faculty.html
│ ├── form_filling.html
│ ├── gitContributors.html
│ ├── images/
│ │ ├── Design 1.webp
│ │ ├── badge.webp
│ │ ├── badges.webp
│ │ ├── boost.webp
│ │ ├── calm.jpg
│ │ ├── career.webp
│ │ ├── career_pic.webp
│ │ ├── collaborate.webp
│ │ ├── connect.webp
│ │ ├── connectpeers.webp
│ │ ├── dark_mode.webp
│ │ ├── explorepapers.webp
│ │ ├── follow.webp
│ │ ├── logo.webp
│ │ ├── moon.webp
│ │ ├── plagiarism.webp
│ │ ├── sun.webp
│ │ ├── upload-image.webp
│ │ └── wave.webp
│ ├── index.html
│ ├── login.html
│ ├── main_page.html
│ ├── password_reset.html
│ ├── privacy_policy.html
│ ├── script/
│ │ ├── approval.js
│ │ ├── contributor.js
│ │ ├── main-page-script.js
│ │ ├── paper_allotment.js
│ │ ├── script.js
│ │ ├── slider.js
│ │ └── stk_mainpage.js
│ ├── signup.html
│ ├── stk_dashboard.html
│ ├── stk_login.html
│ ├── stk_mainpage.html
│ ├── stk_signup.html
│ └── upload_file.html
├── pull_request_template.md
├── repo_structure.txt
├── stakeholder/
│ ├── allotment.js
│ ├── evaluation.js
│ ├── faculty.js
│ ├── login.js
│ └── stk_approval.js
└── views/
├── fac_signup.ejs
└── stk_papers.ejs

0 comments on commit 2bc8f95

Please sign in to comment.