All checks were successful
Build plugin / build (push) Successful in 1m10s
curl -sf swallowed the API answer, so when the release POST failed the run just went red with no reason and devices stayed on the previous release.
74 lines
2.7 KiB
YAML
74 lines
2.7 KiB
YAML
name: Build plugin
|
|
|
|
on:
|
|
push:
|
|
branches: [trunk]
|
|
tags: ["v*"]
|
|
pull_request:
|
|
branches: [trunk]
|
|
|
|
jobs:
|
|
build:
|
|
runs-on: [docker, ubuntu-24.04]
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Install dependencies
|
|
run: |
|
|
apt-get update
|
|
apt-get install -y -qq make git wget
|
|
|
|
- name: Install Godot
|
|
run: |
|
|
wget -q https://github.com/godotengine/godot/releases/download/4.4.1-stable/Godot_v4.4.1-stable_linux.x86_64.zip
|
|
# python3 instead of unzip: the runner's apt index goes stale and the
|
|
# pinned unzip deb 404s in the security pool.
|
|
python3 -m zipfile -e Godot_v4.4.1-stable_linux.x86_64.zip godot-dir
|
|
mkdir -p "$HOME/.local/bin"
|
|
mv godot-dir/Godot_v4.4.1-stable_linux.x86_64 "$HOME/.local/bin/godot"
|
|
chmod +x "$HOME/.local/bin/godot"
|
|
echo "$HOME/.local/bin" >> "$GITHUB_PATH"
|
|
|
|
- name: Build
|
|
env:
|
|
GODOT: godot
|
|
run: make dist
|
|
|
|
- name: Create release
|
|
if: startsWith(github.ref, 'refs/tags/v')
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
run: |
|
|
TAG="${GITHUB_REF_NAME}"
|
|
API="${GITHUB_SERVER_URL}/api/v1/repos/${GITHUB_REPOSITORY}"
|
|
|
|
# Create the release. `curl -sf` hid the reason a tag build could not
|
|
# publish, which left devices on the previous release with no clue,
|
|
# so report the status code and the API answer.
|
|
HTTP=$(curl -sS -o /tmp/release.json -w "%{http_code}" -X POST "${API}/releases" \
|
|
-H "Authorization: token ${GITHUB_TOKEN}" \
|
|
-H "Content-Type: application/json" \
|
|
-d "{\"tag_name\":\"${TAG}\",\"name\":\"${TAG}\"}")
|
|
if [ "${HTTP}" != "201" ] && [ "${HTTP}" != "200" ]; then
|
|
echo "Release creation for ${TAG} failed with HTTP ${HTTP}:"
|
|
cat /tmp/release.json
|
|
exit 1
|
|
fi
|
|
|
|
RELEASE_ID=$(python3 -c "import json; print(json.load(open('/tmp/release.json'))['id'])")
|
|
|
|
# Upload assets
|
|
for FILE in dist/itch.zip dist/itch.zip.sha256.txt; do
|
|
NAME=$(basename "$FILE")
|
|
HTTP=$(curl -sS -o /tmp/asset.json -w "%{http_code}" -X POST \
|
|
"${API}/releases/${RELEASE_ID}/assets?name=${NAME}" \
|
|
-H "Authorization: token ${GITHUB_TOKEN}" \
|
|
-H "Content-Type: application/octet-stream" \
|
|
--data-binary "@${FILE}")
|
|
if [ "${HTTP}" != "201" ] && [ "${HTTP}" != "200" ]; then
|
|
echo "Asset upload of ${NAME} failed with HTTP ${HTTP}:"
|
|
cat /tmp/asset.json
|
|
exit 1
|
|
fi
|
|
done
|