Dosu LogoDosu Logo
Ask
Join our Discord
Organization avatar
bluefinPublic
Bluefin
Documentsbluefin
update-refs
update-refs
Type
External
Status
Published
Created
Jun 13, 2026
Updated
Jun 21, 2026
Updated by
Dosu Bot
Source
docs/skills/update-refs.md

Updating Package Refs#

Load when updating an existing package's version in projectbluefin/dakota.

When to Use#

Use when bumping a package version, refreshing a tracked source ref, or regenerating lock/vendor data after an upstream release.

When NOT to Use#

  • Adding a new package → add-package.md
  • Bumping junction refs (gnome-build-meta, freedesktop-sdk) → patch-junctions.md
  • Debugging a post-update build failure → debugging.md

Core Process#

  1. Identify the source type and update path.
  2. Change the version metadata or track the source.
  3. Regenerate any derived vendor/lock blocks.
  4. Validate the graph and rebuild the affected element.
  5. Confirm the update changed what you intended, and nothing more.

Quick Reference#

TaskCommand
Update tarball to version XEdit version: variable in element, then just bst source track bluefin/<name>.bst
Update git-tracked element to latestjust bst source track bluefin/<name>.bst
Update all elements in a groupSee .github/workflows/track-bst-sources.yml
Regenerate cargo2 sources for a Rust elementpython3 files/scripts/generate_cargo_sources.py path/to/Cargo.lock

The real tracking command is just bst source track <element> — it updates the ref: field in the element's source block to the latest matching version/commit.

Rust elements: After bumping the git ref, regenerate the cargo2 source block manually:

# Get Cargo.lock from the new source, then:
python3 files/scripts/generate_cargo_sources.py path/to/Cargo.lock

Tracking Groups#

GroupWhen to useExamples
auto-mergeLow-risk app packages, shell extensionsSolaar, Gear Lever, extensions
manual-mergeJunctions, Rust elements, anything with patch debtfdsdk, GBM, tailscale

Set tracking-group: in the element or tracking workflow accordingly.

Element Source Types#

Tarball Element (kind: tar)#

sources:
- kind: tar
  url: alias:releases/owner/project/v%{version}.tar.gz
  ref: sha256hex...

After just bst source track:

  1. ref: is updated in the element
  2. Run just bst build bluefin/<name>.bst to verify

Git-Tracked Element#

sources:
- kind: git_repo
  url: alias:project
  track: main
  ref: abc123def456...

After just bst source track:

  1. ref: is updated to the latest commit on the tracked branch/tag
  2. For Rust elements: regenerate cargo2 manually with generate_cargo_sources.py
  3. Run just bst build bluefin/<name>.bst to verify

Rust Elements — Cargo Lock#

For Rust elements, after tracking a new git ref:

  1. Update ref: in the git source via just bst source track bluefin/<name>.bst
  2. Get the new Cargo.lock from the source (enter build sandbox: just bst shell --build bluefin/<name>.bst)
  3. Regenerate the cargo2 source block:
    python3 files/scripts/generate_cargo_sources.py path/to/Cargo.lock
    

The cargo2 block is generated output — never hand-edit it.

Post-Update Verification#

just validate # full graph check
just bst build bluefin/<name>.bst # build only this element
just build # full image build (when unsure)

Junction Bumps#

For elements/gnome-build-meta.bst or elements/freedesktop-sdk.bst ref updates, see patch-junctions.md. Junction bumps require patch verification and are a separate workflow.

Common Rationalizations#

RationalizationReality
"source track did the ref bump, so the job is finished."Not for Rust and other ecosystems with generated dependency material.
"I'll bump the version and skip the targeted rebuild."That's how bad ref bumps survive until CI.
"A junction bump is basically the same thing."It is not; junctions have their own review and maintenance rules.

Red Flags#

  • Ref updated without rebuilding the affected element
  • Generated dependency blocks left stale after the version bump
  • Treating all source types as if they update the same way
  • Using this skill for junction maintenance

Verification#

  • Correct update path was chosen for the source type
  • Any generated vendor/lock material was refreshed
  • The affected element graph validates and rebuilds cleanly
  • The diff reflects the intended update and no unrelated drift

Lessons Learned#

Rust elements: cargo2 sources must be regenerated after every git ref bump (2026-06-07)#

After running just bst source track bluefin/<name>.bst for a Rust element, the cargo2 source block in the element is now stale. The old crate versions were generated from the previous Cargo.lock. Forgetting to regenerate causes a build failure at the Cargo fetch step ("package not found in vendor directory").

Always regenerate immediately after tracking:

just bst source track bluefin/<name>.bst
# Then enter sandbox to get the new Cargo.lock:
just bst shell --build bluefin/<name>.bst
# Inside sandbox:
cat Cargo.lock > /host/Cargo.lock # extract Cargo.lock
# Back on host:
python3 files/scripts/generate_cargo_sources.py /host/Cargo.lock

just bst source track only updates ref: — it does not regenerate derived sources (2026-06-07)#

bst source track updates the ref: field of git_repo and tar sources. It does NOT regenerate cargo2, go_module, or other derived source blocks. Those must be regenerated manually after tracking. Omitting this step is the most common cause of "build passes locally (from cache) but fails from scratch."

Documents
Changelogs
Bluefin LTS Errata
Pin Log
2024-12-30-ublue-2024-wrapup
2025-01-01-announcements-archive
2025-02-23-february-update
2025-05-14-bluefin-f42
2025-06-23-bazaar-default
2025-07-06-fresh-bluefin-isos-and-bazaar
2025-07-11-four-years-of-ublue
2025-07-15-bold-brew
2025-07-17-ask-projectbluefin
2025-08-01-august-wallpapers
2025-08-08-bluefin-on-lfx
2025-08-29-github-oss-fund
2025-09-17-color-with-bluefin
2025-09-18-bluefin-lts-and-gdx
2025-09-23-LTS-at-indiafoss
2025-10-28-bluefin-autumn
2025-10-31-fastfetch-metrics
2025-11-15-cloud-native-milestone-15-million
2025-11-16-coreos-desktop
2025-11-24-new-just-and-bbrew
2025-11-27-bluefin-and-paleoartists
2025-12-04-flatpak-support-in-brewfiles
2025-12-06-interview-with-michael-tunnell
2025-12-07-documentation-updates
2025-12-14-huntress-holiday-wallpapers
2025-12-15-easier-homebrew-installation-for-custom-images
2025-12-27-upcoming-homebrew-cli-changes
2025-12-30-bluefin-2025-wrapup
2026-01-03-modernizing-custom-images
2026-02-01-automated-reports-changelogs
2026-03-13-bluefin-cli-mac-wsl
2026-03-27-bluefin-lts-gnome-49-50
2026-03-29-composefs-fisherman
2026-03-29-composefs-fisherman-design
2026-03-30-boot-verification
2026-03-30-boot-verification-design
2026-03-30-proportional-progress-tracking
2026-03-30-proportional-progress-tracking-design
2026-04-02-state-of-ecosystem
2026-04-19-dakota-alpha-1
2026-05-12-bluefin-spring-2026
2026-05-13-bluefin-spring-2026-2
2026-05-14-making-our-own-fate
2026-05-15-hummingbird
2026-05-23-gradia-capture-bluefin
2026-05-28-knuckle
2026-06-11-promotion-pr-body
AGENTS
AGENTS
AGENTS
AGENTS
AGENTS
AGENTS
Building a Custom Bluefin Image
CI_CD_GUIDE
CLAUDE
CLAUDE
CONTRIBUTING
CONTRIBUTING
CONTRIBUTING
CONTRIBUTING
CONTRIBUTING
How can I install Double Commander on Bluefin (an immutable Linux OS), coming from Arch Linux?
How can you fix random GPU artifacts and hard freezes on an AMD Framework 16 laptop running Linux (Bluefin/Fedora)?
How do I install the Cloudflare WARP (One) client on Bluefin?
How to Reset a User's Home Directory to Defaults on Bluefin
INDEX
MAINTAINERS
MULTI_VARIANT_BUILD
PITFALLS
PULL_REQUEST_TEMPLATE
Plex Media Server
README
README
README
README
README
README
README
README
README
SECURITY
SECURITY
SECURITY
SKILL
SKILL
SKILL
SKILL
TRANSLATING
Update Process
Which Bluefin ISO is recommended for a Lenovo Yoga Pro 9i with an NVIDIA RTX 4050 for Python data science and Machine Learning with CUDA?
action-reference
actionadon
add-package
administration
agentic-contributing
ai
analytics
architect
architecture
artwork
blog-poster.agent
bluefin-dx
bluefin-gdx
bonedigger-agent-donation
bonedigger-lifecycle
bonedigger-overview
bonedigger-templates
bonedigger-ujust
bst-overrides
build
build
buildstream
ci
ci
ci
code-of-conduct
command-line
composite-actions
consumer-guide
consumer-validation
contributing
conventional-commit.prompt
copilot-instructions
copilot-instructions
copilot-instructions
copilot-instructions
dakota-tpm2-validation
debugging
demo-mode-e2e
determinism
dinosaurs
downloads
downloads-testing
driver-versions
e2e-ci
e2e-feature-verification
encryption-matrix
factory-operations
failure-paths
feedback-loop
gstreamer-codec-validation
human-gates
images
index
index
installation
installer
label-workflow
libpastry-integration
live-iso
local-ota
lts
luks-testing
merge-queue
mission
multi-arch
music
not-bluefin
oci-assembly
oci-layers
onboarding
overview
packaging-binaries
packaging-gnome-extensions
packaging-go
packaging-rust
packaging-zig
patch-junctions
patches
pr-checklist
pr-review
press-kit
projects
pull_request_template
pull_request_template
pull_request_template
qr-phone-companion
quickstart
r2-promotion
release-qualification
remove-package
reports
reusable-workflow
skill-improvement
supply-chain
t2-mac
testing
troubleshooting
ujust-recipes
update-refs
upgrade-and-migration
ux-ubuntu-provision
values
variants
vm-stack
workflow