f88a303327
- Play on Linux: use launch.linux_wrapper (wine) or linux_steam_uri; chmod .exe after install - Windows: retry EBUSY on MPQ replace; download to .new before rename - After successful sync: remove .bak-* backups; realmlist only Data/enUS (ignore enGB) - Gitea/distro merge: skip Fractured-Launcher* from GitHub assets (CI default-branch build wins) - Omit blockmap and builder-debug from staged artifacts and Gitea uploads; upload script validates before clearing attachments - README and launcher version 1.0.12 Co-authored-by: Cursor <cursoragent@cursor.com>
162 lines
5.4 KiB
YAML
162 lines
5.4 KiB
YAML
# When a release is published on this repo (or manual dispatch):
|
|
# 1. Builds the Electron launcher from that tag (npm run pack:win).
|
|
# 2. Downloads any assets attached to the same release on this repo (patches, Wow exe, …).
|
|
# 3. Merges them (launcher files win on name collision) and creates/updates the matching
|
|
# release on Fractured-Distro.
|
|
#
|
|
# Setup (GitHub → Settings → Secrets and variables → Actions):
|
|
# DISTRO_SYNC_TOKEN — PAT with releases write on Fractured-Distro (see repo README).
|
|
#
|
|
# Change DISTRO_REPO or the job `if:` if your GitHub slugs differ.
|
|
|
|
name: Sync release to Fractured-Distro
|
|
|
|
on:
|
|
release:
|
|
types: [published]
|
|
workflow_dispatch:
|
|
inputs:
|
|
tag:
|
|
description: 'Release tag on this repo (must exist; e.g. v1.0.0)'
|
|
required: true
|
|
type: string
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
env:
|
|
DISTRO_REPO: Dawnforger/Fractured-Distro
|
|
|
|
jobs:
|
|
meta:
|
|
runs-on: ubuntu-latest
|
|
if: github.repository == 'Dawnforger/Fractured'
|
|
outputs:
|
|
tag: ${{ steps.t.outputs.tag }}
|
|
steps:
|
|
- name: Resolve tag
|
|
id: t
|
|
shell: bash
|
|
run: |
|
|
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
|
|
echo "tag=${{ inputs.tag }}" >> "$GITHUB_OUTPUT"
|
|
else
|
|
echo "tag=${{ github.event.release.tag_name }}" >> "$GITHUB_OUTPUT"
|
|
fi
|
|
|
|
build-electron:
|
|
needs: meta
|
|
if: github.repository == 'Dawnforger/Fractured'
|
|
runs-on: windows-latest
|
|
timeout-minutes: 45
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
ref: ${{ needs.meta.outputs.tag }}
|
|
|
|
- uses: actions/setup-node@v4
|
|
with:
|
|
node-version: '20'
|
|
cache: npm
|
|
cache-dependency-path: tools/fractured-launcher-electron/package-lock.json
|
|
|
|
- name: Install and pack (NSIS + portable)
|
|
working-directory: tools/fractured-launcher-electron
|
|
run: |
|
|
npm ci
|
|
npm run pack:win
|
|
|
|
- name: Stage launcher files for upload
|
|
shell: pwsh
|
|
run: |
|
|
New-Item -ItemType Directory -Force -Path launcher-publish | Out-Null
|
|
Copy-Item tools/fractured-launcher-electron/dist/*.exe launcher-publish/
|
|
if (Test-Path tools/fractured-launcher-electron/dist/latest.yml) {
|
|
Copy-Item tools/fractured-launcher-electron/dist/latest.yml launcher-publish/
|
|
}
|
|
|
|
- uses: actions/upload-artifact@v4
|
|
with:
|
|
name: electron-dist
|
|
path: launcher-publish/
|
|
|
|
sync-distro:
|
|
needs: [meta, build-electron]
|
|
if: github.repository == 'Dawnforger/Fractured'
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
ref: ${{ github.event.repository.default_branch }}
|
|
sparse-checkout: |
|
|
tools/fractured-launcher-electron/scripts
|
|
sparse-checkout-cone-mode: true
|
|
|
|
- uses: actions/download-artifact@v4
|
|
with:
|
|
name: electron-dist
|
|
path: /tmp/electron
|
|
|
|
- name: Merge main release assets + Electron build
|
|
env:
|
|
GH_TOKEN: ${{ github.token }}
|
|
run: |
|
|
set -euo pipefail
|
|
. tools/fractured-launcher-electron/scripts/release-sync-filters.sh
|
|
TAG="${{ needs.meta.outputs.tag }}"
|
|
mkdir -p combined
|
|
mkdir -p /tmp/from-main
|
|
if gh release download "$TAG" -R "${{ github.repository }}" -D /tmp/from-main 2>/tmp/dl.err; then
|
|
shopt -s nullglob
|
|
for f in /tmp/from-main/*; do
|
|
if [ -f "$f" ]; then
|
|
bn=$(basename "$f")
|
|
if should_skip_merge_from_github "$bn"; then
|
|
echo "Skipping GitHub release asset (CI launcher or excluded): $bn"
|
|
continue
|
|
fi
|
|
cp -f "$f" combined/
|
|
fi
|
|
done
|
|
echo "Merged assets from ${{ github.repository }} release $TAG"
|
|
else
|
|
echo "Main release download note (continuing with launcher only):"
|
|
cat /tmp/dl.err || true
|
|
fi
|
|
shopt -s nullglob
|
|
for f in /tmp/electron/*; do
|
|
if [ -f "$f" ]; then
|
|
cp -f "$f" combined/
|
|
fi
|
|
done
|
|
echo "Combined directory:"
|
|
ls -la combined/
|
|
|
|
- name: Upload to Fractured-Distro
|
|
env:
|
|
GH_TOKEN: ${{ secrets.DISTRO_SYNC_TOKEN }}
|
|
run: |
|
|
set -euo pipefail
|
|
if [ -z "${GH_TOKEN:-}" ]; then
|
|
echo "Missing secret DISTRO_SYNC_TOKEN (PAT with access to $DISTRO_REPO)."
|
|
exit 1
|
|
fi
|
|
TAG="${{ needs.meta.outputs.tag }}"
|
|
shopt -s nullglob
|
|
files=(combined/*)
|
|
if [ "${#files[@]}" -eq 0 ]; then
|
|
echo "Nothing to upload (Electron pack produced no files?)."
|
|
exit 1
|
|
fi
|
|
SRC_URL="https://github.com/${{ github.repository }}/releases/tag/${TAG}"
|
|
if gh release view "$TAG" -R "$DISTRO_REPO" &>/dev/null; then
|
|
gh release upload "$TAG" -R "$DISTRO_REPO" "${files[@]}" --clobber
|
|
echo "Uploaded (clobber) to $DISTRO_REPO release $TAG"
|
|
else
|
|
gh release create "$TAG" -R "$DISTRO_REPO" \
|
|
--title "Fractured $TAG" \
|
|
--notes "Synced from [$TAG]($SRC_URL) on ${{ github.repository }}. Includes CI-built Electron launcher + release assets." \
|
|
"${files[@]}"
|
|
echo "Created $DISTRO_REPO release $TAG with ${#files[@]} asset(s)."
|
|
fi
|