Skip to content

Major Revision: CI Workflow Split into 2 Parts#631

Merged
DataBoySu merged 49 commits intoanmol098:masterfrom
DataBoySu:master
Jan 14, 2026
Merged

Major Revision: CI Workflow Split into 2 Parts#631
DataBoySu merged 49 commits intoanmol098:masterfrom
DataBoySu:master

Conversation

@DataBoySu
Copy link
Collaborator

Changelog:

Significant improvements to the CI/CD workflow and enhances testability and maintainability of the codebase.
Changes include splitting the CI workflow for push and pull request events, adding detection for documentation-only changes to skip unnecessary CI runs, improving environment variable handling for better error reporting and mocking, and ensuring assets directories are always created as needed.
There are also updates to support mock data for WakaTime API responses, which simplifies testing and PR previews.

CI/CD Workflow Improvements:

  • Split the CI workflow into two files: .github/workflows/ci.yml for push events (renamed to CI_MASTER) and .github/workflows/ci_pr.yml for pull requests (CI_PR). Each workflow now has tailored logic for detecting code changes versus documentation-only changes and will skip comprehensive CI if only docs are changed. This also includes improved permissions and artifact handling.
  • The code style workflow .github/workflows/codestyle.yml now also runs on pull requests, not just pushes.

Mocking and Testability Enhancements:

  • Added support for mocking WakaTime API responses by introducing MOCK_WAKATIME and MOCK_DATA_DIR environment variables in EnvironmentManager, and updating DownloadManager to load mock data when enabled. This allows PR runs to use static data for previewing stats.
  • Improved function signatures and typing in DownloadManager for clarity and correctness, and optimized resource caching logic to prefer mock data when present.

Environment and Error Handling:

  • Improved environment variable handling in EnvironmentManager to use getenv instead of environ, provide better error messages for missing required secrets, and set default values where appropriate.

File and Asset Management:

  • Updated FileManager methods to always create the assets directory when saving files or caching binaries, preventing errors when the directory does not exist.

Minor Improvements and Cleanups:

  • Dockerfile updated to include locales/* in the build context.
  • Minor logging and debug improvements in main.py for profile views and error messages.

@github-actions github-actions bot added python Pull requests that update Python code docker Pull requests that update Docker code github_actions Pull requests that update GitHub Actions code labels Jan 13, 2026
@DataBoySu DataBoySu linked an issue Jan 13, 2026 that may be closed by this pull request
@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@DataBoySu
Copy link
Collaborator Author

Pretty much done with edits, PR is ready.

@github-actions github-actions bot added documentation Improvements or additions to documentation dependencies Pull requests that update a dependency file labels Jan 14, 2026
@github-actions
Copy link

README stats current output:

Code Time

Profile Views

Lines of code

🐱 My GitHub Data

📦 358.2 kB Used in GitHub's Storage

🏆 25 Contributions in the Year 2026

🚫 Not Opted to Hire

📜 26 Public Repositories

🔑 32 Private Repositories

I'm a Night 🦉

🌞 Morning                508 commits         ██░░░░░░░░░░░░░░░░░░░░░░░   08.97 % 
🌆 Daytime                2035 commits        █████████░░░░░░░░░░░░░░░░   35.94 % 
🌃 Evening                1805 commits        ████████░░░░░░░░░░░░░░░░░   31.87 % 
🌙 Night                  1315 commits        ██████░░░░░░░░░░░░░░░░░░░   23.22 % 

📅 I'm Most Productive on Sunday

Monday                   697 commits         ███░░░░░░░░░░░░░░░░░░░░░░   12.31 % 
Tuesday                  759 commits         ███░░░░░░░░░░░░░░░░░░░░░░   13.40 % 
Wednesday                936 commits         ████░░░░░░░░░░░░░░░░░░░░░   16.53 % 
Thursday                 635 commits         ███░░░░░░░░░░░░░░░░░░░░░░   11.21 % 
Friday                   642 commits         ███░░░░░░░░░░░░░░░░░░░░░░   11.34 % 
Saturday                 775 commits         ███░░░░░░░░░░░░░░░░░░░░░░   13.69 % 
Sunday                   1219 commits        █████░░░░░░░░░░░░░░░░░░░░   21.53 % 

📊 This Week I Spent My Time On

🕑︎ Time Zone: Asia/Kolkata

💬 Programming Languages: 
No Activity Tracked This Week

🔥 Editors: 
No Activity Tracked This Week

🐱‍💻 Projects: 
No Activity Tracked This Week

💻 Operating System: 
No Activity Tracked This Week

I Mostly Code in JavaScript

JavaScript               33 repos            █████████░░░░░░░░░░░░░░░░   36.67 % 
TypeScript               17 repos            █████░░░░░░░░░░░░░░░░░░░░   18.89 % 
Python                   7 repos             ██░░░░░░░░░░░░░░░░░░░░░░░   07.78 % 
MDX                      1 repo              ░░░░░░░░░░░░░░░░░░░░░░░░░   01.11 % 
HTML                     1 repo              ░░░░░░░░░░░░░░░░░░░░░░░░░   01.11 % 

Timeline

You can use this website to view the generated base64 image.

data:image/png;base64,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o4j8/Yrmev2YmJhbfteyZUsZhpHjd8eOHfvTn62OgAgAAAAAAEiSSgYX09uT+yrl0jWn7dPfr6hKBhf76xVhKgIiAAAAAABgVzK4GIGNBTEHEQAAAAAAgMUREAEAAAAAAFgcAREAAAAAAIDFERABAAAAAABYHAERAAAAAACAxREQAQAAAAAAWBwBEQAAAAAAgMW5u7oBAAAAAACQf2Rl/Coj8zen7c9WpJjc3IOdtr/84tixYypfvrx27typOnXquLodAiIAAAAAAHBdVsavunTqGUnpTtyrh/zKTM11SDRw4EAlJSVp+fLl5rb1O8uWLdPkyZMVHx+vrKwshYeHq127dpoxY8Zt1yxXrpwSEhIUHJz7cCwmJkYjRoxQUlLSbe/3VnjEDAAAAAAASNL/3znkzHBIktKdesdSXsXGxqp37966//77tXXrVu3YsUOvvPKK0tNv/zylpaWpSJEiCg0Nlbt7/rh3h4AIAAAAAAAUSGvWrNHf/vY3BQYGqkSJEurSpYuOHDli/75JkyZ67rnnsm1z7tw5eXh4aOPGjZKkDz/8UHfffbeKFSum0NBQ9e3bV2fPnrWv/8UXX6hp06YaNWqUqlSposqVK6t79+6aNWtWtrpffPGFGjRooKJFiyo4OFg9evSwfxcZGamXX35Z/fv3l7+/vx555BEdO3ZMNptNu3btkiTFxcXJZrNp1apVql27tooWLapGjRppz5499u8feughJScny2azyWazafz48Q47lwREAAAAAACgQLp8+bKefvppbd++XbGxsXJzc1OPHj2UlZUlSerXr58WLVokwzDs2yxevFhhYWFq1qyZJCk9PV0vv/yyfvrpJy1fvlzHjh3TwIED7euHhoZq79699qAmJ6tWrVKPHj107733aufOnYqNjVXDhg2zrTN16lRFRUVp586deuGFF25Za9SoUZo2bZq2bdumkiVLqmvXrkpPT1eTJk00Y8YM+fv7KyEhQQkJCXrmmWdu57TlKH/cxwQAAAAAAJBH999/f7af586dq5IlS2rfvn2qWbOmevXqpREjRui7776zB0ILFy5Unz59ZLPZJEnR0dH27StUqKCZM2eqQYMGunTpkvz8/PTEE0/o22+/Va1atRQREaFGjRqpffv26tevn7y8vCRJr7zyih544AFNmDDBXisqKipbb61bt9bIkSPtPx87dizH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du/erZo1a6p69equbscluIMIAAAAAABYWvHixZWQkCAPD48/Xe/cuXPatWtXtmWlS5dWqVKlTOzOOXJ9B9GGDRsUHR2tpUuX3vTdJ598oujoaG3YsMGhzQEAAAAAAOdx8y8ueXg6d6centf362KBgYHy9fX903UWLlyounXrZvu8//77TurQXDbDMIzcrHj//fdr+fLlOnz4sMqXL5/tu4MHD6pq1arq3r17jgFSfpKSkqKAgAAlJyfL39/f1e3gDrRe+29T6n7TYawpdQEAQP7VcORCU+pundbXlLoAYKaMs6eVlXLRaftz8y8u95Awp+0POcv1I2bbt29XaGjoTeGQJFWuXFlhYWHatm2bQ5sDAAAAAADO5R4SJhHYWE6uHzE7c+aMgoKCbvl98eLFde7cOYc0BQAAAAAAAOfJdUDk7++vw4cP6+LFm28zu3Dhgg4dOsQjWwAAAAAAAAVQrgOi+vXrKy0tTX379tXZs2fty8+dO6d+/fopLS1N9evXN6VJAAAAAAAAmCfXAdHgwYNlGIa++uorRUZGKioqSnXq1FFERIS++uor2Ww2PfLII3na+caNG9W1a1eFhYXJZrNp+fLlf7lNXFyc6tWrJy8vL1WqVEkxMTF52icAAAAAAACyy3VA1LNnTw0YMECGYejatWvas2ePdu/erWvXrskwDA0cOFA9evTI084vX76sqKgozZo1K1frHz16VJ07d1arVq20a9cujRgxQoMGDdLatWvztF8AAAAAAAD8T67fYiZJ8+bNU5MmTfT+++9r3759MgxDNWrU0COPPKJBgwbleeedOnVSp06dcr3+7NmzVb58eU2bNk2SVK1aNX333XeaPn26OnTokOf9AwAAAAAAII8BkXT9UbPBgweb0ctf2rx5s9q2bZttWYcOHTRixIhbbpOamqrU1FT7zykpKWa1BwAAAAAAUCDlOSC6du2a1q1bpwMHDkiSqlatqrZt26po0aIOb+6PEhMTVapUqWzLSpUqpZSUFF29elXe3t43bTNx4kRNmDDB9N4AAAAAAAAKqjwFRF9//bX69++vM2fOZFseGhqqDz74QG3atHFoc44wevRoPf300/afU1JSVK5cORd2BAAAAAAAkL/kOiCKj49Xt27d7JNS/15CQoLuu+8+bd++XdWqVXN4kzeEhobeFE6dOXNG/v7+Od49JEleXl7y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

Last Updated on 14/01/2026 09:10:39 UTC

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 16 out of 17 changed files in this pull request and generated 1 comment.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Copy link
Owner

@anmol098 anmol098 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Lgtm

@DataBoySu
Copy link
Collaborator Author

Important information: New CI_PR will not be making comments anymore since the auto-provided Github token
does not have sufficient permission to change/make comments.
Instead an artifact containing preview will be generated.

@DataBoySu DataBoySu merged commit bd7e17b into anmol098:master Jan 14, 2026
13 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file docker Pull requests that update Docker code documentation Improvements or additions to documentation github_actions Pull requests that update GitHub Actions code python Pull requests that update Python code

Projects

None yet

3 participants