mirror of
https://code.forgejo.org/actions/forgejo-release.git
synced 2026-05-07 02:57:36 +02:00
feat(ci): Allow uploading single files
This commit is contained in:
parent
e7b60f9ae8
commit
562c553e31
4 changed files with 37 additions and 1 deletions
|
|
@ -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 }}` |
|
| `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 }}` |
|
| `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-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` | <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` | `""` |
|
| `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` | `""` |
|
| `direction` | <p>Can either be <code>download</code> or <code>upload</code></p> | `true` | `""` |
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,8 @@ inputs:
|
||||||
release-dir:
|
release-dir:
|
||||||
description: 'Directory in which release assets are uploaded or downloaded'
|
description: 'Directory in which release assets are uploaded or downloaded'
|
||||||
default: 'dist/release'
|
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:
|
release-notes:
|
||||||
description: 'Release notes'
|
description: 'Release notes'
|
||||||
release-notes-file:
|
release-notes-file:
|
||||||
|
|
@ -96,6 +98,7 @@ runs:
|
||||||
export TOKEN=${{ inputs.token }}
|
export TOKEN=${{ inputs.token }}
|
||||||
|
|
||||||
export RELEASE_DIR="${{ inputs.release-dir }}"
|
export RELEASE_DIR="${{ inputs.release-dir }}"
|
||||||
|
export RELEASE_FILES=(${{ inputs.release-files }})
|
||||||
|
|
||||||
export RELEASENOTES=$(cat << 'EOF'
|
export RELEASENOTES=$(cat << 'EOF'
|
||||||
${{ inputs.release-notes }}
|
${{ inputs.release-notes }}
|
||||||
|
|
|
||||||
|
|
@ -91,10 +91,17 @@ upload_release() {
|
||||||
fi
|
fi
|
||||||
if [ "$SKIP_ASSETS" == 'false' ]; then
|
if [ "$SKIP_ASSETS" == 'false' ]; then
|
||||||
release_id=$(jq --raw-output .id <"$TMP_DIR"/release.json)
|
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://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
|
# https://unix.stackexchange.com/questions/94295/shellcheck-is-advising-not-to-use-basename-why/94307#94307
|
||||||
# url encode some chars
|
# 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)"
|
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 ! 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
|
if ${VERBOSE:-false}; then
|
||||||
|
|
|
||||||
|
|
@ -122,5 +122,30 @@ jobs:
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
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()
|
- if: failure()
|
||||||
run: docker logs forgejo
|
run: docker logs forgejo
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue