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