Bump go to 1.26, update dependencies and CI, fix the e2e workflow - #126
Merged
Conversation
Raises the go directive to 1.26.0 with matching `go-version` in all three
workflows, updates the module dependencies and re-vendors them.
golangci-lint v2.7.2 refuses to load a module targeting go 1.26 ("the Go
language version used to build golangci-lint is lower than the targeted Go
version"), so the pinned version moves to v2.12.2. The newer linter reports
13 issues, triaged as follows:
- goconst (6): the occurrence counts come almost entirely from test files,
production code uses these literals 1-4 times. The config already excludes
goconst from test files, so `ignore-tests: true` makes the counting match
that intent.
- gosec G124 in tests (3+): request cookies built by `req.AddCookie`, where
Secure, HttpOnly and SameSite have no meaning. Excluded by path, following
the existing G101 exclusion for e2e.
- gosec G124 in auth.go and web.go: Secure is set from the configured
protocol because plain http is supported for local runs, and the theme
cookie is deliberately readable by JS. Both carry nolint with a reason.
- gosec G118: the shutdown deadline cannot derive from the context that
triggered the shutdown, it is already done at that point.
- gosec G705 (2): one path writes base64url ciphertext as text/plain, the
other serves an octet-stream attachment; nosniff is set for both by the
security headers middleware.
- nolintlint (1): gosec no longer reports the base62 index expression, so
its nolint directive is stale.
Adds `permissions: {contents: read}` to the build workflow, which was the
only one without a permissions block, and updates checkout, setup-go and
cache to their current majors.
The e2e workflow installed the playwright CLI from `@latest`, which now
resolves to a tag declaring the wrong module path and fails before any test
runs. It is pinned to the version selected in go.mod instead.
The upstream repository was renamed from playwright-community/playwright-go to mxschmitt/playwright-go, and the module path moved with it, so every tag from v0.6100.0 on declares a path the old import cannot resolve. That is why installing the CLI from @latest fails and the e2e workflow has been red since 1 July. The old versions are also unusable now for a second reason: up to v0.5200.1 the driver is downloaded from playwright.azureedge.net and its two mirrors, all of which return 404. Current versions take playwright-core from the npm registry instead, so the download works again. Moving to github.com/mxschmitt/playwright-go v0.6201.1 fixes both. The whole e2e suite passes locally against it. The Makefile installed the CLI the same way the workflow did, from @latest on the old path, so `make e2e-setup` failed too. Both now resolve the version from go.mod. TestTheme_Toggle needed a fix to survive: the toggle responds with HX-Refresh, and the test waited for #message, which is present both before and after the reload, so the assertion could read the old document. It now polls the attribute instead. The browser cache step also keeps the driver directory, which the newer version populates separately from the browsers.
paskal
force-pushed
the
maintenance-deps-ci
branch
from
August 20, 2026 07:46
af8adfe to
d7c3683
Compare
umputun
approved these changes
Aug 20, 2026
This was referenced Aug 20, 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.
Routine maintenance: go directive, dependencies, workflow permissions and action versions, plus the playwright move that gets the e2e workflow running again.
Go and dependencies. The go directive moves to 1.26.0, with matching
go-versionin all three workflows, dependencies are updated and re-vendored.go fix ./app/...produced no changes.Linter. golangci-lint v2.7.2 cannot load a module targeting go 1.26 (
the Go language version (go1.25) used to build golangci-lint is lower than the targeted Go version (1.26.0)), so the pinned version moves to v2.12.2. That version reports 13 issues on the current code, triaged rather than suppressed wholesale:httpsappears 4 times in production code and 43 across the package,messageandexptwice each outside the constants themselves. The config already excludes goconst from test files, soignore-tests: truemakes the counting match that intent. The alternative, reusingmsgKey/expKeyfor an API response key and a URL path segment, would conflate three different things that happen to share a spelling.req.AddCookie, where Secure, HttpOnly and SameSite have no meaning. Excluded by path, in the same style as the existing G101 exclusion for e2e.auth.goandweb.go. The session cookie setsSecurefrom the configured protocol because plain http is supported for local runs, and the theme cookie is deliberately readable from JS. Both carry a nolint with the reason.text/plain, the other serves anapplication/octet-streamattachment;nosniffis set for both by the security headers middleware.Workflows.
buildwas the only workflow without a permissions block and now haspermissions: {contents: read}. checkout, setup-go and cache move to their current majors.playwright and the e2e workflow. The suite has been failing since 1 July for two independent reasons, both fixed here.
The upstream repository was renamed from
playwright-community/playwright-gotomxschmitt/playwright-goand the module path moved with it, so every tag from v0.6100.0 on declares a path that cannot be resolved under the old import. Installing the CLI from@latesttherefore fails before any test runs:Staying on the old path is not an option either: up to v0.5200.1 the driver is downloaded from
playwright.azureedge.netand its two mirrors, and all three now return 404. That is what the e2e job hits once the module error is out of the way. Current versions takeplaywright-corefrom the npm registry instead, so the download works again.The dependency therefore moves to
github.com/mxschmitt/playwright-gov0.6201.1, and the install steps use the version selected in go.mod rather than@latest. The full e2e suite passes locally against it.TestTheme_Toggleneeded one change to survive: the toggle answers withHX-Refresh, and the test waited for#message, which is present both before and after the reload, so the assertion could read the pre-reload document and see nodata-theme. It now polls the attribute until it changes. The cache step also keeps~/.cache/ms-playwright-go, which the newer version populates separately from the browsers.Unit tests, the e2e suite and golangci-lint v2.12.2 all pass locally.