Simplify and validate release build-output action configuration - #136
Simplify and validate release build-output action configuration#136msarahan wants to merge 3 commits into
Conversation
76acdd5 to
3a9568f
Compare
0197244 to
4144565
Compare
4144565 to
a18a4a7
Compare
jameslamb
left a comment
There was a problem hiding this comment.
I did my best to review this.
My read is that this replaces a bunch of individual arguments with:
- automatically calculating some of the values
- allowing a few more values only needed in specific cases (like cuVS Java builds) to be passed in as a single dictionary via this new
config:argument
At a surface level that sounds good to me! Less opportunity for misconfiguration across the repos, easier to change the behavior in the future.
My comments in this PR are light, but see my review on rapidsai/shared-workflows#609 ... I think documentation (ideally written by a human) in the release-build-output/ directory would be really helpful for folks to understand why this exists and what it does. I looked through the code, logs, and output from the testing PRs (rapidsai/dask-cuda#1672, rapidsai/nx-cugraph#274, NVIDIA/cuvs#2400) and think I have a picture of that, but I personally would find it hard to modify this setup if a new requirement came in.
| # The runtime validator suite requires jq. pre-commit.ci validates the same | ||
| # valid fixtures against config.schema.json; GitHub Actions runs the full | ||
| # valid/invalid runtime suite on an Ubuntu runner with jq. | ||
| skip: [actionlint-docker, release-build-output-config] |
There was a problem hiding this comment.
| skip: [actionlint-docker, release-build-output-config] | |
| # why skip these in pre-commit.ci? | |
| # | |
| # * 'actionlint-docker': needs docker | |
| # * 'release-build-output-config': need 'jq' | |
| # | |
| # There are covered in other CI jobs where we have more control over the runtime evnvironment. | |
| # | |
| skip: [actionlint-docker, release-build-output-config] |
This comment is really verbose, overly-specific, and only applies to release-build-output-config even though its placement makes it looks like it applies to everything in skip:. Would you consider something like this suggestion?
| description: >- | ||
| Release build-output JSON object containing artifact_type, component_id, output_directory, and custom artifact | ||
| selection and package identity when artifact_type is custom. Schema and field documentation: | ||
| https://github.com/rapidsai/shared-actions/blob/main/release-build-output/config.schema.json |
There was a problem hiding this comment.
| https://github.com/rapidsai/shared-actions/blob/main/release-build-output/config.schema.json | |
| JSON string with configuration for this action. Schema and field documentation: | |
| https://github.com/rapidsai/shared-actions/blob/main/release-build-output/config.schema.json |
I don't think repeating the literal field names and the implementation detail "... and package identity when artifact_type is custom" is helpful. Let's simplify this and redirect back to the schema.
| ] | ||
| }, | ||
| "component_id": { | ||
| "description": "Stable release component ID shared by the selected files and their matrix variants.", |
There was a problem hiding this comment.
How do I figure out a value for this?
Do I generate a UUID and provide my own? Is this auto-generated by the code?
That type of detail would be helpful.
Posted by Codex (GPT-5) on behalf of @msarahan. This pull request description is LLM-generated; readers should treat its content accordingly.
Summary
Simplify
release-build-output-dispatchto accept one schema-validatedconfigJSON object and make the action work reliably from both host and container jobs.The action now:
artifact_type,component_id,output_directory, and any custom-producer package/artifact selection through oneconfiginput;packageidentity or a producer-createdpackage_file;release-build-output.jsonandrelease-build-metadata.json, then uploads them with collected evidence asrelease-build-output-<source-artifact-name>; andrelease-build-output/action.ymlentry point.Why
The previous interface exposed many related scalar inputs and allowed combinations that only failed later during materialization. It also checked out
shared-actionsand invoked a nested local action, which could resolve to a host-only path from a container job. A single discriminated JSON object gives standard and custom producers one explicit contract, while schema and runtime validation provide actionable failures early in the pipeline.