W-23599683: CI/release artifact naming convention - #147
Merged
Conversation
Design for a single human-readable naming convention across the customer-downloadable CI artifacts and tagged release assets, grounded in the current build state (Linux + Windows, x86_64). Fixes OS-casing drift, adds a runtime-derived arch token, clarifies base names (dw-cli, dataweave-node, dwlib), documents the Python wheel PEP 427 exception, and folds in release.yml alignment plus the wheel file-path fix. macOS/arm64 builds noted as out of scope. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
martincousido
approved these changes
Jul 29, 2026
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.
Problem
The customer-downloadable CI artifacts and release assets are named three
inconsistent ways (observed on
run 30393123015):
Linux/Windows(from${{ runner.os }}) vslinux/windows(from${{ matrix.script_name }}), in the same run.distro, Node
.tgz, and dwlib, even though every artifact today is x86_64.native-cli-…-native-distrorepeats "native"; theNode
.tgznever says "node"; nothing distinguishes it from the Pythonpackage.
Convention
Every artifact except the Python wheel now follows:
<os>— lowercase, from${{ matrix.script_name }}(linux/windows)<arch>— derived at runtime (ARCH=$(uname -m)), so it stays correct if anarm64 runner is ever added
dw-cli(thedwexecutable),dataweave-node(the npmpackage),
dwlib(the shared library + header)Resulting artifacts (x86_64 today):
Changes
main.yml/ci.yml— deriveARCH; rename the CLI distro (via acpstaging step, mirroring the existing Node staging step), the Node
.tgz, andthe dwlib artifact. Under
archive: falsethe artifact name is the file's ownname, so renames happen at the file/
path:level; the dwlib step keepsname:(it stays archived — multiple files).release.yml— align everyasset_name:to the convention; foldARCHinto the existing version step.
scripts/check-artifact-names.sh— a validation script asserting theconvention (lowercase OS, arch present, correct base names, no
runner.osinnames) plus YAML well-formedness. Used as the local red→green gate while
building this change.
Deliberate exceptions (by design, not oversights)
release.ymlitsasset_name:is removed andfile_glob: trueadded so it uploads under itsreal name; the CI wheel step is untouched. A renamed wheel breaks
pip install/ platform resolution.release.ymlif: runner.os == 'Linux'/'Windows'conditionals are kept —they gate which OS uploads
.sovs.dll. The validation script ignoresif:lines when forbiddingrunner.osin names..hheader inrelease.ymlkeepsdwlib-<version>.h(noos/arch — the header is platform-independent).
Pre-existing bug fixed
release.yml's Python-wheel upload pointed at…-py3-none-any.whl, but thebuild produces a platform-tagged wheel (
manylinux2014_x86_64/win_amd64),so the step could not find the file. Changed to
…-py3-none-*.whl+file_glob: true.Verification
Can't be exercised locally — GitHub Actions runs only on CI.
check-artifact-names.shis the local gate (all three workflows pass). True confirmation is the next
master CI run (
main.yml/ci.yml) and the nextv*tag (release.yml):verify the produced names and that no
upload-artifactname-collision fires.Out of scope / follow-up
.dylib, but no macOS/arm64runner is in the matrix. The convention is arm64-ready; adding those builds is
separate.
check-artifact-names.shinto CI — it's committed as a manual devtool today; adding a lint step that runs it against the three workflows would
turn the casing-drift guard into an enforced gate. Suggested follow-up.
🤖 Generated with Claude Code