Add release.sh: package build/addons and publish a Forgejo release
Packages the KHook build into RayTrace-MM-<tag>-linux.tar.gz and RayTrace-CSS-API-<tag>.tar.gz (upstream's release layout), tags HEAD and uploads both to the git.zio.sh release. Needs FORGEJO_TOKEN in the environment.
This commit is contained in:
parent
971e91c711
commit
0e60d3c5f3
1 changed files with 106 additions and 0 deletions
106
release.sh
Executable file
106
release.sh
Executable file
|
|
@ -0,0 +1,106 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
# Package build/addons into release tarballs and publish them as a Forgejo release.
|
||||||
|
#
|
||||||
|
# ./release.sh <tag> e.g. ./release.sh v1.0.16-khook1
|
||||||
|
#
|
||||||
|
# Build first (see the podman commands in the repo's CLAUDE.md entry / docker/). The tag is
|
||||||
|
# created on HEAD and pushed to origin if it doesn't exist yet. Re-running with the same tag
|
||||||
|
# replaces that release's attachments instead of failing.
|
||||||
|
#
|
||||||
|
# No longer used on our server: jRandomSkills 1.2.4.b3+ traces through CounterStrikeSharp's native
|
||||||
|
# Trace API. Kept for anyone else running upstream jRandomSkills <= 1.2.4.b2 on Metamod 1461+.
|
||||||
|
#
|
||||||
|
# Tarball layout matches upstream's GitHub releases:
|
||||||
|
# RayTrace-MM-<tag>-linux.tar.gz metamod/, RayTrace/ -> addons/
|
||||||
|
# RayTrace-CSS-API-<tag>.tar.gz RayTrace-CSS-API-<tag>/counterstrikesharp/... (strip 1) -> addons/
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
FORGEJO_URL="https://git.zio.sh"
|
||||||
|
OWNER="cs2"
|
||||||
|
REPO="Ray-Trace"
|
||||||
|
# Placeholder - replace, or set FORGEJO_TOKEN in the environment instead. Needs write:repository.
|
||||||
|
# Don't commit this file with a real token in it.
|
||||||
|
FORGEJO_TOKEN="${FORGEJO_TOKEN:-CHANGE_ME_FORGEJO_TOKEN}"
|
||||||
|
|
||||||
|
TAG="${1:-}"
|
||||||
|
if [[ -z "$TAG" ]]; then
|
||||||
|
echo "usage: $0 <tag> (e.g. v1.0.16-khook1)" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if [[ "$FORGEJO_TOKEN" == "CHANGE_ME_FORGEJO_TOKEN" ]]; then
|
||||||
|
echo "Set FORGEJO_TOKEN (edit release.sh or export it) first." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd "$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"
|
||||||
|
|
||||||
|
ADDONS="build/addons"
|
||||||
|
for required in \
|
||||||
|
"$ADDONS/metamod/RayTrace.vdf" \
|
||||||
|
"$ADDONS/RayTrace/bin/linuxsteamrt64/RayTrace.so" \
|
||||||
|
"$ADDONS/counterstrikesharp/plugins/RayTraceImpl/RayTraceImpl.dll" \
|
||||||
|
"$ADDONS/counterstrikesharp/shared/RayTraceApi/RayTraceApi.dll"; do
|
||||||
|
[[ -f "$required" ]] || { echo "Missing $required - build first." >&2; exit 1; }
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ -n "$(git status --porcelain --untracked-files=no)" ]]; then
|
||||||
|
echo "Tracked files have uncommitted changes; commit them so the tag matches the build." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --- Package -----------------------------------------------------------------
|
||||||
|
OUT="build/release"
|
||||||
|
rm -rf "$OUT"
|
||||||
|
mkdir -p "$OUT"
|
||||||
|
|
||||||
|
MM_TAR="RayTrace-MM-${TAG}-linux.tar.gz"
|
||||||
|
CSS_DIR="RayTrace-CSS-API-${TAG}"
|
||||||
|
CSS_TAR="${CSS_DIR}.tar.gz"
|
||||||
|
|
||||||
|
tar -czf "$OUT/$MM_TAR" -C "$ADDONS" metamod RayTrace
|
||||||
|
|
||||||
|
mkdir -p "$OUT/$CSS_DIR/counterstrikesharp/plugins" "$OUT/$CSS_DIR/counterstrikesharp/shared"
|
||||||
|
cp -r "$ADDONS/counterstrikesharp/plugins/RayTraceImpl" "$OUT/$CSS_DIR/counterstrikesharp/plugins/"
|
||||||
|
cp -r "$ADDONS/counterstrikesharp/shared/RayTraceApi" "$OUT/$CSS_DIR/counterstrikesharp/shared/"
|
||||||
|
tar -czf "$OUT/$CSS_TAR" -C "$OUT" "$CSS_DIR"
|
||||||
|
rm -rf "${OUT:?}/$CSS_DIR"
|
||||||
|
|
||||||
|
echo "Packaged:"
|
||||||
|
ls -la "$OUT"
|
||||||
|
|
||||||
|
# --- Tag ---------------------------------------------------------------------
|
||||||
|
if ! git rev-parse -q --verify "refs/tags/$TAG" >/dev/null; then
|
||||||
|
git tag -a "$TAG" -m "$TAG"
|
||||||
|
fi
|
||||||
|
git push origin "refs/tags/$TAG"
|
||||||
|
|
||||||
|
# --- Release -----------------------------------------------------------------
|
||||||
|
API="$FORGEJO_URL/api/v1/repos/$OWNER/$REPO"
|
||||||
|
AUTH=(-H "Authorization: token $FORGEJO_TOKEN")
|
||||||
|
|
||||||
|
release_json="$(curl -fsS "${AUTH[@]}" "$API/releases/tags/$TAG" 2>/dev/null || true)"
|
||||||
|
if [[ -z "$release_json" ]]; then
|
||||||
|
body="$(git log -1 --format=%B "$TAG")"
|
||||||
|
release_json="$(jq -n --arg tag "$TAG" --arg body "$body" \
|
||||||
|
'{tag_name: $tag, name: $tag, body: $body, draft: false, prerelease: false}' |
|
||||||
|
curl -fsS "${AUTH[@]}" -H "Content-Type: application/json" -X POST --data @- "$API/releases")"
|
||||||
|
echo "Created release $TAG"
|
||||||
|
else
|
||||||
|
echo "Release $TAG already exists, replacing its attachments"
|
||||||
|
fi
|
||||||
|
release_id="$(jq -r '.id' <<<"$release_json")"
|
||||||
|
|
||||||
|
for file in "$MM_TAR" "$CSS_TAR"; do
|
||||||
|
existing_id="$(jq -r --arg n "$file" '.assets[]? | select(.name == $n) | .id' <<<"$release_json")"
|
||||||
|
if [[ -n "$existing_id" ]]; then
|
||||||
|
curl -fsS "${AUTH[@]}" -X DELETE "$API/releases/$release_id/assets/$existing_id" >/dev/null
|
||||||
|
fi
|
||||||
|
curl -fsS "${AUTH[@]}" -X POST -F "attachment=@$OUT/$file" \
|
||||||
|
"$API/releases/$release_id/assets?name=$file" >/dev/null
|
||||||
|
echo "Uploaded $file"
|
||||||
|
done
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "Download URLs:"
|
||||||
|
echo " $FORGEJO_URL/$OWNER/$REPO/releases/download/$TAG/$MM_TAR"
|
||||||
|
echo " $FORGEJO_URL/$OWNER/$REPO/releases/download/$TAG/$CSS_TAR"
|
||||||
Loading…
Add table
Add a link
Reference in a new issue