mirror of
https://code.forgejo.org/actions/forgejo-release.git
synced 2025-11-28 02:01:58 +02:00
POSIX compliance
Signed-off-by: crueter <crueter@eden-emu.dev>
This commit is contained in:
parent
4e9e207cf5
commit
d5e77e0b90
1 changed files with 20 additions and 17 deletions
|
|
@ -1,4 +1,4 @@
|
||||||
#!/bin/bash
|
#!/bin/sh -e
|
||||||
# SPDX-License-Identifier: MIT
|
# SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
@ -27,9 +27,9 @@ TAG_URL=$(echo "$TAG" | sed 's/\//%2F/g')
|
||||||
export GNUPGHOME
|
export GNUPGHOME
|
||||||
|
|
||||||
setup_tea() {
|
setup_tea() {
|
||||||
if which tea 2>/dev/null; then
|
if command -v tea >/dev/null 2>&1; then
|
||||||
TEA_BIN=$(which tea)
|
TEA_BIN=$(command -v tea)
|
||||||
elif ! test -f "$TEA_BIN"; then
|
elif [ ! -f "$TEA_BIN" ]; then
|
||||||
ARCH=$(dpkg --print-architecture)
|
ARCH=$(dpkg --print-architecture)
|
||||||
curl -sL "https://dl.gitea.io/tea/$TEA_VERSION/tea-$TEA_VERSION-linux-$ARCH" >"$TEA_BIN"
|
curl -sL "https://dl.gitea.io/tea/$TEA_VERSION/tea-$TEA_VERSION-linux-$ARCH" >"$TEA_BIN"
|
||||||
chmod +x "$TEA_BIN"
|
chmod +x "$TEA_BIN"
|
||||||
|
|
@ -83,22 +83,25 @@ upload_release() {
|
||||||
# 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".
|
# 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.
|
# 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
|
# For reference, see https://github.com/koalaman/shellcheck/wiki/SC2086#exceptions
|
||||||
local assets=()
|
|
||||||
for file in "$RELEASE_DIR"/*; do
|
for file in "$RELEASE_DIR"/*; do
|
||||||
assets=("${assets[@]}" -a "$file")
|
assets="$assets -a $file"
|
||||||
done
|
done
|
||||||
|
|
||||||
if $PRERELEASE || echo "${TAG}" | grep -qi '\-rc'; then
|
if $PRERELEASE || echo "${TAG}" | grep -qi '\-rc'; then
|
||||||
releaseType="--prerelease"
|
releaseType="--prerelease"
|
||||||
echo "Uploading as Pre-Release"
|
echo "Uploading as Pre-Release"
|
||||||
else
|
else
|
||||||
echo "Uploading as Stable"
|
echo "Uploading as Stable"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
ensure_tag
|
ensure_tag
|
||||||
if ! $TEA_BIN release create "${assets[@]}" --repo "$REPO" --note "$RELEASENOTES" --tag "$TAG" --title "$TITLE" --draft "$releaseType" >&"$TMP_DIR"/tea.log; then
|
|
||||||
|
# shellcheck disable=SC2086
|
||||||
|
if ! $TEA_BIN release create $assets --repo "$REPO" --note "$RELEASENOTES" --tag "$TAG" --title "$TITLE" --draft "$releaseType" > "$TMP_DIR"/tea.log 2>&1; 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 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"
|
echo "workaround v1.20 race condition https://codeberg.org/forgejo/forgejo/issues/1370"
|
||||||
sleep 10
|
sleep 10
|
||||||
$TEA_BIN release create "${assets[@]}" --repo "$REPO" --note "$RELEASENOTES" --tag "$TAG" --title "$TITLE" --draft "$releaseType"
|
$TEA_BIN release create $assets --repo "$REPO" --note "$RELEASENOTES" --tag "$TAG" --title "$TITLE" --draft "$releaseType"
|
||||||
else
|
else
|
||||||
cat "$TMP_DIR"/tea.log
|
cat "$TMP_DIR"/tea.log
|
||||||
return 1
|
return 1
|
||||||
|
|
@ -109,7 +112,7 @@ upload_release() {
|
||||||
}
|
}
|
||||||
|
|
||||||
release_draft() {
|
release_draft() {
|
||||||
local state="$1"
|
state="$1"
|
||||||
|
|
||||||
id=$(api GET "repos/$REPO/releases/tags/$TAG_URL" | jq --raw-output .id)
|
id=$(api GET "repos/$REPO/releases/tags/$TAG_URL" | jq --raw-output .id)
|
||||||
|
|
||||||
|
|
@ -127,15 +130,15 @@ maybe_use_release_note_assistant() {
|
||||||
}
|
}
|
||||||
|
|
||||||
sign_release() {
|
sign_release() {
|
||||||
local passphrase
|
|
||||||
if test -s "$GPG_PASSPHRASE"; then
|
if test -s "$GPG_PASSPHRASE"; then
|
||||||
passphrase="--passphrase-file $GPG_PASSPHRASE"
|
passphrase="--passphrase-file $GPG_PASSPHRASE"
|
||||||
fi
|
fi
|
||||||
gpg --import --no-tty --pinentry-mode loopback "$passphrase" "$GPG_PRIVATE_KEY"
|
gpg --import --no-tty --pinentry-mode loopback "$passphrase" "$GPG_PRIVATE_KEY"
|
||||||
for asset in "$RELEASE_DIR"/*; do
|
for asset in "$RELEASE_DIR"/*; do
|
||||||
if [[ $asset =~ .sha256$ ]]; then
|
case "$asset" in
|
||||||
continue
|
*.sha256) continue ;;
|
||||||
fi
|
esac
|
||||||
|
|
||||||
gpg --armor --detach-sign --no-tty --pinentry-mode loopback "$passphrase" <"$asset" >"$asset".asc
|
gpg --armor --detach-sign --no-tty --pinentry-mode loopback "$passphrase" <"$asset" >"$asset".asc
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
@ -150,7 +153,7 @@ maybe_override() {
|
||||||
if test "$OVERRIDE" = "false"; then
|
if test "$OVERRIDE" = "false"; then
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
api DELETE "repos/$REPO/releases/tags/$TAG_URL" >&/dev/null || true
|
api DELETE "repos/$REPO/releases/tags/$TAG_URL" > /dev/null 2>&1 || true
|
||||||
if get_tag && ! matched_tag; then
|
if get_tag && ! matched_tag; then
|
||||||
delete_tag
|
delete_tag
|
||||||
fi
|
fi
|
||||||
|
|
@ -183,7 +186,7 @@ api() {
|
||||||
}
|
}
|
||||||
|
|
||||||
wait_release() {
|
wait_release() {
|
||||||
local ready=false
|
ready=false
|
||||||
for _ in $(seq "$RETRY"); do
|
for _ in $(seq "$RETRY"); do
|
||||||
if api GET "repos/$REPO/releases/tags/$TAG_URL" | jq --raw-output .draft >"$TMP_DIR"/draft; then
|
if api GET "repos/$REPO/releases/tags/$TAG_URL" | jq --raw-output .draft >"$TMP_DIR"/draft; then
|
||||||
if test "$(cat "$TMP_DIR"/draft)" = "false"; then
|
if test "$(cat "$TMP_DIR"/draft)" = "false"; then
|
||||||
|
|
@ -208,10 +211,10 @@ download() {
|
||||||
(
|
(
|
||||||
mkdir -p "$RELEASE_DIR"
|
mkdir -p "$RELEASE_DIR"
|
||||||
cd "$RELEASE_DIR"
|
cd "$RELEASE_DIR"
|
||||||
if [[ ${DOWNLOAD_LATEST} == "true" ]]; then
|
if [ "${DOWNLOAD_LATEST}" = "true" ]; then
|
||||||
echo "Downloading the latest release"
|
echo "Downloading the latest release"
|
||||||
api GET "repos/$REPO/releases/latest" >"$TMP_DIR"/assets.json
|
api GET "repos/$REPO/releases/latest" >"$TMP_DIR"/assets.json
|
||||||
elif [[ ${DOWNLOAD_LATEST} == "false" ]]; then
|
elif [ "${DOWNLOAD_LATEST}" = "false" ]; then
|
||||||
wait_release
|
wait_release
|
||||||
echo "Downloading tagged release ${TAG}"
|
echo "Downloading tagged release ${TAG}"
|
||||||
api GET "repos/$REPO/releases/tags/$TAG_URL" >"$TMP_DIR"/assets.json
|
api GET "repos/$REPO/releases/tags/$TAG_URL" >"$TMP_DIR"/assets.json
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue