Repository navigation
Release prep: 0.8.0 and a Linux riscv64 release build (#669) #80
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # Quick static checks for the release pipeline (seconds, no Rust build): workflow syntax, | |
| # packaging shell/PowerShell scripts, and the Linux desktop/AppStream/Flatpak metadata. Plus a | |
| # Windows MSI install test with stub binaries (install folder, upgrade, repair, uninstall). | |
| name: Packaging lint | |
| on: | |
| push: | |
| branches: [main, release] | |
| paths: [".github/workflows/**", "packaging/**", "assets/app-icon/**"] | |
| pull_request: | |
| paths: [".github/workflows/**", "packaging/**", "assets/app-icon/**"] | |
| workflow_dispatch: | |
| permissions: | |
| contents: read | |
| concurrency: | |
| group: packaging-lint-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| lint: | |
| runs-on: ubuntu-latest | |
| env: | |
| ACTIONLINT_VERSION: 1.7.12 | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| - name: Install tools | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y --no-install-recommends shellcheck desktop-file-utils appstream libxml2-utils python3-yaml | |
| curl -fsSL "https://github.com/rhysd/actionlint/releases/download/v${ACTIONLINT_VERSION}/actionlint_${ACTIONLINT_VERSION}_linux_amd64.tar.gz" \ | |
| | tar -xz -C "$RUNNER_TEMP" actionlint | |
| - name: actionlint | |
| run: | | |
| "$RUNNER_TEMP/actionlint" -color | |
| - name: shellcheck | |
| run: shellcheck packaging/*.sh packaging/*/*.sh | |
| - name: PowerShell | |
| shell: pwsh | |
| run: | | |
| foreach ($f in Get-ChildItem packaging/windows/*.ps1) { | |
| $errors = $null | |
| [System.Management.Automation.Language.Parser]::ParseFile($f.FullName, [ref]$null, [ref]$errors) | Out-Null | |
| if ($errors) { $errors | ForEach-Object { Write-Output "::error file=$($f.Name)::$_" }; exit 1 } | |
| Write-Output "ok $($f.Name)" | |
| } | |
| - name: XML, desktop entry, AppStream, Flatpak manifest | |
| run: | | |
| xmllint --noout packaging/windows/*.wxs packaging/macos/*.plist* packaging/linux/*.xml* | |
| # Windows Installer needs Icon ids ending in .ico or .exe, or shortcuts show a blank icon. | |
| if grep -oE '<Icon Id="[^"]*"' packaging/windows/effectcraft.wxs | grep -vE '\.(ico|exe)"$'; then | |
| echo "::error::Icon Id must end in .ico or .exe"; exit 1 | |
| fi | |
| desktop-file-validate packaging/linux/ai.storyteller.effectcraft.desktop | |
| sed -e 's/@VERSION@/0.0.0/' -e 's/@DATE@/2026-01-01/' packaging/linux/ai.storyteller.effectcraft.metainfo.xml.in >"$RUNNER_TEMP/ai.storyteller.effectcraft.metainfo.xml" | |
| appstreamcli validate --no-net --explain "$RUNNER_TEMP/ai.storyteller.effectcraft.metainfo.xml" | |
| python3 - <<'EOF' | |
| import yaml | |
| src = yaml.safe_load(open("packaging/linux/flatpak/ai.storyteller.effectcraft.yml")) | |
| bundle = yaml.safe_load(open("packaging/linux/flatpak/ai.storyteller.effectcraft.bundle.yml")) | |
| for m in (src, bundle): | |
| assert m["id"] == "ai.storyteller.effectcraft" and m["command"] == "effectcraft", m["id"] | |
| for key in ("runtime", "runtime-version", "sdk", "finish-args"): | |
| assert src[key] == bundle[key], f"Flatpak manifests disagree on {key}: {src[key]} vs {bundle[key]}" | |
| print("Flatpak manifests ok") | |
| EOF | |
| - name: FreeBSD package layout (stub binaries) | |
| run: bash packaging/freebsd/package.sh --dry-run | |
| windows-msi: | |
| name: Windows MSI install folder (stub binaries) | |
| runs-on: windows-latest | |
| timeout-minutes: 15 | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| - name: Install WiX | |
| shell: pwsh | |
| run: dotnet tool install --global wix --version 5.0.2 | |
| - name: Install, upgrade, repair and uninstall | |
| shell: pwsh | |
| run: ./packaging/windows/test-msi.ps1 |