Problem
Releases need reproducible artefacts (image, SBOM) and a published GitHub Release derived from the draft.
Proposed solution
Port .github/workflows/release.yml: tag pattern v*.*.*. Steps: Docker build with version tag and latest, CycloneDX SBOM via uvx --from cyclonedx-bom==7.3.0, GitHub Release publish (promote draft or create with auto-generated notes), attach sbom.json. Permissions: contents: write, packages: write. Pin all action SHAs.
Acceptance criteria
Priority rationale
Medium: only fires at release time; safe to land later. But the SBOM story is a strong portfolio detail.
Depends on
#6, #12
Problem
Releases need reproducible artefacts (image, SBOM) and a published GitHub Release derived from the draft.
Proposed solution
Port
.github/workflows/release.yml: tag patternv*.*.*. Steps: Docker build with version tag andlatest, CycloneDX SBOM viauvx --from cyclonedx-bom==7.3.0, GitHub Release publish (promote draft or create with auto-generated notes), attachsbom.json. Permissions:contents: write,packages: write. Pin all action SHAs.Acceptance criteria
v0.1.0tag triggers the workflow.ghcr.io/constk/harness-python-react:0.1.0and:latestpublished.sbom.jsonattached to the release.Priority rationale
Medium: only fires at release time; safe to land later. But the SBOM story is a strong portfolio detail.
Depends on
#6, #12