nebari-dev / nebari-dev/data-science-pack
ci: adopt the shared pack-release.yaml reusable workflow (suggestion)
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 5
- Forks
- 7
- Avg merge
- 1d 20h
- Merged PRs (30d)
- 13
Description
Suggestion
nebari-dev/.github now ships a reusable release workflow, pack-release.yaml@v1, and llm-serving-pack already consumes it. This proposes migrating this pack's Release Chart workflow (.github/workflows/release.yaml) onto it so pack releases share one maintained implementation across the org.
Filing as a suggestion for maintainers to weigh: there is real drift between the shared workflow's assumptions and this pack's current release process, so adopting it is not a no-op.
What the shared workflow does
Given chart-path, chart-name, and tag-paths, it:
- reads the version from
<chart-path>/Chart.yaml; - is idempotent (skips if the
<chart-name>-<version>release already exists); - pins each
tag-pathsentry (a dottedvalues.yamlkey) tosha-<release-commit-sha>in the working copy only (never committed back); helm packages the chart, attaches the.tgzto a GitHub Release, auto-detecting--prereleasefrom a-in the version;- syncs the packaged chart source to
nebari-dev/helm-repositoryvia the sharedsync-chartaction (opens a PR there; OCI publish to quay happens downstream on merge).
Benefits: one maintained release path, automatic prerelease detection, and the central helm-repository sync we added in #140 - with far less bespoke YAML in this repo.
Drift from this pack's current release process
- Committed-tag model vs pin-at-release.
llm-serving-packkeepstag: "latest"placeholders and lets the release workflow pin them. This pack instead commits realsha-<build-sha>tags via thebump-image-tags.yamlbot after each image build. The shared workflow always re-pinstag-pathsto the release commit's SHA, which is a different SHA than the committed build SHA. - Profile image refs the pin script cannot touch. The shared
pin_image_tags.pyonly rewrites simple leaf tags (e.g.jupyterhub.hub.image.tag). This pack'sjupyterlabimage also appears as ~6 fullrepo:tagstrings inside thejupyterhub.custom.profileslist (kubespawner_override.image,profile_options.image.choices.*). The script has no list-index support and does not rewrite the tag portion of a full ref, so it cannot pin those. Todaybump_image_tags.pykeeps all of them in sync. - Image build trigger.
build-images.yamlbuilds only onimages/**changes, so a release commit (aChart.yamlbump) produces no images for its SHA. The shared workflow's pinning assumes those images exist (llm-serving-packbuilds onChart.yamlchanges for exactly this reason). - Per-repo gh-pages index. The current
release.yamlalso maintains this repo's owngh-pagesHelm index. The shared workflow drops it - the centralnebari-dev/helm-repositoryis now the source of truth (matchesllm-serving-pack).
Suggested reconciliation
Options, roughly increasing in effort:
- A - Migrate now, keep the bump bot. Call
pack-release.yaml@v1withtag-paths: jupyterhub.hub.image.tag+jupyterhub.singleuser.image.tag; addChart.yamltobuild-images.yaml's trigger so release-SHA images exist; keepbump-image-tags.yamlas the source of truth for the profile refs; drop the bespoke gh-pages/release steps. Lowest risk. Known limitation: the shared workflow will not re-pin the profile refs, so they track the bump bot's build SHA rather than the release SHA (both images exist; the profile jupyterlab image may lag the default singleuser by one build). - B - Full alignment. First extend
pin_image_tags.pyupstream innebari-dev/.githubto handle full-ref/list paths, then switch this pack to placeholder tags and retirebump-image-tags.yaml. Cleanest end state; spans two repos. - C - Restructure the chart so the jupyterlab image is a single
.tagleaf that the profiles template from, removing the full-ref duplication. Largest chart change; makes A/B trivial afterward.
A is the lowest-risk path if maintainers want to adopt this; B/C are good follow-ups for full parity with llm-serving-pack.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by comparing .github/workflows/release.yaml and build-images.yaml with nebari-dev/.github's pack-release.yaml@v1, then inspect the image-tag handling in bump_image_tags.py and pin_image_tags.py. Determine which reconciliation option maintainers want, including the profile image refs and gh-pages behavior. Done means the migration scope is agreed and the release, image, and chart-repository behavior are verified.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- github-actions, helm, python
- Domain
- ci-cd, devops, release
- Issue type
- Refactor
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100