From fea02cd09f801794c9ff881b7da043de11903e6d Mon Sep 17 00:00:00 2001 From: Corey Leath Date: Fri, 21 Aug 2026 01:18:57 -0400 Subject: [PATCH 1/3] fix: publish GHCR image with lowercase name --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 1faff34..395e230 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -222,7 +222,7 @@ jobs: - uses: docker/metadata-action@v5 id: meta with: - images: ghcr.io/${{ github.repository }} + images: ghcr.io/coreyleath-code/helixagent tags: | type=semver,pattern={{version}} type=semver,pattern={{major}}.{{minor}} From 64ebec144f447737f2a4a3c994498c82b3aed555 Mon Sep 17 00:00:00 2001 From: Corey Leath Date: Fri, 21 Aug 2026 01:19:06 -0400 Subject: [PATCH 2/3] ci: add GHCR recovery publish workflow --- .../workflows/publish-existing-container.yml | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 .github/workflows/publish-existing-container.yml diff --git a/.github/workflows/publish-existing-container.yml b/.github/workflows/publish-existing-container.yml new file mode 100644 index 0000000..5071dab --- /dev/null +++ b/.github/workflows/publish-existing-container.yml @@ -0,0 +1,63 @@ +name: Publish Existing Release Container + +on: + workflow_dispatch: + inputs: + tag: + description: Existing semantic-version tag to publish + required: true + default: v1.1.0 + +permissions: + contents: read + packages: write + +jobs: + publish: + name: Publish GHCR image for existing release + runs-on: ubuntu-latest + steps: + - name: Validate requested tag + env: + TAG: ${{ inputs.tag }} + run: | + if [[ ! "$TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + echo "Tag must match vX.Y.Z: $TAG" + exit 1 + fi + + - uses: actions/checkout@v7 + with: + ref: ${{ inputs.tag }} + fetch-depth: 0 + + - name: Verify annotated tag and package version + env: + TAG: ${{ inputs.tag }} + run: | + git cat-file -e "${TAG}^{tag}" + version="${TAG#v}" + grep -Fq "version = \"$version\"" pyproject.toml + echo "VERSION=$version" >> "$GITHUB_ENV" + + - name: Verify GitHub Release exists + env: + GH_TOKEN: ${{ github.token }} + TAG: ${{ inputs.tag }} + run: gh release view "$TAG" --repo "${{ github.repository }}" >/dev/null + + - uses: docker/login-action@v4 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build and publish validated container + uses: docker/build-push-action@v6 + with: + context: . + push: true + tags: | + ghcr.io/coreyleath-code/helixagent:${{ env.VERSION }} + ghcr.io/coreyleath-code/helixagent:${{ inputs.tag }} + ghcr.io/coreyleath-code/helixagent:latest From 60a19a58bdef80fc9488750c389081d2d406a9f3 Mon Sep 17 00:00:00 2001 From: Corey Leath Date: Fri, 21 Aug 2026 01:19:42 -0400 Subject: [PATCH 3/3] docs: organize badge block and hide unpublished package --- README.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index ef6eca8..3d98884 100644 --- a/README.md +++ b/README.md @@ -6,12 +6,14 @@

Latest release - GHCR package + MIT license + Last commit +

+ +

Enterprise CI Security and supply chain Release validation - MIT license - Last commit

@@ -298,4 +300,4 @@ docs/ Engineering and deployment notes HelixAgent is an engineering portfolio project and reference implementation, not a managed commercial AI platform. The repository focuses on modularity, graceful degradation, observable services, automated validation, and secure delivery. -See [Autonomous runtime](docs/AUTONOMY.md), [Security](SECURITY.md), [Contributing](CONTRIBUTING.md), [Changelog](CHANGELOG.md), and [deployment hygiene](docs/L6_DEPLOYMENT_HYGIENE.md). \ No newline at end of file +See [Autonomous runtime](docs/AUTONOMY.md), [Security](SECURITY.md), [Contributing](CONTRIBUTING.md), [Changelog](CHANGELOG.md), and [deployment hygiene](docs/L6_DEPLOYMENT_HYGIENE.md).