Commit Graph
91 Commits
Author SHA1 Message Date
lukaszraczyloandGitHub 87651c95dc feat(autoupdate): add build-tags input to renovate-autoupdate (#9)
The default Go build and test step has no way to pass build tags.
A repository that needs tags, such as fts5, fails its scheduled run.

The new build-tags input defaults to an empty string.
With tags set, the step must run go build and go test with -tags.
It also sets CGO_ENABLED=1, as go-pr.yaml does.
Without tags, the commands stay unchanged.
The go-test-command input still replaces the default commands.
2026-10-10 01:31:40 +01:00
tozuo-home-cluster-eso[bot]GitHubtozuo-home-cluster-eso[bot] <287217661+tozuo-home-cluster-eso[bot]@users.noreply.github.com>
38e5cb0968 chore(deps): update renovatebot/github-action action to v46.3.7 (#8)
Co-authored-by: tozuo-home-cluster-eso[bot] <287217661+tozuo-home-cluster-eso[bot]@users.noreply.github.com>
2026-10-08 05:20:34 +00:00
lukaszraczylo 31cb4a7f8b fix(autoupdate): follow go.mod for the Go version
A dependency update can raise the go directive past the input range, which
made the test step fail with GOTOOLCHAIN=local. Raise the version to the
merged go.mod and let the test step fetch a toolchain when one is needed.
2026-10-05 11:47:37 +01:00
lukaszraczylo 33fdaf6689 fix(autoupdate): skip a branch whose lockfile the default branch also changed
A lockfile changed on both sides merges as text and can come out broken,
so a tested merge differs from the merge that lands. Skip the branch and
let Renovate regenerate it on the next run.
2026-10-05 11:11:27 +01:00
lukaszraczylo a0032ad2f8 fix(release): pass the Homebrew tap token to the cgo release 2026-10-04 00:38:35 +01:00
lukaszraczylo b7bb0468b2 Merge branch 'main' into feat/node-registry-workspace 2026-10-03 23:18:26 +01:00
lukaszraczylo 459d448941 fix(autoupdate): give pnpm workspace lockfile updates the registry token 2026-10-03 23:08:39 +01:00
lukaszraczyloandGitHub c42cf115b8 chore(autoupdate): author the update merge as Lukasz Raczylo (#7)
The Renovate autoupdate workflow merged each update branch with the
github-actions bot identity. It now uses [email protected], the same
author as the cluster Renovate runner.
2026-10-03 23:05:07 +01:00
tozuo-home-cluster-eso[bot]GitHubtozuo-home-cluster-eso[bot] <287217661+tozuo-home-cluster-eso[bot]@users.noreply.github.com>
ffbec959bc chore(deps): update actions/checkout action to v7 (#4)
Co-authored-by: tozuo-home-cluster-eso[bot] <287217661+tozuo-home-cluster-eso[bot]@users.noreply.github.com>
2026-10-03 23:01:11 +01:00
tozuo-home-cluster-eso[bot]GitHubtozuo-home-cluster-eso[bot] <287217661+tozuo-home-cluster-eso[bot]@users.noreply.github.com>
5cb1998345 chore(deps): update actions/setup-go action to v7 (#5)
Co-authored-by: tozuo-home-cluster-eso[bot] <287217661+tozuo-home-cluster-eso[bot]@users.noreply.github.com>
2026-10-03 23:00:59 +01:00
tozuo-home-cluster-eso[bot]GitHubtozuo-home-cluster-eso[bot] <287217661+tozuo-home-cluster-eso[bot]@users.noreply.github.com>
852afeb5aa chore(deps): update actions/setup-node action to v7 (#6)
Co-authored-by: tozuo-home-cluster-eso[bot] <287217661+tozuo-home-cluster-eso[bot]@users.noreply.github.com>
2026-10-03 23:00:46 +01:00
lukaszraczylo b23191de71 fix(autoupdate): retry the PR merge on a transient GitHub error 2026-10-03 22:58:15 +01:00
lukaszraczyloandGitHub 8f20f32137 fix(renovate): do not post status checks (#3)
The GitHub App reads statuses but cannot write them. Renovate posts a
renovate/stability-days status on each branch for minimumReleaseAge. The
403 aborted the run as "repository changed" right after the first
branch was created. Turn the Renovate status checks off. minimumReleaseAge
still holds a release back.
2026-10-03 22:54:08 +01:00
lukaszraczylo 26ad486b78 Merge branch 'feat/pnpm-workspace' into feat/node-registry-workspace 2026-10-03 22:45:36 +01:00
lukaszraczylo 73983972db feat(node): support pnpm workspaces 2026-10-03 22:45:11 +01:00
lukaszraczylo caaad0efab feat(npm): support a private registry token 2026-10-03 22:44:30 +01:00
lukaszraczyloandGitHub cce3d04588 Merge pull request #2 from lukaszraczylo/feat/renovate-validation
feat: validate workflows and actions, and prepare Renovate bumps
2026-10-03 22:30:41 +01:00
lukaszraczylo b7c4914104 fix(renovate): leave tool-version inputs and the GoReleaser version alone 2026-10-03 22:28:58 +01:00
lukaszraczylo 86ba34bab5 fix(validate): run on every pull request so the required check always reports 2026-10-03 22:25:22 +01:00
lukaszraczylo 1aece66c7f feat: validate workflows and actions, and prepare Renovate bumps
scripts/check-actions.sh runs actionlint and checks that every external
uses: reference resolves. The validate workflow runs it, then runs the
go-test and node-build actions and the node-pr workflow against small
fixtures, so a bump of an action they use is exercised before it merges.

renovate.json bumps the actions this repository uses. Minor and patch
bumps merge themselves once validate is green. Major bumps wait for a
person, because every consumer calls these actions at @main. The same
script runs as a Renovate post-upgrade task and marks a failing branch so
no PR opens.
2026-10-03 22:22:22 +01:00
lukaszraczylo 2e49670452 feat(autoupdate): make go mod tidy optional
Encore adds imports at build time, so go mod tidy prunes go.sum entries
that the Encore build needs, and every batch failed with a missing go.sum
entry. Add go-mod-tidy, on by default, so an Encore app can turn it off.
2026-10-03 21:48:33 +01:00
lukaszraczylo 85900e7304 fix(autoupdate): give Renovate the pnpm version the tests use
Renovate wrote the lockfile with its own pnpm, in a form the pinned pnpm
rejected as an overrides mismatch, so every branch failed to install. Pass
pnpm-version to Renovate as a constraint.
2026-10-03 21:31:19 +01:00
lukaszraczylo 319b564d14 feat(autoupdate): let a repo set its own Go prepare and test commands
An Encore app cannot be tested with plain go build and go test. Add
go-prepare-command, which runs before the tests, and go-test-command, which
replaces the default Go build and test commands.
2026-10-03 21:30:17 +01:00
lukaszraczylo f854725a97 feat(node): let a caller pin the pnpm version
A repo with no packageManager field got the newest pnpm through Corepack.
Several repos pin pnpm in their own workflows instead. Add a pnpm-version
input to node-pr and renovate-autoupdate and activate it with corepack.
2026-10-03 21:05:05 +01:00
lukaszraczylo b06a5bb1b1 feat(autoupdate): dispatch several workflows after a merge
A repo can have more than one workflow that a push used to trigger, such
as a Docker build and a site deploy. Let release-workflow take a
comma-separated list and dispatch each one.
2026-10-03 21:04:20 +01:00
lukaszraczylo bdbd313c0d fix(autoupdate): let Renovate read issues in a private repo
Renovate queries the repository issues when it starts. The job token had
no issues permission, so a private repo returned FORBIDDEN and Renovate
stopped with platform-unknown-error. Public repos expose issues, which hid
the problem. Grant issues: read to the Renovate job.
2026-10-03 20:17:52 +01:00
lukaszraczylo 5e0790e131 feat(autoupdate): add a log-level input for Renovate
A Renovate failure at info level hides the cause. Let a caller raise the
level to debug for one run.
2026-10-03 20:13:26 +01:00
lukaszraczylo 8126310820 feat(node-pr): add pull request checks for Node projects
Add a reusable workflow that installs without changing the lockfile and
runs lint, typecheck, test and build, skipping scripts that do not exist.
It follows go-pr: a push to a branch with an open PR skips the duplicate
run, and stale runs are cancelled.
2026-10-03 18:53:55 +01:00
lukaszraczylo 114812c70e feat(autoupdate): update only the directories that are tested
Renovate updated every go.mod and package.json in a repo, while the tests
cover one module and one Node project. An update outside them would merge
untested. Restrict the managers to the configured directories, and add go
and node switches for a repo that has no Go code or no frontend to test.
2026-10-03 18:42:09 +01:00
lukaszraczylo c12df22051 fix(autoupdate): make Go major updates real
A Go major update changes the import path. Without rewriting imports the
PR only added the new module to go.mod, the tests passed, and Renovate
proposed it again. Rewrite the imports with gomodUpdateImportPaths so the
build tests the actual update, and cap indirect dependencies at their
current major, which the parent module decides.
2026-10-03 18:11:40 +01:00
lukaszraczylo 46d523860a fix(autoupdate): test the default branch and handle merge conflicts
The checkout used the triggering ref, so a run started from another
branch tested a stale tree and then hit conflicts. Check out the default
branch explicitly. When a passing PR conflicts, close it and skip, and
when the merge fails, close the PR and fail the job. Only a real test
failure goes to the issue.
2026-10-03 17:52:11 +01:00
lukaszraczylo 6f8fec0956 fix(autoupdate): recreate update branches whose PR was closed
Renovate skips a branch when a PR with the same title was closed, and
adds a comment to that PR. A PR closed after a merge or by hand must not
block the next update, so set recreateWhen to always.
2026-10-03 17:13:44 +01:00
lukaszraczylo 94d1fe3409 feat(autoupdate): report failing updates with their test output
A failing update has no PR, so its test output had nowhere to go. Capture
the output of the Go and Node steps. On failure, write it as a comment on
one sticky issue, one comment per branch, updated on every run. A final
job removes comments for branches that are gone and closes the issue when
no update fails. The step is best effort and also writes the run summary.
2026-10-03 17:05:17 +01:00
lukaszraczylo dc0437151c feat(autoupdate): open a PR only after the tests pass
Renovate now prepares branches and opens no PR. Each branch is merged
into the default branch locally and tested, one at a time. Only a branch
that passes gets a PR, which merges at once, so a failing update never
shows up as a PR. Majors default to one branch each. The release is
dispatched once, after anything merged.
2026-10-03 16:52:15 +01:00
lukaszraczylo aca729f8f7 fix(autoupdate): skip major updates by default
A repo with a backlog of majors got one PR per major on the first run.
Replace include-major with major-updates: ignore (default), separate or
batch. Ignore uses a version cap, because rules that disable by update
type have no effect.
2026-10-03 16:47:43 +01:00
lukaszraczylo 97b4c0ec7e fix(autoupdate): run the Renovate workflow with the workflow token only
The workflow runs inside the calling repository, so its own token is
enough and no PAT is needed. Drop the PAT fallbacks and make admin merge
opt-in, because the workflow token cannot bypass branch protection.
A merge made with that token does not trigger push workflows, so add a
release-workflow input that dispatches the release after the merge.
2026-10-03 16:07:46 +01:00
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