-
-
Notifications
You must be signed in to change notification settings - Fork 1.9k
Artifact server: Error unauthorized on blob upload with upload-artifact@v6Β #6021
Description
Bug report info
act version: 0.2.84
GOOS: darwin
GOARCH: arm64
NumCPU: 16
Docker host: unix:///Users/username/.rd/docker.sock
Sockets found:
Config files:
/Users/username/.actrc:
-P ubuntu-latest=ghcr.io/catthehacker/ubuntu:act-latest
-P ubuntu-20.04=ghcr.io/catthehacker/ubuntu:act-20.04
-P ubuntu-18.04=ghcr.io/catthehacker/ubuntu:act-18.04
-P ubuntu-22.04=ghcr.io/catthehacker/ubuntu:act-22.04
Build info:
Go version: go1.24.0
Module path: github.com/nektos/act
Main version: v0.2.84
Main path: github.com/nektos/act
Main checksum:
Build settings:
-buildmode: exe
-compiler: gc
-ldflags: -s -w -X main.version=0.2.84 -X main.commit=d93106d194bba273d70d2ba604ea633c3f396b59 -X main.date=2026-01-01T02:51:38Z -X main.builtBy=goreleaser
CGO_ENABLED: 0
GOARCH: arm64
GOOS: darwin
GOARM64: v8.0
vcs: git
vcs.revision: d93106d194bba273d70d2ba604ea633c3f396b59
vcs.time: 2026-01-01T02:51:14Z
vcs.modified: false
Docker Engine:
Engine version: 29.1.3
Engine runtime: runc
Cgroup version: 2
Cgroup driver: cgroupfs
Storage driver: overlayfs
Registry URI: https://index.docker.io/v1/
OS: Alpine Linux v3.23
OS type: linux
OS version: 3.23.2
OS arch: aarch64
OS kernel: 6.6.119-0-virt
OS CPU: 6
OS memory: 15968 MB
Security options:
name=seccomp,profile=builtin
name=cgroupns
Command used with act
rm -rf artifacts && mkdir -p artifacts && act push --artifact-server-path artifacts -W .github/workflows/upload.yml -vDescribe issue
This section was AI generated with claude-opus-4.6(high)
actions/upload-artifact@v6 fails with act's artifact server.
The CreateArtifact RPC succeeds and returns a signed upload URL,
but the subsequent PUT to upload the artifact blob fails with Error unauthorized during signature verification.
@v5 works correctly.
Investigation
upload-artifact@v6 depends on @actions/artifact@^5.0.0 (vs v5's @actions/artifact@^4.0.0). The flow is:
CreateArtifactsucceeds β returns a signed URL with HMAC signature for blob upload- Blob upload PUT fails β act's
verifySignature()rejects the request withError unauthorized
The verifySignature() function computes an HMAC over the endp, expires, artifactName, and taskID URL query parameters. @actions/artifact@5 appears to have changed how it constructs or encodes the upload URL compared to @actions/artifact@4, causing the HMAC signature to no longer match.
This likely involves a difference in URL encoding or parameter ordering between the two @actions/artifact major versions when the client re-sends the signed URL back to the artifact server for the blob upload.
Link to GitHub repository
No response
Workflow content
# .github/workflows/upload.yml
name: Upload Test
on: push
jobs:
upload:
runs-on: ubuntu-latest
steps:
- run: echo "hello" > test.txt
- uses: actions/upload-artifact@v6
with:
name: test-artifact
path: test.txtRelevant log output
[Upload Test/upload] β Run Main actions/upload-artifact@v6
[Upload Test/upload] [DEBUG] Writing entry to tarball workflow/outputcmd.txt len:0
[Upload Test/upload] [DEBUG] Writing entry to tarball workflow/statecmd.txt len:0
[Upload Test/upload] [DEBUG] Writing entry to tarball workflow/pathcmd.txt len:0
[Upload Test/upload] [DEBUG] Writing entry to tarball workflow/envs.txt len:0
[Upload Test/upload] [DEBUG] Writing entry to tarball workflow/SUMMARY.md len:0
[Upload Test/upload] [DEBUG] Extracting content to '/var/run/act'
[Upload Test/upload] [DEBUG] Loading revision from git directory
[Upload Test/upload] [DEBUG] Found revision: 5802ed20604fc129c0a2d3bcab627ab066f62b2e
[Upload Test/upload] [DEBUG] HEAD points to '5802ed20604fc129c0a2d3bcab627ab066f62b2e'
[Upload Test/upload] [DEBUG] using github ref: refs/heads/main
[Upload Test/upload] [DEBUG] Found revision: 5802ed20604fc129c0a2d3bcab627ab066f62b2e
[Upload Test/upload] [DEBUG] About to run action &{Upload a Build Artifact GitHub Upload a build artifact that can be used by subsequent workflow steps map[compression-level:{The level of compression for Zlib to be applied to the artifact archive. The value can range from 0 to 9: - 0: No compression - 1: Best speed - 6: Default compression (same as GNU Gzip) - 9: Best compression Higher levels will result in better compression, but will take longer to complete. For large files that are not easily compressed, a value of 0 is recommended for significantly faster uploads.
false 6} if-no-files-found:{The desired behavior if no files are found using the provided path.
Available Options:
warn: Output a warning but do not fail the action
error: Fail the action with an error message
ignore: Do not output any warnings or errors, the action does not fail
false warn} include-hidden-files:{If true, hidden files will be included in the artifact. If false, hidden files will be excluded from the artifact.
false false} name:{Artifact name false artifact} overwrite:{If true, an artifact with a matching name will be deleted before a new one is uploaded. If false, the action will fail if an artifact for the given name already exists. Does not fail if the artifact does not exist.
false false} path:{A file, directory or wildcard pattern that describes what to upload true } retention-days:{Duration after which artifact will expire in days. 0 means using default retention.
Minimum 1 day. Maximum 90 days unless changed from the repository settings page.
false }] map[artifact-digest:{SHA-256 digest for the artifact that was just uploaded. Empty if the artifact upload failed.
} artifact-id:{A unique identifier for the artifact that was just uploaded. Empty if the artifact upload failed.
This ID can be used as input to other APIs to download, delete or get more information about an artifact: https://docs.github.com/en/rest/actions/artifacts
} artifact-url:{A download URL for the artifact that was just uploaded. Empty if the artifact upload failed.
This download URL only works for requests Authenticated with GitHub. Anonymous downloads will be prompted to first login. If an anonymous download URL is needed than a short time restricted URL can be generated using the download artifact API: https://docs.github.com/en/rest/actions/artifacts#download-an-artifact
This URL will be valid for as long as the artifact exists and the workflow run and repository exists. Once an artifact has expired this URL will no longer work. Common uses cases for such a download URL can be adding download links to artifacts in descriptions or comments on pull requests or issues.
}] {node24 map[] dist/upload/index.js always() always() [] []} { }}
[Upload Test/upload] [DEBUG] Loading revision from git directory
[Upload Test/upload] [DEBUG] Found revision: 5802ed20604fc129c0a2d3bcab627ab066f62b2e
[Upload Test/upload] [DEBUG] HEAD points to '5802ed20604fc129c0a2d3bcab627ab066f62b2e'
[Upload Test/upload] [DEBUG] using github ref: refs/heads/main
[Upload Test/upload] [DEBUG] Found revision: 5802ed20604fc129c0a2d3bcab627ab066f62b2e
[Upload Test/upload] [DEBUG] Loading revision from git directory
[Upload Test/upload] [DEBUG] Found revision: 5802ed20604fc129c0a2d3bcab627ab066f62b2e
[Upload Test/upload] [DEBUG] HEAD points to '5802ed20604fc129c0a2d3bcab627ab066f62b2e'
[Upload Test/upload] [DEBUG] using github ref: refs/heads/main
[Upload Test/upload] [DEBUG] Found revision: 5802ed20604fc129c0a2d3bcab627ab066f62b2e
[Upload Test/upload] [DEBUG] type=remote-action actionDir=/Users/username/.cache/act/actions-upload-artifact@v6 actionPath= workdir=/Users/username/repro actionCacheDir=/Users/username/.cache/act actionName=actions-upload-artifact@v6 containerActionDir=/var/run/act/actions/actions-upload-artifact@v6
[Upload Test/upload] [DEBUG] /var/run/act/actions/actions-upload-artifact@v6
[Upload Test/upload] [DEBUG] Removing /Users/username/.cache/act/actions-upload-artifact@v6/.gitignore before docker cp
[Upload Test/upload] π³ docker cp src=/Users/username/.cache/act/actions-upload-artifact@v6/ dst=/var/run/act/actions/actions-upload-artifact@v6/
[Upload Test/upload] [DEBUG] Writing tarball /var/folders/zx/5g72bq_56p94hjv72zmzxv_c0000gp/T/act3817101610 from /Users/username/.cache/act/actions-upload-artifact@v6/
[Upload Test/upload] [DEBUG] Stripping prefix:/Users/username/.cache/act/actions-upload-artifact@v6/ src:/Users/username/.cache/act/actions-upload-artifact@v6/
[Upload Test/upload] [DEBUG] Extracting content from '/var/folders/zx/5g72bq_56p94hjv72zmzxv_c0000gp/T/act3817101610' to '/var/run/act/actions/actions-upload-artifact@v6/'
[Upload Test/upload] [DEBUG] executing remote job container: [/opt/acttoolcache/node/24.14.0/arm64/bin/node /var/run/act/actions/actions-upload-artifact@v6/dist/upload/index.js]
[Upload Test/upload] π³ docker exec cmd=[/opt/acttoolcache/node/24.14.0/arm64/bin/node /var/run/act/actions/actions-upload-artifact@v6/dist/upload/index.js] user= workdir=
[Upload Test/upload] [DEBUG] Exec command '[/opt/acttoolcache/node/24.14.0/arm64/bin/node /var/run/act/actions/actions-upload-artifact@v6/dist/upload/index.js]'
[Upload Test/upload] [DEBUG] Working directory '/Users/username/repro'
[Upload Test/upload] [DEBUG] π¬ ::debug::followSymbolicLinks 'true'
[Upload Test/upload] [DEBUG] π¬ ::debug::implicitDescendants 'true'
[Upload Test/upload] [DEBUG] π¬ ::debug::omitBrokenSymbolicLinks 'true'
[Upload Test/upload] [DEBUG] π¬ ::debug::excludeHiddenFiles 'true'
[Upload Test/upload] [DEBUG] π¬ ::debug::followSymbolicLinks 'true'
[Upload Test/upload] [DEBUG] π¬ ::debug::implicitDescendants 'true'
[Upload Test/upload] [DEBUG] π¬ ::debug::matchDirectories 'true'
[Upload Test/upload] [DEBUG] π¬ ::debug::omitBrokenSymbolicLinks 'true'
[Upload Test/upload] [DEBUG] π¬ ::debug::excludeHiddenFiles 'true'
[Upload Test/upload] [DEBUG] π¬ ::debug::Search path '/Users/username/repro/test.txt'
[Upload Test/upload] [DEBUG] π¬ ::debug::File:/Users/username/repro/test.txt was found using the provided searchPath
| With the provided path, there will be 1 file uploaded
[Upload Test/upload] [DEBUG] π¬ ::debug::Root artifact directory is /Users/username/repro
| Artifact name is valid!
| Root directory input is valid!
[Upload Test/upload] [DEBUG] π¬ ::debug::Workflow Run Backend ID: 1
[Upload Test/upload] [DEBUG] π¬ ::debug::Workflow Job Run Backend ID: 1
[Upload Test/upload] [DEBUG] π¬ ::debug::[Request] CreateArtifact http://192.168.0.144:34567/twirp/github.actions.results.api.v1.ArtifactService/CreateArtifact
[Upload Test/upload] [DEBUG] π¬ ::debug::[Response] - 200
[Upload Test/upload] [DEBUG] π¬ ::debug::Headers: {%0A "content-type": "application/json;charset=utf-8",%0A "date": "Tue, 10 Mar 2026 17:46:52 GMT",%0A "content-length": "262"%0A}
[Upload Test/upload] [DEBUG] π¬ ::debug::Body: {%0A "ok": true,%0A "signedUploadUrl": "http://192.168.0.144:34567/twirp/github.actions.results.api.v1.ArtifactService/UploadArtifact?sig=s5g5pHLuaUzlecaRtKr7OV5ylB1-VVHRl7vEeNI9MZo=&expires=2026-03-10+18%253A46%253A52.133411+%252B0000+GMT&artifactName=test-artifact&taskID=1"%0A}
[Upload Test/upload] [DEBUG] π¬ ::debug::Creating Artifact archive with compressionLevel: 6
[Upload Test/upload] [DEBUG] π¬ ::debug::Zip write high watermark value 8388608
[Upload Test/upload] [DEBUG] π¬ ::debug::Zip read high watermark value 8388608
[Upload Test/upload] [DEBUG] π¬ ::debug::Uploading artifact zip to blob storage with maxConcurrency: 5, bufferSize: 8388608
| Beginning upload of artifact content to blob storage
[Upload Test/upload] [DEBUG] π¬ ::debug::Zip stream for upload has ended.
[Upload Test/upload] [DEBUG] π¬ ::debug::Zip stream for upload has finished.
ERRO[0002] Error unauthorized
[Upload Test/upload] β ::error::
[Upload Test/upload] β Failure - Main actions/upload-artifact@v6 [453.247666ms]
[Upload Test/upload] exitcode '1': failureAdditional information
Good output from v5:
[Upload Test/upload] β Run Main actions/upload-artifact@v5
[Upload Test/upload] [DEBUG] Writing entry to tarball workflow/outputcmd.txt len:0
[Upload Test/upload] [DEBUG] Writing entry to tarball workflow/statecmd.txt len:0
[Upload Test/upload] [DEBUG] Writing entry to tarball workflow/pathcmd.txt len:0
[Upload Test/upload] [DEBUG] Writing entry to tarball workflow/envs.txt len:0
[Upload Test/upload] [DEBUG] Writing entry to tarball workflow/SUMMARY.md len:0
[Upload Test/upload] [DEBUG] Extracting content to '/var/run/act'
[Upload Test/upload] [DEBUG] Loading revision from git directory
[Upload Test/upload] [DEBUG] Found revision: 5802ed20604fc129c0a2d3bcab627ab066f62b2e
[Upload Test/upload] [DEBUG] HEAD points to '5802ed20604fc129c0a2d3bcab627ab066f62b2e'
[Upload Test/upload] [DEBUG] using github ref: refs/heads/main
[Upload Test/upload] [DEBUG] Found revision: 5802ed20604fc129c0a2d3bcab627ab066f62b2e
[Upload Test/upload] [DEBUG] About to run action &{Upload a Build Artifact GitHub Upload a build artifact that can be used by subsequent workflow steps map[compression-level:{The level of compression for Zlib to be applied to the artifact archive. The value can range from 0 to 9: - 0: No compression - 1: Best speed - 6: Default compression (same as GNU Gzip) - 9: Best compression Higher levels will result in better compression, but will take longer to complete. For large files that are not easily compressed, a value of 0 is recommended for significantly faster uploads.
false 6} if-no-files-found:{The desired behavior if no files are found using the provided path.
Available Options:
warn: Output a warning but do not fail the action
error: Fail the action with an error message
ignore: Do not output any warnings or errors, the action does not fail
false warn} include-hidden-files:{If true, hidden files will be included in the artifact. If false, hidden files will be excluded from the artifact.
false false} name:{Artifact name false artifact} overwrite:{If true, an artifact with a matching name will be deleted before a new one is uploaded. If false, the action will fail if an artifact for the given name already exists. Does not fail if the artifact does not exist.
false false} path:{A file, directory or wildcard pattern that describes what to upload true } retention-days:{Duration after which artifact will expire in days. 0 means using default retention.
Minimum 1 day. Maximum 90 days unless changed from the repository settings page.
false }] map[artifact-digest:{SHA-256 digest for the artifact that was just uploaded. Empty if the artifact upload failed.
} artifact-id:{A unique identifier for the artifact that was just uploaded. Empty if the artifact upload failed.
This ID can be used as input to other APIs to download, delete or get more information about an artifact: https://docs.github.com/en/rest/actions/artifacts
} artifact-url:{A download URL for the artifact that was just uploaded. Empty if the artifact upload failed.
This download URL only works for requests Authenticated with GitHub. Anonymous downloads will be prompted to first login. If an anonymous download URL is needed than a short time restricted URL can be generated using the download artifact API: https://docs.github.com/en/rest/actions/artifacts#download-an-artifact
This URL will be valid for as long as the artifact exists and the workflow run and repository exists. Once an artifact has expired this URL will no longer work. Common uses cases for such a download URL can be adding download links to artifacts in descriptions or comments on pull requests or issues.
}] {node20 map[] dist/upload/index.js always() always() [] []} { }}
[Upload Test/upload] [DEBUG] Loading revision from git directory
[Upload Test/upload] [DEBUG] Found revision: 5802ed20604fc129c0a2d3bcab627ab066f62b2e
[Upload Test/upload] [DEBUG] HEAD points to '5802ed20604fc129c0a2d3bcab627ab066f62b2e'
[Upload Test/upload] [DEBUG] using github ref: refs/heads/main
[Upload Test/upload] [DEBUG] Found revision: 5802ed20604fc129c0a2d3bcab627ab066f62b2e
[Upload Test/upload] [DEBUG] Loading revision from git directory
[Upload Test/upload] [DEBUG] Found revision: 5802ed20604fc129c0a2d3bcab627ab066f62b2e
[Upload Test/upload] [DEBUG] HEAD points to '5802ed20604fc129c0a2d3bcab627ab066f62b2e'
[Upload Test/upload] [DEBUG] using github ref: refs/heads/main
[Upload Test/upload] [DEBUG] Found revision: 5802ed20604fc129c0a2d3bcab627ab066f62b2e
[Upload Test/upload] [DEBUG] type=remote-action actionDir=/Users/username/.cache/act/actions-upload-artifact@v5 actionPath= workdir=/Users/username/repro actionCacheDir=/Users/username/.cache/act actionName=actions-upload-artifact@v5 containerActionDir=/var/run/act/actions/actions-upload-artifact@v5
[Upload Test/upload] [DEBUG] /var/run/act/actions/actions-upload-artifact@v5
[Upload Test/upload] [DEBUG] Removing /Users/username/.cache/act/actions-upload-artifact@v5/.gitignore before docker cp
[Upload Test/upload] π³ docker cp src=/Users/username/.cache/act/actions-upload-artifact@v5/ dst=/var/run/act/actions/actions-upload-artifact@v5/
[Upload Test/upload] [DEBUG] Writing tarball /var/folders/zx/5g72bq_56p94hjv72zmzxv_c0000gp/T/act3740749243 from /Users/username/.cache/act/actions-upload-artifact@v5/
[Upload Test/upload] [DEBUG] Stripping prefix:/Users/username/.cache/act/actions-upload-artifact@v5/ src:/Users/username/.cache/act/actions-upload-artifact@v5/
[Upload Test/upload] [DEBUG] Extracting content from '/var/folders/zx/5g72bq_56p94hjv72zmzxv_c0000gp/T/act3740749243' to '/var/run/act/actions/actions-upload-artifact@v5/'
[Upload Test/upload] [DEBUG] executing remote job container: [/opt/acttoolcache/node/24.14.0/arm64/bin/node /var/run/act/actions/actions-upload-artifact@v5/dist/upload/index.js]
[Upload Test/upload] π³ docker exec cmd=[/opt/acttoolcache/node/24.14.0/arm64/bin/node /var/run/act/actions/actions-upload-artifact@v5/dist/upload/index.js] user= workdir=
[Upload Test/upload] [DEBUG] Exec command '[/opt/acttoolcache/node/24.14.0/arm64/bin/node /var/run/act/actions/actions-upload-artifact@v5/dist/upload/index.js]'
[Upload Test/upload] [DEBUG] Working directory '/Users/username/repro'
[Upload Test/upload] [DEBUG] π¬ ::debug::followSymbolicLinks 'true'
[Upload Test/upload] [DEBUG] π¬ ::debug::implicitDescendants 'true'
[Upload Test/upload] [DEBUG] π¬ ::debug::omitBrokenSymbolicLinks 'true'
[Upload Test/upload] [DEBUG] π¬ ::debug::excludeHiddenFiles 'true'
| (node:37) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.
| (Use `node --trace-deprecation ...` to show where the warning was created)
[Upload Test/upload] [DEBUG] π¬ ::debug::followSymbolicLinks 'true'
[Upload Test/upload] [DEBUG] π¬ ::debug::implicitDescendants 'true'
[Upload Test/upload] [DEBUG] π¬ ::debug::matchDirectories 'true'
[Upload Test/upload] [DEBUG] π¬ ::debug::omitBrokenSymbolicLinks 'true'
[Upload Test/upload] [DEBUG] π¬ ::debug::excludeHiddenFiles 'true'
[Upload Test/upload] [DEBUG] π¬ ::debug::Search path '/Users/username/repro/test.txt'
[Upload Test/upload] [DEBUG] π¬ ::debug::File:/Users/username/repro/test.txt was found using the provided searchPath
| With the provided path, there will be 1 file uploaded
[Upload Test/upload] [DEBUG] π¬ ::debug::Root artifact directory is /Users/username/repro
| Artifact name is valid!
| Root directory input is valid!
[Upload Test/upload] [DEBUG] π¬ ::debug::Workflow Run Backend ID: 1
[Upload Test/upload] [DEBUG] π¬ ::debug::Workflow Job Run Backend ID: 1
[Upload Test/upload] [DEBUG] π¬ ::debug::[Request] CreateArtifact http://192.168.0.144:34567/twirp/github.actions.results.api.v1.ArtifactService/CreateArtifact
[Upload Test/upload] [DEBUG] π¬ ::debug::[Response] - 200
[Upload Test/upload] [DEBUG] π¬ ::debug::Headers: {%0A "content-type": "application/json;charset=utf-8",%0A "date": "Tue, 10 Mar 2026 17:51:17 GMT",%0A "content-length": "262"%0A}
[Upload Test/upload] [DEBUG] π¬ ::debug::Body: {%0A "ok": true,%0A "signedUploadUrl": "http://192.168.0.144:34567/twirp/github.actions.results.api.v1.ArtifactService/UploadArtifact?sig=Y4Ect2FGI3Ub-d2oaeKkFv2ap9e7JZ3ZUbN8OujhI48=&expires=2026-03-10+18%253A51%253A17.617692+%252B0000+GMT&artifactName=test-artifact&taskID=1"%0A}
[Upload Test/upload] [DEBUG] π¬ ::debug::Creating Artifact archive with compressionLevel: 6
[Upload Test/upload] [DEBUG] π¬ ::debug::Zip write high watermark value 8388608
[Upload Test/upload] [DEBUG] π¬ ::debug::Zip read high watermark value 8388608
[Upload Test/upload] [DEBUG] π¬ ::debug::Uploading artifact zip to blob storage with maxConcurrency: 5, bufferSize: 8388608
| Beginning upload of artifact content to blob storage
[Upload Test/upload] [DEBUG] π¬ ::debug::Zip stream for upload has ended.
[Upload Test/upload] [DEBUG] π¬ ::debug::Zip stream for upload has finished.
| (node:37) [DEP0169] DeprecationWarning: `url.parse()` behavior is not standardized and prone to errors that have security implications. Use the WHATWG URL API instead. CVEs are not issued for `url.parse()` vulnerabilities.
| Uploaded bytes 138
| Finished uploading artifact content to blob storage!
| SHA256 digest of uploaded artifact zip is a42abf06d2efc13b0147c0ddb46a540820de8b9fcb8d90be9d0ca2c49def9c0e
| Finalizing artifact upload
[Upload Test/upload] [DEBUG] π¬ ::debug::[Request] FinalizeArtifact http://192.168.0.144:34567/twirp/github.actions.results.api.v1.ArtifactService/FinalizeArtifact
[Upload Test/upload] [DEBUG] π¬ ::debug::[Response] - 200
[Upload Test/upload] [DEBUG] π¬ ::debug::Headers: {%0A "content-type": "application/json;charset=utf-8",%0A "date": "Tue, 10 Mar 2026 17:51:17 GMT",%0A "content-length": "38"%0A}
[Upload Test/upload] [DEBUG] π¬ ::debug::Body: {%0A "ok": true,%0A "artifactId": "2068317754"%0A}
| Artifact test-artifact.zip successfully finalized. Artifact ID 2068317754
| Artifact test-artifact has been successfully uploaded! Final size is 138 bytes. Artifact ID is 2068317754
| Artifact download URL: https://github.com/org/repo/actions/runs/1/artifacts/2068317754
[Upload Test/upload] β
Success - Main actions/upload-artifact@v5 [474.047125ms]
[Upload Test/upload] β ::set-output:: artifact-id=2068317754
[Upload Test/upload] β ::set-output:: artifact-digest=a42abf06d2efc13b0147c0ddb46a540820de8b9fcb8d90be9d0ca2c49def9c0e
[Upload Test/upload] β ::set-output:: artifact-url=https://github.com/org/repo/actions/runs/1/artifacts/2068317754