Housekeeping

This commit is contained in:
Rukira 2026-03-04 15:53:31 +00:00
parent 17ba07deef
commit ecdbd5cfeb
2 changed files with 93 additions and 1 deletions

View file

@ -69,7 +69,7 @@ body:
id: app-version
attributes:
label: App version
description: You can find this in the app's title bar or About screen.
description: You can find this in the app's Status screen.
placeholder: "e.g. 1.0.0"
- type: textarea

92
release.sh Executable file
View file

@ -0,0 +1,92 @@
#!/usr/bin/env bash
set -euo pipefail
# ── Read version from build.gradle.kts ──────────────────────────────────────
VERSION=$(grep -oP 'val appVersion\s*=\s*"\K[^"]+' composeApp/build.gradle.kts)
TAG="v${VERSION}"
echo "==> Version: ${VERSION} (tag: ${TAG})"
# ── Require FORGEJO_TOKEN ────────────────────────────────────────────────────
if [[ -z "${FORGEJO_TOKEN:-}" ]]; then
echo "ERROR: FORGEJO_TOKEN env var is not set." >&2
exit 1
fi
# ── Detect OS and set build task / artifact glob ─────────────────────────────
OS="$(uname -s)"
case "${OS}" in
Darwin)
TASK=":composeApp:packageDmg"
GLOB="composeApp/build/compose/binaries/main/dmg/*.dmg"
;;
MINGW*|MSYS*|CYGWIN*|Windows_NT)
TASK=":composeApp:packageMsi"
GLOB="composeApp/build/compose/binaries/main/msi/*.msi"
;;
*)
echo "ERROR: Unsupported OS '${OS}'." >&2
exit 1
;;
esac
echo "==> OS detected: ${OS} — task: ${TASK}"
# ── Build ────────────────────────────────────────────────────────────────────
echo "==> Building..."
./gradlew ${TASK}
# ── Locate artifact ──────────────────────────────────────────────────────────
ARTIFACT=$(ls ${GLOB} 2>/dev/null | head -1)
if [[ -z "${ARTIFACT}" ]]; then
echo "ERROR: No artifact found matching ${GLOB}" >&2
exit 1
fi
echo "==> Artifact: ${ARTIFACT}"
# ── Forgejo API setup ────────────────────────────────────────────────────────
API_BASE="https://git.asarius.site/api/v1"
REPO="rukira/wow-backup"
# ── Check for existing release ───────────────────────────────────────────────
echo "==> Checking for existing release ${TAG}..."
HTTP_CODE=$(curl -s -o /tmp/release_response.json -w "%{http_code}" \
-H "Authorization: token ${FORGEJO_TOKEN}" \
"${API_BASE}/repos/${REPO}/releases/tags/${TAG}")
if [[ "${HTTP_CODE}" == "200" ]]; then
RELEASE_ID=$(python3 -c "import json; print(json.load(open('/tmp/release_response.json'))['id'])")
echo "==> Found existing release (id: ${RELEASE_ID})"
else
echo "==> Creating release ${TAG}..."
HTTP_CODE=$(curl -s -o /tmp/release_create.json -w "%{http_code}" \
-X POST \
-H "Authorization: token ${FORGEJO_TOKEN}" \
-H "Content-Type: application/json" \
-d "{\"tag_name\": \"${TAG}\", \"name\": \"${TAG}\", \"body\": \"Release ${TAG}\"}" \
"${API_BASE}/repos/${REPO}/releases")
if [[ "${HTTP_CODE}" != "201" ]]; then
echo "ERROR: Failed to create release (HTTP ${HTTP_CODE}):" >&2
cat /tmp/release_create.json >&2
exit 1
fi
RELEASE_ID=$(python3 -c "import json; print(json.load(open('/tmp/release_create.json'))['id'])")
echo "==> Created release (id: ${RELEASE_ID})"
fi
# ── Upload artifact ──────────────────────────────────────────────────────────
FILENAME=$(basename "${ARTIFACT}")
echo "==> Uploading ${FILENAME}..."
HTTP_CODE=$(curl -s -o /tmp/upload_response.json -w "%{http_code}" \
-X POST \
-H "Authorization: token ${FORGEJO_TOKEN}" \
-F "attachment=@${ARTIFACT}" \
"${API_BASE}/repos/${REPO}/releases/${RELEASE_ID}/assets?name=${FILENAME}")
if [[ "${HTTP_CODE}" != "201" ]]; then
echo "ERROR: Failed to upload artifact (HTTP ${HTTP_CODE}):" >&2
cat /tmp/upload_response.json >&2
exit 1
fi
echo "==> Done! ${FILENAME} uploaded to release ${TAG}."