diff --git a/.gitea/workflows/build-and-release.yml b/.gitea/workflows/build-and-release.yml new file mode 100644 index 0000000..72648cd --- /dev/null +++ b/.gitea/workflows/build-and-release.yml @@ -0,0 +1,101 @@ +name: Build and Release + +on: + push: + branches: + - main + tags: + - 'v*' + +permissions: + contents: write + +jobs: + build: + name: Build executables + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up Zig + uses: mlugg/setup-zig@v2 + with: + version: 0.16.0 + + - name: Install shader compiler + run: | + sudo apt-get update + sudo apt-get install -y glslc + + - name: Show tool versions + run: | + zig version + glslc --version + + - name: Build GUI executable + run: | + zig build \ + --cache-dir /tmp/zig-chess-cache \ + --global-cache-dir /tmp/zig-global-cache + + - name: Build magic generator executable + run: | + zig build magic-numbers \ + --cache-dir /tmp/zig-chess-cache \ + --global-cache-dir /tmp/zig-global-cache + + - name: Package executables + run: | + set -eu + version="${GITHUB_REF_NAME}" + os="$(uname -s | tr '[:upper:]' '[:lower:]')" + arch="$(uname -m)" + artifact_dir="zig-chess-${version}-${os}-${arch}" + mkdir -p "dist/${artifact_dir}" + cp zig-out/bin/zig-chess "dist/${artifact_dir}/" + cp zig-out/bin/magic-numbers "dist/${artifact_dir}/" + tar -C dist -czf "dist/${artifact_dir}.tar.gz" "${artifact_dir}" + sha256sum "dist/${artifact_dir}.tar.gz" > "dist/${artifact_dir}.tar.gz.sha256" + + - name: Upload build artifact + uses: actions/upload-artifact@v4 + with: + name: zig-chess-${{ github.ref_name }} + path: | + dist/*.tar.gz + dist/*.sha256 + + - name: Create Gitea release for version tag + if: startsWith(github.ref, 'refs/tags/v') + env: + GITEA_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + set -eu + api="${GITHUB_SERVER_URL}/api/v1/repos/${GITHUB_REPOSITORY}" + tag="${GITHUB_REF_NAME}" + + release_json="$(mktemp)" + asset_response="$(mktemp)" + + printf '{"tag_name":"%s","target_commitish":"%s","name":"%s","body":"Automated release for %s","draft":false,"prerelease":false}' \ + "$tag" "$GITHUB_SHA" "$tag" "$tag" > "$release_json" + + response="$(curl -sS \ + -H "Authorization: token ${GITEA_TOKEN}" \ + -H "Content-Type: application/json" \ + -X POST \ + --data @"$release_json" \ + "${api}/releases")" + + release_id="$(printf '%s' "$response" | python3 -c 'import json,sys; print(json.load(sys.stdin)["id"])')" + + for asset in dist/*.tar.gz dist/*.sha256; do + name="$(basename "$asset")" + curl -sS \ + -H "Authorization: token ${GITEA_TOKEN}" \ + -X POST \ + -F "attachment=@${asset}" \ + "${api}/releases/${release_id}/assets?name=${name}" > "$asset_response" + done