mirror of
https://code.forgejo.org/actions/forgejo-release.git
synced 2024-11-24 19:14:45 +01:00
Support downloading the latest release of a repo (#16)
This PR adds the functionality to download the latest release from a repo. The API provides an endpoint to do so, so an option has been added to the action. This closes #12 Co-authored-by: benniekiss <bgmt@mail.bbalm.me> Reviewed-on: https://code.forgejo.org/actions/forgejo-release/pulls/16 Reviewed-by: earl-warren <earl-warren@noreply.code.forgejo.org> Co-authored-by: benniekiss <benniekiss@noreply.code.forgejo.org> Co-committed-by: benniekiss <benniekiss@noreply.code.forgejo.org>
This commit is contained in:
parent
de47e391d3
commit
a5aa633273
9 changed files with 101 additions and 24 deletions
39
README.md
39
README.md
|
@ -1,30 +1,31 @@
|
|||
# forgejo-release
|
||||
|
||||
<!-- action-docs-description -->
|
||||
<!-- action-docs-description source="action.yml" -->
|
||||
## Description
|
||||
|
||||
Upload or download the assets of a release to a Forgejo instance.
|
||||
<!-- action-docs-description -->
|
||||
<!-- action-docs-inputs -->
|
||||
<!-- action-docs-description source="action.yml" -->
|
||||
<!-- action-docs-inputs source="action.yml" -->
|
||||
## Inputs
|
||||
|
||||
| parameter | description | required | default |
|
||||
| name | description | required | default |
|
||||
| --- | --- | --- | --- |
|
||||
| url | URL of the Forgejo instance | `false` | |
|
||||
| repo | owner/project relative to the URL | `false` | |
|
||||
| tag | Tag of the release | `false` | |
|
||||
| sha | SHA of the release | `false` | |
|
||||
| token | Forgejo application token | `true` | |
|
||||
| release-dir | Directory in whichs release assets are uploaded or downloaded | `true` | |
|
||||
| release-notes | Release notes | `false` | |
|
||||
| direction | Can either be download or upload | `true` | |
|
||||
| gpg-private-key | GPG Private Key to sign the release artifacts | `false` | |
|
||||
| gpg-passphrase | Passphrase of the GPG Private Key | `false` | |
|
||||
| download-retry | Number of times to retry if the release is not ready (default 1) | `false` | |
|
||||
| verbose | Increase the verbosity level | `false` | false |
|
||||
| override | Override an existing release by the same {tag} | `false` | false |
|
||||
| prerelease | Mark Release as Pre-Release | `false` | false |
|
||||
<!-- action-docs-inputs -->
|
||||
| `url` | <p>URL of the Forgejo instance</p> | `false` | `""` |
|
||||
| `repo` | <p>owner/project relative to the URL</p> | `false` | `""` |
|
||||
| `tag` | <p>Tag of the release</p> | `false` | `""` |
|
||||
| `sha` | <p>SHA of the release</p> | `false` | `""` |
|
||||
| `token` | <p>Forgejo application token</p> | `true` | `""` |
|
||||
| `release-dir` | <p>Directory in whichs release assets are uploaded or downloaded</p> | `true` | `""` |
|
||||
| `release-notes` | <p>Release notes</p> | `false` | `""` |
|
||||
| `direction` | <p>Can either be download or upload</p> | `true` | `""` |
|
||||
| `gpg-private-key` | <p>GPG Private Key to sign the release artifacts</p> | `false` | `""` |
|
||||
| `gpg-passphrase` | <p>Passphrase of the GPG Private Key</p> | `false` | `""` |
|
||||
| `download-retry` | <p>Number of times to retry if the release is not ready (default 1)</p> | `false` | `""` |
|
||||
| `download-latest` | <p>Download the latest release</p> | `false` | `false` |
|
||||
| `verbose` | <p>Increase the verbosity level</p> | `false` | `false` |
|
||||
| `override` | <p>Override an existing release by the same {tag}</p> | `false` | `false` |
|
||||
| `prerelease` | <p>Mark Release as Pre-Release</p> | `false` | `false` |
|
||||
<!-- action-docs-inputs source="action.yml" -->
|
||||
|
||||
## Example
|
||||
|
||||
|
|
|
@ -29,6 +29,9 @@ inputs:
|
|||
description: 'Passphrase of the GPG Private Key'
|
||||
download-retry:
|
||||
description: 'Number of times to retry if the release is not ready (default 1)'
|
||||
download-latest:
|
||||
description: 'Download the latest release'
|
||||
default: 'false'
|
||||
verbose:
|
||||
description: 'Increase the verbosity level'
|
||||
default: 'false'
|
||||
|
@ -66,6 +69,8 @@ runs:
|
|||
TAG=${TAG##refs/tags/}
|
||||
fi
|
||||
|
||||
export DOWNLOAD_LATEST="${{ inputs.download-latest }}"
|
||||
|
||||
export PRERELEASE="${{ inputs.prerelease }}"
|
||||
|
||||
export TOKEN="${{ inputs.token }}"
|
||||
|
|
|
@ -8,6 +8,7 @@ if ${VERBOSE:-false}; then set -x; fi
|
|||
: ${FORGEJO:=https://codeberg.org}
|
||||
: ${REPO:=forgejo-integration/forgejo}
|
||||
: ${RELEASE_DIR:=dist/release}
|
||||
: ${DOWNLOAD_LATEST:=false}
|
||||
: ${TMP_DIR:=$(mktemp -d)}
|
||||
: ${GNUPGHOME:=$TMP_DIR}
|
||||
: ${BIN_DIR:=$TMP_DIR}
|
||||
|
@ -143,18 +144,23 @@ wait_release() {
|
|||
|
||||
download() {
|
||||
setup_api
|
||||
wait_release
|
||||
(
|
||||
mkdir -p $RELEASE_DIR
|
||||
cd $RELEASE_DIR
|
||||
api GET repos/$REPO/releases/tags/$TAG > $TMP_DIR/assets.json
|
||||
if [[ ${DOWNLOAD_LATEST} == "true" ]] ; then
|
||||
echo "Downloading the latest release"
|
||||
api GET repos/$REPO/releases/latest > $TMP_DIR/assets.json
|
||||
elif [[ ${DOWNLOAD_LATEST} == "false" ]] ; then
|
||||
wait_release
|
||||
echo "Downloading tagged release ${TAG}"
|
||||
api GET repos/$REPO/releases/tags/$TAG > $TMP_DIR/assets.json
|
||||
fi
|
||||
jq --raw-output '.assets[] | "\(.name) \(.browser_download_url)"' < $TMP_DIR/assets.json | while read name url ; do
|
||||
curl --fail -H "Authorization: token $TOKEN" -o $name -L $url
|
||||
done
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
missing() {
|
||||
echo need upload or download argument got nothing
|
||||
exit 1
|
||||
|
|
|
@ -35,6 +35,31 @@ jobs:
|
|||
release-dir: upload-dir
|
||||
release-notes: "RELEASE NOTES"
|
||||
verbose: true
|
||||
- id: release-upload-override
|
||||
uses: SELF@vTest
|
||||
with:
|
||||
direction: upload
|
||||
url: ${{ steps.forgejo.outputs.url }}
|
||||
repo: testuser/testrepo
|
||||
tag: v1.0
|
||||
sha: ${{ steps.testrepo.outputs.sha }}
|
||||
token: ${{ steps.forgejo.outputs.token }}
|
||||
release-dir: upload-dir
|
||||
release-notes: "RELEASE NOTES"
|
||||
override: true
|
||||
verbose: true
|
||||
- id: release-upload-v2
|
||||
uses: SELF@vTest
|
||||
with:
|
||||
direction: upload
|
||||
url: ${{ steps.forgejo.outputs.url }}
|
||||
repo: testuser/testrepo
|
||||
tag: v2.0
|
||||
sha: ${{ steps.testrepo.outputs.sha }}
|
||||
token: ${{ steps.forgejo.outputs.token }}
|
||||
release-dir: upload-dir-v2
|
||||
release-notes: "RELEASE NOTES V2"
|
||||
verbose: true
|
||||
- id: release-download
|
||||
uses: SELF@vTest
|
||||
with:
|
||||
|
@ -47,5 +72,17 @@ jobs:
|
|||
verbose: true
|
||||
- run: |
|
||||
diff -u upload-dir download-dir
|
||||
- id: release-download-latest
|
||||
uses: SELF@vTest
|
||||
with:
|
||||
direction: download
|
||||
url: ${{ steps.forgejo.outputs.url }}
|
||||
repo: testuser/testrepo
|
||||
token: ${{ steps.forgejo.outputs.token }}
|
||||
release-dir: download-dir-v2
|
||||
download-latest: true
|
||||
verbose: true
|
||||
- run: |
|
||||
diff -u upload-dir-v2 download-dir-v2
|
||||
- if: failure()
|
||||
run: docker logs forgejo
|
||||
|
|
1
testdata/nested-upload-download/upload-dir-v2/file1-v2.txt
vendored
Normal file
1
testdata/nested-upload-download/upload-dir-v2/file1-v2.txt
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
FILE1-V2
|
1
testdata/nested-upload-download/upload-dir-v2/file2-v2.txt
vendored
Normal file
1
testdata/nested-upload-download/upload-dir-v2/file2-v2.txt
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
FILE2-V2
|
|
@ -18,7 +18,7 @@ jobs:
|
|||
release-notes: "RELEASE NOTES"
|
||||
verbose: true
|
||||
- if: ${{ !startsWith(github.ref, 'refs/tags/v') }}
|
||||
id: release-upload
|
||||
id: release-upload-override
|
||||
uses: SELF@vTest
|
||||
with:
|
||||
direction: upload
|
||||
|
@ -26,7 +26,17 @@ jobs:
|
|||
token: FORGEJO_TOKEN
|
||||
release-dir: upload-dir
|
||||
release-notes: "RELEASE NOTES"
|
||||
override: "true"
|
||||
override: true
|
||||
verbose: true
|
||||
- if: ${{ !startsWith(github.ref, 'refs/tags/v') }}
|
||||
id: release-upload-v2
|
||||
uses: SELF@vTest
|
||||
with:
|
||||
direction: upload
|
||||
tag: v2.0
|
||||
token: FORGEJO_TOKEN
|
||||
release-dir: upload-dir-v2
|
||||
release-notes: "RELEASE NOTES V2"
|
||||
verbose: true
|
||||
- if: ${{ !startsWith(github.ref, 'refs/tags/v') }}
|
||||
id: release-download
|
||||
|
@ -40,3 +50,17 @@ jobs:
|
|||
- if: ${{ !startsWith(github.ref, 'refs/tags/v') }}
|
||||
run: |
|
||||
diff -u upload-dir download-dir
|
||||
- if: ${{ !startsWith(github.ref, 'refs/tags/v') }}
|
||||
id: release-download-latest
|
||||
uses: SELF@vTest
|
||||
with:
|
||||
direction: download
|
||||
token: FORGEJO_TOKEN
|
||||
release-dir: download-dir-v2
|
||||
download-latest: true
|
||||
verbose: true
|
||||
- if: ${{ !startsWith(github.ref, 'refs/tags/v') }}
|
||||
run: |
|
||||
diff -u upload-dir-v2 download-dir-v2
|
||||
- if: failure()
|
||||
run: docker logs forgejo
|
||||
|
|
1
testdata/upload-download/upload-dir-v2/file1-v2.txt
vendored
Normal file
1
testdata/upload-download/upload-dir-v2/file1-v2.txt
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
FILE1-V2
|
1
testdata/upload-download/upload-dir-v2/file2-v2.txt
vendored
Normal file
1
testdata/upload-download/upload-dir-v2/file2-v2.txt
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
FILE2-V2
|
Loading…
Reference in a new issue