Commit Graph
55 Commits
Author SHA1 Message Date
lukaszraczylo 413f9c3064 feat(autoupdate): add a Renovate workflow for Go and Node projects
Renovate batches every minor and patch update in one PR. The workflow
tests that branch with go build and go test for Go and with the
package.json scripts for npm, pnpm and yarn. It squash-merges the PR only
when every test passes. Major updates get their own PR and never merge by
themselves. A renovate.json in the calling repo adds project rules.
2026-10-03 16:01:34 +01:00
lukaszraczylo fe70d4c707 fix(release): pass a GoReleaser timeout of 60 minutes
The continue command that merges split builds stops after 30 minutes by
default. A slow multi-architecture docker build under QEMU hit that
limit and the superclaw release failed with context canceled after
30 minutes.

The goreleaser action takes a timeout input, default 60m, and passes it
to release, release --split and continue --merge. The release workflows
expose it as release-timeout.
2026-10-03 00:05:15 +01:00
lukaszraczylo ac32cb03c4 feat(release): make the QEMU binfmt image an input
The default stays qemu-v8.1.5. A caller whose arm64 build crashes under that version can pass another image.
2026-10-02 15:49:16 +01:00
lukaszraczylo a6a9c55bdf fix(release): pin QEMU binfmt image to qemu-v8.1.5
The unpinned latest binfmt image can crash arm64 apt installs with a segmentation fault.
Pin the image to a known stable release for reproducible multi-arch builds.
2026-10-02 11:17:50 +01:00
lukaszraczylo 9a042ecafd fix(go-pr): read only the total line of the coverage report
The coverage step matched every line that contains the word total, so a
function name such as subtotal added a second value. GitHub then
rejected the multi-line step output. The step now reads the line that
starts with total:.
2026-10-02 04:33:59 +01:00
lukaszraczylo 5390791174 fix(go-autoupdate): fall back to direct dependencies when a full update breaks the build
go get -u updates indirect modules past the versions their parents
support. For Kubernetes projects the build then fails and the daily
update has failed since early September. The step now builds after a
full update. On failure it restores go.mod and go.sum and updates the
direct dependencies only.

The Go toolchain also uses check-latest so a range such as >=1.24
resolves to the newest release.
2026-10-02 02:48:47 +01:00
lukaszraczylo 4f53b0593e fix(go-pr): skip the report job when the run is cancelled
A run cancelled by a newer push still ran the report job. The gate then
failed and marked the superseded run as failed. The report job now
skips when the run is cancelled.
2026-10-02 02:35:03 +01:00
lukaszraczylo c9823f320e fix(workflows): parenthesise the runner fallback chain
The && operator bound to the first operand only, so the label branch
returned the bare label before the format call. Parentheses keep the
whole fallback chain on the && branch.
2026-10-02 01:32:09 +01:00
lukaszraczylo 5bc07d18ae fix(workflows): quote the runner label with format instead of toJSON
GitHub rejected the runs-on expression: fromJSON received the bare
label. The expression now wraps the label in quotes with format.
2026-10-02 01:31:55 +01:00
lukaszraczylo 9533a6518f feat(preflight): probe release and ghcr push access
A caller can grant narrower permissions than the release job needs. The
release then fails at the end, when it creates the tag or pushes an
image.

The preflight job now declares the same contents and packages
permissions as the release job and probes with the real token. A git
push dry run checks that the token can create the tag and release. A
ghcr.io token request and a blob upload session check that the token can
push the image. The upload session creates no package.

The release-cgo workflow probes ghcr only when the GoReleaser config
builds ghcr.io images. The release workflow probes it when
docker-enabled is true and the registry is ghcr.io. A probe that cannot
reach a verdict warns and does not fail.
2026-10-02 01:27:01 +01:00
lukaszraczylo f9b22ef8d9 feat(preflight): fail early when a secret or repository access is missing
A release run used to fail at the GoReleaser step when a secret was
empty, after the tests and the version job had finished.

A new preflight action checks the required names, the .Env references
in the GoReleaser config and push access to optional repositories. It
lists every problem in one run. The release and release-cgo workflows
run it in a first job, so a missing secret fails in seconds.

The release-cgo workflow requires GORELEASER_PRO. The release workflow
requires the secrets that the GoReleaser config references. Set the
preflight input to false to skip the check. Set preflight-repos to check
access to a Homebrew tap or helm-charts repository.
2026-10-02 01:23:56 +01:00
lukaszraczylo 6b47cbd317 feat(go-pr): add runner input and a single PR checks report
The workflow takes the same runner input as the release workflows.

Findings from go vet and staticcheck now appear as inline annotations
on the pull request diff. A new report job posts one comment with the
result of every check and the coverage. It fails when a check fails or
coverage is below the threshold. It no longer needs the bc command.

A push to a branch with an open pull request now skips its run, because
the pull_request event already runs the checks. Stale runs on the same
branch are cancelled. Every job has a timeout.
2026-10-02 01:20:26 +01:00
lukaszraczylo cce6b9d88c feat(workflows): add runner input, timeouts and release concurrency
The release, release-cgo and autoupdate workflows must run on a runner
the caller chooses. Each workflow now takes a runner input. It accepts
a label or a JSON object that selects a runner group.

The workflow uses inputs.runner first. It then uses the
SHARED_ACTIONS_RUNNER variable and falls back to ubuntu-latest. Callers
that set nothing keep the old behaviour.

Every job now has a timeout. Release and autoupdate runs use a
concurrency group that never cancels a running job.
2026-10-02 01:20:24 +01:00
lukaszraczylo 5cf1402555 fix(go-autoupdate): fall back to github.token when HOMEBREW_TAP_TOKEN is unset
create-pull-request and the gh pr merge step both hard-required HOMEBREW_TAP_TOKEN,
so any consumer repo without that secret got 'Input token not supplied' and the
whole Autoupdate run failed. A same-repo PR needs only the caller's
contents/pull-requests write; fall back to the auto-provisioned github.token.
Consumers that do set the tap token keep current behavior.
2026-08-10 10:25:57 +01:00
lukaszraczylo 72ef4441eb feat(go-release): add optional runner input (default ubuntu-latest)
Lets a caller run the release jobs on a self-hosted runner via with.runner,
e.g. runner: self-hosted. Defaults to ubuntu-latest so existing consumers are
unaffected.
2026-06-18 13:36:28 +01:00
lukaszraczylo a4cf065ea1 ci(goreleaser): commit build-time source changes into the tagged commit
Before tagging, fold any working-tree changes left by a repo-local workflow-prepare.sh (e.g. version stamping) into the tagged commit. Without this the tag captured the unstamped source AND GoReleaser's 'release --clean' failed on the dirty tree. The commit is reachable only via the tag (the branch is not pushed), so a 0.0.0-dev placeholder on main is preserved. No-op when the tree is clean, so repos that do not stamp are unaffected.
2026-05-30 13:09:30 +01:00
lukaszraczylo 58ab34e4cf ci: expose computed VERSION/VERSION_TAG to workflow-prepare.sh in release job
The release job now passes the calculated semver (bare VERSION and v-prefixed VERSION_TAG) into the repo-local workflow-prepare.sh hook's environment, so a consumer repo can stamp its version into source at build time. Needed for runtimes that cannot resolve their version from build info at runtime (e.g. Yaegi-interpreted Traefik plugins). Additive and backward-compatible: the test/version jobs run the hook without a version, and repos with no hook (or one that ignores VERSION) are unaffected.
2026-05-30 13:06:13 +01:00
lukaszraczylo fb34ae51e5 Revert "fixup! chore(goreleaser): pin sigstore/cosign-installer to v4.1.2"
This reverts commit cc643787c5.
2026-05-22 00:33:40 +01:00
lukaszraczylo cc643787c5 fixup! chore(goreleaser): pin sigstore/cosign-installer to v4.1.2 2026-05-22 00:22:12 +01:00
lukaszraczylo 486ef6e3a1 chore(goreleaser): pin sigstore/cosign-installer to v4.1.2 2026-05-21 03:28:54 +01:00
lukaszraczylo e4dac8969a chore(actions): bump shared actions to latest major versions
- actions/checkout v4 -> v6
- actions/setup-go v5 -> v6
- actions/setup-node v4 -> v6
- actions/upload-artifact v4 -> v7
- actions/download-artifact v4 -> v8
- actions/github-script v7 -> v9
- goreleaser/goreleaser-action v6 -> v7
- docker/login-action v3 -> v4
- docker/setup-buildx-action v3 -> v4
- docker/setup-qemu-action v3 -> v4
- sigstore/cosign-installer v3 -> v4
- peter-evans/create-pull-request v7 -> v8
2026-05-21 03:14:01 +01:00
lukaszraczyloandGitHub 8cb52dd269 Merge pull request #1 from lukaszraczylo/fix/ghcr-login-in-build-step
fix(go-release-cgo): add ghcr login + buildx to build step
2026-04-19 23:33:53 +01:00
lukaszraczylo d1f628c196 fix(go-release-cgo): add ghcr login + buildx to build step
goreleaser Pro's --split mode pushes Docker images during the
per-target build job (see 'pushing docker images from partial release'
in goreleaser output). The shared workflow previously only logged in
to ghcr.io during the merge job, so the build-phase push failed with
'unauthorized: unauthenticated: User cannot be authenticated with the
token provided'.

Added docker/login-action + docker/setup-buildx-action to the build
step, gated on matrix.goos == 'linux' since Docker images are
Linux-only in every consumer of this workflow. Uses the default
GITHUB_TOKEN, which has packages:write per the existing permissions
block.
2026-04-19 23:33:20 +01:00
lukaszraczylo 8f7f235dde feat: add build tags support for Go tests
- Add build-tags input parameter to go-test action
- Add build-tags input to go-pr workflow with CGO support
- Pass build-tags to go-test action in go-release-cgo workflow
- Enable CGO_ENABLED=1 in go-pr test job

This allows projects requiring CGO and build tags (e.g., SQLite FTS5)
to properly compile and test with sqlite-vec and other CGO dependencies.

Fixes test failures for projects using sqlite-vec-go-bindings.
2026-01-07 21:11:42 +00:00
lukaszraczylo edf7f3f2b8 fixup! fix: configure Docker buildx for multi-platform builds 2026-01-04 01:37:44 +00:00
lukaszraczylo ac2849fb9b fix: configure Docker buildx for multi-platform builds
Added Docker buildx setup with docker-container driver to support
multi-platform Docker image builds in the release job.

Changes:
- Set up Docker buildx with moby/buildkit driver
- Login to GitHub Container Registry before GoReleaser

This fixes the error:
"Multi-platform build is not supported for the docker driver"
2026-01-03 23:19:14 +00:00
lukaszraczylo 6f59ddd894 fix: add condition to release job to prevent skipping when build succeeds
The release job needs an explicit if condition to run even when optional
jobs like frontend are skipped. Without this, GitHub Actions skips the
release job when any dependency doesn't have 'success' status.

Now release will run as long as version and build jobs succeed.
2026-01-03 22:59:55 +00:00
lukaszraczylo b4d172b69c fixup! fixup! Add LFS support to the workflows. 2025-12-19 18:19:53 +00:00
lukaszraczylo 21b995bb16 fixup! Add LFS support to the workflows. 2025-12-19 04:47:31 +00:00
lukaszraczylo 18b88d10ed Add LFS support to the workflows. 2025-12-19 02:15:13 +00:00
lukaszraczylo d03ba1085e Remove the amd64 macs. 2025-12-16 13:39:45 +00:00
lukaszraczylo c0b292337a fixup! fixup! Extend workflows to allow for quirks. 2025-12-16 13:14:24 +00:00
lukaszraczylo 1b7d34effa fixup! Extend workflows to allow for quirks. 2025-12-16 12:38:41 +00:00
lukaszraczylo 08bda799dd Extend workflows to allow for quirks. 2025-12-16 12:19:28 +00:00
lukaszraczyloandClaude Opus 4.5 dd4f84aebd Add workflow prepare script hook to all jobs
Allow repos to optionally run a ./workflow-prepare.sh script
after checkout to handle any pre-build setup like downloading
dependencies or generating files.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <[email protected]>
2025-12-16 12:17:22 +00:00
lukaszraczylo a663cc531f fixup! fixup! fixup! feat: use GoReleaser Pro for split/merge CGO builds 2025-12-15 00:15:24 +00:00
lukaszraczylo d4fa2819fb fixup! fixup! feat: use GoReleaser Pro for split/merge CGO builds 2025-12-14 23:56:30 +00:00
lukaszraczylo e9a3a6b5a5 fixup! feat: use GoReleaser Pro for split/merge CGO builds 2025-12-14 23:41:20 +00:00
lukaszraczyloandClaude Opus 4.5 6b96327d17 feat: use GoReleaser Pro for split/merge CGO builds
- Add goreleaser-key input for Pro license
- Use goreleaser-pro distribution for split/merge modes
- Split: goreleaser release --clean --split
- Merge: goreleaser continue --merge
- Pass GORELEASER_PRO secret to action

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <[email protected]>
2025-12-14 20:38:38 +00:00
lukaszraczyloandClaude Opus 4.5 b25c6ad434 feat: use goreleaser for build/archive, gh CLI for release
Since GoReleaser Pro is needed for split/merge, use this approach:
- Split mode: goreleaser release --skip=publish --single-target (builds + archives)
- Merge mode: gh CLI to create release and upload artifacts

This allows CGO matrix builds without requiring Pro license.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <[email protected]>
2025-12-14 20:32:00 +00:00
lukaszraczyloandClaude Opus 4.5 42c9680178 fix: use --skip=build for merge and capture full dist/ directory
- Change merge mode to use 'release --skip=build' since binaries are pre-built
- Upload full dist/ directory, not just files with extensions
- This ensures binary directories are preserved across the artifact upload/download

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <[email protected]>
2025-12-14 20:27:35 +00:00
lukaszraczyloandClaude Opus 4.5 0493dcf916 fix: update macos-13 to macos-15-large for Intel builds
macOS-13 runners are deprecated, switching to macos-15-large for
darwin_amd64 builds.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <[email protected]>
2025-12-14 20:18:32 +00:00
lukaszraczyloandClaude Opus 4.5 47d7101d55 fix: use goreleaser build for CGO split mode instead of Pro feature
--split flag is GoReleaser Pro only. Use 'build --single-target' for
matrix builds and 'release --clean' for the merge step.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <[email protected]>
2025-12-14 20:09:46 +00:00
lukaszraczyloandClaude Opus 4.5 dce463c659 feat: build frontend once and share across platform builds
- Add frontend job that builds Node.js frontend once on ubuntu
- Platform builds now download the frontend artifact
- New inputs: node-cache-dependency-path, node-output-path, node-embed-path
- Reduces build time by avoiding redundant frontend builds on each platform

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <[email protected]>
2025-12-14 20:06:51 +00:00
lukaszraczylo f01c18353f Utilise composite workflows. 2025-12-14 19:54:19 +00:00
lukaszraczylo c489e4506c Update deprecated actions. 2025-12-14 19:54:18 +00:00
lukaszraczylo 06d102bbea Ensure that gosec does not pick the golang vulnerabilities. 2025-12-14 19:54:18 +00:00
lukaszraczylo df138828b9 Split checks to run in parallel. 2025-12-14 19:54:17 +00:00
lukaszraczylo a9204fcfbf Additional tests for shared workflows. 2025-12-14 19:54:16 +00:00
lukaszraczylo f08c7e9e76 Add pull request workflow. 2025-12-14 19:54:16 +00:00