{"id":29427498,"url":"https://github.com/itxadii/streak","last_synced_at":"2026-01-20T16:30:33.239Z","repository":{"id":300273318,"uuid":"1003839933","full_name":"itxadii/Streak","owner":"itxadii","description":"Automate your GitHub contribution streak with verified GPG-signed commits. This solution ensures you never miss a day, even if you're busy or on vacation.","archived":false,"fork":false,"pushed_at":"2025-07-22T21:24:51.000Z","size":77,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-07-22T23:26:00.151Z","etag":null,"topics":["actions","automation","streak","streak-gfg","streak-system","streak-tracker","streaks","workflows"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/itxadii.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-06-17T18:42:33.000Z","updated_at":"2025-07-22T21:24:55.000Z","dependencies_parsed_at":"2025-06-20T19:53:53.402Z","dependency_job_id":"1a31ef68-e3e6-493c-80f6-ffcda1f70c15","html_url":"https://github.com/itxadii/Streak","commit_stats":null,"previous_names":["itxadii/streak"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/itxadii/Streak","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/itxadii%2FStreak","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/itxadii%2FStreak/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/itxadii%2FStreak/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/itxadii%2FStreak/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/itxadii","download_url":"https://codeload.github.com/itxadii/Streak/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/itxadii%2FStreak/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266717709,"owners_count":23973384,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-23T02:00:09.312Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["actions","automation","streak","streak-gfg","streak-system","streak-tracker","streaks","workflows"],"created_at":"2025-07-12T13:08:59.551Z","updated_at":"2026-01-20T16:30:33.226Z","avatar_url":"https://github.com/itxadii.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Streak Maintainer: Automated Daily GitHub Contributions\n\n[![Build Status](https://img.shields.io/github/actions/workflow/status/itxadii/Streak/main.yml?label=Build\\\u0026style=flat-square)](https://github.com/itxadii/Streak/actions)\n[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg?style=flat-square)](https://opensource.org/licenses/MIT)\n\nAutomate your GitHub contribution streak with verified GPG-signed commits. This solution ensures you never miss a day, even if you're busy or on vacation.\n\n## Features\n\n* ✅ Daily automated commits to maintain your streak\n* 🔒 Verified GPG-signed commits for authenticity\n* ⏰ Triple-redundant scheduling to prevent misses\n* ⚙️ Smart commit detection - only commits once per day\n* 🌐 Time zone optimized for global reliability\n\n## Why Use This?\n\n* Maintain your GitHub contribution graph (green dots)\n* Never lose your streak due to travel, illness, or busy periods\n* Learn GitHub Actions and GPG commit signing\n* Customizable for any repository\n* 100% free and open source\n\n## Prerequisites\n\n* GitHub Account with a public repository\n* GitHub Personal Access Token (PAT)\n\n  * Required permissions: `repo` (full control of private repositories)\n  * Fine-grained permissions: `Contents: Read and write`\n* GPG Key Pair (public key added to GitHub account)\n\n---\n\n## Setup Guide\n\n### Step 1: Generate GPG Key\n\n```bash\n# Install GPG if needed\nbrew install gnupg        # macOS\nsudo apt install gnupg    # Ubuntu\n\n# Generate key\ngpg --full-generate-key\n\n# Follow prompts:\n# 1. Key type: RSA and RSA (default)\n# 2. Key size: 4096\n# 3. Expiration: 0 = no expiration\n# 4. Name: Your Name\n# 5. Email: Your GitHub email\n# 6. Password: Don't create just skip, otherwise script will not work. \n\n# Export keys\ngpg --armor --export YOUR_KEY_ID \u003e public-gpg-key.asc\ngpg --armor --export-secret-keys YOUR_KEY_ID \u003e private-gpg-key.asc\n```\n\nAdd your **public key** here:\n👉 [https://github.com/settings/keys](https://github.com/settings/keys)\n\n---\n\n### Step 2: Create GitHub Secrets\n\nGo to your repository → `Settings \u003e Secrets \u003e Actions`\n\nCreate these secrets:\n\n* `GH_PAT`: Your GitHub Personal Access Token\n* `GPG_PRIVATE_KEY`: Contents of `private-gpg-key.asc`\n\n---\n\n### Step 3: Add Workflow File\n\nCreate `.github/workflows/main.yml`:\n\n```yaml\nname: Auto Contribution Commit\n\non:\n  schedule:\n    - cron: '0 21 * * *'\n    - cron: '30 22 * * *'\n    - cron: '50 23 * * *'\n  workflow_dispatch:\n\njobs:\n  commit:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout repo\n        uses: actions/checkout@v4\n        with:\n          token: ${{ secrets.GH_PAT }}\n          fetch-depth: 0\n\n      - name: Setup Git Identity\n        run: |\n          git config user.name \"${{ github.repository_owner }}\"\n          git config user.email \"YOUR_GITHUB_EMAIL\"\n\n      - name: Check for existing commit today\n        id: commit_check\n        run: |\n          LAST_COMMIT_UTC=$(git log -1 --format=%cd --date=format:'%Y-%m-%d')\n          TODAY_UTC=$(date -u '+%Y-%m-%d')\n          if [ \"$LAST_COMMIT_UTC\" = \"$TODAY_UTC\" ]; then\n            echo \"already_committed=true\" \u003e\u003e $GITHUB_OUTPUT\n          else\n            echo \"already_committed=false\" \u003e\u003e $GITHUB_OUTPUT\n          fi\n\n      - name: Setup GPG Environment\n        if: steps.commit_check.outputs.already_committed == 'false'\n        run: |\n          mkdir -p ~/.gnupg\n          chmod 700 ~/.gnupg\n          echo \"use-agent\" \u003e\u003e ~/.gnupg/gpg.conf\n          echo \"pinentry-mode loopback\" \u003e\u003e ~/.gnupg/gpg.conf\n          echo \"allow-loopback-pinentry\" \u003e\u003e ~/.gnupg/gpg-agent.conf\n          gpgconf --kill gpg-agent\n\n      - name: Import GPG Key\n        if: steps.commit_check.outputs.already_committed == 'false'\n        env:\n          GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }}\n          GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}\n        run: |\n          echo \"$GPG_PRIVATE_KEY\" \u003e private.key\n          gpg --batch --passphrase \"$GPG_PASSPHRASE\" --import private.key\n          rm private.key\n          KEY_ID=$(gpg --list-secret-keys --with-colons | awk -F: '$1 == \"sec\" {print $5}' | head -n1)\n          git config --global user.signingkey \"$KEY_ID\"\n          git config --global commit.gpgsign true\n\n      - name: Update contribution file\n        if: steps.commit_check.outputs.already_committed == 'false'\n        run: |\n          echo \"🟢 $(date -u)\" \u003e\u003e AUTOMATED_CONTRIBUTIONS.md\n          echo \"Verified commit: $(date -u '+%Y-%m-%d %H:%M:%S %Z')\" \u003e\u003e AUTOMATED_CONTRIBUTIONS.md\n\n      - name: Commit and Push\n        if: steps.commit_check.outputs.already_committed == 'false'\n        env:\n          GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}\n        run: |\n          git add AUTOMATED_CONTRIBUTIONS.md\n          git commit -S -m \"chore: auto commit at $(date -u)\" || exit 0\n          git push\n```\n\n---\n\n### Step 4: Create Contribution File\n\nCreate `AUTOMATED_CONTRIBUTIONS.md`:\n\n```markdown\n# Automated Daily Contributions\n\nThis file maintains my GitHub contribution streak with verified commits.\n\n- Project: https://github.com/itxadii/Streak\n- Last update: $(date -u)\n```\n\n---\n\n## Customization\n\n### Change Schedule Times\n\n```yaml\non:\n  schedule:\n    - cron: '0 21 * * *'  # 9 PM UTC\n    - cron: '30 22 * * *' # 10:30 PM UTC\n    - cron: '50 23 * * *' # 11:50 PM UTC\n```\n\n### Use Different File\n\n```yaml\n- name: Update contribution file\n  run: |\n    echo \"🟢 $(date -u)\" \u003e\u003e YOUR_FILENAME.md\n```\n\n---\n\n## Safety Features\n\n* Triple Execution Window: Three attempts per day\n* Smart Detection: Only commits once per day\n* UTC Time: Avoids daylight saving issues\n* Verified Commits: GPG-signed for authenticity\n* Secure Secrets: Encrypted storage of credentials\n\n---\n\n## Troubleshooting\n\n| Issue                | Solution                                   |\n| -------------------- | ------------------------------------------ |\n| Commits not verified | Verify GPG key is added to GitHub account  |\n| Workflow fails       | Check Actions tab for error details        |\n| No commits made      | Verify PAT has write permissions           |\n| Multiple commits     | Check timezone conversion in cron schedule |\n\n### Contribution Graph Impact\n\n![Graph Example](https://user-images.githubusercontent.com/51070104/174474720-3f2a1e0a-3b70-4c34-8d95-0e8d0d5d0c8a.png)\n\n*Note: GitHub may take 24–48 hours to update contribution graphs.*\n\n---\n\n## License\n\nThis project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.\n\n## Disclaimer\n\nThis project automates GitHub contributions for streak maintenance. Use it responsibly and in compliance with GitHub's Terms of Service.\n\n---\n\n⭐ Give this repo a star if you find it helpful 💖\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fitxadii%2Fstreak","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fitxadii%2Fstreak","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fitxadii%2Fstreak/lists"}