Migrate to GitHub Actions + apply zizmor security hardening#27
Merged
Conversation
Public MIT-licensed repo. CircleCI is dead, so this PR brings async-hofs
onto GitHub Actions with the same hardening pack the other libraries have:
- SHA-pinned actions with version comments, top-level `permissions: {}`
deny-all + per-job least privilege, `persist-credentials: false` on
every checkout, arc-runner-set runners
- mise.toml with `minimum_release_age = "7d"` and pinned zizmor; lockfile
- Changesets + trusted-publishing release flow via
raywhite/github-workflows@v3.1.1
- Root zizmor.yml config (`unpinned-uses: hash-pin`,
`impostor-commit: disable`) + zizmor.yml audit workflow at medium+
- dependabot.yml with monthly grouped github-actions updates +
7-day cooldown
Minimal eslint stack update to make lint runnable on Node 24:
eslint v8, @babel/eslint-parser, airbnb-base v15. New airbnb rules that
would require source edits are temporarily disabled — a stacked TS +
style migration PR will re-enable them and migrate the codebase.
ava pinned to ^3 for the same reason (test.cb removed in v4).
Pre-flight for review: npm trusted publishing must be enabled for
@raywhite/async-hofs before the first release workflow run.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
d7c96ec to
eb8b771
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
persist-credentials: false, mise + zizmor lint, dependabot grouped updates, root zizmor config)This is a public, MIT-licensed repo — the only one in the hardening sweep with that exposure profile. Two consequences:
raywhite/github-workflows(private) are not callable from a public repo — the defaultGITHUB_TOKENdoesn't grant cross-repo access from public → private. Sorelease.ymlandblock-fixup.ymlare inlined here rather than calling the reusable workflows that every other library uses.arc-runner-set(self-hosted) is not available to this public repo — initial CI run sat queued indefinitely. All jobs run onubuntu-latest.Both of these are async-hofs-only concessions; the rest of the org-wide pattern is preserved.
Notes for review
eslint@8,@babel/eslint-parser,eslint-config-airbnb-base@15. Several new airbnb rules would force source edits (arrow-parens,no-promise-executor-return,prefer-promise-reject-errors,prefer-exponentiation-operator,import/extensions,no-multiple-empty-lines) — I disabled them in.eslintrcrather than churn source. The stacked TS + style migration PR will re-enable them and migrate the codebase.^3(was^3.5.0). ava v4 removedtest.cb, which several tests rely on. Migrating those is also stacked-PR work.zizmor.ymlis minimal here: noself-hosted-runnerignore (none used) and noimpostor-commit: disable(no private reusable callout).Pre-flight ask before first release
@raywhite/async-hofsneeds trusted publishing enabled on npmjs beforerelease.ymlfirst runs onmainpost-merge, otherwise the publish step will fail. The workflow also passesNPM_TOKENas a fallback secret if trusted publishing isn't configured.Recommended review order
mise.toml,zizmor.yml,.github/dependabot.yml— config.github/workflows/*.yml— workflows (inlined release + block-fixup)package.json,.eslintrc— dep + lint adjustments (note the rule disables)README.md— drop CircleCI badge, update versioning sectionpackage-lock.json— full regen, big diff, mechanicalTest plan
npm install && npm test(lint + ava) passes locally on Node 24mise run lint-actionsclean at medium+ severitytestworkflow green on PRzizmorworkflow green on PRblock-fixupworkflow green on PR🤖 Generated with Claude Code