-
Notifications
You must be signed in to change notification settings - Fork 3.4k
fix(publish): split github workflow ref #6978
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for working on a fix for this!
I think we need to rework it a bit to properly capture the full workflow ref. Also, can you add a test to exercise this case.
Sorry, I forgot to mark the PR as a draft before testing. It should work now, and I just changed a existing test - by adding a |
@sxzz I've got a few more requests . . . Let's add an explicit test to check that we're getting the expected value for the workflow reference: diff --git a/workspaces/libnpmpublish/test/publish.js b/workspaces/libnpmpublish/test/publish.js
index 05ca0a9ad..584508d34 100644
--- a/workspaces/libnpmpublish/test/publish.js
+++ b/workspaces/libnpmpublish/test/publish.js
@@ -529,6 +529,9 @@ t.test('publish existing package with provenance in gha', async t => {
t.hasStrict(provenance.predicate.buildDefinition.buildType,
'https://slsa-framework.github.io/github-actions-buildtypes/workflow/v1',
'buildType matches expectations')
+ t.hasStrict(provenance.predicate.buildDefinition.externalParameters.workflow.ref,
+ 'refs/tags/pkg@1.0.0',
+ 'workflowRef matches expectations')
t.hasStrict(provenance.predicate.runDetails.builder.id,
`https://github.com/actions/runner/${runnerEnv}`,
'builder id matches expectations') Also, I'm concerned that the split logic is getting overly-clever. I think something like this makes the intent more clear: diff --git a/workspaces/libnpmpublish/lib/provenance.js b/workspaces/libnpmpublish/lib/provenance.js
index 8788c6514..8eb8880ad 100644
--- a/workspaces/libnpmpublish/lib/provenance.js
+++ b/workspaces/libnpmpublish/lib/provenance.js
@@ -19,10 +19,9 @@ const generateProvenance = async (subject, opts) => {
let payload
if (ci.GITHUB_ACTIONS) {
/* istanbul ignore next - not covering missing env var case */
- const [workflowPath, ...rest] = (env.GITHUB_WORKFLOW_REF || '')
- .replace(env.GITHUB_REPOSITORY + '/', '')
- .split('@')
- const workflowRef = rest.join('@')
+ const relativeRef = (env.GITHUB_WORKFLOW_REF || '').replace(env.GITHUB_REPOSITORY + '/', '')
+ const workflowPath = relativeRef.slice(0, relativeRef.indexOf('@'))
+ const workflowRef = relativeRef.slice(relativeRef.indexOf('@') + 1)
payload = {
_type: INTOTO_STATEMENT_V1_TYPE,
subject, |
@bdehamer Thanks for your code. Updated. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
Co-authored-by: Brian DeHamer <bdehamer@github.com>
If you want this in npm 9 you can cherry-pick commit the commit from latest into a new PR against release/v9 |
Properly splits the github workflow ref on only the first `@`, ignoring any potential extras in the tag field.
fix(publish): split github workflow ref (#6978) Properly splits the github workflow ref on only the first `@`, ignoring any potential extras in the tag field. Co-authored-by: 三咲智子 Kevin Deng <sxzz@sxzz.moe>
Fix split
GITHUB_WORKFLOW_REF
environment variable.After npm version 9.8.0 and onwards, the Vite publish script is malfunctioning. Upon investigation, it was discovered that the problem stems from splitting the
env.GITHUB_WORKFLOW_REF
at the@
symbol. This becomes problematic when a@
symbol is present in the git tag, such as inplugin-vue@1.0.0
.If the value of
GITHUB_WORKFLOW_REF
isoctocat/hello-world/.github/workflows/my-workflow.yml@refs/tags/plugin-vue@1.0.0
, it results in an incompleteworkflowRef
.https://github.com/npm/cli/blob/0f7008851f1c250405e8dc326f15d535e8fc1eae/workspaces/libnpmpublish/lib/provenance.js#L22C1-L24
References