feat(ci): Allow uploading single files

This commit is contained in:
x7z4w 2026-02-24 14:02:31 +00:00
parent e7b60f9ae8
commit 562c553e31
4 changed files with 37 additions and 1 deletions

View file

@ -17,6 +17,7 @@ Upload or download the assets of a release to a Forgejo instance.
| `sha` | <p>SHA of the release</p> | `false` | `${{ forge.sha }}` |
| `token` | <p>Forgejo application token (must have <code>write:repository</code>)</p> | `false` | `${{ forge.token }}` |
| `release-dir` | <p>Directory in which release assets are uploaded or downloaded</p> | `false` | `dist/release` |
| `release-files` | <p>Path to one or multiple release asset files to be uploaded (can be used alongside <code>release-dir</code>)</p> | `false` | `""` |
| `release-notes` | <p>Release notes</p> | `false` | `""` |
| `release-notes-file` | <p>Path to a file containing your release notes (takes priority over <code>release-notes</code>)</p> | `false` | `""` |
| `direction` | <p>Can either be <code>download</code> or <code>upload</code></p> | `true` | `""` |

View file

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

View file

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

View file

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