a2f31c831c
build / mod (push) Successful in 5m7s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
57 lines
3.3 KiB
YAML
57 lines
3.3 KiB
YAML
# На каждый пуш: только мод (.hmod, один для всех ОС) и релиз build-<номер> с ним.
|
||
# Раннер живёт на одной машине с Gitea и другими сервисами (2 ядра, 4 ГБ): сборка мода лёгкая —
|
||
# один поток компиляции, низший приоритет, без системных пакетов и без кэша target.
|
||
# Игра-форк собирается отдельно и только вручную: game.yml (Linux) и desktop.yml (macOS/Windows).
|
||
name: build
|
||
|
||
on:
|
||
# Branches only: the release's own tag (build-N) mustn't start another build.
|
||
push:
|
||
branches: ['**']
|
||
workflow_dispatch:
|
||
|
||
env:
|
||
CARGO_TERM_COLOR: never
|
||
CARGO_BUILD_JOBS: "1"
|
||
CARGO_INCREMENTAL: "0"
|
||
|
||
jobs:
|
||
mod:
|
||
runs-on: ubuntu-latest
|
||
steps:
|
||
- uses: actions/checkout@v4
|
||
- name: Rust
|
||
run: |
|
||
curl -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal --target wasm32-unknown-unknown
|
||
echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
|
||
# Инструмент упаковки (cargo-horizon-mod без пробного запуска) — единственное, что стоит кэшировать.
|
||
- uses: actions/cache@v3
|
||
continue-on-error: true
|
||
with:
|
||
path: ~/.cargo/bin/cargo-horizon-mod
|
||
key: tool-${{ hashFiles('HORIZON_COMMIT', 'horizon-patches/*') }}
|
||
- name: Форк Horizon
|
||
run: nice -n 19 python3 tools/airdef.py fork
|
||
- name: Мод
|
||
run: nice -n 19 python3 tools/airdef.py mod
|
||
- name: Релиз
|
||
if: github.ref == 'refs/heads/main'
|
||
env:
|
||
TOKEN: ${{ secrets.RELEASE_TOKEN || gitea.token }}
|
||
API: ${{ github.server_url }}/api/v1/repos/${{ github.repository }}
|
||
TAG: build-${{ github.run_number }}
|
||
SHA: ${{ github.sha }}
|
||
run: |
|
||
set -e
|
||
mkdir -p out && cp airdef-mod/target/horizon-mod/airdef.hmod out/airdef.hmod
|
||
BODY=$(printf 'Сборка %s (%s).\n\n- airdef.hmod — мод, для всех ОС.\n\nИгра-форк Horizon (нужна для мода): собрать у себя — python3 tools/airdef.py all, или запустить вручную workflow game (Linux) / desktop (macOS, Windows) с этим тегом.\nКак запускать: docs/INSTALL.md.' "$TAG" "$SHA")
|
||
DATA=$(BODY="$BODY" python3 -c 'import json,os;print(json.dumps({"tag_name":os.environ["TAG"],"target_commitish":os.environ["SHA"],"name":os.environ["TAG"],"body":os.environ["BODY"]}))')
|
||
if [ -z "$TOKEN" ]; then echo "::error::нет токена: добавь секрет RELEASE_TOKEN"; exit 1; fi
|
||
CODE=$(curl -sS -o release.json -w '%{http_code}' -X POST -H "Authorization: token $TOKEN" -H "Content-Type: application/json" "$API/releases" -d "$DATA")
|
||
if [ "$CODE" != "201" ]; then
|
||
echo "::error::Gitea не создала релиз (HTTP $CODE): $(cat release.json). Проверь секрет RELEASE_TOKEN (токен с правом записи в репозиторий)."
|
||
exit 1
|
||
fi
|
||
ID=$(python3 -c 'import json;print(json.load(open("release.json"))["id"])')
|
||
curl -sf -X POST -H "Authorization: token $TOKEN" -F "attachment=@out/airdef.hmod" "$API/releases/$ID/assets?name=airdef.hmod" > /dev/null
|