Skip to content

Commit 39d3ae1

Browse files
mchmarnyclaude
andcommitted
revert: restore flat namespace for container images
GHCR nested namespaces require package-level write permissions that aren't automatically granted even with repository write access. Revert to flat namespace to unblock CI releases. Changes: - ghcr.io/nvidia/eidos/eidos → ghcr.io/nvidia/eidos - ghcr.io/nvidia/eidos/eidosd → ghcr.io/nvidia/eidosd - Update IMAGE_REGISTRY and KO_DOCKER_REPO to ghcr.io/nvidia Co-Authored-By: Claude Opus 4.5 <[email protected]>
1 parent bc0be54 commit 39d3ae1

File tree

25 files changed

+84
-84
lines changed

25 files changed

+84
-84
lines changed

.github/actions/go-build-release/action.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ runs:
5151
env:
5252
GITHUB_TOKEN: ${{ github.token }}
5353
# Force lowercase registry path to avoid ko's uppercase character rejection
54-
KO_DOCKER_REPO: ${{ inputs.ko_docker_repo || 'ghcr.io/nvidia/eidos' }}
54+
KO_DOCKER_REPO: ${{ inputs.ko_docker_repo || 'ghcr.io/nvidia' }}
5555
run: |
5656
set -euo pipefail
5757
make release

.github/copilot-instructions.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -551,7 +551,7 @@ eidos bundle -r recipe.yaml -b gpu-operator,network-operator \
551551

552552
- **Kubernetes**: Singleton client via `pkg/k8s/client.GetKubeClient()`
553553
- **NVIDIA Operators**: GPU Operator, Network Operator, NIM Operator, Nsight Operator
554-
- **Container Images**: ghcr.io/nvidia/eidos/eidos, ghcr.io/nvidia/eidos/eidosd
554+
- **Container Images**: ghcr.io/nvidia/eidos, ghcr.io/nvidia/eidosd
555555
- **Observability**: Prometheus metrics at `/metrics`, structured JSON logs to stderr
556556

557557
### Key Links
@@ -988,7 +988,7 @@ jobs:
988988
uses: ./.github/actions/go-build-release
989989
- uses: ./.github/actions/attest-image-from-tag
990990
with:
991-
image_name: 'ghcr.io/nvidia/eidos/eidos'
991+
image_name: 'ghcr.io/nvidia/eidos'
992992
image_tag: ${{ github.ref_name }}
993993
- if: steps.release.outputs.release_outcome == 'success'
994994
uses: ./.github/actions/cloud-run-deploy
@@ -998,7 +998,7 @@ jobs:
998998
- **SLSA Build Level 3**: GitHub OIDC attestations
999999
- **SBOMs**: SPDX format via Syft (containers) and GoReleaser (binaries)
10001000
- **Signing**: Cosign keyless signing (Fulcio + Rekor)
1001-
- **Verification**: `gh attestation verify oci://ghcr.io/nvidia/eidos/eidos:${TAG}`
1001+
- **Verification**: `gh attestation verify oci://ghcr.io/nvidia/eidos:${TAG}`
10021002

10031003
For detailed GitHub Actions architecture, see [actions/README.md](actions/README.md)
10041004

.github/workflows/on-tag.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,14 +133,14 @@ jobs:
133133
- name: Attest eidos image
134134
uses: ./.github/actions/attest-image-from-tag
135135
with:
136-
image_name: ghcr.io/nvidia/eidos/eidos
136+
image_name: ghcr.io/nvidia/eidos
137137
tag: ${{ github.ref_name }}
138138
crane_version: ${{ steps.versions.outputs.crane }}
139139

140140
- name: Attest eidosd image
141141
uses: ./.github/actions/attest-image-from-tag
142142
with:
143-
image_name: ghcr.io/nvidia/eidos/eidosd
143+
image_name: ghcr.io/nvidia/eidosd
144144
tag: ${{ github.ref_name }}
145145
crane_version: ${{ steps.versions.outputs.crane }}
146146

.goreleaser.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ kos:
9494
- id: eidos
9595
build: eidos
9696
repositories:
97-
- ghcr.io/nvidia/eidos/eidos
97+
- ghcr.io/nvidia/eidos
9898
base_image: nvcr.io/nvidia/cuda:13.1.0-runtime-ubuntu24.04
9999
platforms:
100100
- linux/amd64
@@ -108,7 +108,7 @@ kos:
108108
- id: eidosd
109109
build: eidosd
110110
repositories:
111-
- ghcr.io/nvidia/eidos/eidosd
111+
- ghcr.io/nvidia/eidosd
112112
base_image: gcr.io/distroless/static:nonroot
113113
platforms:
114114
- linux/amd64

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
REPO_NAME := eidos
55
VERSION ?= $(shell git describe --tags --abbrev=0 2>/dev/null || echo "v0.0.0")
6-
IMAGE_REGISTRY ?= ghcr.io/nvidia/eidos
6+
IMAGE_REGISTRY ?= ghcr.io/nvidia
77
IMAGE_TAG ?= latest
88
YAML_FILES := $(shell find . -type f \( -iname "*.yml" -o -iname "*.yaml" \) ! -path "./examples/*" ! -path "./bundles/*" ! -path "./.flox/*")
99
COMMIT := $(shell git rev-parse HEAD)

RELEASING.md

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -83,12 +83,12 @@ Built via GoReleaser for multiple platforms:
8383

8484
### Container Images
8585

86-
Published to GitHub Container Registry (`ghcr.io/nvidia/eidos/`):
86+
Published to GitHub Container Registry (`ghcr.io/nvidia/`):
8787

8888
| Image | Base | Description |
8989
|-------|------|-------------|
90-
| `eidos/eidos` | `nvcr.io/nvidia/cuda:13.1.0-runtime-ubuntu24.04` | CLI with CUDA runtime |
91-
| `eidos/eidosd` | `gcr.io/distroless/static:nonroot` | Minimal API server |
90+
| `eidos` | `nvcr.io/nvidia/cuda:13.1.0-runtime-ubuntu24.04` | CLI with CUDA runtime |
91+
| `eidosd` | `gcr.io/distroless/static:nonroot` | Minimal API server |
9292

9393
Tags: `latest`, `v1.2.3`
9494

@@ -119,15 +119,15 @@ All releases must pass:
119119
export TAG=$(curl -s https://api.github.com/repos/NVIDIA/eidos/releases/latest | jq -r '.tag_name')
120120

121121
# Verify with GitHub CLI (recommended)
122-
gh attestation verify oci://ghcr.io/nvidia/eidos/eidos:${TAG} --owner nvidia
123-
gh attestation verify oci://ghcr.io/nvidia/eidos/eidosd:${TAG} --owner nvidia
122+
gh attestation verify oci://ghcr.io/nvidia/eidos:${TAG} --owner nvidia
123+
gh attestation verify oci://ghcr.io/nvidia/eidosd:${TAG} --owner nvidia
124124

125125
# Verify with Cosign
126126
cosign verify-attestation \
127127
--type spdxjson \
128128
--certificate-oidc-issuer https://token.actions.githubusercontent.com \
129129
--certificate-identity-regexp 'https://github.com/NVIDIA/eidos/.github/workflows/.*' \
130-
ghcr.io/nvidia/eidos/eidos:${TAG}
130+
ghcr.io/nvidia/eidos:${TAG}
131131
```
132132

133133
### Verify Binary Checksums
@@ -144,14 +144,14 @@ sha256sum -c checksums.txt --ignore-missing
144144

145145
```bash
146146
# Pull container images
147-
docker pull ghcr.io/nvidia/eidos/eidos:${TAG}
148-
docker pull ghcr.io/nvidia/eidos/eidosd:${TAG}
147+
docker pull ghcr.io/nvidia/eidos:${TAG}
148+
docker pull ghcr.io/nvidia/eidosd:${TAG}
149149

150150
# Test CLI
151-
docker run --rm ghcr.io/nvidia/eidos/eidos:${TAG} --version
151+
docker run --rm ghcr.io/nvidia/eidos:${TAG} --version
152152

153153
# Test API server
154-
docker run --rm -p 8080:8080 ghcr.io/nvidia/eidos/eidosd:${TAG} &
154+
docker run --rm -p 8080:8080 ghcr.io/nvidia/eidosd:${TAG} &
155155
curl http://localhost:8080/health
156156
```
157157

SECURITY.md

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ export TAG=$(curl -s https://api.github.com/repos/NVIDIA/eidos/releases/latest |
6767
echo "Using tag: $TAG"
6868

6969
# Resolve tag to immutable digest (requires crane or docker)
70-
export IMAGE="ghcr.io/nvidia/eidos/eidos"
70+
export IMAGE="ghcr.io/nvidia/eidos"
7171
export DIGEST=$(crane digest "${IMAGE}:${TAG}" 2>/dev/null || docker inspect "${IMAGE}:${TAG}" --format='{{index .RepoDigests 0}}' | cut -d'@' -f2)
7272
echo "Resolved digest: $DIGEST"
7373

@@ -84,12 +84,12 @@ export IMAGE_DIGEST="${IMAGE}@${DIGEST}"
8484
gh attestation verify oci://${IMAGE_DIGEST} --owner nvidia
8585

8686
# Verify the eidosd image
87-
export IMAGE_API="ghcr.io/nvidia/eidos/eidosd"
87+
export IMAGE_API="ghcr.io/nvidia/eidosd"
8888
export DIGEST_API=$(crane digest "${IMAGE_API}:${TAG}")
8989
gh attestation verify oci://${IMAGE_API}@${DIGEST_API} --owner nvidia
9090

9191
# Note: You can still use tags, but tools may show warnings about mutability
92-
# gh attestation verify oci://ghcr.io/nvidia/eidos/eidos:${TAG} --owner nvidia
92+
# gh attestation verify oci://ghcr.io/nvidia/eidos:${TAG} --owner nvidia
9393
```
9494

9595
**Method 2: Cosign (SBOM Attestations)**
@@ -147,7 +147,7 @@ Export variables for the image you want to verify:
147147
# Get latest release tag
148148
export TAG=$(curl -s https://api.github.com/repos/NVIDIA/eidos/releases/latest | jq -r '.tag_name')
149149

150-
export IMAGE="ghcr.io/nvidia/eidos/eidos"
150+
export IMAGE="ghcr.io/nvidia/eidos"
151151
export IMAGE_TAG="$IMAGE:$TAG"
152152

153153
# Get digest for the tag (requires crane or docker)
@@ -252,7 +252,7 @@ Generated by Syft/Anchore, attached as Cosign attestations in SPDX v2.3 JSON for
252252
```shell
253253
# Get latest release tag and resolve digest
254254
export TAG=$(curl -s https://api.github.com/repos/NVIDIA/eidos/releases/latest | jq -r '.tag_name')
255-
export IMAGE="ghcr.io/nvidia/eidos/eidosd"
255+
export IMAGE="ghcr.io/nvidia/eidosd"
256256
export DIGEST=$(crane digest "${IMAGE}:${TAG}")
257257
export IMAGE_DIGEST="${IMAGE}@${DIGEST}"
258258

@@ -343,7 +343,7 @@ SLSA is a security framework that protects against supply chain attacks by ensur
343343
```shell
344344
# Get latest release tag and resolve digest
345345
export TAG=$(curl -s https://api.github.com/repos/NVIDIA/eidos/releases/latest | jq -r '.tag_name')
346-
export IMAGE="ghcr.io/nvidia/eidos/eidos"
346+
export IMAGE="ghcr.io/nvidia/eidos"
347347
export DIGEST=$(crane digest "${IMAGE}:${TAG}")
348348
export IMAGE_DIGEST="${IMAGE}@${DIGEST}"
349349

@@ -427,7 +427,7 @@ metadata:
427427
name: eidos-images-require-attestation
428428
spec:
429429
images:
430-
- glob: "ghcr.io/nvidia/eidos/eidos*"
430+
- glob: "ghcr.io/nvidia/eidos*"
431431
authorities:
432432
- keyless:
433433
url: https://fulcio.sigstore.dev
@@ -462,7 +462,7 @@ spec:
462462
- Pod
463463
verifyImages:
464464
- imageReferences:
465-
- "ghcr.io/nvidia/eidos/eidos*"
465+
- "ghcr.io/nvidia/eidos*"
466466
attestations:
467467
- predicateType: https://slsa.dev/provenance/v1
468468
attestors:
@@ -479,7 +479,7 @@ spec:
479479
export TAG=$(curl -s https://api.github.com/repos/NVIDIA/eidos/releases/latest | jq -r '.tag_name')
480480

481481
# This should succeed (image with valid attestation)
482-
kubectl run test-valid --image=ghcr.io/nvidia/eidos/eidos:${TAG}
482+
kubectl run test-valid --image=ghcr.io/nvidia/eidos:${TAG}
483483

484484
# This should fail (unsigned image)
485485
kubectl run test-invalid --image=nginx:latest
@@ -512,7 +512,7 @@ gh run view 20642050863 --repo NVIDIA/eidos --log
512512

513513
```shell
514514
# Search Rekor for attestations
515-
rekor-cli search --artifact ghcr.io/nvidia/eidos/eidos:v0.8.12
515+
rekor-cli search --artifact ghcr.io/nvidia/eidos:v0.8.12
516516

517517
# Get entry details
518518
rekor-cli get --uuid <entry-uuid>

deployments/eidos-agent/2-job.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ spec:
5656
fsGroupChangePolicy: "OnRootMismatch"
5757
containers:
5858
- name: eidos
59-
image: ghcr.io/nvidia/eidos/eidos:latest
59+
image: ghcr.io/nvidia/eidos:latest
6060
command: ["/bin/sh", "-c"]
6161
env:
6262
- name: EIDOS_LOG_PREFIX

docs/architecture/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1160,14 +1160,14 @@ Checkout → Validate (Go CI) → Build & Release → Attest Images → Deploy
11601160
export TAG=$(curl -s https://api.github.com/repos/NVIDIA/eidos/releases/latest | jq -r '.tag_name')
11611161
11621162
# Verify image attestations
1163-
gh attestation verify oci://ghcr.io/nvidia/eidos/eidos:${TAG} --owner nvidia
1163+
gh attestation verify oci://ghcr.io/nvidia/eidos:${TAG} --owner nvidia
11641164
11651165
# Verify with Cosign
11661166
cosign verify-attestation \
11671167
--type spdxjson \
11681168
--certificate-oidc-issuer https://token.actions.githubusercontent.com \
11691169
--certificate-identity-regexp 'https://github.com/NVIDIA/eidos/.github/workflows/.*' \
1170-
ghcr.io/nvidia/eidos/eidos:${TAG}
1170+
ghcr.io/nvidia/eidos:${TAG}
11711171
```
11721172

11731173
**Transparency**:

docs/architecture/api-server.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -544,7 +544,7 @@ flowchart LR
544544
C --> D["Build Image<br/>(ko + goreleaser)"]
545545
D --> E["Generate SBOM<br/>(Syft)"]
546546
E --> F["Sign Attestations<br/>(Cosign keyless)"]
547-
F --> G["Push to GHCR<br/>ghcr.io/nvidia/eidos/eidosd"]
547+
F --> G["Push to GHCR<br/>ghcr.io/nvidia/eidosd"]
548548
G --> H["Deploy to Cloud Run<br/>(WIF auth)"]
549549
H --> I["Health Check<br/>Verification"]
550550
```
@@ -553,7 +553,7 @@ flowchart LR
553553
- **SLSA Build Level 3** compliance
554554
- **Signed SBOMs** in SPDX format
555555
- **Attestations** logged in Rekor transparency log
556-
- **Verification**: `gh attestation verify oci://ghcr.io/nvidia/eidos/eidosd:TAG --owner nvidia`
556+
- **Verification**: `gh attestation verify oci://ghcr.io/nvidia/eidosd:TAG --owner nvidia`
557557

558558
**Monitoring:**
559559
- Health endpoint: `/health`
@@ -654,7 +654,7 @@ spec:
654654
spec:
655655
containers:
656656
- name: server
657-
image: ghcr.io/nvidia/eidos/eidosd:v1.0.0
657+
image: ghcr.io/nvidia/eidosd:v1.0.0
658658
ports:
659659
- containerPort: 8080
660660
name: http
@@ -1045,7 +1045,7 @@ func TestRecipeHandler(t *testing.T) {
10451045
export TAG=$(curl -s https://api.github.com/repos/NVIDIA/eidos/releases/latest | jq -r '.tag_name')
10461046
10471047
# Verify attestations
1048-
gh attestation verify oci://ghcr.io/nvidia/eidos/eidosd:${TAG} --owner nvidia
1048+
gh attestation verify oci://ghcr.io/nvidia/eidosd:${TAG} --owner nvidia
10491049
```
10501050

10511051
For detailed CI/CD architecture, see [../CONTRIBUTING.md#github-actions--cicd](../../CONTRIBUTING.md#github-actions--cicd) and [README.md](README.md#cicd-architecture).
@@ -1401,7 +1401,7 @@ spec:
14011401
fsGroup: 1000
14021402
containers:
14031403
- name: api-server
1404-
image: ghcr.io/nvidia/eidos/eidosd:latest # Or use specific tag like v0.8.12
1404+
image: ghcr.io/nvidia/eidosd:latest # Or use specific tag like v0.8.12
14051405
ports:
14061406
- name: http
14071407
containerPort: 8080

0 commit comments

Comments
 (0)