upload-artifact
upload-artifact copied to clipboard
Download artifacts of latest build
I'm working with two workflows in different platforms (A and B) and the workflow B needs an artifact of the workflow A. Also, I'm trying to avoid external services as S3 in order to make it simple.
Is there a way to get a link to the artifacts generated in the last build (latestbuild) or in the last passed build (lastsuccessfulbuild)?
Maybe something like this: https://github.com/{account}/{repo}/workflows/{workflowName}/builds/latest/artifacts/file.zip
I would like to know how to get link url too. ref https://github.com/actions/upload-artifact/issues/2#issuecomment-536166961
https://github.com/actions/download-artifact
https://help.github.com/en/github/automating-your-workflow-with-github-actions/persisting-workflow-data-using-artifacts#passing-data-between-jobs-in-a-workflow
EDIT: Uhh... Sorry, it doesn't work across workflows: https://github.com/actions/upload-artifact/issues/2#issuecomment-523042886
This is more of an issue on the download-artifact
side. See: https://github.com/actions/download-artifact/issues/3
No rough ETA but this is something that we really really want to do since it will help enable more complete CI/CD experiences.
Also see related discussions like #27 and #50.
We would like a direct URL for our nightly builds (like the format proposed in the issue description). We don't want to trash our repositories GitHub Releases for nightly binaries / many tagged releases - we are also fine with short retention for nightly builds.
We had previously used Travis CI and AppVeyor CI, where none of this was any issue. With GitHub Actions it's a massive headache / various issues.
I had made a quick and dirty tool to redirect users to the latest artifact URL using the new API. This tool is at https://github.com/JayFoxRox/GitHub-artifact-URL/
However, now the actions API and artifact URLs only work for authenticated users: https://github.com/JayFoxRox/GitHub-artifact-URL/issues/4 so the tool doesn't even work for our use-case anymore (which is frustrating, as we waited for a solution for weeks, and had manually updated the download URL on our website for now). I think a simple script like mine would still work for other use-cases in this issue, though.
I have created #51 for the permission issue.
@JayFoxRox, you might find eine/tip useful or, at least, inspiring. As a matter of fact, I wrote that action in JavaScript several months ago. Artifacts were not supported, so my strategy was to use a single pre-release and update it. It didn't work as expected, because recreating the release would spam all watchers.
Then, I rewrote it as a Docker Action in Python. The pre-release is kept, but assets are updated/overwritten, hence notifications are not triggered. The usage of tip is similar to this action. Precisely, I accumulate all the artifacts with upload-artifact and I use an additional job to update the "nightly" release:
nightly:
needs: [ lin, win ]
runs-on: ubuntu-latest
steps:
- uses: actions/download-artifact@v2
with:
path: ./
- uses: eine/tip@master
with:
token: ${{ secrets.GITHUB_TOKEN }}
tag: 'nightly'
files: |
./artifact/*
tip also force-pushes the tag, for it to point to the commit that corresponds to the updated artifacts/assets.
The advantage compared to using GitHub-artifact-URL, is that the pre-relase provides a nice and consistent URL for users to download assets, and no authentication is required: https://github.com/user/repo/releases/download/nightly/artifact_name.ext
.
Also see related discussions like #27 and #50.
We would like a direct URL for our nightly builds (like the format proposed in the issue description). We don't want to trash our repositories GitHub Releases for nightly binaries / many tagged releases - we are also fine with short retention for nightly builds.
We had previously used Travis CI and AppVeyor CI, where none of this was any issue. With GitHub Actions it's a massive headache / various issues.
I had made a quick and dirty tool to redirect users to the latest artifact URL using the new API. This tool is at https://github.com/JayFoxRox/GitHub-artifact-URL/
However, now the actions API and artifact URLs only work for authenticated users: JayFoxRox/GitHub-artifact-URL#4 so the tool doesn't even work for our use-case anymore (which is frustrating, as we waited for a solution for weeks, and had manually updated the download URL on our website for now). I think a simple script like mine would still work for other use-cases in this issue, though.
I have created #51 for the permission issue.
Thank you so much!
I have created this action that creates a comment in pull request and/or associated issues with the link to all / subset of artifacts https://github.com/marketplace/actions/workflow-artifact-pull-request-comment
Solution similar to @eine
See: https://github.com/actions/upload-artifact/issues/51#issuecomment-1893927846
For those looking to grab this in bash, here's a short script for grabbing by workflow run and artifact name: https://gist.github.com/Willsr71/e4884be88f98b4c298692975c0ec8edb
The same done in two lines of gh, which is available by default in GitHub Actions.
- name: 'Download latest successful build artifact'
run: |
gh_last_success_run_id=$(gh run list -w $WORKFLOW --json conclusion,headBranch,databaseId --jq 'first(.[] | select(.conclusion | contains("success"))) | .databaseId')
[ -z "$gh_last_success_run_id" ] && echo "No successful run found" && exit 1 || true
gh run download $gh_last_success_run_id -n $ARTIFACT_NAME -D $OUTPUT_DIR
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
WORKFLOW: .github/workflows/build.yaml
ARTIFACT_NAME: application
OUTPUT_DIR: app/build
Where the variables are as follows:
-
WORKFLOW
: The path to the GitHub Actions workflow file that is being targeted. -
ARTIFACT_NAME
: The name of the artifact that was produced by the successful workflow run. -
OUTPUT_DIR
: The directory path where the downloaded artifact will be unpacked.