Skip to content

Release build (Windows + Linux) #2

Release build (Windows + Linux)

Release build (Windows + Linux) #2

Workflow file for this run

# Release build pipeline — Windows + Linux app binaries (asset-free).
#
# Produces the portable prebuilt binaries that this Mac can't build natively:
# a Windows portable .zip and a Linux AppImage + .tar.gz. macOS is built and
# validated LOCALLY by scripts/release.sh; a maintainer assembles the final
# GitHub Release from both sources (see docs/RELEASING.md).
#
# Manual-only, matching the repo's local-CI posture: a maintainer dispatches
# this deliberately. The build jobs need no repository secrets and write no
# repository state — they only compile the ASSET-FREE source and upload the
# results as workflow artifacts, so they are consistent with the
# bring-your-own-ROM / no-hosted-auto-triggers provenance policy.
name: Release build (Windows + Linux)
on:
workflow_dispatch:
inputs:
version:
description: "Version label for the artifact names (e.g. v0.3.0)"
required: false
default: "dev"
permissions:
contents: read
jobs:
linux:
name: Linux app (AppImage + tar.gz)
runs-on: ubuntu-22.04 # oldest-reasonable glibc for broad compatibility
timeout-minutes: 30
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y cmake pkg-config libsdl2-dev libgl1-mesa-dev \
libdbus-1-dev file wget
- name: Build the app (MGB64_APP=ON, Release)
run: |
cmake -B build -DCMAKE_BUILD_TYPE=Release -DMGB64_APP=ON -DPORT_VALIDATION_TESTS=OFF
cmake --build build --target ge007 -j
- name: Package AppImage + tar.gz
run: ./scripts/package_linux_appimage.sh --binary build/ge007 --version "${{ github.event.inputs.version }}"
- name: Verify asset-free
run: ./macos/Scripts/verify_asset_free.sh build/ge007
- name: Smoke-launch the ROM-free launcher (headless)
run: |
sudo apt-get install -y xvfb
xvfb-run -a env MGB64_APP_SMOKE_FRAMES=30 ./build/ge007 | tee smoke.txt
grep -q "smoke: rendered 30 frames" smoke.txt
- uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4
with:
name: mgb64-linux-${{ github.event.inputs.version }}
path: dist/mgb64-linux-*
windows:
name: Windows app (portable .zip)
runs-on: windows-latest
timeout-minutes: 40
defaults:
run:
shell: msys2 {0}
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- uses: msys2/setup-msys2@d40200dc2db4c351366b048a9565ad82919e1c24 # v2
with:
msystem: MINGW64
update: true
install: >-
mingw-w64-x86_64-gcc mingw-w64-x86_64-cmake mingw-w64-x86_64-SDL2
mingw-w64-x86_64-pkg-config mingw-w64-x86_64-ninja zip
- name: Build the app (MGB64_APP=ON, Release)
run: |
cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DMGB64_APP=ON -DPORT_VALIDATION_TESTS=OFF
cmake --build build --target ge007 -j
- name: Package portable .zip (ge007.exe + SDL2.dll)
run: ./scripts/package_windows_zip.sh --binary build/ge007.exe --version "${{ github.event.inputs.version }}"
- uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4
with:
name: mgb64-windows-${{ github.event.inputs.version }}
path: dist/mgb64-windows-*