This commit is contained in:
Executable
+112
@@ -0,0 +1,112 @@
|
||||
#!/usr/bin/env bash
|
||||
set -Eeuo pipefail
|
||||
|
||||
ROOT=$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)
|
||||
WORK=$(mktemp -d)
|
||||
trap 'rm -rf "$WORK"' EXIT
|
||||
|
||||
fail() {
|
||||
printf 'Gitea publish fixture failed: %s\n' "$1" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
VERSION=1.2.3-preview.1
|
||||
TAG=v$VERSION
|
||||
TOKEN=fixture-release-token
|
||||
RELEASE_DIR=$WORK/release
|
||||
MOCK_BIN=$WORK/bin
|
||||
mkdir -p "$RELEASE_DIR" "$MOCK_BIN"
|
||||
for name in \
|
||||
"kaidi-finance-$VERSION.tar.gz" \
|
||||
backend-sbom.cdx.json \
|
||||
frontend-sbom.cdx.json \
|
||||
release-manifest.json \
|
||||
release-manifest.sig \
|
||||
release-public.pem \
|
||||
install.sh \
|
||||
bootstrap-checksums.txt \
|
||||
SHA256SUMS; do
|
||||
printf 'fixture asset %s\n' "$name" > "$RELEASE_DIR/$name"
|
||||
done
|
||||
|
||||
cat > "$MOCK_BIN/curl" <<'SH'
|
||||
#!/usr/bin/env bash
|
||||
set -Eeuo pipefail
|
||||
|
||||
method=GET
|
||||
output=
|
||||
form=
|
||||
url=
|
||||
header_file=
|
||||
printf '%s\n' "$*" >> "$MOCK_CURL_LOG"
|
||||
while [ "$#" -gt 0 ]; do
|
||||
case "$1" in
|
||||
--request) shift; method=$1 ;;
|
||||
--output) shift; output=$1 ;;
|
||||
--form) shift; form=$1; method=POST ;;
|
||||
--header)
|
||||
shift
|
||||
case "$1" in @*) header_file=${1#@} ;; esac
|
||||
;;
|
||||
https://*) url=$1 ;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
[ -r "$header_file" ] || exit 90
|
||||
grep -Fqx "Authorization: token $MOCK_GITEA_TOKEN" "$header_file" || exit 91
|
||||
case "$method:$url" in
|
||||
GET:*/releases/tags/*)
|
||||
printf '{"message":"not found"}\n' > "$output"
|
||||
printf '404'
|
||||
;;
|
||||
POST:*/releases)
|
||||
printf '{"id":7,"draft":true,"prerelease":false}\n' > "$output"
|
||||
printf '201'
|
||||
;;
|
||||
POST:*/releases/7/assets*)
|
||||
path=${form#attachment=@}
|
||||
path=${path%%;type=*}
|
||||
name=$(basename "$path")
|
||||
size=$(wc -c < "$path" | tr -d '[:space:]')
|
||||
jq -cn --arg name "$name" --argjson size "$size" '{name:$name,size:$size}' >> "$MOCK_ASSET_LOG"
|
||||
printf '{"name":"%s","size":%s}\n' "$name" "$size" > "$output"
|
||||
printf '201'
|
||||
;;
|
||||
GET:*/releases/7)
|
||||
jq -s '{id:7,draft:true,prerelease:false,assets:.}' "$MOCK_ASSET_LOG" > "$output"
|
||||
printf '200'
|
||||
;;
|
||||
PATCH:*/releases/7)
|
||||
jq -s '{id:7,draft:false,prerelease:false,assets:.}' "$MOCK_ASSET_LOG" > "$output"
|
||||
printf '200'
|
||||
;;
|
||||
*)
|
||||
printf 'unexpected mock request: %s %s\n' "$method" "$url" >&2
|
||||
exit 92
|
||||
;;
|
||||
esac
|
||||
SH
|
||||
chmod 0755 "$MOCK_BIN/curl"
|
||||
: > "$WORK/curl.log"
|
||||
: > "$WORK/assets.jsonl"
|
||||
|
||||
PATH="$MOCK_BIN:$PATH" \
|
||||
MOCK_CURL_LOG="$WORK/curl.log" \
|
||||
MOCK_ASSET_LOG="$WORK/assets.jsonl" \
|
||||
MOCK_GITEA_TOKEN="$TOKEN" \
|
||||
GITEA_SERVER_URL=https://gitea.fixture.invalid \
|
||||
GITEA_REPOSITORY=ERP-Team/kaidi \
|
||||
GITEA_REF_NAME="$TAG" \
|
||||
GITEA_SHA=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa \
|
||||
GITEA_TOKEN="$TOKEN" \
|
||||
KAIDI_RELEASE_DIR="$RELEASE_DIR" \
|
||||
"$ROOT/scripts/publish-gitea-release.sh" > "$WORK/publish.log"
|
||||
|
||||
grep -Fqx "Published Gitea release $TAG with nine verified assets" "$WORK/publish.log" \
|
||||
|| fail 'publish script did not report success'
|
||||
[ "$(wc -l < "$WORK/assets.jsonl" | tr -d '[:space:]')" -eq 9 ] \
|
||||
|| fail 'publish script did not upload exactly nine assets'
|
||||
! grep -Fq "$TOKEN" "$WORK/curl.log" \
|
||||
|| fail 'Gitea write token leaked into curl process arguments'
|
||||
|
||||
printf 'Gitea draft, nine-asset verification, and publication fixture passed\n'
|
||||
Reference in New Issue
Block a user