upload-artifact icon indicating copy to clipboard operation
upload-artifact copied to clipboard

Download artifacts of latest build

Open davidmoremad opened this issue 5 years ago • 9 comments

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

davidmoremad avatar Oct 05 '19 08:10 davidmoremad

I would like to know how to get link url too. ref https://github.com/actions/upload-artifact/issues/2#issuecomment-536166961

bokuweb avatar Oct 05 '19 09:10 bokuweb

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

teohhanhui avatar Oct 25 '19 12:10 teohhanhui

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.

konradpabjan avatar Dec 06 '19 17:12 konradpabjan

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 avatar Feb 02 '20 06:02 JayFoxRox

@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.

eine avatar May 15 '20 02:05 eine

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!

Titaniumtown avatar Aug 24 '20 14:08 Titaniumtown

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

tonyhallett avatar Apr 06 '21 13:04 tonyhallett

Solution similar to @eine

See: https://github.com/actions/upload-artifact/issues/51#issuecomment-1893927846

Kagami avatar Jan 16 '24 15:01 Kagami

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

Willsr71 avatar Sep 18 '24 20:09 Willsr71

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:

  1. WORKFLOW: The path to the GitHub Actions workflow file that is being targeted.

  2. ARTIFACT_NAME: The name of the artifact that was produced by the successful workflow run.

  3. OUTPUT_DIR: The directory path where the downloaded artifact will be unpacked.

SilverFire avatar Oct 04 '24 11:10 SilverFire