Skip to content

Commit

Permalink
Merge pull request #3 from rohitinu6/main
Browse files Browse the repository at this point in the history
update
  • Loading branch information
spandana2004 authored Oct 28, 2024
2 parents 1a64d2e + 03ecc95 commit a10da69
Show file tree
Hide file tree
Showing 22 changed files with 57,572 additions and 307 deletions.
81 changes: 81 additions & 0 deletions .github/scripts/update_leaderboard.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
import os
import requests
from collections import defaultdict

# GitHub API URL for closed pull requests
API_URL = "https://api.github.com/repos/rohitinu6/Stock-Price-Prediction/pulls?state=closed"

GITHUB_TOKEN = os.getenv("GH_TOKEN")

# Points mapping based on the label names
points_map = {
"level1": 10,
"level2": 25,
"level3": 45
}

# Function to fetch closed pull requests with pagination
def get_closed_prs():
headers = {}

if GITHUB_TOKEN:
print(GITHUB_TOKEN)
headers = {"Authorization": f"token {GITHUB_TOKEN}"}

prs = []
page = 1
while True:
response = requests.get(f"{API_URL}&page={page}", headers=headers)

if response.status_code != 200:
raise Exception(f"Failed to fetch PRs: {response.status_code} {response.text}")

page_prs = response.json()

if not page_prs:
break

prs.extend(page_prs) # Add fetched PRs to the list
page += 1 # Increment page number for next request

return prs

leaderboard = defaultdict(lambda: {"points": 0, "avatar_url": ""})

prs = get_closed_prs()

# Loop through each PR and calculate points based on the labels
for pr in prs:
user = pr['user']['login']
avatar_url = pr['user']['avatar_url']
labels = pr['labels']

for label in labels:
label_name = label['name']
if label_name in points_map:
leaderboard[user]["points"] += points_map[label_name]
leaderboard[user]["avatar_url"] = avatar_url

# Function to generate the leaderboard in markdown format
def generate_leaderboard_md(leaderboard):
sorted_leaderboard = sorted(leaderboard.items(), key=lambda x: x[1]["points"], reverse=True)

md_content = "# Leaderboard\n\n"
md_content += "| Avatar | Username | Points |\n"
md_content += "|--------|----------|--------|\n"

for user, data in sorted_leaderboard:
points = data["points"]
avatar_url = data["avatar_url"]
md_content += f'| <img src="{avatar_url}" width="50" height="50"> | {user} | {points} |\n'

return md_content

# Generate the leaderboard markdown and save it to a file
leaderboard_md = generate_leaderboard_md(leaderboard)

# Save the leaderboard to leaderboard.md
with open('leaderboard.md', 'w') as f:
f.write(leaderboard_md)

print("Leaderboard updated successfully!")
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()
66 changes: 66 additions & 0 deletions .github/workflows/issue_labeler.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
name: Issue Labeler

on:
issues:
types: [opened, edited]

jobs:
manage-labels:
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v3

- name: Create or Update Labels
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
curl -X POST \
-H "Authorization: token $GITHUB_TOKEN" \
-H "Accept: application/vnd.github.v3+json" \
https://api.github.com/repos/${{ github.repository }}/labels \
-d '{
"name": "gssoc-ext",
"color": "0e4075",
"description": "GSSOC extended contribution"
}'
curl -X POST \
-H "Authorization: token $GITHUB_TOKEN" \
-H "Accept: application/vnd.github.v3+json" \
https://api.github.com/repos/${{ github.repository }}/labels \
-d '{
"name": "hacktoberfest",
"color": "006b75",
"description": "Hacktoberfest participation"
}'
curl -X POST \
-H "Authorization: token $GITHUB_TOKEN" \
-H "Accept: application/vnd.github.v3+json" \
https://api.github.com/repos/${{ github.repository }}/labels \
-d '{
"name": "hacktoberfest-accepted",
"color": "95d2aa",
"description": "Hacktoberfest contribution accepted"
}'
curl -X POST \
-H "Authorization: token $GITHUB_TOKEN" \
-H "Accept: application/vnd.github.v3+json" \
https://api.github.com/repos/${{ github.repository }}/labels \
-d '{
"name": "level?",
"color": "5319e7",
"description": "Placeholder for difficulty level"
}'
- name: Add Labels to Issue
uses: actions-ecosystem/action-add-labels@v1
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
labels: |
gssoc-ext
hacktoberfest
hacktoberfest-accepted
level?
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)
42 changes: 42 additions & 0 deletions .github/workflows/update_leaderboard.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
name: Update Leaderboard

on:
pull_request:
types: [closed]

jobs:
update-leaderboard:
runs-on: ubuntu-latest

steps:

- name: Checkout repository
uses: actions/checkout@v3
with:
token: ${{ secrets.GITHUB_TOKEN }}


- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.x'

- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install requests PyGithub
- name: Run leaderboard update script
run: |
python .github/scripts/update_leaderboard.py
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Pass GitHub token to script
GITHUB_REPOSITORY: ${{ github.repository }} # Pass repository information

- name: Commit and push changes
run: |
git config --global user.name "github-actions[bot]"
git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com"
git add leaderboard.md || echo "No changes to commit" # Prevent errors if there's nothing to commit
git commit -m "Update leaderboard" || echo "No changes to commit"
git push https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }} || echo "Nothing to push"
Loading

0 comments on commit a10da69

Please sign in to comment.