Compare commits

...

3 Commits

Author SHA1 Message Date
Earl Warren 358b55efd4
wait for a release to no longer be draft before downloading 2023-05-24 01:32:23 +02:00
Earl Warren 56c1c975a3
mark the release as draft until it is ready 2023-05-24 01:09:00 +02:00
Earl Warren fb9e03dc6f
cosmetic change to integration 2023-05-24 01:08:27 +02:00
5 changed files with 57 additions and 6 deletions

View File

@ -11,21 +11,21 @@ jobs:
password: admin1234
image-version: 1.19
- name: 001uploadaction
- name: Upload
run: |
forgejo-test-helper.sh push_self_action http://testuser:admin1234@${{ steps.forgejo.outputs.host-port }} testuser forgejo-release vTest
- name: 002upload-download
- name: Upload and download
run: |
export FORGEJO_RUNNER_LOGS="${{ steps.forgejo.outputs.runner-logs }}"
forgejo-test-helper.sh run_workflow testdata/upload-download http://testuser:admin1234@${{ steps.forgejo.outputs.host-port }} testuser upload-download forgejo-release "${{ steps.forgejo.outputs.token }}"
- name: 003nestedupload-download
- name: Nested upload and download
run: |
export FORGEJO_RUNNER_LOGS="${{ steps.forgejo.outputs.runner-logs }}"
forgejo-test-helper.sh run_workflow testdata/nested-upload-download http://testuser:admin1234@${{ steps.forgejo.outputs.host-port }} testuser nested-upload-download forgejo-release "${{ steps.forgejo.outputs.token }}"
- name: 004selftest
- name: Self test
run: |
set -ex
export FORGEJO="${{ steps.forgejo.outputs.url }}"

View File

@ -18,6 +18,9 @@ Upload or download the assets of a release to a Forgejo instance.
| 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 |
<!-- action-docs-inputs -->

View File

@ -27,6 +27,8 @@ inputs:
description: 'GPG Private Key to sign the release artifacts'
gpg-passphrase:
description: 'Passphrase of the GPG Private Key'
download-retry:
description: 'Number of times to retry if the release is not ready (default 1)'
verbose:
description: 'Increase the verbosity level'
default: 'false'
@ -71,5 +73,7 @@ runs:
export VERBOSE="${{ inputs.verbose }}"
export RETRY="${{ inputs.download-retry }}"
forgejo-release.sh ${{ inputs.direction }}
shell: bash

View File

@ -10,6 +10,8 @@ if ${VERBOSE:-false}; then set -x; fi
: ${RELEASE_DIR:=dist/release}
: ${BIN_DIR:=$(mktemp -d)}
: ${TEA_VERSION:=0.9.0}
: ${RETRY:=1}
: ${DELAY:=10}
setup_tea() {
if ! test -f $BIN_DIR/tea ; then
@ -35,11 +37,18 @@ upload_release() {
local assets=$(ls $RELEASE_DIR/* | sed -e 's/^/-a /')
local releasetype
echo "${TAG}" | grep -qi '\-rc' && export releasetype="--prerelease" && echo "Uploading as Pre-Release"
echo "${TAG}" | grep -qi '\-test' && export releasetype="--draft" && echo "Uploading as Draft"
test ${releasetype+false} || echo "Uploading as Stable"
ensure_tag
anchor=$(echo $TAG | sed -e 's/^v//' -e 's/[^a-zA-Z0-9]/-/g')
$BIN_DIR/tea release create $assets --repo $REPO --note "$RELEASENOTES" --tag $TAG --title $TAG ${releasetype}
$BIN_DIR/tea release create $assets --repo $REPO --note "$RELEASENOTES" --tag $TAG --title $TAG --draft ${releasetype}
release_draft false
}
release_draft() {
local state="$1"
local id=$(api GET repos/$REPO/releases/tags/$TAG | jq --raw-output .id)
api PATCH repos/$REPO/releases/$id --data-raw '{"draft": '$state'}'
}
upload() {
@ -65,8 +74,30 @@ api() {
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/draft; then
if test "$(cat /tmp/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
fi
}
download() {
setup_api
wait_release
(
mkdir -p $RELEASE_DIR
cd $RELEASE_DIR

View File

@ -32,6 +32,16 @@ test_setup() {
touch $RELEASE_DIR/file-two.txt
}
test_wait_release_fail() {
! wait_release
}
test_wait_release() {
wait_release
release_draft true
! wait_release
}
test_ensure_tag() {
api DELETE repos/$REPO/tags/$TAG || true
#
@ -62,12 +72,15 @@ test_run() {
REPO=$user/$project
test_setup $project
test_ensure_tag
DELAY=0
test_wait_release_fail
echo "================================ TEST BEGIN"
upload
RELEASE_DIR=$pulled
download
diff -r $to_push $pulled
echo "================================ TEST END"
test_wait_release
}
: ${TAG:=v17.8.20-1}