name: Build and publish CMBA rulebooks (Gitea) on: push: tags: - "v*" jobs: build-release: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Install dependencies run: | sudo apt-get update sudo apt-get install -y pandoc \ texlive-latex-recommended \ texlive-fonts-recommended \ texlive-latex-extra \ jq \ curl - name: Build artifacts run: | set -euo pipefail mkdir -p dist for doc in cmba-bylaws; do # Mobile-friendly HTML with TOC + serif styling pandoc "src/${doc}.md" \ --toc \ --standalone \ --metadata title="CMBA ${doc}" \ -o "dist/${doc}.html" # PDF pandoc "src/${doc}.md" \ --metadata title="CMBA ${doc}" \ -o "dist/${doc}.pdf" done # Include source markdown for transparency cp src/${doc}.md dist/ - name: Create or update Gitea Release and upload assets env: GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} GITEA_BASE_URL: ${{ secrets.GITEA_BASE_URL }} # Gitea provides these variables in Actions: REPO: ${{ gitea.repository }} # "owner/repo" TAG: ${{ gitea.ref_name }} # e.g. "v2026.0" run: | set -euo pipefail OWNER="$(echo "$REPO" | cut -d/ -f1)" NAME="$(echo "$REPO" | cut -d/ -f2)" API="${GITEA_BASE_URL}/api/v1" AUTH="Authorization: token ${GITEA_TOKEN}" echo "Repo: $OWNER/$NAME" echo "Tag: $TAG" # Check if release exists for this tag existing_release_json="$(curl -sS -H "$AUTH" \ "$API/repos/$OWNER/$NAME/releases/tags/$TAG" || true)" if echo "$existing_release_json" | jq -e '.id' >/dev/null 2>&1; then RELEASE_ID="$(echo "$existing_release_json" | jq -r '.id')" echo "Release exists (id=$RELEASE_ID)." else echo "Creating release for tag $TAG..." create_json="$(curl -sS -X POST -H "$AUTH" -H "Content-Type: application/json" \ "$API/repos/$OWNER/$NAME/releases" \ -d "$(jq -n --arg tag "$TAG" --arg name "$TAG" \ '{tag_name:$tag, name:$name, draft:false, prerelease:false, body:"CMBA rulebooks release."}')")" RELEASE_ID="$(echo "$create_json" | jq -r '.id')" echo "Created release (id=$RELEASE_ID)." fi # Upload each file as an asset. If an asset already exists with same name, delete then re-upload. assets_json="$(curl -sS -H "$AUTH" "$API/repos/$OWNER/$NAME/releases/$RELEASE_ID/assets" || echo '[]')" for f in dist/*; do filename="$(basename "$f")" existing_asset_id="$(echo "$assets_json" | jq -r --arg n "$filename" '.[] | select(.name==$n) | .id' | head -n1 || true)" if [ -n "${existing_asset_id:-}" ] && [ "$existing_asset_id" != "null" ]; then echo "Deleting existing asset: $filename (id=$existing_asset_id)" curl -sS -X DELETE -H "$AUTH" \ "$API/repos/$OWNER/$NAME/releases/$RELEASE_ID/assets/$existing_asset_id" >/dev/null fi echo "Uploading: $filename" curl -sS -X POST -H "$AUTH" \ -F "attachment=@$f" \ "$API/repos/$OWNER/$NAME/releases/$RELEASE_ID/assets" >/dev/null done echo "Done. Release page: ${GITEA_BASE_URL}/${OWNER}/${NAME}/releases/tag/${TAG}"