Skip to content

Lab 10: tag to CI to ghcr release + Hugging Face Spaces deploy#1391

Open
rikire wants to merge 10 commits into
inno-devops-labs:mainfrom
rikire:feature/lab10
Open

Lab 10: tag to CI to ghcr release + Hugging Face Spaces deploy#1391
rikire wants to merge 10 commits into
inno-devops-labs:mainfrom
rikire:feature/lab10

Conversation

@rikire

@rikire rikire commented Jul 7, 2026

Copy link
Copy Markdown

Goal

On a semver tag, CI publishes QuickNotes to ghcr.io; the image runs publicly on Hugging Face Spaces.

Changes

  • .github/workflows/release.yml: tag (v*) -> checkout/buildx/login -> build ./app (linux/amd64) -> push ghcr.io/rikire/devops-intro/quicknotes:+latest. permissions contents:read + packages:write only; third-party actions SHA-pinned.
  • cloud/: Space Dockerfile (pulls the immutable ghcr tag), README.md (frontmatter sdk: docker, app_port: 8080), teardown.md.
  • submissions/lab10.md: release evidence (public no-auth pull + digest), Space URL + /health, warm p50 and cold-start samples, design answers a–f.

Testing

  • Tag v0.1.0 triggered the release run; image pulls with no credentials from a clean state (digest be82c125…) and serves /health 200 with the Lab 9 security headers.
  • HF Space live at https://rikire-quicknotes.hf.space; /health + /notes work; warm ~1.5s p50, cold wake ~10–15s.

Checklist

  • Title is a clear sentence (≤ 70 chars)
  • Commits are signed
  • submissions/lab10.md updated

rikire added 10 commits June 9, 2026 20:39
Signed-off-by: rikire <rizireY@yandex.ru>
Signed-off-by: rikire <rizireY@yandex.ru>
Multi-stage Dockerfile: golang:1.24 builder -> distroless/static:nonroot,
static stripped binary, nonroot, 8.56 MB (<=25). compose.yaml with named
volume, self-healthcheck (binary dual-mode for shell-less distroless), env,
restart policy, and the 6 security defaults (read-only, cap_drop ALL,
no-new-privileges, tmpfs). main.go gains a 'healthcheck' subcommand.

Signed-off-by: rikire <rizireY@yandex.ru>
…rs middleware fix

Trivy image/fs/config scans + CycloneDX SBOM, every HIGH/CRITICAL triaged.
Fixed 11 Go stdlib CVEs by bumping the builder to golang:1.25 (rescan: 0
HIGH/CRITICAL). ZAP baseline triaged; added a router-level securityHeaders
middleware (nosniff, strict CSP, X-Frame-Options, no-store) + guarding unit
test — removes the X-Content-Type-Options and cacheable-content findings.

Signed-off-by: rikire <rizireY@yandex.ru>
release.yml builds app/ on a v* tag and pushes ghcr.io/.../quicknotes with
{version}+latest (packages:write only, SHA-pinned actions). cloud/ holds the HF
Space Dockerfile (pulls the ghcr image) + README frontmatter (app_port 8080).

Signed-off-by: rikire <rizireY@yandex.ru>
Signed-off-by: rikire <rizireY@yandex.ru>
Signed-off-by: rikire <rizireY@yandex.ru>
Signed-off-by: rikire <rizireY@yandex.ru>
…plete

Signed-off-by: rikire <rizireY@yandex.ru>
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