Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 2 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,3 +54,5 @@ body:
required: true
- label: "I want to work on this issue"
required: false
- label: "I am participating in GSSoC 2026"
required: false
2 changes: 2 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.md
Original file line number Diff line number Diff line change
Expand Up @@ -73,4 +73,6 @@ body:
required: true
- label: "I want to work on this issue"
required: false
- label: "I am participating in GSSoC 2026"
required: false

2 changes: 2 additions & 0 deletions .github/ISSUE_TEMPLATE/project_proposal.md
Original file line number Diff line number Diff line change
Expand Up @@ -104,3 +104,5 @@ body:
required: true
- label: "I want to work on this issue"
required: false
- label: "I am participating in GSSoC 2026"
required: false
84 changes: 84 additions & 0 deletions .github/labeler.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@


documentation:
- changed-files:
- any-glob-to-any-file:
- '**/*.md'
- 'docs/**'

python:
- changed-files:
- any-glob-to-any-file:
- '**/*.py'


github-actions:
- changed-files:
- any-glob-to-any-file:
- '.github/**'


enhancement:
- changed-files:
- any-glob-to-any-file:

- 'src/**'
- '*/**.py'

beginner:
- changed-files:

- any-glob-to-any-file:
- '**/*.md'

intermediate:

- changed-files:
- any-glob-to-any-file:
- '**/*.py'


advanced:
- changed-files:
- any-glob-to-any-file:
- '.github/**'
- 'tests/**'

"type:design":
- changed-files:
- any-glob-to-any-file:
- 'web-app/**'
- 'web-app/*.html'
- 'web-app/js/**'
- 'web-app/css/**'

"type:feature":
- changed-files:
- any-glob-to-any-file:
- '**/*.py'

"type:docs":
- changed-files:
- any-glob-to-any-file:
- '**/*.md'
- 'README.html'
- 'docs/**'

"type:devops":
- changed-files:
- any-glob-to-any-file:
- '.github/**'
- '.github/workflows/**'

"type:refactor":
- changed-files:
- any-glob-to-any-file:
- '**/*.py'
- 'web-app/**'

"type:bug":
- changed-files:
- any-glob-to-any-file:
- '**/*.py'
- 'tests/**'

2 changes: 2 additions & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,3 +75,5 @@ body:
required: false
- label: "I have updated the README.md (if adding new project)"
required: false
- label: "I am participating in GSSoC 2026"
required: false
86 changes: 86 additions & 0 deletions .github/workflows/contributors.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
name: contributor automation

on:
schedule: # runs daily at midnight
- cron: '0 0 * * *'
pull_request:
types: [closed]
branches:
- main

# allows manual trigger
permissions:
contents: write

jobs:
update-readme:
if: github.event_name != 'pull_request' || github.event.pull_request.merged == true
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Fetch Merged PR Authors (Pagination)
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
set -euo pipefail
PAGE=1
echo "[]" > final_list.json
while true; do
# Using pulls endpoint to capture only merged contributors
RESPONSE=$(gh api "/repos/steam-bell-92/python-mini-project/pulls?state=closed&per_page=100&page=${PAGE}")
COUNT=$(echo "$RESPONSE" | jq '. | length')
if [ "$COUNT" -eq 0 ]; then break; fi
jq -s '.[0] + .[1]' final_list.json <(echo "$RESPONSE") > tmp.json && mv tmp.json final_list.json
PAGE=$((PAGE + 1))
done
# Filters for actual merged PRs and unique users
jq '[.[]
| select(.merged_at != null and .user != null and .user.type != "Bot")
| .user.login]
| unique
| sort' final_list.json > contributors.json
- name: Build Gallery HTML
run: |
set -euo pipefail
GALLERY_HTML=""
for USERNAME in $(jq -r '.[]' contributors.json); do
GALLERY_HTML="${GALLERY_HTML}<a href=\"https://github.com/${USERNAME}\"><img src=\"https://github.com/${USERNAME}.png\" width=\"50px\" loading=\"lazy\" title=\"${USERNAME}\" style=\"border-radius:50%;margin:5px;\" alt=\"${USERNAME}\" /></a>"
done
echo "$GALLERY_HTML" > gallery_fragment.txt

- name: Update README.md
run: |
set -euo pipefail
# Safety check for markers
start_count=$(grep -c '<!-- CONTRIBUTORS_START -->' README.md || true)
end_count=$(grep -c '<!-- CONTRIBUTORS_END -->' README.md || true)
if [ "$start_count" -ne 1 ] || [ "$end_count" -ne 1 ]; then
echo "Error: README.md must contain exactly one pair of markers."
exit 1
fi

start_line=$(grep -n '<!-- CONTRIBUTORS_START -->' README.md | cut -d: -f1)
end_line=$(grep -n '<!-- CONTRIBUTORS_END -->' README.md | cut -d: -f1)
if [ "$start_line" -ge "$end_line" ]; then
echo "Error: CONTRIBUTORS_START must appear before CONTRIBUTORS_END."
exit 1
fi

sed -i '/<!-- CONTRIBUTORS_START -->/,/<!-- CONTRIBUTORS_END -->/ {
/<!-- CONTRIBUTORS_START -->/! { /<!-- CONTRIBUTORS_END -->/! d; }
}' README.md
sed -i '/<!-- CONTRIBUTORS_START -->/r gallery_fragment.txt' README.md

- name: Commit and Push
run: |
git config --global user.name "github-actions[bot]"
git config --global user.email "github-actions[bot]@users.noreply.github.com"
git add README.md
if git diff --staged --quiet; then
echo "No changes to README."
else
git commit -m "docs: update contributor gallery"
git push
fi
45 changes: 45 additions & 0 deletions .github/workflows/gssoc-labeler.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
name: GSSoC Labeler

on:
issues:
types: [opened, edited]
pull_request_target:
types: [opened, edited]

jobs:
label_gssoc:
runs-on: ubuntu-latest

permissions:
issues: write
pull-requests: write

steps:
- name: Check and add GSSoC label
uses: actions/github-script@v7
with:
script: |
let bodyText = "";
let issueNum = null;

if (context.payload.issue?.body) {
bodyText = context.payload.issue.body;
issueNum = context.payload.issue.number;
}
else if (context.payload.pull_request?.body) {
bodyText = context.payload.pull_request.body;
issueNum = context.payload.pull_request.number;
}

const isGSSoC =
bodyText.includes("[x] I am participating in GSSoC 2026") ||
bodyText.includes("[X] I am participating in GSSoC 2026");

if (isGSSoC && issueNum) {
await github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issueNum,
labels: ["gssoc:accepted"],
});
}
69 changes: 69 additions & 0 deletions .github/workflows/labeler.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
name: Auto Label Issues and PRs

on:
pull_request:
types: [opened, synchronize, reopened]
issues:
types: [opened, reopened]

permissions:
contents: read
issues: write
pull-requests: write

jobs:
label-pr:
name: Label Pull Requests
runs-on: ubuntu-latest
if: github.event_name == 'pull_request'
steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Apply labels based on changed files
uses: actions/labeler@v5
with:
repo-token: "${{ secrets.GITHUB_TOKEN }}"
configuration-path: .github/labeler.yml

label-issue:
name: Label Issues
runs-on: ubuntu-latest
if: github.event_name == 'issues'
steps:
- name: Label new issues with gssoc26
uses: actions/github-script@v7
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const issue = context.payload.issue;
const body = (issue.body || '').toLowerCase();
const title = (issue.title || '').toLowerCase();

const labelsToAdd = ['gssoc26'];

if (title.includes('bug') || body.includes('bug')) {
labelsToAdd.push('bug');
}
if (title.includes('feature') || body.includes('enhancement')) {
labelsToAdd.push('enhancement');
}
if (title.includes('docs') || body.includes('documentation')) {
labelsToAdd.push('documentation');
}
if (title.includes('level 1') || body.includes('level 1')) {
labelsToAdd.push('level1');
}
if (title.includes('level 2') || body.includes('level 2')) {
labelsToAdd.push('level2');
}
if (title.includes('level 3') || body.includes('level 3')) {
labelsToAdd.push('level3');
}

await github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issue.number,
labels: labelsToAdd
});
17 changes: 9 additions & 8 deletions .github/workflows/pr-merged-thanks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,26 +8,27 @@ jobs:
thank-contributor:
if: github.event.pull_request.merged == true
runs-on: ubuntu-latest

permissions:
pull-requests: write
issues: write

steps:
- name: Thank contributor for the merge
uses: actions/github-script@v7
with:
script: |
github.rest.issues.createComment({
await github.rest.issues.createComment({
issue_number: context.payload.pull_request.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: |
πŸŽ‰ **Thank you for your contribution!**
body: `πŸŽ‰ **Thank you for your contribution!**

Your Pull Request has been merged successfully.
Your Pull Request has been merged successfully.

We appreciate the time and effort you put into improving this project. Contributions like yours help the repository grow and stay useful for everyone.
We appreciate the time and effort you put into improving this project. Contributions like yours help the repository grow and stay useful for everyone.

If you'd like to contribute again, please check the open issues and make sure you are assigned before opening another Pull Request.
If you'd like to contribute again, please check the open issues and make sure you are assigned before opening another Pull Request.

Thanks again for your support! πŸ™Œ
})
Thanks again for your support! πŸ™Œ`
});
Binary file modified .gitignore
Binary file not shown.
21 changes: 21 additions & 0 deletions .local/secondary_skills/LICENSE.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
Copyright (c) 2026 Replit, Inc. All rights reserved.

The contents of this directory are proprietary to Replit, Inc. and are
licensed for use solely within the Replit platform under the applicable
Replit user terms. Use of the contents of this directory within the
Replit platform, including by Replit users for commercial purposes, is
unlimited and expressly permitted.

Outside of the Replit platform, the contents of this directory are
licensed under the Creative Commons Attribution-NonCommercial 4.0
International License (CC BY-NC 4.0). You may obtain a copy of that
license at:
https://creativecommons.org/licenses/by-nc/4.0/

Under CC BY-NC 4.0, you may share and adapt the contents of this
directory for non-commercial purposes, provided you appropriately credit
Replit, Inc. and indicate if changes were made. Commercial use of the
contents of this directory outside of the Replit platform is strictly
prohibited without a separate license from Replit, Inc.

For commercial licensing inquiries, contact: support@replit.com
1 change: 1 addition & 0 deletions .local/secondary_skills/ad-creative/.fingerprint
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
9ddf6593609d4d0fcb1ab58f575522cd
Loading
Loading