name: Release Cascade
on:
push:
tags:
- 'v[0-9]*.[0-9]*.[0-9]*'
jobs:
dispatch-bindings:
name: Dispatch to binding repos
runs-on: ubuntu-latest
steps:
- name: Wait for minigraf to be indexed on crates.io
run: |
VERSION="${GITHUB_REF_NAME#v}"
echo "Waiting for minigraf@$VERSION on crates.io..."
FOUND=0
for i in $(seq 1 18); do
STATUS=$(curl -s "https://crates.io/api/v1/crates/minigraf/$VERSION" \
-H "User-Agent: minigraf-cascade/1.0" | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('version',{}).get('num',''))" 2>/dev/null || echo "")
if [ "$STATUS" = "$VERSION" ]; then
echo "minigraf@$VERSION is live (attempt $i)"
FOUND=1
break
fi
echo "Attempt $i/18: not yet available, waiting 10s..."
sleep 10
done
if [ "$FOUND" != "1" ]; then
echo "ERROR: minigraf@$VERSION did not appear on crates.io within 3 minutes"
exit 1
fi
- name: Dispatch to binding repos
env:
GH_TOKEN: ${{ secrets.MINIGRAF_RELEASE_TOKEN }}
run: |
VERSION="${GITHUB_REF_NAME}"
for REPO in minigraf-python minigraf-node minigraf-wasm \
minigraf-java minigraf-android minigraf-swift minigraf-c; do
echo "Dispatching core-release to project-minigraf/$REPO @ $VERSION"
gh api repos/project-minigraf/$REPO/dispatches \
-f event_type=core-release \
-f "client_payload[version]=$VERSION"
done