Add two new workflows: - sync-release.yml: automatically mirrors releases (with assets) to GitHub when published on Gitea - backfill-releases.yml: manual workflow to bulk-sync all existing Gitea releases to GitHub Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
60 lines
2.2 KiB
YAML
60 lines
2.2 KiB
YAML
name: Sync Release to GitHub
|
|
|
|
on:
|
|
release:
|
|
types: [published]
|
|
|
|
jobs:
|
|
sync-release:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Mirror release to GitHub
|
|
env:
|
|
GH_PAT: ${{ secrets.GH_PAT }}
|
|
GITHUB_REPO: shadowdao/triple-c
|
|
RELEASE_TAG: ${{ gitea.event.release.tag_name }}
|
|
RELEASE_NAME: ${{ gitea.event.release.name }}
|
|
RELEASE_BODY: ${{ gitea.event.release.body }}
|
|
IS_PRERELEASE: ${{ gitea.event.release.prerelease }}
|
|
IS_DRAFT: ${{ gitea.event.release.draft }}
|
|
run: |
|
|
set -e
|
|
|
|
echo "==> Creating release $RELEASE_TAG on GitHub..."
|
|
|
|
RESPONSE=$(curl -sf -X POST \
|
|
-H "Authorization: Bearer $GH_PAT" \
|
|
-H "Accept: application/vnd.github+json" \
|
|
-H "Content-Type: application/json" \
|
|
https://api.github.com/repos/$GITHUB_REPO/releases \
|
|
-d "{
|
|
\"tag_name\": \"$RELEASE_TAG\",
|
|
\"name\": \"$RELEASE_NAME\",
|
|
\"body\": $(echo "$RELEASE_BODY" | jq -Rs .),
|
|
\"draft\": $IS_DRAFT,
|
|
\"prerelease\": $IS_PRERELEASE
|
|
}")
|
|
|
|
UPLOAD_URL=$(echo "$RESPONSE" | jq -r '.upload_url' | sed 's/{?name,label}//')
|
|
echo "Release created. Upload URL: $UPLOAD_URL"
|
|
|
|
echo '${{ toJSON(gitea.event.release.assets) }}' | jq -c '.[]' | while read asset; do
|
|
ASSET_NAME=$(echo "$asset" | jq -r '.name')
|
|
ASSET_URL=$(echo "$asset" | jq -r '.browser_download_url')
|
|
|
|
echo "==> Downloading asset: $ASSET_NAME"
|
|
curl -sfL -o "/tmp/$ASSET_NAME" "$ASSET_URL"
|
|
|
|
echo "==> Uploading $ASSET_NAME to GitHub..."
|
|
ENCODED_NAME=$(python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1]))" "$ASSET_NAME")
|
|
curl -sf -X POST \
|
|
-H "Authorization: Bearer $GH_PAT" \
|
|
-H "Accept: application/vnd.github+json" \
|
|
-H "Content-Type: application/octet-stream" \
|
|
--data-binary "@/tmp/$ASSET_NAME" \
|
|
"$UPLOAD_URL?name=$ENCODED_NAME"
|
|
|
|
echo " Uploaded: $ASSET_NAME"
|
|
done
|
|
|
|
echo "==> Release sync complete." |