diff --git a/.forgejo/workflows/integration.yml b/.forgejo/workflows/integration.yml index ba79cf2..8e2b422 100644 --- a/.forgejo/workflows/integration.yml +++ b/.forgejo/workflows/integration.yml @@ -1,9 +1,11 @@ -on: [ pull_request, push ] - +on: + pull_request: + push: + branches: + - "**" env: - FORGEJO_VERSION: 11.0.9 # renovate: datasource=docker depName=code.forgejo.org/forgejo/forgejo - + FORGEJO_VERSION: 11.0.10 # renovate: datasource=docker depName=data.forgejo.org/forgejo/forgejo jobs: integration: @@ -12,7 +14,7 @@ jobs: - uses: actions/checkout@v6 - id: forgejo - uses: https://code.forgejo.org/actions/setup-forgejo@v3.1.0 + uses: https://code.forgejo.org/actions/setup-forgejo@v3.1.3 with: user: testuser password: admin1234 @@ -68,7 +70,7 @@ jobs: testdata/forgejo-release-test.sh test_run testuser otherrepo - if: always() - name: '[RUNNER] and [FORGEJO] logs' + name: "[RUNNER] and [FORGEJO] logs" run: | runner_logs="${{ steps.forgejo.outputs.runner-logs }}" if test -f "$runner_logs"; then diff --git a/.forgejo/workflows/release.yml b/.forgejo/workflows/release.yml new file mode 100644 index 0000000..e3c5bca --- /dev/null +++ b/.forgejo/workflows/release.yml @@ -0,0 +1,23 @@ +on: + push: + tags: + - v* + +jobs: + publish: + runs-on: docker + + steps: + # needs to be in a different dir, so binary and rna cache don't conflict + - uses: https://data.forgejo.org/actions/checkout@v6 + with: + path: forgejo-release + + - name: publish release + uses: ./forgejo-release + with: + direction: upload + override: ${{ vars.OVERRIDE || 'false' }} + verbose: ${{ vars.VERBOSE || 'false' }} + release-notes-assistant: true + skip-assets: true diff --git a/.forgejo/workflows/tests.yml b/.forgejo/workflows/tests.yml index f00722b..d521c77 100644 --- a/.forgejo/workflows/tests.yml +++ b/.forgejo/workflows/tests.yml @@ -1,10 +1,27 @@ -on: [ pull_request, push ] +on: + pull_request: + push: + branches: + - "**" + jobs: tests: runs-on: docker + container: + image: data.forgejo.org/oci/node:24-trixie + steps: - uses: actions/checkout@v6 + - name: lint action-docs + run: | + npx --yes action-docs -u + git diff --quiet || { + echo "[ERROR] Please apply the changes action-docs suggests:" + git diff --color=always + exit 1 + } + - name: Unit tests of the supporting script forgejo-release.sh run: | testdata/forgejo-release-test.sh test_system_tea_bin diff --git a/README.md b/README.md index f00e8bc..f73f620 100644 --- a/README.md +++ b/README.md @@ -10,13 +10,13 @@ Upload or download the assets of a release to a Forgejo instance. | name | description | required | default | | --- | --- | --- | --- | -| `url` |
URL of the Forgejo instance
| `false` | `${{ env.GITHUB_SERVER_URL }}` | -| `repo` |owner/project relative to the URL
| `false` | `${{ github.repository }}` | -| `tag` |Tag of the release
| `false` | `${{ github.ref_name }}` | +| `url` |URL of the Forgejo instance
| `false` | `${{ env.FORGEJO_SERVER_URL }}` | +| `repo` |owner/project relative to the URL
| `false` | `${{ forge.repository }}` | +| `tag` |Tag of the release
| `false` | `${{ forge.ref_name }}` | | `title` |Title of the release (defaults to tag)
| `false` | `""` | -| `sha` |SHA of the release
| `false` | `${{ github.sha }}` | -| `token` |Forgejo application token (must have `write:repository`)
| `false` | `${{ secrets.GITHUB_TOKEN }}` | -| `release-dir` |Directory in whichs release assets are uploaded or downloaded
| `true` | `""` | +| `sha` |SHA of the release
| `false` | `${{ forge.sha }}` | +| `token` |Forgejo application token (must have write:repository)
Directory in which release assets are uploaded or downloaded
| `false` | `dist/release` | | `release-notes` |Release notes
| `false` | `""` | | `direction` |Can either be download or upload
GPG Private Key to sign the release artifacts
| `false` | `""` | @@ -28,6 +28,7 @@ Upload or download the assets of a release to a Forgejo instance. | `prerelease` |Mark Release as Pre-Release
| `false` | `false` | | `release-notes-assistant` |Generate release notes with Release Notes Assistant
| `false` | `false` | | `hide-archive-link` |Hide the archive links
| `false` | `false` | +| `skip-assets` |Skip uploading release assets
| `false` | `false` | ## Examples @@ -42,7 +43,7 @@ jobs: runs-on: docker steps: - uses: actions/checkout@v4 - - uses: actions/forgejo-release@v2.7.3 + - uses: actions/forgejo-release@v2.9.1 with: direction: upload url: https://my-forgejo-instance.net @@ -63,7 +64,7 @@ jobs: runs-on: docker steps: - uses: actions/checkout@v4 - - uses: actions/forgejo-release@v2.7.3 + - uses: actions/forgejo-release@v2.9.1 with: direction: download url: https://my-forgejo-instance.net @@ -83,5 +84,5 @@ Using [action-docs](https://github.com/npalm/action-docs): ```shell # Edit the action.yml file and run: -action-docs --update-readme +npx action-docs --update-readme ``` diff --git a/action.yml b/action.yml index f6725c7..adbcc1b 100644 --- a/action.yml +++ b/action.yml @@ -19,11 +19,11 @@ inputs: description: 'SHA of the release' default: '${{ forge.sha }}' token: - description: 'Forgejo application token' + description: 'Forgejo application token (must have `write:repository`)' default: '${{ forge.token }}' release-dir: - description: 'Directory in whichs release assets are uploaded or downloaded' - required: true + description: 'Directory in which release assets are uploaded or downloaded' + default: 'dist/release' release-notes: description: 'Release notes' direction: @@ -37,22 +37,25 @@ inputs: description: 'Number of times to retry if the release is not ready (default 1)' download-latest: description: 'Download the latest release' - default: false + default: 'false' verbose: description: 'Increase the verbosity level' - default: false + default: 'false' override: description: 'Override an existing release by the same `{tag}`' - default: false + default: 'false' prerelease: description: 'Mark Release as Pre-Release' - default: false + default: 'false' release-notes-assistant: description: 'Generate release notes with Release Notes Assistant' - default: false + default: 'false' hide-archive-link: description: 'Hide the archive links' - default: false + default: 'false' + skip-assets: + description: Skip uploading release assets + default: 'false' runs: using: "composite" @@ -113,5 +116,7 @@ runs: echo -n "${{ inputs.gpg-passphrase }}" > $TMP_DIR/gpg-passphrase export GPG_PASSPHRASE="$TMP_DIR/gpg-passphrase" + export SKIP_ASSETS="${{ inputs.skip-assets }}" + forgejo-release.sh ${{ inputs.direction }} shell: bash diff --git a/forgejo-release.sh b/forgejo-release.sh index 83ce24d..88539b1 100755 --- a/forgejo-release.sh +++ b/forgejo-release.sh @@ -18,6 +18,7 @@ if ${VERBOSE:-false}; then set -x; fi : ${HIDE_ARCHIVE_LINK:=false} : ${RETRY:=1} : ${DELAY:=10} +: ${SKIP_ASSETS:=false} RELEASE_NOTES_ASSISTANT_VERSION=v1.5.1 # renovate: datasource=forgejo-releases depName=forgejo/release-notes-assistant registryUrl=https://code.forgejo.org @@ -84,9 +85,11 @@ upload_release() { # It is expanded using "${assets[@]}" which preserves the separation of arguments and not split whitespace containing values. # For reference, see https://github.com/koalaman/shellcheck/wiki/SC2086#exceptions local assets=() - for file in "$RELEASE_DIR"/*; do - assets=("${assets[@]}" -a "$file") - done + if [ "$SKIP_ASSETS" == 'false' ]; then + for file in "$RELEASE_DIR"/*; do + assets=("${assets[@]}" -a "$file") + done + fi if $PRERELEASE || echo "${TAG}" | grep -qi '\-rc'; then releaseType="--prerelease" echo "Uploading as Pre-Release" @@ -207,7 +210,7 @@ download() { ( mkdir -p $RELEASE_DIR cd $RELEASE_DIR - if [[ ${DOWNLOAD_LATEST} == "true" ]]; then + 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 diff --git a/testdata/nested-upload-download/.forgejo/workflows/test.yml b/testdata/nested-upload-download/.forgejo/workflows/test.yml index 83be00c..2ebfbe7 100644 --- a/testdata/nested-upload-download/.forgejo/workflows/test.yml +++ b/testdata/nested-upload-download/.forgejo/workflows/test.yml @@ -16,7 +16,7 @@ jobs: steps: - uses: actions/checkout@v6 - id: forgejo - uses: https://code.forgejo.org/actions/setup-forgejo@v3.1.0 + uses: https://code.forgejo.org/actions/setup-forgejo@v3.1.3 with: user: testuser password: admin1234 diff --git a/testdata/upload-download/.forgejo/workflows/test.yml b/testdata/upload-download/.forgejo/workflows/test.yml index a9c357d..518e019 100644 --- a/testdata/upload-download/.forgejo/workflows/test.yml +++ b/testdata/upload-download/.forgejo/workflows/test.yml @@ -92,5 +92,35 @@ jobs: - if: ${{ !startsWith(github.ref, 'refs/tags/v') }} run: | diff -u upload-dir-v3 download-dir-v3 + + - if: ${{ !startsWith(github.ref, 'refs/tags/v') }} + id: release-upload-v4 + uses: SELF@vTest + with: + direction: upload + tag: v4.0 + token: FORGEJO_TEST_TOKEN + skip-assets: true + verbose: true + + - if: ${{ !startsWith(github.ref, 'refs/tags/v') }} + id: release-download-v4 + uses: SELF@vTest + with: + direction: download + tag: v4.0 + token: FORGEJO_TEST_TOKEN + release-dir: download-dir-v4 + - if: ${{ !startsWith(github.ref, 'refs/tags/v') }} + run: | + if [ ! -d download-dir-v4 ]; then + echo "Missing download dir" + exit 1 + fi + if [ ! -z "$( ls -A download-dir-v4 )" ]; then + echo "Unexpected download files: $( ls -A download-dir-v4 )" + exit 1 + fi + - if: failure() run: docker logs forgejo