playwright-go v0.5200.1 fetches its driver from playwright.azureedge.net
and two sibling mirrors. Microsoft retired that CDN, so the e2e job died
on a 404 before it ever reached a test. The replacement host serves no
builds/driver zip for any version — 1.52 through 1.62 all answer 400 —
so there is nothing to pin or mirror to.
v0.6100.0 onwards pulls playwright-core from npm and Node from
nodejs.org instead, and moves the module path back to
github.com/mxschmitt/playwright-go. Take v0.6201.1, the latest. The
Playwright 1.52 to 1.62 jump needs no changes beyond the import path.
The CLI must match the module the tests link against, and the three
places that ran it had already drifted apart: the workflow pinned
v0.5200.1, the Makefile and scripts/e2e.sh asked for @latest. Both now
read the version from e2e/go.mod, and the workflow calls make e2e-install.
containerd needs about 10.04 seconds to boot in the runner's container
and dockerd waits exactly ten, so the first attempt always exits with
"timeout waiting for containerd to start" and the job never sees a
daemon. The second attempt wins, because containerd's files are in the
page cache by then. Measured on the runner: ready after roughly 45
seconds, with one retry.
The wait loop goes from 60 to 120 tries to cover that on a loaded host.
The forge resolves a short `uses:` against github.com, so every action
carries its real name: goreleaser/goreleaser-action, oven-sh/setup-bun,
docker/setup-qemu-action, docker/setup-buildx-action.
Jobs run on ubuntu-latest, answered with the catthehacker act image, so
the ci-base container is gone. That image carries none of the tooling
ci-base provided, so each job installs what it calls: make everywhere,
build-essential for the CGO test job, upx-ucl for the goreleaser `upx`
block, bun for the webapp build and goreleaser itself for `make build`.
Playwright installs with --with-deps again now that the job has sudo.
DinD is required for testcontainers but breaks apt-based --with-deps;
install chromium only after the daemon is ready.
Co-authored-by: Cursor <cursoragent@cursor.com>
Drop DinD service (breaks apt/playwright in the job container) and the
workflow env overrides that masked the e2e script config. Default Ryuk
disabled in e2e.sh for CI friendliness.
Co-authored-by: Cursor <cursoragent@cursor.com>
The --with-deps flag fails in the DinD job container; install Ubuntu
packages explicitly and download chromium from the e2e module context.
Co-authored-by: Cursor <cursoragent@cursor.com>
Mounting the host socket via container options is blocked by the runner,
so run a dind service and point DOCKER_HOST at it instead.
Co-authored-by: Cursor <cursoragent@cursor.com>
The e2e job runs testcontainers inside a ci-base container, which needs
the host Docker socket mounted. Also preserve TESTCONTAINERS_RYUK_DISABLED
from CI env and wait for archive UI before asserting in archive tests.
Co-authored-by: Cursor <cursoragent@cursor.com>
Bump ci-base to 1.1.0 and actions to v7, add Docker buildx setup for
releases, restore dockers_v2 for multi-arch images, and set testcontainers
env vars on the e2e job.
Co-authored-by: Cursor <cursoragent@cursor.com>
The test web server and Hako container previously ran on isolated Docker
networks, so Hako could not fetch URLs like http://localhost:32865 (the
host-mapped port) from inside its container. Most tests passed vacuously
because they only checked DOM containers; the Archive tests failed
because they tried to click an actual link item that was never created.
Changes:
- Add a shared Docker network so both containers can communicate by alias
- Test web server registers as hako-testserver and returns that as its URL
- Hako container joins the same network and can resolve the alias
- CreateLink now navigates to /home before each call so it can be invoked
multiple times in a row (the form redirects to /links after submission)
- IsVisible uses .First() to avoid Playwright strict-mode errors when a
selector matches multiple elements
- Archive tests use .link-item instead of the never-matching
a[href*='/links/'] selector
- Bump Dockerfile.e2e Alpine to 3.23 to match the production Containerfile
Replace Woodpecker CI pipelines with GitHub/Forgejo Actions workflows
using the ci-base:1.0.0 image. Simplify Makefile by removing unused
variables and adopting a cleaner help target. Switch goreleaser from
dockers_v2 to dockers + docker_manifests for per-arch image builds.
Update Containerfile to Alpine 3.23 and fix nfpm description.