Compare commits

..

17 commits
v2.5.0 ... main

Author SHA1 Message Date
earl-warren
cb5b30e358
Merge pull request 'Update https://code.forgejo.org/actions/setup-forgejo action to v2.0.11' (#49) from renovate/https-code.forgejo.org-actions-setup-forgejo-2.x into main
Some checks failed
/ integration (push) Has been cancelled
Reviewed-on: https://code.forgejo.org/actions/forgejo-release/pulls/49
Reviewed-by: earl-warren <earl-warren@noreply.code.forgejo.org>
2025-04-13 10:06:09 +00:00
Renovate Bot
f0a9704521
Update https://code.forgejo.org/actions/setup-forgejo action to v2.0.11 2025-04-13 08:31:13 +00:00
earl-warren
73fec07c28
Merge pull request 'chore: teach renovate to update the example version' (#46) from earl-warren/forgejo-release:wip-renovate into main
Reviewed-on: https://code.forgejo.org/actions/forgejo-release/pulls/46
Reviewed-by: Michael Kriese <michael.kriese@gmx.de>
2025-04-13 06:46:33 +00:00
Earl Warren
dccbd17bd8
chore: teach renovate to update the example version 2025-04-12 13:33:43 +02:00
earl-warren
bc1ca37df0
Merge pull request 'chore: update the example to refer to v2.6.0' (#45) from wip-readme into main
Some checks are pending
/ integration (push) Waiting to run
Reviewed-on: https://code.forgejo.org/actions/forgejo-release/pulls/45
2025-04-12 11:28:07 +00:00
Earl Warren
a198449381
chore: update the example to refer to v2.6.0
and be explicit about the parameters to improve readability
2025-04-12 13:24:33 +02:00
dorianim
a6e3fdb19e
feat: add default token and document default values (#44)
Some checks failed
/ integration (push) Has been cancelled
This PR adds `${{ secrets.GITHUB_TOKEN }}` as the default value for the token and documents all default values in the readme.
Fixes #43

Co-authored-by: Dorian Zedler <dorian@itsblue.de>
Reviewed-on: https://code.forgejo.org/actions/forgejo-release/pulls/44
Reviewed-by: earl-warren <earl-warren@noreply.code.forgejo.org>
Co-authored-by: dorianim <dorianim@noreply.code.forgejo.org>
Co-committed-by: dorianim <dorianim@noreply.code.forgejo.org>
2025-04-07 06:35:43 +00:00
earl-warren
73ed2a76a2
Merge pull request 'fix: the tag cache must be deleted when the tag is deleted' (#40) from limiting-factor/forgejo-release:wip-delete into main
Some checks failed
/ integration (push) Has been cancelled
Reviewed-on: https://code.forgejo.org/actions/forgejo-release/pulls/40
Reviewed-by: earl-warren <earl-warren@noreply.code.forgejo.org>
2025-02-23 23:11:48 +00:00
limiting-factor
1a6975277b fix: the tag cache must be deleted when the tag is deleted
Otherwise it will linger and potentially create problem when
using overrides.
2025-02-23 23:52:48 +01:00
earl-warren
e2af55222e
Merge pull request 'fix: override=true must not needlessly delete a tag' (#39) from limiting-factor/forgejo-release:wip-override into main
Some checks are pending
/ integration (push) Waiting to run
Reviewed-on: https://code.forgejo.org/actions/forgejo-release/pulls/39
Reviewed-by: earl-warren <earl-warren@noreply.code.forgejo.org>
2025-02-23 20:43:42 +00:00
limiting-factor
0079bcb471 fix: override=true must not needlessly delete a tag
If the tag to be set is exactly the same as the tag that exists, do
not delete it.

When the tag is recreated although it is not necessary, it may trigger
workflows that have already been triggered and send the workflow in a
loop.

- split `get_tag` & `matched_tag` out of ensure_tag
- in case of an override, only delete the tag if it fails `matched_tag`
- trace shell lines to help debug
- add testing
2025-02-23 21:22:31 +01:00
limiting-factor
9d4ddfbaad chore(editorconfig): comply with .editorconfig 2025-02-23 19:02:08 +01:00
Michael Kriese
e4b9180780 Merge pull request 'Replace actions/setup-forgejo action with actions/setup-forgejo v1.0.1' (#36) from renovate/actions-setup-forgejo-replacement into main
Some checks failed
/ integration (push) Has been cancelled
Reviewed-on: https://code.forgejo.org/actions/forgejo-release/pulls/36
Reviewed-by: Michael Kriese <michael.kriese@gmx.de>
2024-12-10 05:51:36 +00:00
Renovate Bot
410b453871
Replace actions/setup-forgejo action with actions/setup-forgejo v1.0.1 2024-12-10 00:02:00 +00:00
Crown0815
4d26949b75 Add support for files with spaces in their names (#24)
Some checks are pending
/ integration (push) Waiting to run
So far when uploading files containing spaces, such as `file 3.txt`, the `tea` command will be broken due to incorrectly formatted `tea` arguments.
I have been receiving `Remote repository required: Specify ID via --repo or execute from a local git repo.` which was not helpful until I turned on `verbose` and saw the whole command.

This fix should resolve this issue and thereby add active support for files with spaces.

Co-authored-by: Felix Kröner <felix.kroener@dynamic-biosensors.com>
Reviewed-on: https://code.forgejo.org/actions/forgejo-release/pulls/24
Reviewed-by: earl-warren <earl-warren@noreply.code.forgejo.org>
Co-authored-by: Crown0815 <crown0815@noreply.code.forgejo.org>
Co-committed-by: Crown0815 <crown0815@noreply.code.forgejo.org>
2024-12-09 05:38:35 +00:00
earl-warren
c2742f30c0 Merge pull request 'Update actions/setup-forgejo action to v2.0.4' (#35) from renovate/actions-setup-forgejo-2.x into main
Some checks are pending
/ integration (push) Waiting to run
Reviewed-on: https://code.forgejo.org/actions/forgejo-release/pulls/35
Reviewed-by: earl-warren <earl-warren@noreply.code.forgejo.org>
2024-12-08 07:44:30 +00:00
Renovate Bot
4e4edf0d8c
Update actions/setup-forgejo action to v2.0.4 2024-12-08 00:02:10 +00:00
9 changed files with 172 additions and 113 deletions

View file

@ -6,7 +6,7 @@ jobs:
- uses: actions/checkout@v3
- id: forgejo
uses: https://code.forgejo.org/actions/setup-forgejo@v2.0.3
uses: https://code.forgejo.org/actions/setup-forgejo@v2.0.11
with:
user: testuser
password: admin1234

1
.gitignore vendored
View file

@ -1 +1,2 @@
*~
.idea

View file

@ -10,12 +10,12 @@ Upload or download the assets of a release to a Forgejo instance.
| name | description | required | default |
| --- | --- | --- | --- |
| `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` | `""` |
| `url` | <p>URL of the Forgejo instance</p> | `false` | `${{ env.GITHUB_SERVER_URL }}` |
| `repo` | <p>owner/project relative to the URL</p> | `false` | `${{ github.repository }}` |
| `tag` | <p>Tag of the release</p> | `false` | `${{ github.ref_name }}` |
| `title` | <p>Title of the release (defaults to tag)</p> | `false` | `""` |
| `sha` | <p>SHA of the release</p> | `false` | `""` |
| `token` | <p>Forgejo application token</p> | `true` | `""` |
| `sha` | <p>SHA of the release</p> | `false` | `${{ github.sha }}` |
| `token` | <p>Forgejo application token</p> | `false` | `${{ secrets.GITHUB_TOKEN }}` |
| `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 <code>download</code> or <code>upload</code></p> | `true` | `""` |
@ -37,16 +37,18 @@ Upload or download the assets of a release to a Forgejo instance.
Upload the release located in `release-dir` to the release section of a repository (`url` and `repo`):
```yaml
on: [tag]
jobs:
upload-release:
runs-on: ubuntu-latest
runs-on: docker
steps:
- uses: actions/checkout@v3
- uses: actions/forgejo-release@v2
- uses: actions/checkout@v4
- uses: actions/forgejo-release@v2.6.0
with:
direction: upload
url: https://code.forgejo.org
url: https://my-forgejo-instance.net
repo: myuser/myrepo
token: ${{ secrets.WRITE_TOKEN_TO_MYREPO }}
tag: v1.0.0
release-dir: dist/release
release-notes: "MY RELEASE NOTES"
```
@ -56,24 +58,24 @@ jobs:
Example downloading the forgejo release v1.21.4-0 into the working directory:
```yaml
on: [tag]
jobs:
download-release:
runs-on: ubuntu-latest
runs-on: docker
steps:
- uses: actions/checkout@v3
- uses: actions/forgejo-release@v2
- uses: actions/checkout@v4
- uses: actions/forgejo-release@v2.6.0
with:
direction: download
url: https://code.forgejo.org
repo: forgejo/forgejo
tag: v1.21.4-0
url: https://my-forgejo-instance.net
repo: myuser/myrepo
token: ${{ secrets.READ_TOKEN_TO_MYREPO }}
tag: v1.0.0
release-dir: ./ # by default, files are downloaded into dist/release
```
### Real world example
This action is used to [publish](https://code.forgejo.org/forgejo/release-notes-assistant/src/branch/main/.forgejo/workflows/release.yml) the release notes assistant assets.
This action is used to [publish](https://code.forgejo.org/forgejo/release-notes-assistant/src/commit/09f2c22d80d5ee655783cfeb2c1d4bab4afec3e4/.forgejo/workflows/release.yml) the release notes assistant assets.
## Update the `input` section of the README

View file

@ -6,17 +6,21 @@ description: |
inputs:
url:
description: 'URL of the Forgejo instance'
default: '${{ env.GITHUB_SERVER_URL }}'
repo:
description: 'owner/project relative to the URL'
default: '${{ github.repository }}'
tag:
description: 'Tag of the release'
default: '${{ github.ref_name }}'
title:
description: 'Title of the release (defaults to tag)'
sha:
description: 'SHA of the release'
default: '${{ github.sha }}'
token:
description: 'Forgejo application token'
required: true
default: '${{ secrets.GITHUB_TOKEN }}'
release-dir:
description: 'Directory in whichs release assets are uploaded or downloaded'
required: true
@ -57,9 +61,6 @@ runs:
shell: bash
- run: |
export FORGEJO="${{ inputs.url }}"
if test -z "$FORGEJO"; then
export FORGEJO="${{ env.GITHUB_SERVER_URL }}"
fi
# A trailing / will mean http://forgejo//api/v1 is used
# and it always 401 as of v1.19, because of the double slash
FORGEJO=${FORGEJO%%/}
@ -67,17 +68,8 @@ runs:
export HOST=${FORGEJO#*://}
export REPO="${{ inputs.repo }}"
if test -z "$REPO"; then
export REPO="${{ github.repository }}"
fi
export TAG="${{ inputs.tag }}"
if test -z "$TAG"; then
export TAG="${{ github.ref_name }}"
# until https://code.forgejo.org/forgejo/runner/issues/9 is fixed
# trim refs/tags/
TAG=${TAG##refs/tags/}
fi
export TITLE="${{ inputs.title }}"
@ -99,9 +91,6 @@ runs:
)
export SHA="${{ inputs.sha }}"
if test -z "$SHA"; then
export SHA="${{ github.sha }}"
fi
export OVERRIDE="${{ inputs.override }}"

View file

@ -19,46 +19,83 @@ if ${VERBOSE:-false}; then set -x; fi
: ${RETRY:=1}
: ${DELAY:=10}
TAG_FILE="$TMP_DIR/tag$$.json"
export GNUPGHOME
setup_tea() {
if ! test -f $BIN_DIR/tea ; then
ARCH=$(dpkg --print-architecture)
curl -sL https://dl.gitea.io/tea/$TEA_VERSION/tea-$TEA_VERSION-linux-$ARCH > $BIN_DIR/tea
chmod +x $BIN_DIR/tea
if ! test -f "$BIN_DIR"/tea; then
ARCH=$(dpkg --print-architecture)
curl -sL https://dl.gitea.io/tea/$TEA_VERSION/tea-$TEA_VERSION-linux-"$ARCH" >"$BIN_DIR"/tea
chmod +x "$BIN_DIR"/tea
fi
}
get_tag() {
if ! test -f "$TAG_FILE"; then
if api GET repos/$REPO/tags/"$TAG" >"$TAG_FILE"; then
echo "tag $TAG exists"
else
echo "tag $TAG does not exists"
fi
fi
test -s "$TAG_FILE"
}
matched_tag() {
if get_tag; then
local sha=$(jq --raw-output .commit.sha <"$TAG_FILE")
test "$sha" = "$SHA"
else
return 1
fi
}
ensure_tag() {
if api GET repos/$REPO/tags/$TAG > $TMP_DIR/tag.json ; then
local sha=$(jq --raw-output .commit.sha < $TMP_DIR/tag.json)
if test "$sha" != "$SHA" ; then
cat $TMP_DIR/tag.json
echo "the tag SHA in the $REPO repository does not match the tag SHA that triggered the build: $SHA"
false
fi
if get_tag; then
if ! matched_tag; then
cat "$TAG_FILE"
echo "the tag SHA in the $REPO repository does not match the tag SHA that triggered the build: $SHA"
return 1
fi
else
api POST repos/$REPO/tags --data-raw '{"tag_name": "'$TAG'", "target": "'$SHA'"}'
create_tag
fi
}
create_tag() {
api POST repos/$REPO/tags --data-raw '{"tag_name": "'"$TAG"'", "target": "'"$SHA"'"}' >"$TAG_FILE"
}
delete_tag() {
if get_tag; then
api DELETE repos/$REPO/tags/$TAG
rm -f "$TAG_FILE"
fi
}
upload_release() {
local assets=$(ls $RELEASE_DIR/* | sed -e 's/^/-a /')
if $PRERELEASE || echo "${TAG}" | grep -qi '\-rc' ; then
releasetype="--prerelease"
# assets is defined as a list of arguments, where values may contain whitespace and need to be quoted like this -a "my file.txt" -a "file.txt".
# 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 $PRERELEASE || echo "${TAG}" | grep -qi '\-rc'; then
releaseType="--prerelease"
echo "Uploading as Pre-Release"
else
echo "Uploading as Stable"
fi
ensure_tag
anchor=$(echo $TAG | sed -e 's/^v//' -e 's/[^a-zA-Z0-9]/-/g')
if ! $BIN_DIR/tea release create $assets --repo $REPO --note "$RELEASENOTES" --tag $TAG --title "$TITLE" --draft ${releasetype} >& $TMP_DIR/tea.log ; then
if grep --quiet 'Unknown API Error: 500' $TMP_DIR/tea.log && grep --quiet services/release/release.go:194 $TMP_DIR/tea.log ; then
if ! "$BIN_DIR"/tea release create "${assets[@]}" --repo $REPO --note "$RELEASENOTES" --tag "$TAG" --title "$TITLE" --draft ${releaseType} >&"$TMP_DIR"/tea.log; then
if grep --quiet 'Unknown API Error: 500' "$TMP_DIR"/tea.log && grep --quiet services/release/release.go:194 "$TMP_DIR"/tea.log; then
echo "workaround v1.20 race condition https://codeberg.org/forgejo/forgejo/issues/1370"
sleep 10
$BIN_DIR/tea release create $assets --repo $REPO --note "$RELEASENOTES" --tag $TAG --title "$TITLE" --draft ${releasetype}
"$BIN_DIR"/tea release create "${assets[@]}" --repo $REPO --note "$RELEASENOTES" --tag "$TAG" --title "$TITLE" --draft ${releaseType}
else
cat $TMP_DIR/tea.log
cat "$TMP_DIR"/tea.log
return 1
fi
fi
@ -69,61 +106,63 @@ upload_release() {
release_draft() {
local state="$1"
local id=$(api GET repos/$REPO/releases/tags/$TAG | jq --raw-output .id)
local id=$(api GET repos/$REPO/releases/tags/"$TAG" | jq --raw-output .id)
api PATCH repos/$REPO/releases/$id --data-raw '{"draft": '$state', "hide_archive_links": '$HIDE_ARCHIVE_LINK'}'
api PATCH repos/$REPO/releases/"$id" --data-raw '{"draft": '"$state"', "hide_archive_links": '$HIDE_ARCHIVE_LINK'}'
}
maybe_use_release_note_assistant() {
if "$RELEASE_NOTES_ASSISTANT"; then
curl --fail -s -S -o rna https://code.forgejo.org/forgejo/release-notes-assistant/releases/download/v1.2.3/release-notes-assistant
chmod +x ./rna
./rna --storage release --storage-location $TAG --forgejo-url $SCHEME://placeholder:$TOKEN@$HOST --repository $REPO --token $TOKEN release $TAG
./rna --storage release --storage-location "$TAG" --forgejo-url "$SCHEME"://placeholder:"$TOKEN"@"$HOST" --repository $REPO --token "$TOKEN" release "$TAG"
fi
}
sign_release() {
local passphrase
if test -s "$GPG_PASSPHRASE"; then
passphrase="--passphrase-file $GPG_PASSPHRASE"
passphrase="--passphrase-file $GPG_PASSPHRASE"
fi
gpg --import --no-tty --pinentry-mode loopback $passphrase "$GPG_PRIVATE_KEY"
for asset in $RELEASE_DIR/* ; do
if [[ $asset =~ .sha256$ ]] ; then
continue
fi
gpg --armor --detach-sign --no-tty --pinentry-mode loopback $passphrase < $asset > $asset.asc
for asset in "$RELEASE_DIR"/*; do
if [[ $asset =~ .sha256$ ]]; then
continue
fi
gpg --armor --detach-sign --no-tty --pinentry-mode loopback $passphrase <"$asset" >"$asset".asc
done
}
maybe_sign_release() {
if test -s "$GPG_PRIVATE_KEY"; then
sign_release
sign_release
fi
}
maybe_override() {
if test "$OVERRIDE" = "false"; then
return
return
fi
api DELETE repos/$REPO/releases/tags/"$TAG" >&/dev/null || true
if get_tag && ! matched_tag; then
delete_tag
fi
api DELETE repos/$REPO/releases/tags/$TAG >& /dev/null || true
api DELETE repos/$REPO/tags/$TAG >& /dev/null || true
}
upload() {
setup_api
setup_tea
rm -f ~/.config/tea/config.yml
GITEA_SERVER_TOKEN=$TOKEN $BIN_DIR/tea login add --url $FORGEJO
GITEA_SERVER_TOKEN=$TOKEN "$BIN_DIR"/tea login add --url $FORGEJO
maybe_sign_release
maybe_override
upload_release
}
setup_api() {
if ! which jq curl ; then
apt-get -qq update
apt-get install -y -qq jq curl
if ! which jq curl; then
apt-get -qq update
apt-get install -y -qq jq curl
fi
}
@ -133,46 +172,46 @@ api() {
path=$1
shift
curl --fail -X $method -sS -H "Content-Type: application/json" -H "Authorization: token $TOKEN" "$@" $FORGEJO/api/v1/$path
curl --fail -X "$method" -sS -H "Content-Type: application/json" -H "Authorization: token $TOKEN" "$@" $FORGEJO/api/v1/"$path"
}
wait_release() {
local ready=false
for i in $(seq $RETRY); do
if api GET repos/$REPO/releases/tags/$TAG | jq --raw-output .draft > $TMP_DIR/draft; then
if test "$(cat $TMP_DIR/draft)" = "false"; then
ready=true
break
fi
echo "release $TAG is still a draft"
else
echo "release $TAG does not exist yet"
fi
echo "waiting $DELAY seconds"
sleep $DELAY
if api GET repos/$REPO/releases/tags/"$TAG" | jq --raw-output .draft >"$TMP_DIR"/draft; then
if test "$(cat "$TMP_DIR"/draft)" = "false"; then
ready=true
break
fi
echo "release $TAG is still a draft"
else
echo "release $TAG does not exist yet"
fi
echo "waiting $DELAY seconds"
sleep $DELAY
done
if ! $ready ; then
echo "no release for $TAG"
return 1
if ! $ready; then
echo "no release for $TAG"
return 1
fi
}
download() {
setup_api
(
mkdir -p $RELEASE_DIR
cd $RELEASE_DIR
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
mkdir -p $RELEASE_DIR
cd $RELEASE_DIR
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[] | "\(.browser_download_url) \(.name)"' <"$TMP_DIR"/assets.json | while read url name; do # `name` may contain whitespace, therefore, it must be last
curl --fail -H "Authorization: token $TOKEN" -o "$name" -L "$url"
done
)
}

View file

@ -1,6 +1,18 @@
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": [
"local>actions/renovate-config"
]
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": ["local>actions/renovate-config"],
"customManagers": [
{
"customType": "regex",
"description": "update example in README.md",
"fileMatch": ["^README.md$"],
"matchStrings": [
"uses: actions/forgejo-release@(?<currentValue>v\\d+\\.\\d+\\.\\d+)"
],
"datasourceTemplate": "gitea-tags",
"depNameTemplate": "actions/forgejo-release",
"versioningTemplate": "semver",
"registryUrlTemplate": "https://code.forgejo.org"
}
]
}

View file

@ -2,6 +2,7 @@
# SPDX-License-Identifier: MIT
set -ex
PS4='${BASH_SOURCE[0]}:$LINENO: ${FUNCNAME[0]}: '
test_teardown() {
setup_api
@ -38,24 +39,37 @@ test_wait_release() {
! wait_release
}
test_create_delete_tag() {
delete_tag
! get_tag
create_tag
get_tag
delete_tag
! get_tag
}
test_ensure_tag() {
api DELETE repos/$REPO/tags/$TAG || true
delete_tag
#
# idempotent
#
ensure_tag
api GET repos/$REPO/tags/$TAG > $TMP_DIR/tag1.json
mv $TAG_FILE $TMP_DIR/tag1.json
ensure_tag
api GET repos/$REPO/tags/$TAG > $TMP_DIR/tag2.json
mv $TAG_FILE $TMP_DIR/tag2.json
diff -u $TMP_DIR/tag[12].json
#
# sanity check on the SHA of an existing tag
#
(
SHA=12345
! ensure_tag
SHA=12345
! matched_tag
! ensure_tag
)
api DELETE repos/$REPO/tags/$TAG
delete_tag
}
test_maybe_sign_release_no_gpg() {
@ -94,8 +108,8 @@ test_maybe_sign_release_skipped() {
}
test_maybe_sign_release_verify() {
for file in $RELEASE_DIR/file-one.txt $RELEASE_DIR/file-two.txt; do
gpg --verify $file.asc $file
for file in $RELEASE_DIR/file-one.txt $RELEASE_DIR/file-two.txt; do
gpg --verify $file.asc $file
done
}
@ -129,6 +143,7 @@ test_run() {
REPO=$user/$project
test_setup $project
test_ensure_tag
test_create_delete_tag
DELAY=0
test_wait_release_fail
echo "================================ TEST BEGIN"

View file

@ -12,7 +12,7 @@ jobs:
steps:
- uses: actions/checkout@v3
- id: forgejo
uses: https://code.forgejo.org/actions/setup-forgejo@v1
uses: https://code.forgejo.org/actions/setup-forgejo@v2.0.11
with:
user: testuser
password: admin1234

View file

@ -0,0 +1 @@
FILE3