actions / upload-release-asset

An Action to upload a release asset via the GitHub Release API
MIT License
687 stars 189 forks source link

Add the ability to use wildcards for uploading files. #60

Open opussf opened 4 years ago

opussf commented 4 years ago

Allow multiple files to be uploaded, either from a list, or from wildcard expansion.

Many build systems create artifact files that do not have a name known before hand, and may want to publish multiple files. For example, a zip filename that includes the tag, or the branch that it was created from, or even for what environment it is built for (Windows / MacOS / iOS / Android / etc.) And adding supporting files, such as an MD5 / SHA1 file, or a signature file.

This would probably require removing the 'asset_name' and 'asset_content_type' attributes to have these generated by this action.

IE:
asset_path: | path/to/files/*.zip path/to/files/special_file_name

eine commented 4 years ago

Dup of #47. Ref #58.

alexellis commented 3 years ago

I would also be supportive of this

@opussf if it's of use to you, feel free to use: https://github.com/marketplace/actions/upload-release-assets

Felixoid commented 3 years ago

Hey @alexellis, looks good. Do you consider to add a way to define the tag for upload manually? Or using ${{ github.event.release }} object for it?

alexellis commented 3 years ago

I would accept a PR for that 👍

eyal0 commented 3 years ago

@opussf You can accomplish this by setting an environment variable and then using it?

      - run: echo "FOO=$(echo hello)" >> $GITHUB_ENV
      - name: Upload windows Release Asset
        uses: actions/upload-release-asset@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          upload_url: ${{ steps.create_release.outputs.upload_url }}
          asset_path: pcb2gcode-windows/pcb2gcode-${{ env.FOO }}.tar

But still, having wildcard support would be nice. It's not clear to me how you would specify multiple asset_names for multiple asset_paths.

maelvls commented 3 years ago

As a workaround, I have been using @alexellis's alexellis/upload-assets. For example (see in my ci.yml):

  release:
    steps:
      - id: create_release
        uses: actions/create-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          tag_name: ${{ github.ref }}
          release_name: ${{ github.ref }}

      - uses: actions/download-artifact@v2
        with:
          name: ocamlyices2
          path: ocamlyices2

      - uses: alexellis/upload-assets@0.2.2          # ✨✨✨
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          asset_paths: '["./gmp/*"]'

The actions/download-artifact@v2 action downloads the ocamlyices2 artifact into ./ocamlyices2/ folder. After downloading, the folder looks like this (you can see the artifact itself on the job page):

ocamlyices2
├── ocamlyices2-v0.0.4-x86_64-apple-darwin19.6.0.tar.gz
├── ocamlyices2-v0.0.4-x86_64-apple-darwin19.6.0.tar.gz.sha256
├── ocamlyices2-v0.0.4-x86_64-unknown-linux-gnu.tar.gz
├── ocamlyices2-v0.0.4-x86_64-unknown-linux-gnu.tar.gz.sha256
├── ocamlyices2-v0.0.4-x86_64-w64-mingw32.tar.gz
└── ocamlyices2-v0.0.4-x86_64-w64-mingw32.tar.gz.sha256

Finally, the alexellis/upload-assets action uploads everything that is in ./ocanlyices2/*; the above assets now appear on the Github Release page:

example-with-alexellis_upload-assets

eyal0 commented 3 years ago

But if you have wildcards, where does the name come from? Just from the file name? What if multiple files with the same name match?

maelvls commented 3 years ago

I make sure to have different file names (as shown in the screenshot above)

eine commented 3 years ago

@eyal0, very honestly, use pyGitHub or any other library for your favourite language and write your own script/action. If you know how to code (I believe you do), doing so will be easier and less frustrating than trying to use this Action. See:

eyal0 commented 3 years ago

@eine I ended up using a different action which already includes an upload feature. It uses some javascript libraries which are probably the equivalent of pyGitHub.

(I'm using msys2 to auto-release Windows builds with dozens of dlls and with great success. Thanks for msys2-setup!)

eine commented 3 years ago

@eyal0, all the libreries interact with the same API, so all of them are equivalent. I just referenced the Python because that's the one I'm more familiar with. The JS one is probably one of actions/toolkit#334, and that's ok too.

(So glad to hear that!)

1-alex98 commented 3 years ago

I now used this action