upload-release-asset icon indicating copy to clipboard operation
upload-release-asset copied to clipboard

Add the ability to use wildcards for uploading files.

Open opussf opened this issue 4 years ago • 12 comments

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

opussf avatar Sep 03 '20 22:09 opussf

Dup of #47. Ref #58.

eine avatar Sep 04 '20 03:09 eine

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

alexellis avatar Nov 03 '20 09:11 alexellis

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?

Felixoid avatar Nov 03 '20 23:11 Felixoid

I would accept a PR for that 👍

alexellis avatar Nov 03 '20 23:11 alexellis

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

eyal0 avatar Jan 05 '21 22:01 eyal0

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/[email protected]          # ✨✨✨
        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

maelvls avatar Jan 06 '21 10:01 maelvls

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?

eyal0 avatar Jan 06 '21 16:01 eyal0

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

maelvls avatar Jan 09 '21 20:01 maelvls

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

  • #58
  • eine/tip
  • msys2/msys2-autobuild was initially based on eine/tip, but was then customised. It uses the same Python library (pyGitHub), but the internal logic is completely different (adapted to MSYS2's non-trivial ecosystem).

eine avatar Jan 09 '21 20:01 eine

@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!)

eyal0 avatar Jan 09 '21 20:01 eyal0

@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!)

eine avatar Jan 09 '21 21:01 eine

I now used this action

1-alex98 avatar Feb 16 '21 23:02 1-alex98