Skip to content

feat(ci): GitHub Actions parity with go template (CD, security scan, codecov) - #14

Merged
bouroo merged 2 commits into
developfrom
feat/github-actions-parity
Aug 30, 2026
Merged

feat(ci): GitHub Actions parity with go template (CD, security scan, codecov)#14
bouroo merged 2 commits into
developfrom
feat/github-actions-parity

Conversation

@bouroo

@bouroo bouroo commented Aug 30, 2026

Copy link
Copy Markdown
Member

Summary

Brings the Rust template's .github up to parity with zercle-go-template/.github:

  • cd.yml (new): on v* tag push, builds and pushes multi-arch (amd64/arm64) server + migrate images to ghcr.io, mirroring the Go CD. Key divergence (documented in the file header): build-push-action can't vary build-args per platform and the Rust musl cross-compile setup is arch-specific, so each platform is built natively (arm64 leg on a native ubuntu-24.04-arm runner — no QEMU), pushed by digest, then merged into manifest lists.
  • security.yml (new): weekly Trivy SARIF scan + cargo-audit (RustSec — the counterpart of the Go template's govulncheck).
  • ci.yml: non-blocking codecov upload of the lcov report, matching the Go CI's codecov step.
  • dependabot.yml: no change — already at parity (cargo ecosystem entry).
  • All new actions are pinned by SHA, consistent with this repo's CI convention (the Go template pins by tag).

Note: the PR also carries the clean-architecture restructure commit (b8a4f05) already merged to main via #13, bringing develop up to date.

Verification

  • actionlint clean on all workflows.
  • Merge-job shell loop rehearsed locally against a stubbed docker (digest args and tag set verified under bash).
  • Per-arch build-arg names match the ARGs in Containerfile / Containerfile.migrate (RUST_MUSL_TAG, MUSL_TARGET, MUSL_GCC, MUSL_TARGET_UNDERSCORE, MUSL_TARGET_UPPER, VERSION, COMMIT_SHA, BUILD_TIME).
  • CD build/merge jobs only execute on tag push and cannot be exercised by this PR's CI — first real tag will be the true end-to-end proof.

bouroo added 2 commits August 30, 2026 12:43
…ontract

Mirrors zercle-go-template: each feature carries contract/domain/port/
application/adapter/{driving,driven}/di layers; platform/ replaces shared/ +
infrastructure/ + middleware/ + config.rs; a published api::v1 facade exposes
the inbound contract types + error codes outward-only.

- tests/architecture.rs: executable dependency gates (domain innermost,
  contract leaf, port->own domain, application->domain+port+contract,
  driving/driven adapter isolation, platform feature-agnostic, api
  facade outward-only); dedicated CI Architecture job
- platform/server decoupled from features: AppState + grpc_server() builder
  live in the shell; features hand over pre-mounted axum routers and a
  tonic Router via di::register
- application::Service speaks contract types at the boundary; wire-id
  parsing unified in the usecase (one validation path for HTTP + gRPC)
- sentinel->AppError mapping registered in feature di (RegisterSentinel
  parity), keeping the domain layer dependency-free
- ci: integration job now runs the FULL suite against postgres+valkey
  service containers (--include-ignored); all actions pinned to commit
  SHAs; persist-credentials: false on every checkout
- docs: README architecture/CI/testing sections rewritten for the new
  layout; Taskfile gains test-architecture, fixes stale --ignored
  invocations and a pre-existing YAML plain-scalar bug in the proto task

Verified: fmt=0; clippy --locked -D warnings=0; cargo test 104 passed /
0 failed (incl. live postgres+valkey e2e + HTTP integration);
architecture mutation probe red->green.

BREAKING CHANGE: module paths changed (shared/infrastructure/middleware
folded into platform/; feature modules re-layered; config moved to
platform::config).
…go template)

- cd.yml: multi-arch (amd64/arm64) server + migrate images to ghcr.io on
  v* tags. Unlike the Go CD single buildx call, each platform is built
  natively (arm64 on an arm64 runner) with per-arch musl build-args,
  pushed by digest, then merged into manifest lists.
- security.yml: weekly Trivy SARIF scan + cargo-audit (RustSec, the go
  template's govulncheck counterpart).
- ci.yml: upload lcov coverage to codecov (non-blocking), matching the
  go CI's codecov step.
- All actions pinned by SHA, consistent with the repo's existing CI.
@bouroo
bouroo merged commit 31e8085 into develop Aug 30, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant