#!/usr/bin/env bash # Builds and packages a tagged release. Used by .github/workflows/release.yml; safe to # run locally too for a dry run. Does NOT touch manifest.json -- that's published # separately to the public distribution repo by dev/publish-manifest.sh, since the zip # this produces gets uploaded there too (release assets on a private repo can't be made # public on their own in Gitea; see PLAN.md "Release distribution"). # # Required env vars: # VERSION -- e.g. 0.2.0.0 (must match build.yaml's version) # SERVER_URL -- e.g. https://gitea.mrcynic.site # PUBLIC_REPO_OWNER -- Gitea org/user the *public* distribution repo lives under # PUBLIC_REPO_NAME -- the public distribution repo's name (holds releases + manifest.json) set -euo pipefail : "${VERSION:?VERSION env var required, e.g. 0.2.0.0}" : "${SERVER_URL:?SERVER_URL env var required, e.g. https://gitea.mrcynic.site}" : "${PUBLIC_REPO_OWNER:?PUBLIC_REPO_OWNER env var required}" : "${PUBLIC_REPO_NAME:?PUBLIC_REPO_NAME env var required}" ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" cd "$ROOT" echo "Building Release configuration..." dotnet build src/JellyfinSyncPlus/JellyfinSyncPlus.csproj -c Release BUILD_VERSION=$(grep -oP '(?<=^version: ")[^"]*' build.yaml) if [ "$BUILD_VERSION" != "$VERSION" ]; then echo "ERROR: build.yaml version ($BUILD_VERSION) does not match requested VERSION ($VERSION)." >&2 echo "Update build.yaml's version field to match the git tag before releasing." >&2 exit 1 fi mkdir -p release ZIP_NAME="JellyfinSyncPlus_${VERSION}.zip" ZIP_PATH="release/${ZIP_NAME}" rm -f "$ZIP_PATH" (cd src/JellyfinSyncPlus/bin/Release/net9.0 && zip -j "$ROOT/$ZIP_PATH" JellyfinSyncPlus.dll) CHECKSUM=$(md5sum "$ZIP_PATH" | awk '{print $1}') SOURCE_URL="${SERVER_URL}/${PUBLIC_REPO_OWNER}/${PUBLIC_REPO_NAME}/releases/download/v${VERSION}/${ZIP_NAME}" echo "Packaged $ZIP_PATH" echo "Checksum: $CHECKSUM" echo "Source URL: $SOURCE_URL" # For the next workflow step to pick up without re-deriving them (no-op outside CI). if [ -n "${GITHUB_OUTPUT:-}" ]; then { echo "CHECKSUM=${CHECKSUM}" echo "SOURCE_URL=${SOURCE_URL}" echo "ZIP_PATH=${ZIP_PATH}" } >> "$GITHUB_OUTPUT" fi