6 Commits
Author SHA1 Message Date
maroandClaude Sonnet 5 8d88363583 Fix release deploy: use bash for the deploy step's set -o pipefail
CI / test (push) Successful in 3m14s
Release / test (push) Successful in 3m10s
Release / build-and-deploy (push) Successful in 43s
Gitea Actions runs `run:` steps with `sh` by default, which doesn't
support bash's `set -o pipefail` ("Illegal option -o pipefail",
exit 2). node:22-bookworm-slim (Debian) includes bash, so declaring
shell: bash for this step fixes it without changing the base image.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-26 01:13:45 +02:00
maroandClaude Sonnet 5 eca8e24fd9 Fix release deploy: use a Node-based image so checkout's JS action runs
CI / test (push) Successful in 2m58s
Release / test (push) Successful in 3m0s
Release / build-and-deploy (push) Failing after 36s
docker:27-cli is Alpine with no Node.js, but actions/checkout@v4 is a
JS action that needs a Node runtime in the job container — it failed
at Checkout with exit 127. node:22-bookworm-slim already has Node
(same reason the test job's node:22-alpine works); Docker CLI and
openssh-client are added via apt instead.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-26 00:42:29 +02:00
maroandClaude Sonnet 5 517f640666 Fix release deploy: give build-and-deploy a container with Docker CLI
CI / test (push) Successful in 3m5s
Release / test (push) Successful in 3m0s
Release / build-and-deploy (push) Failing after 10s
The runner (gitea-anouma-runner) runs as a Docker container itself
(gitea/runner:3) with the host's docker.sock mounted in, but no
`docker` CLI binary. A job with no `container:` runs directly inside
that minimal runner image, so `docker login/build/push` failed with
"docker: command not found". Using docker:27-cli gives the job the
CLI; the runner mounts the same host socket into it automatically
(sibling containers), and openssh-client is installed for the deploy
step's ssh call.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-26 00:33:10 +02:00
maroandClaude Sonnet 5 27aa625c0e Fix CI: run next typegen before tsc so route-aware types resolve
CI / test (push) Successful in 3m14s
Release / test (push) Successful in 3m7s
Release / build-and-deploy (push) Failing after 34s
This Next.js version generates LayoutProps/PageProps/RouteContext
into .next/types only via `next dev`, `next build`, or `next typegen`
(see node_modules/next/dist/docs .../06-cli/next.md). Typecheck ran
`tsc --noEmit` standalone before Build, so those globals didn't exist
yet, failing with "Cannot find name 'LayoutProps'".

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-25 23:46:32 +02:00
maroandClaude Sonnet 5 bd38781502 Fix CI: scope NODE_ENV=production to the build step only
CI / test (push) Failing after 1m24s
Setting it job-wide made `npm ci` treat NODE_ENV=production as an
implicit --omit=dev, silently skipping eslint/typescript/test
devDependencies and failing Lint with "eslint: not found".

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-25 23:43:12 +02:00
maroandClaude Sonnet 5 56b2a6497b Overhaul deployment to Gitea Actions CI/CD, remove update.sh
Production no longer builds from source or self-updates via cron/git pull:
setup.sh now only provisions the server once (Docker, /opt/anouma, a
restricted `anouma-deploy` SSH user whose key can only ever run
deploy.sh, generated secrets). All future deployments run through
.gitea/workflows/ci.yml (lint/typecheck/test/build on every push) and
release.yml (on a vX.Y.Z tag: build the image, push it to the Gitea
registry, then SSH-trigger deploy.sh on the server), which pulls,
migrates, restarts, healthchecks, backs up the database first, and
automatically rolls back the code on a failed healthcheck.

docker-compose.yml's app service now runs a registry image
(${ANOUMA_IMAGE}) instead of building locally.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-25 22:58:09 +02:00