You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
These hardening items came out of the workflow review behind the companion workflow issue.
tj-actions/verify-changed-files@v17 runs after the deploy key is loaded (cron-vendor.yml:300, cron-conda.yml:195). It comes from the publisher whose tj-actions/changed-files was compromised in March 2025. git status --porcelain does the same check.
No action is pinned to a commit SHA, and Dependabot covers pip only (.github/dependabot.yml). Adding the github-actions ecosystem breaks the tests that hard-code action versions (ncipollo@v1.21.0, create-github-app-token@v3, verify-changed-files@v17), so those tests move with the change.
PYPI_API_TOKEN and TEST_PYPI_API_TOKEN are not used by any workflow.ANACONDA_TOKEN, the PAT and the deploy key are repository-wide. The anaconda and conda-tag environments hold no secrets, so the separation described at create-release.yml:34-76 does not hold.
create-release.yml and CodeQL declare no top-level permissions.deploy-pages.yml grants contents: write to pull-request doc builds.
The first item is a code change. The secrets and environments are repository settings, and only you can change them.
Replace tj-actions/verify-changed-files with a git status --porcelain step. Recommended yes. It is a code change and I can do it now.
Pin every action to a commit SHA, with a version comment, and add the github-actions ecosystem to Dependabot. Recommended yes. The tests that hard-code action tags (ncipollo@v1.21.0, create-github-app-token@v3, verify-changed-files@v17) move with it.
The unused PYPI_API_TOKEN and TEST_PYPI_API_TOKEN. Recommended: delete them. Only you can, in Settings → Secrets.
Secrets scoped to environments.ANACONDA_TOKEN, the PAT and the deploy key are repository-wide, so the anaconda / conda-tag environments guard nothing. Recommended: move each into the environment that needs it, so its approval rule actually applies. That is also a settings change, and the workflow side follows it.
The rest needs no decision, and I will do it with 1–2:
top-level permissions in create-release.yml and CodeQL;
contents: read for pull-request builds in deploy-pages.yml.
Taking all four. It splits into three pieces of work:
PR now: replace verify-changed-files with a git status --porcelain step in cron-vendor.yml and cron-conda.yml. Add top-level permissions to create-release.yml and CodeQL, and contents: read for pull-request builds in deploy-pages.yml. ci: categorise the tests into tiers and run each tier where it belongs #1958 phase 1 does not touch these files.
Yours, in Settings: delete PYPI_API_TOKEN and TEST_PYPI_API_TOKEN, and move ANACONDA_TOKEN, the PAT and the deploy key into the environments whose jobs use them. Once they have moved, a follow-up checks that every job that reads one declares its environment:.
#1993 has merged, so the cron jobs now name anaconda and conda-tag. You can move the secrets: add ANACONDA_TOKEN to anaconda, and PYPCAPKIT and PYPCAPKIT_ACTIONS_DEPLOY_KEY to conda-tag, then delete the repository copies. Nothing else in this issue is left on the code side.
Closing, as you suggested. The code side is done (#1970, #1981, #1993, #1994). What remains is moving ANACONDA_TOKEN into anaconda and PYPCAPKIT with PYPCAPKIT_ACTIONS_DEPLOY_KEY into conda-tag, whenever suits; the cron jobs already name both environments.
Activity
JarryShaw commentedon Oct 20, 2026
Anything to make decision?
JarryShaw commentedon Oct 20, 2026
Four decisions; my recommendation is in bold.
tj-actions/verify-changed-fileswith agit status --porcelainstep. Recommended yes. It is a code change and I can do it now.github-actionsecosystem to Dependabot. Recommended yes. The tests that hard-code action tags (ncipollo@v1.21.0,create-github-app-token@v3,verify-changed-files@v17) move with it.PYPI_API_TOKENandTEST_PYPI_API_TOKEN. Recommended: delete them. Only you can, in Settings → Secrets.ANACONDA_TOKEN, the PAT and the deploy key are repository-wide, so theanaconda/conda-tagenvironments guard nothing. Recommended: move each into the environment that needs it, so its approval rule actually applies. That is also a settings change, and the workflow side follows it.The rest needs no decision, and I will do it with 1–2:
permissionsincreate-release.ymland CodeQL;contents: readfor pull-request builds indeploy-pages.yml.JarryShaw commentedon Oct 20, 2026
Take all your recommendations
JarryShaw commentedon Oct 20, 2026
Taking all four. It splits into three pieces of work:
verify-changed-fileswith agit status --porcelainstep incron-vendor.ymlandcron-conda.yml. Add top-levelpermissionstocreate-release.ymland CodeQL, andcontents: readfor pull-request builds indeploy-pages.yml. ci: categorise the tests into tiers and run each tier where it belongs #1958 phase 1 does not touch these files.github-actionsecosystem to.github/dependabot.yml, and move the tag-pinning tests with them. This touches every workflow, so it waits.PYPI_API_TOKENandTEST_PYPI_API_TOKEN, and moveANACONDA_TOKEN, the PAT and the deploy key into the environments whose jobs use them. Once they have moved, a follow-up checks that every job that reads one declares itsenvironment:.ci(pages): never publish a build that main has moved past (#1968)
ci: drop the third-party step after the deploy key and declare workfl…
JarryShaw commentedon Oct 20, 2026
Blocked until both #1972 and #1973 merge. SHA-pinning the actions and adding github-actions to Dependabot touches every workflow those two PRs edit.
21 remaining items
ci(dependabot): make the readme static and skip conda/requirements.txt (
ci: name the secrets' environments on the cron jobs (#1968) (#1993)
ci: make the readme static so Dependabot can build the editable insta…
JarryShaw commentedon Oct 20, 2026
#1993 has merged, so the cron jobs now name
anacondaandconda-tag. You can move the secrets: addANACONDA_TOKENtoanaconda, andPYPCAPKITandPYPCAPKIT_ACTIONS_DEPLOY_KEYtoconda-tag, then delete the repository copies. Nothing else in this issue is left on the code side.JarryShaw commentedon Oct 21, 2026
i'll find time for this update. we can close this for now so that it wont block the workflow.
JarryShaw commentedon Oct 21, 2026
Closing, as you suggested. The code side is done (#1970, #1981, #1993, #1994). What remains is moving
ANACONDA_TOKENintoanacondaandPYPCAPKITwithPYPCAPKIT_ACTIONS_DEPLOY_KEYintoconda-tag, whenever suits; the cron jobs already name both environments.