The self-hosted Gitea Actions runner (act_runner with Docker-in-Docker) had several related problems that made CI jobs fail consistently:
Pushing images to our own registry initially failed due to a missing owner organization (ci) and an nginx upload limit that was too low (413 Request Entity Too Large)
The CI runner had no credentials configured for the private container registry, causing image pulls to fail with pull access denied
The docker-dind sidecar in the runner deployment was unstable (CrashLoopBackOff, cannot ping the docker daemon), and the networking configuration required for Docker-in-Docker (--network host) was not reliably applied by act_runner at the workflow level
As a result, component tests (pnpm test:component) never ran successfully on the runner
Solution
I allowed to upload bigger size of images.
Built and pushed a dedicated CI base image (node22-docker) to the Gitea container registry, including a correct Docker CLI + Compose V2 plugin via Docker's official APT repository
Added registry credentials (REGISTRY_USER / REGISTRY_TOKEN) as repository secrets and wired them into all relevant CI jobs via container.credentials
Set nginx.ingress.kubernetes.io/proxy-body-size to unlimited to allow large layer uploads to the registry
Component tests now run without Docker-in-Docker in the CI job: Dockerfile.test (Playwright-based) is built separately and pushed to the registry as luna-charts-test:v1.62.1; the component-tests job pulls this prebuilt image directly and runs the tests
This removes the need for privileged DinD sidecar containers and custom networking workarounds inside the actual test job entirely
Related issues
The following issues were fixed directly as part of this branch (no separate PR was opened per issue):
No changeset included — this is a CI/infrastructure-only change with no impact on the published luna-charts package (see CONTRIBUTING.md).
Testing
lint-and-format passing
changeset-check passing
unit-tests passing
component-tests passing (Playwright, against luna-charts-test:v1.62.1)
Follow-up
ADM/ADR documentation (Technology Architecture Section 6.6, ADR-0002) will be updated in a separate branch (docs/update-technology-architecture) to reflect the actual CI setup.
## Description
### Context
The self-hosted Gitea Actions runner (`act_runner` with Docker-in-Docker) had several related problems that made CI jobs fail consistently:
- Pushing images to our own registry initially failed due to a missing owner organization (`ci`) and an nginx upload limit that was too low (`413 Request Entity Too Large`)
- The CI runner had no credentials configured for the private container registry, causing image pulls to fail with `pull access denied`
- The `docker-dind` sidecar in the runner deployment was unstable (`CrashLoopBackOff`, `cannot ping the docker daemon`), and the networking configuration required for Docker-in-Docker (`--network host`) was not reliably applied by `act_runner` at the workflow level
- As a result, component tests (`pnpm test:component`) never ran successfully on the runner
### Solution
- I allowed to upload bigger size of images.
- Built and pushed a dedicated CI base image (`node22-docker`) to the Gitea container registry, including a correct Docker CLI + Compose V2 plugin via Docker's official APT repository
- Added registry credentials (`REGISTRY_USER` / `REGISTRY_TOKEN`) as repository secrets and wired them into all relevant CI jobs via `container.credentials`
- Set `nginx.ingress.kubernetes.io/proxy-body-size` to unlimited to allow large layer uploads to the registry
- Component tests now run **without** Docker-in-Docker in the CI job: `Dockerfile.test` (Playwright-based) is built separately and pushed to the registry as `luna-charts-test:v1.62.1`; the `component-tests` job pulls this prebuilt image directly and runs the tests
- This removes the need for privileged DinD sidecar containers and custom networking workarounds inside the actual test job entirely
### Related issues
The following issues were fixed directly as part of this branch (no separate PR was opened per issue):
- Closes #1
- Closes #2
- Closes #3
- Closes #4
- Closes #5
- Closes #6
### Changeset
No changeset included — this is a CI/infrastructure-only change with no impact on the published `luna-charts` package (see CONTRIBUTING.md).
### Testing
- [x] `lint-and-format` passing
- [x] `changeset-check` passing
- [x] `unit-tests` passing
- [x] `component-tests` passing (Playwright, against `luna-charts-test:v1.62.1`)
### Follow-up
ADM/ADR documentation (Technology Architecture Section 6.6, ADR-0002) will be updated in a separate branch (`docs/update-technology-architecture`) to reflect the actual CI setup.
Ninosaurier
added this to the v0.1.0 - Phase 1: Groundwork milestone 2026-08-04 11:07:43 +00:00
Introduce dedicated CI container images and improve the component
test execution in Gitea Actions.
The workflow now uses reproducible runner environments, private
registry authentication and executes Playwright component tests
inside a prepared container.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Description
Context
The self-hosted Gitea Actions runner (
act_runnerwith Docker-in-Docker) had several related problems that made CI jobs fail consistently:ci) and an nginx upload limit that was too low (413 Request Entity Too Large)pull access denieddocker-dindsidecar in the runner deployment was unstable (CrashLoopBackOff,cannot ping the docker daemon), and the networking configuration required for Docker-in-Docker (--network host) was not reliably applied byact_runnerat the workflow levelpnpm test:component) never ran successfully on the runnerSolution
node22-docker) to the Gitea container registry, including a correct Docker CLI + Compose V2 plugin via Docker's official APT repositoryREGISTRY_USER/REGISTRY_TOKEN) as repository secrets and wired them into all relevant CI jobs viacontainer.credentialsnginx.ingress.kubernetes.io/proxy-body-sizeto unlimited to allow large layer uploads to the registryDockerfile.test(Playwright-based) is built separately and pushed to the registry asluna-charts-test:v1.62.1; thecomponent-testsjob pulls this prebuilt image directly and runs the testsRelated issues
The following issues were fixed directly as part of this branch (no separate PR was opened per issue):
Changeset
No changeset included — this is a CI/infrastructure-only change with no impact on the published
luna-chartspackage (see CONTRIBUTING.md).Testing
lint-and-formatpassingchangeset-checkpassingunit-testspassingcomponent-testspassing (Playwright, againstluna-charts-test:v1.62.1)Follow-up
ADM/ADR documentation (Technology Architecture Section 6.6, ADR-0002) will be updated in a separate branch (
docs/update-technology-architecture) to reflect the actual CI setup.