ci: adopt storage-go's GitHub Actions setup#1
Merged
Conversation
Mirror the CI/release pipeline used by tigrisdata/storage-go so objgit
gets the same test matrix, supply-chain checks, and automated releases.
Workflows (.github/workflows), all with SHA-pinned actions:
- go.yml: matrix build/test across ubuntu/windows/macos + arm variants,
running `go vet`, `go test`, and staticcheck on every push and PR. The
full OS matrix matters here because objgit shells out to git/ssh/
ssh-keygen for its protocol tests, so cross-platform regressions are
real. A trailing `autorelease` job dispatches release.yaml on main so a
green build can cut a release without manual steps.
- zizmor.yml: scans the workflow files themselves for CI misconfig and
uploads SARIF; runs only when a workflow changes.
- lint-pr-titles.yaml: enforces conventional-commit PR titles, which is
what semantic-release reads to decide the version bump.
- dco_check.yaml: requires Signed-off-by on every PR (DCO).
- pull_request_template.md: standard summary/details/test-plan checklist.
Release tooling:
- package.json carries the semantic-release config (commit-analyzer
release rules, changelog, GitHub release, git asset commit), plus
commitlint, lint-staged, and prettier so local commits match CI
expectations. npmPublish is off; this is a Go binary, semantic-release
is used purely for tagging/changelog/GitHub releases.
- release.yaml runs semantic-release on a throwaway release-* branch and
opens a release PR (needs the WRITE_GH_TOKEN secret), matching
storage-go's "release via PR" flow.
- .husky/{commit-msg,pre-commit} wire commitlint + npm test and
lint-staged into git hooks; package-lock.json is committed so
`npm ci` in release.yaml is reproducible.
- .prettierignore excludes CLAUDE.md; .gitignore now ignores
node_modules.
Build/tooling:
- Add goimports and staticcheck as `go tool` directives so the format
hook (`go tool goimports`) and local linting work without global
installs, matching storage-go. `go mod tidy` also dropped a stale
self-referential require on the old tangled.org module path left over
from the org move.
- Drop the unused embedded s3Client from optRecorder in
resilient_test.go: it overrides all nine interface methods directly,
so the embed was dead and tripped staticcheck (U1000), which would
have made the new pipeline red on its first run.
Docs:
- Consolidate agent guidance into AGENTS.md and point CLAUDE.md at it,
matching storage-go's layout.
Assisted-by: Claude Opus 4.8 via Claude Code
Signed-off-by: Xe Iaso <xe@tigrisdata.com>
|
You are seeing this message because GitHub Code Scanning has recently been set up for this repository, or this pull request contains the workflow file for the Code Scanning tool. What Enabling Code Scanning Means:
For more information about GitHub Code Scanning, check out the documentation. |
They're hanging infinitely. Signed-off-by: Xe Iaso <xe@tigrisdata.com>
adilansari
approved these changes
Jun 2, 2026
ovaistariq
approved these changes
Jun 2, 2026
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
Details
Workflows (
.github/workflows, all SHA-pinned):go.yml— matrix build/test across ubuntu/windows/macos + arm variants, runninggo vet,go test, and staticcheck on every push and PR. The full OS matrix matters because objgit shells out togit/ssh/ssh-keygenfor its protocol tests, so cross-platform regressions are real. A trailingautoreleasejob dispatchesrelease.yamlonmain.zizmor.yml— scans the workflow files for CI misconfig and uploads SARIF; runs only when a workflow changes.lint-pr-titles.yaml— enforces conventional-commit PR titles (what semantic-release reads to pick the version bump).dco_check.yaml— requiresSigned-off-byon every PR.pull_request_template.md.Release tooling:
package.jsoncarries the semantic-release config plus commitlint, lint-staged, and prettier.npmPublishis off — this is a Go binary; semantic-release is used purely for tagging/changelog/GitHub releases.release.yamlruns semantic-release on a throwawayrelease-*branch and opens a release PR (needs theWRITE_GH_TOKENsecret)..husky/{commit-msg,pre-commit}wire commitlint +npm testand lint-staged into git hooks;package-lock.jsonis committed sonpm ciis reproducible.Build/tooling:
goimportsandstaticcheckasgo tooldirectives so the format hook and local linting work without global installs.go mod tidyalso dropped a stale self-referential require on the oldtangled.orgmodule path left from the org move.s3ClientfromoptRecorderinresilient_test.go— it overrides all nine interface methods directly, so the embed was dead and tripped staticcheck (U1000), which would have made the new pipeline red on first run.Docs: consolidate agent guidance into
AGENTS.mdand pointCLAUDE.mdat it, matching storage-go's layout.Test plan
go build ./...go vet ./...go tool staticcheck ./...— cleango test ./...— all passnpm test) verified by the commit itselfWRITE_GH_TOKENrepo secret before relying onrelease.yaml