Split release publishing into a separate public distribution repo
Build Check / build (push) Successful in 21s
Release Plugin / release (push) Failing after 18s

Gitea has no per-release visibility override -- a repo is public or
private for everything (raw files, releases, API), confirmed against
Gitea's own docs/issue tracker. So manifest.json and release zips now
publish to a dedicated public repo (JellyfinSyncPlus-repo) via Gitea's
Contents API, while this source repo stays private. The v0.2.0.0 release
already pushed under the old (source-repo-only) version of this pipeline
is now stale; the next tag will publish correctly under the new split.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-09 17:21:04 +02:00
co-authored by Claude Sonnet 5
parent 6eb63449a9
commit 1d2246c5e2
5 changed files with 159 additions and 72 deletions
+21 -16
View File
@@ -1,18 +1,21 @@
#!/usr/bin/env bash
# Builds, packages, and updates manifest.json for a tagged release. Used by
# .github/workflows/release.yml; safe to run locally too for a dry run.
# 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
# REPO_OWNER -- Gitea org/user the repo lives under
# REPO_NAME -- Gitea repo name
# 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}"
: "${REPO_OWNER:?REPO_OWNER env var required}"
: "${REPO_NAME:?REPO_NAME env var required}"
: "${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"
@@ -34,15 +37,17 @@ 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}/${REPO_OWNER}/${REPO_NAME}/releases/download/v${VERSION}/${ZIP_NAME}"
python3 "$ROOT/dev/update_manifest.py" \
--build-yaml "$ROOT/build.yaml" \
--manifest "$ROOT/manifest.json" \
--version "$VERSION" \
--checksum "$CHECKSUM" \
--source-url "$SOURCE_URL"
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