mirror of
https://codeberg.org/forgejo/forgejo
synced 2024-05-03 02:11:38 +02:00
[CI] publish: allow pushing a release to an existing tag
It is necessary to set the tag before uploading to a repository that does not already have it. But when it does, there is no need. This is the case for instance in the forgejo integration repository. It is however best to verify the SHA of the tag is as expected to not attempt to override a release associated with a different SHA, presumably from a previous run.
This commit is contained in:
parent
8455b13101
commit
d5e104fef1
|
@ -17,6 +17,26 @@ test_setup() {
|
|||
touch $RELEASE_DIR/file-two.txt
|
||||
}
|
||||
|
||||
test_ensure_tag() {
|
||||
api DELETE repos/$PUSH_USER/forgejo/tags/$TAG || true
|
||||
#
|
||||
# idempotent
|
||||
#
|
||||
ensure_tag
|
||||
api GET repos/$PUSH_USER/forgejo/tags/$TAG > /tmp/tag1.json
|
||||
ensure_tag
|
||||
api GET repos/$PUSH_USER/forgejo/tags/$TAG > /tmp/tag2.json
|
||||
diff -u /tmp/tag[12].json
|
||||
#
|
||||
# sanity check on the SHA of an existing tag
|
||||
#
|
||||
(
|
||||
CI_COMMIT_SHA=12345
|
||||
! ensure_tag
|
||||
)
|
||||
api DELETE repos/$PUSH_USER/forgejo/tags/$TAG
|
||||
}
|
||||
|
||||
#
|
||||
# Running the test locally instead of within Woodpecker
|
||||
#
|
||||
|
@ -31,6 +51,7 @@ test_run() {
|
|||
pulled=/tmp/binaries-releases-pulled
|
||||
RELEASE_DIR=$to_push
|
||||
test_setup
|
||||
test_ensure_tag
|
||||
echo "================================ TEST BEGIN"
|
||||
push
|
||||
RELEASE_DIR=$pulled
|
||||
|
@ -42,6 +63,7 @@ test_run() {
|
|||
: ${CI_REPO_OWNER:=dachary}
|
||||
: ${PULL_USER=$CI_REPO_OWNER}
|
||||
: ${PUSH_USER=$CI_REPO_OWNER}
|
||||
: ${CI_COMMIT_TAG:=v17.8.20-1}
|
||||
: ${CI_COMMIT_TAG:=W17.8.20-1}
|
||||
: ${CI_COMMIT_SHA:=$(git rev-parse HEAD)}
|
||||
|
||||
. $(dirname $0)/binaries-pull-push.sh
|
||||
|
|
|
@ -22,26 +22,31 @@ setup_tea() {
|
|||
fi
|
||||
}
|
||||
|
||||
upload() {
|
||||
ASSETS=$(ls $RELEASE_DIR/* | sed -e 's/^/-a /')
|
||||
echo "${CI_COMMIT_TAG##v}" | grep -qi '\-rc' && export RELEASETYPE="--prerelease" && echo "Uploading as Pre-Release"
|
||||
echo "${CI_COMMIT_TAG##v}" | grep -qi '\-test' && export RELEASETYPE="--draft" && echo "Uploading as Draft"
|
||||
test ${RELEASETYPE+false} || echo "Uploading as Stable"
|
||||
anchor=$(echo $CI_COMMIT_TAG | sed -e 's/^v//' -e 's/[^a-zA-Z0-9]/-/g')
|
||||
api POST repos/$PUSH_USER/forgejo/tags --data-raw '{"tag_name": "'$CI_COMMIT_TAG'", "target": "'$CI_COMMIT_SHA'"}'
|
||||
$BIN_DIR/tea release create $ASSETS --repo $PUSH_USER/forgejo --note "See https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#${anchor}" --tag $CI_COMMIT_TAG --title $CI_COMMIT_TAG ${RELEASETYPE}
|
||||
api GET repos/$PUSH_USER/forgejo/tags/$TAG > /tmp/tag.json
|
||||
if test "$(jq --raw-output .commit.sha < /tmp/tag.json)" != "$CI_COMMIT_SHA" ; then
|
||||
cat /tmp/tag.json
|
||||
echo "the tag SHA in the $PUSH_USER repository does not match the tag SHA that triggered the build: $CI_COMMIT_SHA"
|
||||
false
|
||||
ensure_tag() {
|
||||
if api GET repos/$PUSH_USER/forgejo/tags/$TAG > /tmp/tag.json ; then
|
||||
local sha=$(jq --raw-output .commit.sha < /tmp/tag.json)
|
||||
if test "$sha" != "$CI_COMMIT_SHA" ; then
|
||||
cat /tmp/tag.json
|
||||
echo "the tag SHA in the $PUSH_USER repository does not match the tag SHA that triggered the build: $CI_COMMIT_SHA"
|
||||
false
|
||||
fi
|
||||
else
|
||||
api POST repos/$PUSH_USER/forgejo/tags --data-raw '{"tag_name": "'$CI_COMMIT_TAG'", "target": "'$CI_COMMIT_SHA'"}'
|
||||
fi
|
||||
}
|
||||
|
||||
upload() {
|
||||
ASSETS=$(ls $RELEASE_DIR/* | sed -e 's/^/-a /')
|
||||
echo "${CI_COMMIT_TAG}" | grep -qi '\-rc' && export RELEASETYPE="--prerelease" && echo "Uploading as Pre-Release"
|
||||
echo "${CI_COMMIT_TAG}" | grep -qi '\-test' && export RELEASETYPE="--draft" && echo "Uploading as Draft"
|
||||
test ${RELEASETYPE+false} || echo "Uploading as Stable"
|
||||
ensure_tag
|
||||
anchor=$(echo $CI_COMMIT_TAG | sed -e 's/^v//' -e 's/[^a-zA-Z0-9]/-/g')
|
||||
$BIN_DIR/tea release create $ASSETS --repo $PUSH_USER/forgejo --note "See https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#${anchor}" --tag $CI_COMMIT_TAG --title $CI_COMMIT_TAG ${RELEASETYPE}
|
||||
}
|
||||
|
||||
push() {
|
||||
if ! which curl ; then
|
||||
apk --update --no-cache add curl
|
||||
fi
|
||||
setup_api
|
||||
setup_tea
|
||||
GITEA_SERVER_TOKEN=$RELEASETEAMTOKEN $BIN_DIR/tea login add --name $RELEASETEAMUSER --url $DOMAIN
|
||||
upload
|
||||
|
|
|
@ -7,6 +7,7 @@ when:
|
|||
variables:
|
||||
- &node_image 'node:18'
|
||||
- &golang_image 'golang:1.20'
|
||||
- &alpine_image 'alpine:3.17'
|
||||
- &gpg_sign_image 'plugins/gpgsign:1'
|
||||
- &xgo_image 'techknowlogick/xgo:go-1.19.x'
|
||||
- &gpg_sign_image 'plugins/gpgsign:1'
|
||||
|
@ -98,7 +99,7 @@ pipeline:
|
|||
- /usr/bin/qemu-arm-static ./dist/release/forgejo-*-arm-6 --version | grep 'built with'
|
||||
|
||||
push-integration:
|
||||
image: *golang_image
|
||||
image: *alpine_image
|
||||
commands:
|
||||
- PUSH_USER=$CI_REPO_OWNER releases/binaries-pull-push.sh push
|
||||
secrets:
|
||||
|
|
Loading…
Reference in a new issue