thinkpad image: build once, promote on merge; fix image-rebuild hang #140
Open
glen
wants to merge 1 commit from
thinkpad-image-promote into main
pull from: thinkpad-image-promote
merge into: chad:main
chad:main
chad:think-umbriel-dms
chad:dsh-pnpm-store
chad:dsh-pnpm-path
chad:hermes-general-only
chad:hermes-statedir-tmpfiles
chad:hermes-fresh-start
chad:dsh-proxy-socket-cycle
chad:tansweat-podman-api
chad:tansweat-preview-domain-env
chad:tansweat-preview-wildcard
chad:tansweat-backup-fix
chad:tansweat-deploy
chad:sweatshop-rustfs-ordering
chad:sweatshop-skills-rustfs
chad:tastyquant/checkout-free
chad:tastyquant/activation-harden
chad:glen/registry-self-drift
chad:glen/ci-thinkpad-gate-host-image-only
chad:glen/thinkpad-sops-editor-override
chad:glen/thinkpad-terra-release-44-11
chad:tastyquant/quadlets
chad:tastyquant/data-dir
chad:tastyquant/desk-key-prefix
chad:tastyquant/site-unit
chad:docs/layout-contract
chad:ci/thinkpad-path-gate
chad:glen/think-railway
chad:tastyquant/env-path
chad:tastyquant/condition-user
chad:filebrowser/trim-mounts
chad:cleanup/oct-sweep
chad:glen/think-hyprland-mango-fixes
chad:think/gnome-file-chooser
chad:glen/purlinens-preview-route
chad:fix/bee-nightly-ssh-path
chad:glen/wl-party-effects
chad:glen/wl-party-profile
chad:glen/unit-enable-drift-check
chad:glen/ambxst-niri-include
chad:glen/verify-gate3-ambxst
chad:glen/ambxst-unit-path
chad:glen/ambxst-sha-fix
chad:glen/mango-return-uwsm-only
chad:glen/hypr-bubblebox
chad:glen/uwsm-cleanup
chad:glen/drop-mango
chad:glen/hyprland-appearance-sync
chad:glen/hymission-build-deps
chad:glen/hyprland-uwsm
chad:glen/nsfw-suite-declarative
chad:glen/hyprland-round2
chad:glen/hyprland-guiutils
chad:glen/compositor-bake
chad:glen/trades-desk-route
chad:glen/thinkpad-purge-hermes
chad:glen/thinkpad-bootc-sudoers
chad:glen/thinkpad-uv
chad:glen/thinkpad-pkg-moves
chad:glen/sweatshop-host-channel
chad:glen/thinkpad-dotfiles
chad:glen/thinkpad-image-services
chad:glen/thinkpad-slack-flatpak
chad:glen/hermes-agent-bump
chad:glen/thinkpad-flatpaks
chad:glen/thinkpad-dconf
chad:glen/thinkpad-bubblebox-drift
chad:glen/thinkpad-bubblebox-reexport
chad:glen/thinkpad-bubblebox-consumer
chad:glen/thinkpad-dsh-url
chad:glen/sweatshop-service
chad:glen/thinkpad-git-source
chad:glen/sweatshop-previews
chad:glen/dsh-model-catalog-20261001
chad:glen/dsh-nix-node-fix
chad:glen/jellyfin-12.1
chad:glen/immich-3.2.4
chad:glen/dsh-0.2.0-rc.2
chad:glen/flake-update-20261001
chad:ninerouter-0.5.91
chad:fix/nas-beszel-nvme-smart
chad:fix/nas-beszel-smart-rawio
chad:bees-logs-check
chad:vector-lv-expr
chad:vector-remap-rebuild
chad:vector-vrl-final
chad:vector-vrl-int-fix
chad:vector-vrl-fix
chad:central-logging-fixes
chad:central-logging
chad:fix/nas-beszel-smart
chad:glen/hindsight-cost-controls
chad:glen/caddy-build-wait-fix
chad:glen/safety-nets
chad:glen/nixpkgs-bump-workflow
chad:glen/caddy-image-source
chad:glen/deploy-profile-generation
chad:glen/ci-image-build
chad:glen/fix-version-source-order
chad:glen/boot-health-gate
chad:glen/stable-rolling-tag
chad:glen/tombstones-and-pr-review-rule
chad:glen/image-update-stampfix
chad:glen/thinkpad-image-timer
chad:feature/qrcode-qa-crowdsource
chad:photos-ownership
chad:fix/qrcode-clear-next-cache
chad:fix/qrcode-qd-lifecycle
chad:fix/qrcode-migration-start
chad:bee/qrcode-rustfs-quadlet
chad:glen-forgejo-identity
chad:rustfs-migration-plan
chad:dsh-bump-0.1.5-rc.3
chad:ninerouter-dshkey
chad:ninerouter-wire
chad:ninerouter
chad:hindsight-deepseek-v4-flash
chad:hindsight-deepseek-openrouter
chad:hindsight-rate-limits
chad:hindsight-zai-llm
chad:hindsight-docs
chad:hindsight
chad:retire-jellyseerr
chad:land-hml-lanes
chad:filebrowser-user-fix
chad:sprawl-rulings-d014
chad:zot-retention-fix
chad:hermes-skill-prune
chad:deploy-dispatch
chad:ci-actions
chad:remove-discuit
chad:forgejo-token
chad:hermes/checkpoint-retention
chad:lane/HML-7
chad:lane/HML-9
chad:loop/wip
chad:gpl-simplify-dev-stacks
No reviewers
Labels
Clear labels
No items
No labels
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
No due date set.
Dependencies
No dependencies set.
Reference
chad/cn!140
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "thinkpad-image-promote"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problem
Merging #139 built the thinkpad image three times: the PR job, the push-to-main job, then
cjust image-rebuild. CI deleted both of its builds right after verifying them. Thencjust image-rebuildhung forever: it followed the log withjournalctl -f, which doesn't exit when the service finishes, so its chainedimage-upgradenever ran.Change
Build once, promote on merge (
ci.ymlthinkpad-image job → newhosts/bees/thinkpad-image-ci.sh):cn/thinkpad-host:ctx-<git tree hash of hosts/thinkpad/host-image>. Actx-*tag only exists if the gates passed.:stable. This is a registry-side retag: seconds, no rebuild, and it ships the bytes that passed review. After a merge, once the job is green,cjust image-upgradeon think is all you need.systemctl start --wait.zot: keep the last 5
ctx-*candidates. AddsrestartTriggersonzot.serviceso retention edits apply when bees deploys, not at the next reboot (nothing did this before).cjust image-rebuild: waits withsystemctl start --waitwhile streaming the log, then stops the tail, so theimage-upgradestep actually runs. Docs now point to "after a merge:cjust image-upgrade";image-rebuildis for pulling in today's Fedora updates.The nightly is unchanged (it's still the daily base-image and dnf refresh).
Verification
shellcheck0.11 is clean on the new script, the build script, and the extractedimage-rebuildrecipe body.stable, the version tag andctx-*end up with the same config digest.systemctl start --wait thinkpad-image-build.service.:stable. Falls back to a fresh build.set -e).systemctl, and zot's tag listing is reachable over Nebula. zot currently holdsstableplus four44-*tags;ctx-*doesn't collide with the existing^[0-9]+-retention pattern.Self-test
This PR changes
thinkpad-image-ci.sh, which is now in the path filter, so the thinkpad-image job runs on this PR inprmode and pushes actx-*candidate. Merging it exercisespromotefor real.Accepted risk
Retagging uses the plain registry API (
curlPUT of the manifest), since the runner has no skopeo or jq. zot is Nebula-only and unauthenticated, the same trust model the nightly'spodman pushalready relies on.View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.