From 40c9f2795272704954b296e7deee1ca62b1118ed Mon Sep 17 00:00:00 2001 From: Tony Date: Wed, 14 Jan 2026 09:18:21 -0600 Subject: [PATCH] test workflow --- .github/workflows/release-docs.yml | 102 +++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 .github/workflows/release-docs.yml diff --git a/.github/workflows/release-docs.yml b/.github/workflows/release-docs.yml new file mode 100644 index 0000000..1d9ecfd --- /dev/null +++ b/.github/workflows/release-docs.yml @@ -0,0 +1,102 @@ +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}" \ No newline at end of file