diff --git a/.gitea/workflows/continuous.yml b/.gitea/workflows/continuous.yml new file mode 100644 index 0000000..b2479ed --- /dev/null +++ b/.gitea/workflows/continuous.yml @@ -0,0 +1,48 @@ +name: continuous + +on: + push: + branches: [main] + workflow_dispatch: + +jobs: + continuous: + name: Publish continuous release + runs-on: nix + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Build Rust core + run: nix build .#aac --print-build-logs + + - name: Package VPM zip + env: + VPM_VERSION: continuous + VPM_RELEASE_BASE: ${{ github.server_url }}/${{ github.repository }}/releases/download/continuous + run: nix develop -c bash ./vpm/package.sh + + - name: Publish release and upload zip + env: + TOKEN: ${{ secrets.VPM_TOKEN || secrets.GITHUB_TOKEN }} + SERVER: ${{ github.server_url }} + REPO: ${{ github.repository }} + TAG: continuous + VPM_VERSION: continuous + run: nix develop -c bash ./vpm/publish.sh + + # The index carries the zip's sha256, which only exists after packaging. + - name: Commit updated VPM index + env: + TOKEN: ${{ secrets.VPM_TOKEN || secrets.GITHUB_TOKEN }} + SERVER: ${{ github.server_url }} + REPO: ${{ github.repository }} + run: | + set -euo pipefail + git config user.name gitea-actions + git config user.email actions@git.scug.io + git add vpm/index.json + git diff --cached --quiet && exit 0 + git commit -m "vpm: continuous index update" + git push "https://x-access-token:$TOKEN@${SERVER#https://}/${REPO}.git" HEAD:main diff --git a/vpm/package.sh b/vpm/package.sh index fa83a18..042784a 100755 --- a/vpm/package.sh +++ b/vpm/package.sh @@ -26,7 +26,7 @@ index_url=${VPM_INDEX_URL:-$host/$project/raw/branch/main/vpm/index.json} release_base=${VPM_RELEASE_BASE:-} id=$(jq -r .name "$pkg/package.json") -version=$(jq -r .version "$pkg/package.json") +version=${VPM_VERSION:-$(jq -r .version "$pkg/package.json")} zip_name="$id-$version.zip" : "${release_base:=$host/$project/releases/download/v$version}" zip_url="$release_base/$zip_name" diff --git a/vpm/publish.sh b/vpm/publish.sh index d40f30f..2545084 100755 --- a/vpm/publish.sh +++ b/vpm/publish.sh @@ -14,12 +14,22 @@ root=$(cd "$(dirname "$0")/.." && pwd) manifest="$root/csharp/dev.doloro.animator-as-crab/package.json" id=$(jq -r .name "$manifest") -version=$(jq -r .version "$manifest") +version=${VPM_VERSION:-$(jq -r .version "$manifest")} zip="$root/vpm/dist/$id-$version.zip" zip_name=$(basename "$zip") [ -f "$zip" ] || { echo "missing $zip; run package.sh first" >&2; exit 1; } +# Delete existing release with same tag if present (needed for rolling tags like continuous) +existing=$(curl -fsS -H "Authorization: token $TOKEN" \ + "$SERVER/api/v1/repos/$REPO/releases/tags/$TAG" 2>/dev/null || true) +if [ -n "$existing" ] && [ "$existing" != 'null' ]; then + existing_id=$(jq -r .id <<<"$existing") + echo "deleting existing release $existing_id for tag $TAG" + curl -fsS -X DELETE -H "Authorization: token $TOKEN" \ + "$SERVER/api/v1/repos/$REPO/releases/$existing_id" +fi + release=$(curl -fsS -X POST \ -H "Authorization: token $TOKEN" -H "Content-Type: application/json" \ "$SERVER/api/v1/repos/$REPO/releases" \