Repository navigation
Publish the server image as ghcr.io/<owner>/drome/drome-server - #6
Draft
JacobStephens2 wants to merge 7 commits into
Draft
JacobStephens2 wants to merge 7 commits into
JacobStephens2 wants to merge 7 commits into
Conversation
server-deploy's build pushes ghcr.io/jacobstephens2/drome-server and dies with permission_denied: read_package. The package already exists and is private. This workflow asks the Actions token what it can see, and tries a fresh package name with and without provenance.
/user/packages is the token's own user, which is not the image owner. Quote the probe label so the Dockerfile parses.
A fresh package name publishes. The real name still 401s as a private package the Actions token cannot see. Try that name with the source label, first without provenance and then with it.
The single-segment name drome-server is a private package this repo cannot read. A name under the repo path is still free.
ghcr.io/jacobstephens2/drome-server is already a private package, and this repo's GITHUB_TOKEN cannot read or push it (server-deploy run 39736182790, permission_denied: read_package). A fresh name under the repo path, labelled org.opencontainers.image.source, links to the repo and accepts the push (run 39742288182). The tag stays the git SHA. The probe workflow is gone. Fixes #5
…g to fix on the branch) 2026-10-22T08:24:41Z, host stephens. Uncommitted work at the time of failure is included in this commit.
JacobStephens2
marked this pull request as draft
October 22, 2026 08:24
JacobStephens2
marked this pull request as ready for review
October 22, 2026 16:55
…g to fix on the branch) 2026-10-22T17:15:42Z, host stephens. Uncommitted work at the time of failure is included in this commit.
JacobStephens2
marked this pull request as draft
October 22, 2026 17:15
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
The
buildjob on main compiles, then GHCR rejects the push. Run 39736182790, at e64e652, logged in and uploaded the layers, then failed withdenied: permission_denied: read_packageonghcr.io/jacobstephens2/drome-server:<sha>. That name is already a private package, and this repo'sGITHUB_TOKENcannot read it or delete it.The workflow now pushes
ghcr.io/<owner>/drome/drome-server, tagged with the git SHA, and setsorg.opencontainers.image.sourceso GHCR links the package to this repo. Probe run 39742288182 pushed that nested name with provenance left on, then deleted the probe package. The tag is still the git SHA, never:latest.packages: writestays. The probe workflow is not in this tree.Seam: the image
.github/workflows/server-deploy.ymlpushes to GHCR, checked bytests/deploy/ghcr_image_test.sh.Evidence
buildjob. The log ends withfailed to push ghcr.io/jacobstephens2/drome-server:e64e652e4b43f3d6a75fceb72a679c3f33a7e6f7: denied: permission_denied: read_package. fmt, clippy, andcargo testin that run were green. The deploy job was skipped.After: On da9f554, deploy-ci https://github.com/JacobStephens2/drome/actions/runs/39747530735 and server-ci https://github.com/JacobStephens2/drome/actions/runs/39747530808 both passed. Both run
tests/deploy/ghcr_image_test.sh. Probe run https://github.com/JacobStephens2/drome/actions/runs/39742288182 pushedghcr.io/jacobstephens2/drome/drome-server:ci-probe.server-deployitself does not run until this is on main.Android
buildis red on this head (https://github.com/JacobStephens2/drome/actions/runs/39747530788).android-ci.ymlstarts that job on any pull request that touchesserver/**. This branch does not changeandroid/or those tests. Issue #5 names the server-deploybuildjob, not the Android job.Merge Danger
Door: one-way for the old package name
Merging creates
ghcr.io/jacobstephens2/drome/drome-serveron the next push to main that runsserver-deploy, and links it here. Pointing the workflow back atghcr.io/jacobstephens2/drome-serverdoes not make that push work. The new name is reversible until something else pins it: the probe run published it and then deleted that package. Nothing deploys on this merge.DEPLOY_ENABLEDis not set, and the deploy job stays skipped. The linked package on this public repo is public. The source is already public. The old privatedrome-serverpackage stays where it is. This token cannot remove it.Blast Radius: the next main image build
deploy/deploy.shalready accepts a slash in the image ref. Compose still takes${IMAGE_TAG}from the environment. No Rust behaviour changes.Unaddressed findings
Standards
Duplicated Code (judgement call). The OCI source label is spelled two ways:
org.opencontainers.image.source=https://github.com/${{ github.repository }}on thelabels:input in.github/workflows/server-deploy.yml(line 107), andLABEL org.opencontainers.image.source=https://github.com/JacobStephens2/dromeinserver/Dockerfile(line 36). The finding says they agree only whilegithub.repositoryisJacobStephens2/drome, and thattests/deploy/ghcr_image_test.shfails the build on any other repository name. It did not include a command that fails on this repo.Declined. They name the same repository.
planning/decisions.mdrecords the repo asgithub.com/JacobStephens2/drome, and on this repo${{ github.repository }}isJacobStephens2/drome. The workflow label is whatdocker/build-push-actionstamps on the image it pushes, and that value has to stay an Actions expression. The Dockerfile cannot expand that expression, so the two sites cannot share one string. This is not a behaviour failure on this repo.Duplicated Code (judgement call). The image name is echoed once per job, at
.github/workflows/server-deploy.ymllines 91 and 123, andtests/deploy/ghcr_image_test.shrequires that count to stay 2. The finding says extracting one definition would fail that test.Declined. The split is the pre-existing rule in
.github/workflows/server-deploy.ymllines 47-48:IMAGEis computed per job because GHCR requires a lowercase owner and Actions expressions have nolower(). One shared expression cannot replace both lines. The test locks the two copies so they cannot drift. This is not a behaviour failure.Spec
No findings.
Security
No findings.
Security review outcome
No unaddressed introduced findings.
CI notes
Android
buildfails onDromeScreensDarkSnapshotTest.onboardingandDromeScreensLightSnapshotTest.onboarding(java.lang.AssertionErroratImageUtils.kt:124, run 39747530788 job 119719623627). That failure is already on main's Android tree: pull request #4 changes onlyserver/src/auth.rsandserver/tests/server_test.rsand fails the same two tests (run 39747547343 job 119719680654). This branch does not changeandroid/or.github/workflows/android-ci.yml. The job runs here because that workflow path-filtersserver/**and this branch editsserver/Dockerfile.Review coverage
Standards and Spec both read every file in
git diff --name-only main...HEAD:.github/workflows/deploy-ci.yml.github/workflows/server-ci.yml.github/workflows/server-deploy.ymldeploy/compose.ymldeploy/deploy.shserver/Dockerfiletests/deploy/ghcr_image_test.shNo changed file was left unread. No generated output was excluded.
Closes #5
Built with grok · grok-4.7 · xhigh