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