Commit Graph
22 Commits
Author SHA1 Message Date
KyuubiYoru e3b687c903 fix(release): keep publication off GitHub-only actions (#1)
quality-gate / quality (push) Successful in 2m35s
quality-gate / container (push) Successful in 1m38s
immutable-release / release (push) Successful in 6m26s
upload-artifact@v4 speaks the v2 artifacts API, which this Gitea answers
only at its v3-era shape, so the sixth release attempt cleared every gate
and then aborted at "Preserve verified candidate artifacts" with the GHES
compatibility error. Move the step to v3.2.1, the commit the upstream v3
tag resolves to, which keeps name, path, if-no-files-found and
retention-days unchanged. The step also becomes continue-on-error: it is a
pre-publish debugging backstop, and publish-release.sh attaches the same
directory as Gitea release assets, so losing it must never cost a release.

Replace cosign-installer with the direct fetch the scanner already uses.
The action issues no API call on this path, but it is a composite action
resting on envsubst and a resolved runner.arch, neither of which this
runner has exercised. Asked for the version it bootstraps, it downloads
exactly cosign-linux-amd64 from the v3.0.6 release, compares it against
c956e5df..., and exits; that digest matches the release checksums file, so
fetching the asset directly verifies identically with nothing unproven
left before the one-way publication gate. The binary joins the PATH that
publish-release.sh already resolves dotnet through.
2026-08-22 22:10:00 +02:00
KyuubiYoru 562b8308b7 fix(release): run trivy from a pinned verified binary (#1)
quality-gate / quality (push) Successful in 2m47s
quality-gate / container (push) Successful in 1m51s
immutable-release / release (push) Failing after 5m40s
trivy-action checks its own repository out of github.com using the runner
token; on this self-hosted Gitea that token is a Gitea token, GitHub answers
"Bad credentials", and both scan steps die before trivy is installed.

Download the v0.69.3 release archive directly, verify it against a sha256
digest pinned inline, and unpack only the binary into .release-work/bin,
which is gitignored and excluded from the Docker build context. The gate
keeps its exact semantics: --exit-code 1, --severity HIGH,CRITICAL, table
output, unfixed vulnerabilities still in scope. The SPDX step writes the
same filename release_artifacts.py normalize-container-sbom consumes, and
TRIVY_CACHE_DIR keeps the vulnerability DB inside the work directory.
2026-08-22 21:06:21 +02:00
KyuubiYoru 4233f12368 fix(release): share sibling paths through the workspace (#1)
quality-gate / quality (push) Successful in 2m42s
quality-gate / container (push) Successful in 2m9s
immutable-release / release (push) Failing after 6m7s
The release job stopped at the bind-source gate. RUNNER_TEMP is
container-internal on this runner and no runner mount exposes it on the Docker
host, so no sibling container could ever share it; only the workspace is
host-mounted.

Move every path shared between the runner's shell steps and its sibling
containers under $GITHUB_WORKSPACE/.release-work: the release directory, the
release builder's HOME and NuGet cache, both candidate image tars, and the
container SPDX inventory. Resolution now maps the workspace alone to its host
path, and each sibling binds that source at $GITHUB_WORKSPACE and works from
there instead of /source, so a shared path is the same string on both sides of
the boundary. publish-release.sh follows with a single bind and requires the
release directory to sit inside the workspace.

Ignore .release-work in Git so the tag gate's cleanliness check stays true while
artifacts accumulate, and in Docker so artifacts written between the two
candidate builds cannot alter the build context the byte-comparison gate
depends on. Skip it in the dependency inventory as well, keeping the restored
package cache out of the license policy scan.
2026-08-22 20:31:18 +02:00
KyuubiYoru d41fa0c7e9 fix(release): repair tag gate and sibling-container publication (#1)
The release workflow could not complete on the self-hosted sibling-container
runner. Four defects are corrected together because three of them share the
same release.yml plumbing.

Exclude the tag under release from the prior-tag probe. check-release-tag.sh
already requires the tag to point at HEAD, so the unfiltered listing always
matched itself and rejected every first release before the initial baseline
branch could run.

Resolve host bind sources once per job. Steps run inside the runner container
while docker run starts siblings on the host daemon, so GITHUB_WORKSPACE and
RUNNER_TEMP are not usable as bind sources. A new step maps both to host paths
through the runner's own mounts and exports them; the build, provenance, smoke,
finalize, and publish steps reuse them, and publish-release.sh receives them by
environment instead of repeating the inspection. Bind destinations stay at the
container-internal paths so runner-side reads keep working unchanged.

Prove the signing material before the first push. Gitea package versions are
immutable, so a missing or undecryptable cosign key must abort ahead of the
require_absent gate rather than after packages and the image are published.

Authenticate the pinned consumer fetches. Both consumer repositories are
private, so anonymous fetches fail; the release token is passed to the
verification step and applied as a URL-scoped extra header through git's
config environment, keeping it out of argv, remotes, and on-disk config.
Anonymous fetch remains the fallback for local runs.
2026-08-22 19:47:57 +02:00
KyuubiYoru 589f802e2e fix(ci): smoke through service namespace (#1)
quality-gate / quality (push) Successful in 2m26s
quality-gate / container (push) Successful in 1m34s
2026-07-17 02:16:21 +02:00
KyuubiYoru 4423503bba fix(ci): reduce readiness probe pressure (#1)
quality-gate / quality (push) Successful in 2m40s
quality-gate / container (push) Failing after 4m34s
2026-07-17 02:06:39 +02:00
KyuubiYoru 74ae126ea7 fix(ci): allow cold container startup (#1)
quality-gate / quality (push) Successful in 2m39s
quality-gate / container (push) Failing after 3m11s
2026-07-17 01:59:30 +02:00
KyuubiYoru a77d4b801c fix(ci): isolate deployment smoke client (#1)
quality-gate / quality (push) Successful in 2m29s
quality-gate / container (push) Failing after 2m23s
2026-07-17 01:53:50 +02:00
KyuubiYoru 769336e424 fix(ci): run smoke on Compose network (#1)
quality-gate / quality (push) Successful in 2m37s
quality-gate / container (push) Failing after 1m39s
2026-07-17 01:42:28 +02:00
KyuubiYoru 41be7fbce5 fix(ci): join service to runner network (#1)
quality-gate / quality (push) Successful in 2m37s
quality-gate / container (push) Failing after 1m40s
2026-07-17 01:36:47 +02:00
KyuubiYoru 1bca034a52 fix(ci): route smoke through Docker gateway (#1)
quality-gate / quality (push) Successful in 2m37s
quality-gate / container (push) Failing after 1m51s
2026-07-17 01:29:30 +02:00
KyuubiYoru 8d98d888b3 fix(ci): resolve sibling-container bind sources (#1)
quality-gate / quality (push) Successful in 2m36s
quality-gate / container (push) Failing after 1m46s
2026-07-17 01:23:16 +02:00
KyuubiYoru ef07685d22 fix(ci): correct Docker inspect templates (#1)
quality-gate / quality (push) Successful in 2m36s
quality-gate / container (push) Failing after 1m42s
2026-07-17 01:14:44 +02:00
KyuubiYoru f9cb7f47e5 fix(ci): isolate Compose host ports (#1)
quality-gate / quality (push) Successful in 2m46s
quality-gate / container (push) Failing after 1m28s
2026-07-17 01:07:56 +02:00
KyuubiYoru d42e6c99a3 fix(ci): provision TestClient runtime (#1)
quality-gate / quality (push) Failing after 2m18s
quality-gate / container (push) Has been skipped
2026-07-17 00:42:16 +02:00
KyuubiYoru 99885f8c8c feat(observability): add diagnostic dashboards (#27)
quality-gate / quality (push) Failing after 1m31s
quality-gate / container (push) Has been skipped
2026-07-17 00:22:46 +02:00
KyuubiYoru cc5793f935 feat(release): add reproducible signed artifacts (#19)
quality-gate / quality (push) Failing after 1m50s
quality-gate / container (push) Has been skipped
2026-07-16 17:48:21 +02:00
KyuubiYoru 609dad7cf1 feat(operations): add capacity and resilience gates (#18) 2026-07-16 15:57:01 +02:00
KyuubiYoru 08729ae25c feat(deployment): add secure Linux runtime (#17)
quality-gate / quality (push) Failing after 1m9s
quality-gate / container (push) Has been skipped
2026-07-16 15:03:04 +02:00
KyuubiYoru 2ff7cd6d9d test(integration): add deterministic NAT topology harness (#14)
quality-gate / quality (push) Failing after 1m3s
2026-07-16 11:50:53 +02:00
KyuubiYoru 69c8b2d2bc feat: freeze v1 transport contracts (#4)
quality-gate / quality (push) Successful in 51s
Closes #4
2026-07-16 04:52:38 +02:00
KyuubiYoru e626b89909 build: bootstrap solution and quality gates (#3)
quality-gate / quality (push) Successful in 58s
Closes #3
2026-07-16 04:25:54 +02:00