# 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