mirror of
https://code.forgejo.org/actions/forgejo-release.git
synced 2025-10-14 00:21:55 +03:00
Refactor bash-isms and use POSIX sh where applicable
This commit is contained in:
parent
1d79e86315
commit
324005b6c0
2 changed files with 97 additions and 93 deletions
89
testdata/forgejo-release-test.sh
vendored
89
testdata/forgejo-release-test.sh
vendored
|
@ -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"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue