diff --git a/README.md b/README.md index aa37f81..277298c 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,7 @@ Upload or download the assets of a release to a Forgejo instance. | `sha` |

SHA of the release

| `false` | `${{ forge.sha }}` | | `token` |

Forgejo application token (must have write:repository)

| `false` | `${{ forge.token }}` | | `release-dir` |

Directory in which release assets are uploaded or downloaded

| `false` | `dist/release` | +| `release-files` |

Path to one or multiple release asset files to be uploaded (can be used alongside release-dir)

| `false` | `""` | | `release-notes` |

Release notes

| `false` | `""` | | `release-notes-file` |

Path to a file containing your release notes (takes priority over release-notes)

| `false` | `""` | | `direction` |

Can either be download or upload

| `true` | `""` | diff --git a/action.yml b/action.yml index c9a8f42..27e8a23 100644 --- a/action.yml +++ b/action.yml @@ -24,6 +24,8 @@ inputs: release-dir: description: 'Directory in which release assets are uploaded or downloaded' default: 'dist/release' + release-files: + description: 'Path to one or multiple release asset files to be uploaded (can be used alongside `release-dir`)' release-notes: description: 'Release notes' release-notes-file: @@ -96,6 +98,7 @@ runs: export TOKEN=${{ inputs.token }} export RELEASE_DIR="${{ inputs.release-dir }}" + export RELEASE_FILES=(${{ inputs.release-files }}) export RELEASENOTES=$(cat << 'EOF' ${{ inputs.release-notes }} diff --git a/forgejo-release.sh b/forgejo-release.sh index 7e25ecd..d5e5769 100755 --- a/forgejo-release.sh +++ b/forgejo-release.sh @@ -91,10 +91,17 @@ upload_release() { fi if [ "$SKIP_ASSETS" == 'false' ]; then release_id=$(jq --raw-output .id <"$TMP_DIR"/release.json) - for file in "$RELEASE_DIR"/*; do + for file in "$RELEASE_DIR"/* "$RELEASE_FILES"; do # https://dev.to/pkutaj/how-to-use-jq-for-uri-encoding-2o5 # https://unix.stackexchange.com/questions/94295/shellcheck-is-advising-not-to-use-basename-why/94307#94307 # url encode some chars + if [ ! "$file" ]; then + continue + fi + if [[ ! -e "$file" ]]; then + echo "$file: No such file or directory" + exit 1 + fi asset_name="$(echo -n "${file##*/}" | jq -sRr @uri)" if ! api POST "repos/$REPO/releases/$release_id/assets?name=$asset_name" -H "Content-Type: multipart/form-data" -F "attachment=@$file" >"$TMP_DIR/release-$asset_name.json"; then if ${VERBOSE:-false}; then diff --git a/testdata/upload-download/.forgejo/workflows/test.yml b/testdata/upload-download/.forgejo/workflows/test.yml index 518e019..aa70e47 100644 --- a/testdata/upload-download/.forgejo/workflows/test.yml +++ b/testdata/upload-download/.forgejo/workflows/test.yml @@ -122,5 +122,30 @@ jobs: exit 1 fi + - if: ${{ !startsWith(github.ref, 'refs/tags/v') }} + id: release-upload-files + uses: SELF@vTest + with: + direction: upload + tag: v/3.0-release-file + token: FORGEJO_TEST_TOKEN + release-files: | + upload-dir-v3/file1-v3.txt + upload-dir-v3/file2-v3.txt + release-notes: "RELEASE NOTES" + verbose: true + - if: ${{ !startsWith(github.ref, 'refs/tags/v') }} + id: release-download-with-slash-in-tag + uses: SELF@vTest + with: + direction: download + tag: v/3.0 + token: FORGEJO_TEST_TOKEN + release-dir: download-dir-v3-files + verbose: true + - if: ${{ !startsWith(github.ref, 'refs/tags/v') }} + run: | + diff -u upload-dir-v3 download-dir-v3 + - if: failure() run: docker logs forgejo