2026.12 #131
Workflow file for this run
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
| name: Create Ubuntu and Window Releases | |
| on: | |
| push: | |
| tags: | |
| - '*' | |
| workflow_dispatch: | |
| jobs: | |
| build-linux: | |
| runs-on: ubuntu-24.04 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| submodules: 'true' | |
| - name: Extract release notes | |
| id: release_notes | |
| run: | | |
| NOTES=$(python3 ci_scripts/release_notes_to_md.py "${GITHUB_REF_NAME}") | |
| { | |
| echo "notes<<RELEASE_NOTES_EOF" | |
| echo "$NOTES" | |
| echo "RELEASE_NOTES_EOF" | |
| } >> "$GITHUB_OUTPUT" | |
| - run: docker pull ghcr.io/xlightssequencer/xlights-build-docker:master | |
| - run: docker run -e XLIGHTS_REF="${GITHUB_REF_NAME}" -e XLIGHTS_VERSION="${GITHUB_REF_NAME}" --name buildvm ghcr.io/xlightssequencer/xlights-build-docker:master /bin/bash Recipe.appimage | |
| - run: 'docker cp buildvm:/xLights/xLights/AppImage/ /tmp/' | |
| - run: ls -lh /tmp/AppImage | |
| - uses: ncipollo/release-action@v1 | |
| with: | |
| allowUpdates: true | |
| draft: true | |
| artifacts: "/tmp/AppImage/*.AppImage" | |
| body: ${{ steps.release_notes.outputs.notes }} | |
| token: ${{ secrets.GITHUB_TOKEN }} | |
| build-windows: | |
| runs-on: windows-2022 | |
| # Tag/dispatch-only workflow, so always enter the `release` environment: the | |
| # OIDC token subject (repo:.../environment:release) must match the Entra | |
| # federated credential that authorizes Azure Trusted Signing. Signing is then | |
| # gated on the WINDOWS_SIGNING_ENABLED repo variable, so releases keep | |
| # building (unsigned) until Trusted Signing is configured. | |
| environment: release | |
| permissions: | |
| id-token: write | |
| contents: write | |
| env: | |
| SIGN: ${{ vars.WINDOWS_SIGNING_ENABLED == 'true' }} | |
| steps: | |
| - name: Checkout xLights | |
| uses: actions/checkout@v4 | |
| with: | |
| submodules: 'true' | |
| - name: Setup msbuild | |
| uses: microsoft/setup-msbuild@v3 | |
| - name: install ISPC | |
| uses: ispc/install-ispc-action@main | |
| with: | |
| version: 1.31.0 | |
| - name: Download wxWidgets | |
| run: | |
| git clone --depth=1 --shallow-submodules --recurse-submodules -b xlights_2026.11 https://github.com/xLightsSequencer/wxWidgets ..\wxWidgets\ | |
| - name: Build wxWidgets | |
| working-directory: ..\wxWidgets\ | |
| run: msbuild /m .\build\msw\wx_vc17.sln /p:Configuration="Release" /p:Platform="x64" | |
| - name: Build All | |
| shell: cmd | |
| working-directory: build_scripts\msw | |
| run: call build_VS_x64_skip_libltc.cmd | |
| # --- Authenticode signing via Azure Trusted Signing (Kulp Lights LLC) ------ | |
| # Sign our own executables before packaging, then sign the installer after | |
| # ISCC (the artifact users download and that SmartScreen/AV evaluate). | |
| # Third-party DLLs keep their vendors' signatures. Reuses fppMon's signing | |
| # account/profile; runs only when WINDOWS_SIGNING_ENABLED is set. | |
| - name: Azure login (OIDC for Trusted Signing) | |
| if: env.SIGN == 'true' | |
| uses: azure/login@v3 | |
| with: | |
| client-id: ${{ secrets.AZURE_CLIENT_ID }} | |
| tenant-id: ${{ secrets.AZURE_TENANT_ID }} | |
| subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} | |
| - name: Sign xLights.exe (Trusted Signing) | |
| if: env.SIGN == 'true' | |
| uses: azure/artifact-signing-action@v2 | |
| with: | |
| endpoint: https://eus.codesigning.azure.net/ | |
| signing-account-name: kulplightssigning | |
| certificate-profile-name: kulplights-public | |
| files-folder: xlights\x64\Release | |
| files-folder-filter: exe | |
| file-digest: SHA256 | |
| timestamp-rfc3161: http://timestamp.acs.microsoft.com | |
| - name: Sign xlDo.exe (Trusted Signing) | |
| if: env.SIGN == 'true' | |
| uses: azure/artifact-signing-action@v2 | |
| with: | |
| endpoint: https://eus.codesigning.azure.net/ | |
| signing-account-name: kulplightssigning | |
| certificate-profile-name: kulplights-public | |
| files-folder: xlDo\x64\Release | |
| files-folder-filter: exe | |
| file-digest: SHA256 | |
| timestamp-rfc3161: http://timestamp.acs.microsoft.com | |
| - name: Sign fseq_convert.exe (Trusted Signing) | |
| if: env.SIGN == 'true' | |
| uses: azure/artifact-signing-action@v2 | |
| with: | |
| endpoint: https://eus.codesigning.azure.net/ | |
| signing-account-name: kulplightssigning | |
| certificate-profile-name: kulplights-public | |
| files-folder: fseq_convert\cmake_vs\Release | |
| files-folder-filter: exe | |
| file-digest: SHA256 | |
| timestamp-rfc3161: http://timestamp.acs.microsoft.com | |
| - name: Build Installer | |
| working-directory: build_scripts\msw | |
| run: ISCC.exe xLights_4_64bit_VS.iss | |
| - name: Sign installer (Trusted Signing) | |
| if: env.SIGN == 'true' | |
| uses: azure/artifact-signing-action@v2 | |
| with: | |
| endpoint: https://eus.codesigning.azure.net/ | |
| signing-account-name: kulplightssigning | |
| certificate-profile-name: kulplights-public | |
| files-folder: build_scripts\msw\output | |
| files-folder-filter: exe | |
| file-digest: SHA256 | |
| timestamp-rfc3161: http://timestamp.acs.microsoft.com | |
| # --- Microsoft Store package (unsigned; the Store re-signs on ingestion) ---- | |
| # Built every release so the .msix is ready for manual Partner Center upload. | |
| # Bundles the already-signed exes. Output to a separate dir and uploaded as a | |
| # workflow artifact (NOT a public release asset) - an unsigned Store-identity | |
| # package isn't user-installable, so it must not land in the GitHub release. | |
| - name: Build Store MSIX | |
| shell: pwsh | |
| working-directory: build_scripts\msw\msix | |
| run: ./BuildMSIX.ps1 -Store -OutDir ..\store-output | |
| - name: Upload Store MSIX artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: xLights_Store_MSIX | |
| path: build_scripts\msw\store-output\xLights-Store-x64.msix | |
| - name: Stage Windows symbol map | |
| shell: pwsh | |
| run: | | |
| if (-not (Test-Path bin64\xLights.map)) { | |
| throw "bin64\xLights.map not produced - PrepMap step likely failed" | |
| } | |
| Copy-Item bin64\xLights.map "build_scripts\msw\output\xLights-${{ github.ref_name }}-win64.map" | |
| Write-Host "Staged symbol map: $((Get-Item bin64\xLights.map).Length) bytes" | |
| - uses: ncipollo/release-action@v1 | |
| with: | |
| allowUpdates: true | |
| draft: true | |
| omitBodyDuringUpdate: true | |
| artifacts: 'build_scripts\msw\output\*' | |
| token: ${{ secrets.GITHUB_TOKEN }} | |
| publish-release: | |
| needs: [build-linux, build-windows] | |
| runs-on: ubuntu-24.04 | |
| steps: | |
| - name: Publish draft release | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: gh release edit "${GITHUB_REF_NAME}" --draft=false --repo "${GITHUB_REPOSITORY}" | |
| - uses: vedantmgoyal9/winget-releaser@main | |
| with: | |
| identifier: xLightsSequencer.xLights | |
| installers-regex: '\.exe$' # Only .exe files | |
| token: ${{ secrets.WINGET_TOKEN }} |