Refactor bash-isms and use POSIX sh where applicable

This commit is contained in:
Jack Greiner 2025-10-09 16:37:07 -04:00
parent 1d79e86315
commit 324005b6c0
No known key found for this signature in database
GPG key ID: F34343A8F6B33E1E
2 changed files with 97 additions and 93 deletions

View file

@ -1,21 +1,22 @@
#!/bin/bash
#!/usr/bin/env sh
# SPDX-License-Identifier: MIT
set -ex
PS4='${BASH_SOURCE[0]}:$LINENO: ${FUNCNAME[0]}: '
PS4='${0##*/}:$LINENO: '
test_system_tea_bin() {
SYSTEM_TEA_BIN=$TMP_DIR/tea
touch $SYSTEM_TEA_BIN && chmod +x $SYSTEM_TEA_BIN
export PATH=$TMP_DIR:$PATH
SYSTEM_TEA_BIN=$TMP_DIR/tea
: >"$SYSTEM_TEA_BIN" && chmod +x "$SYSTEM_TEA_BIN"
PATH=$TMP_DIR:$PATH
export PATH
setup_tea
test $TEA_BIN == $SYSTEM_TEA_BIN
[ "$TEA_BIN" = "$SYSTEM_TEA_BIN" ]
}
test_download_tea_bin() {
# assume tea is not installed on system
setup_tea
test $TEA_BIN == $TMP_DIR/tea
[ "$TEA_BIN" = "$TMP_DIR/tea" ]
}
test_teardown() {
@ -24,23 +25,23 @@ test_teardown() {
api DELETE repos/$REPO/tags/$TAG || true
rm -fr dist/release
setup_tea
$TEA_BIN login delete $DOER || true
"$TEA_BIN" login delete "$DOER" || true
}
test_reset_repo() {
local project="$1"
project="$1"
api DELETE repos/$REPO || true
api POST user/repos --data-raw '{"name":"'$project'", "auto_init":true}'
git clone $FORGEJO/$REPO $TMP_DIR/repo
SHA=$(git -C $TMP_DIR/repo rev-parse HEAD)
git clone "$FORGEJO/$REPO" "$TMP_DIR/repo"
SHA=$(git -C "$TMP_DIR/repo" rev-parse HEAD)
}
test_setup() {
local project="$1"
test_reset_repo $project
mkdir -p $RELEASE_DIR
touch $RELEASE_DIR/file-one.txt
touch $RELEASE_DIR/file-two.txt
project="$1"
test_reset_repo "$project"
mkdir -p "$RELEASE_DIR"
: >"$RELEASE_DIR/file-one.txt"
: >"$RELEASE_DIR/file-two.txt"
}
test_wait_release_fail() {
@ -69,12 +70,12 @@ test_ensure_tag() {
# idempotent
#
ensure_tag
mv $TAG_FILE $TMP_DIR/tag1.json
mv "$TAG_FILE" "$TMP_DIR/tag1.json"
ensure_tag
mv $TAG_FILE $TMP_DIR/tag2.json
mv "$TAG_FILE" "$TMP_DIR/tag2.json"
diff -u $TMP_DIR/tag[12].json
diff -u "$TMP_DIR/tag1.json" "$TMP_DIR/tag2.json"
#
# sanity check on the SHA of an existing tag
#
@ -92,7 +93,7 @@ test_maybe_sign_release_no_gpg() {
GPG_PRIVATE_KEY=
maybe_sign_release
! test -f $RELEASE_DIR/file-one.txt.asc
! [ -f "$RELEASE_DIR/file-one.txt.asc" ]
}
test_maybe_sign_release_gpg_no_passphrase() {
@ -117,28 +118,28 @@ test_maybe_sign_release_gpg() {
}
test_maybe_sign_release_skipped() {
! test -f $RELEASE_DIR/file-one.txt.sha256.asc
! test -f $RELEASE_DIR/file-two.txt.sha256.asc
! [ -f "$RELEASE_DIR/file-one.txt.sha256.asc" ]
! [ -f "$RELEASE_DIR/file-two.txt.sha256.asc" ]
}
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
}
test_maybe_sign_release_setup() {
local name="$1"
name="$1"
echo "========= maybe_sign_release $name ========="
RELEASE_DIR=$TMP_DIR/$name
mkdir -p $RELEASE_DIR
GNUPGHOME=$TMP_DIR/$name/.gnupg
mkdir -p $GNUPGHOME
touch $RELEASE_DIR/file-one.txt
touch $RELEASE_DIR/file-one.txt.sha256
touch $RELEASE_DIR/file-two.txt
touch $RELEASE_DIR/file-two.txt.sha256
RELEASE_DIR="$TMP_DIR/$name"
mkdir -p "$RELEASE_DIR"
GNUPGHOME="$TMP_DIR/$name/.gnupg"
mkdir -p "$GNUPGHOME"
: >"$RELEASE_DIR/file-one.txt"
: >"$RELEASE_DIR/file-one.txt.sha256"
: >"$RELEASE_DIR/file-two.txt"
: >"$RELEASE_DIR/file-two.txt.sha256"
}
test_maybe_sign_release() {
@ -148,31 +149,31 @@ test_maybe_sign_release() {
}
test_run() {
local user="$1"
local project="$2"
user="$1"
project="$2"
test_teardown
to_push=$TMP_DIR/binaries-releases-to-push
pulled=$TMP_DIR/binaries-releases-pulled
RELEASE_DIR=$to_push
REPO=$user/$project
test_setup $project
to_push="$TMP_DIR/binaries-releases-to-push"
pulled="$TMP_DIR/binaries-releases-pulled"
RELEASE_DIR="$to_push"
REPO="$user/$project"
test_setup "$project"
test_ensure_tag
test_create_delete_tag
DELAY=0
test_wait_release_fail
echo "================================ TEST BEGIN"
upload
RELEASE_DIR=$pulled
RELEASE_DIR="$pulled"
download
diff -r $to_push $pulled
diff -r "$to_push" "$pulled"
echo "================================ TEST END"
test_wait_release
}
TMP_DIR=$(mktemp -d)
trap "rm -fr $TMP_DIR" EXIT
trap 'rm -fr "$TMP_DIR"' 0 INT TERM
: ${TAG:=v17.8.20-1}
. $(dirname $0)/../forgejo-release.sh
. "$(dirname "$0")/../forgejo-release.sh"