2626 branches : ["main", "release/*", "beta/*", "project/*"]
2727 tags : ["Alchemy*"]
2828
29+ permissions :
30+ contents : read
31+
2932jobs :
3033 # The whole point of the setup job is that we want to set variables once
3134 # that will be consumed by multiple subsequent jobs.
5659 - name : Setup python
5760 uses : actions/setup-python@v6
5861 with :
59- python-version : " 3.13 "
62+ python-version : " 3.14 "
6063
6164 - name : Determine source branch
6265 id : which-branch
@@ -138,7 +141,7 @@ jobs:
138141 runner : ["windows-2025-vs2026", "macos-26", "ubuntu-24.04"]
139142 configuration : [release]
140143 arch : [x64, arm64]
141- build_variant : [Viewer, Tests ]
144+ build_variant : [Viewer]
142145 exclude :
143146 - runner : ubuntu-24.04
144147 arch : arm64
@@ -160,10 +163,13 @@ jobs:
160163 # Windows Velopack outputs (passed to sign-pkg-windows)
161164 velopack_pack_id : ${{ steps.build.outputs.velopack_pack_id }}
162165 velopack_pack_version : ${{ steps.build.outputs.velopack_pack_version }}
166+ velopack_pack_authors : ${{ steps.build.outputs.velopack_pack_authors }}
163167 velopack_pack_title : ${{ steps.build.outputs.velopack_pack_title }}
164168 velopack_main_exe : ${{ steps.build.outputs.velopack_main_exe }}
165169 velopack_exclude : ${{ steps.build.outputs.velopack_exclude }}
166170 velopack_icon : ${{ steps.build.outputs.velopack_icon }}
171+ velopack_splash : ${{ steps.build.outputs.velopack_splash }}
172+ velopack_splash_color : ${{ steps.build.outputs.velopack_splash_color }}
167173 velopack_installer_base : ${{ steps.build.outputs.velopack_installer_base }}
168174 # macOS Velopack outputs (passed to sign-pkg-mac)
169175 velopack_mac_pack_id : ${{ steps.build.outputs.velopack_mac_pack_id }}
@@ -254,14 +260,6 @@ jobs:
254260 - name : Install python dependencies
255261 run : pip3 install llsd cmake ninja
256262
257- - name : Setup .NET for Velopack
258- uses : actions/setup-dotnet@v5
259- with :
260- dotnet-version : ' 10.x'
261-
262- - name : Install Velopack CLI
263- run : dotnet tool restore
264-
265263 - name : Bootstrap vcpkg Windows
266264 if : runner.os == 'Windows'
267265 run : |
@@ -472,34 +470,116 @@ jobs:
472470 # ${{ steps.configure.outputs.build_directory }}/llappearanceutility/Release/appearance-utility-bin
473471 # ${{ steps.configure.outputs.build_directory }}/llappearanceutility/Release/appearance-utility-headless-bin
474472
475- # sign-and-package-windows:
476- # env:
477- # AZURE_KEY_VAULT_URI: ${{ secrets.AZURE_KEY_VAULT_URI }}
478- # AZURE_CERT_NAME: ${{ secrets.AZURE_CERT_NAME }}
479- # AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
480- # AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }}
481- # AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
482- # needs: [setup, build]
483- # runs-on: windows-2022
484- # if: needs.setup.outputs.build_type == 'proprietary'
485- # steps:
486- # - name: Sign and package Windows viewer
487- # if: env.AZURE_KEY_VAULT_URI && env.AZURE_CERT_NAME && env.AZURE_CLIENT_ID && env.AZURE_CLIENT_SECRET && env.AZURE_TENANT_ID
488- # uses: secondlife/viewer-build-util/sign-pkg-windows@geenz/velopack
489- # with:
490- # vault_uri: "${{ env.AZURE_KEY_VAULT_URI }}"
491- # cert_name: "${{ env.AZURE_CERT_NAME }}"
492- # client_id: "${{ env.AZURE_CLIENT_ID }}"
493- # client_secret: "${{ env.AZURE_CLIENT_SECRET }}"
494- # tenant_id: "${{ env.AZURE_TENANT_ID }}"
495- # installer_type: "${{ github.event.inputs.installer_type || 'velopack' }}"
496- # velopack_pack_id: "${{ needs.build.outputs.velopack_pack_id }}"
497- # velopack_pack_version: "${{ needs.build.outputs.velopack_pack_version }}"
498- # velopack_pack_title: "${{ needs.build.outputs.velopack_pack_title }}"
499- # velopack_main_exe: "${{ needs.build.outputs.velopack_main_exe }}"
500- # velopack_exclude: "${{ needs.build.outputs.velopack_exclude }}"
501- # velopack_icon: "${{ needs.build.outputs.velopack_icon }}"
502- # velopack_installer_base: "${{ needs.build.outputs.velopack_installer_base }}"
473+ sign-and-package-windows :
474+ needs : [setup, build]
475+ runs-on : windows-2025
476+ steps :
477+ - name : Checkout code
478+ uses : actions/checkout@v7
479+ with :
480+ submodules : recursive
481+ ref : ${{ github.event.pull_request.head.sha || github.sha }}
482+
483+ - name : Setup .NET for Velopack
484+ uses : actions/setup-dotnet@v5
485+ with :
486+ dotnet-version : ' 10.x'
487+
488+ - name : Install Velopack CLI
489+ run : dotnet tool restore
490+
491+ - name : Fetch Windows app
492+ uses : actions/download-artifact@v8
493+ if : needs.setup.outputs.build_type == 'proprietary'
494+ with :
495+ name : Windows-x64-app
496+ path : .app
497+
498+ - name : Fetch Windows OS app
499+ uses : actions/download-artifact@v8
500+ if : needs.setup.outputs.build_type != 'proprietary'
501+ with :
502+ name : Windows-OS-x64-app
503+ path : .app
504+
505+ - name : Build and sign Velopack package
506+ shell : bash
507+ env :
508+ PACK_ID : ${{ needs.build.outputs.velopack_pack_id }}
509+ PACK_VERSION : ${{ needs.build.outputs.velopack_pack_version }}
510+ PACK_TITLE : ${{ needs.build.outputs.velopack_pack_title }}
511+ PACK_AUTHORS : ${{ needs.build.outputs.velopack_pack_authors }}
512+ MAIN_EXE : ${{ needs.build.outputs.velopack_main_exe }}
513+ EXCLUDE : ${{ needs.build.outputs.velopack_exclude }}
514+ ICON : ${{ needs.build.outputs.velopack_icon }}
515+ SPLASH_IMAGE : ${{ needs.build.outputs.velopack_splash }}
516+ SPLASH_COLOR : ${{ needs.build.outputs.velopack_splash_color }}
517+ INSTALLER_BASE : ${{ needs.build.outputs.velopack_installer_base }}
518+ run : |
519+ set -x
520+
521+ vpk_args=(
522+ vpk pack
523+ --packId "$PACK_ID"
524+ --packVersion "$PACK_VERSION"
525+ --packAuthors "$PACK_AUTHORS"
526+ --packDir .app
527+ --mainExe "$MAIN_EXE"
528+ --packTitle "$PACK_TITLE"
529+ --exclude "$EXCLUDE"
530+ --shortcuts ''
531+ --splashProgressColor "$SPLASH_COLOR"
532+ )
533+
534+ # Add icon if provided
535+ if [[ -n "$ICON" && -f ".app/$ICON" ]]; then
536+ vpk_args+=(--icon ".app/$ICON")
537+ fi
538+
539+ # Add splash if provided
540+ if [[ -n "$SPLASH_IMAGE" && -f ".app/$SPLASH_IMAGE" ]]; then
541+ vpk_args+=(--splashImage ".app/$SPLASH_IMAGE")
542+ fi
543+
544+ "${vpk_args[@]}"
545+
546+ - name : Rename Velopack outputs
547+ shell : bash
548+ env :
549+ PACK_ID : ${{ needs.build.outputs.velopack_pack_id }}
550+ INSTALLER_BASE : ${{ needs.build.outputs.velopack_installer_base }}
551+ run : |
552+ # Move Setup.exe into .app for the installer upload step
553+ setup="Releases/${PACK_ID}-win-Setup.exe"
554+ if [[ -f "$setup" ]]; then
555+ mv "$setup" ".app/${INSTALLER_BASE}_Setup.exe"
556+ echo "Moved $setup to .app/${INSTALLER_BASE}_Setup.exe"
557+ fi
558+
559+ # Rename Portable.zip to include version
560+ portable="Releases/${PACK_ID}-win-Portable.zip"
561+ if [[ -f "$portable" ]]; then
562+ mv "$portable" "Releases/${INSTALLER_BASE}_Portable.zip"
563+ echo "Moved $portable to Releases/${INSTALLER_BASE}_Portable.zip"
564+ fi
565+
566+ - name : Find Velopack installer
567+ shell : bash
568+ run : |
569+ installer="$(ls -t .app/*_Setup.exe | head -n 1)"
570+ echo "installer=$installer" >> "$GITHUB_ENV"
571+
572+ - name : Post the installer
573+ uses : actions/upload-artifact@v7
574+ with :
575+ name : " Windows-installer"
576+ path : ${{ env.installer }}
577+
578+ - name : Upload Velopack releases
579+ uses : actions/upload-artifact@v7
580+ with :
581+ name : " Windows-releases"
582+ path : Releases/
503583
504584 # sign-and-package-mac:
505585 # env:
@@ -610,60 +690,43 @@ jobs:
610690 # node-version: "22"
611691 # dumpSyms: false
612692
613- # release:
614- # needs: [setup, build, sign-and-package-windows, sign-and-package-mac]
615- # runs-on: ubuntu-latest
616- # if: needs.setup.outputs.release_run
617- # steps:
618- # # - uses: actions/download-artifact@v8
619- # # with:
620- # # pattern: "*-installer"
621-
622- # - uses: actions/download-artifact@v8
623- # with:
624- # pattern: "*-metadata"
693+ release :
694+ needs : [setup, build, sign-and-package-windows]
695+ runs-on : ubuntu-latest
696+ if : needs.setup.outputs.release_run
697+ permissions :
698+ contents : write
699+ steps :
700+ - uses : actions/download-artifact@v8
701+ with :
702+ pattern : " *-installer"
625703
626- # - uses: actions/download-artifact@v8
627- # with:
628- # pattern: "*-releases"
704+ - uses : actions/download-artifact@v8
705+ with :
706+ pattern : " *-releases"
629707
630- # - uses: actions/download-artifact@v8
631- # with:
632- # name: "Linux-app"
708+ - uses : actions/download-artifact@v8
709+ with :
710+ name : " Linux-x64 -app"
633711
634- # - name: Rename metadata
635- # run: |
636- # cp Windows-metadata/newview/viewer_version.txt Windows-viewer_version.txt
637- # cp macOS-metadata/newview/viewer_version.txt macOS-viewer_version.txt
638- # cp Linux-metadata/newview/viewer_version.txt Linux-viewer_version.txt
639-
640- # # forked from softprops/action-gh-release
641- # - name: Create GitHub release
642- # id: release
643- # uses: AlchemyViewer/action-gh-release@v2
644- # with:
645- # # name the release page for the branch
646- # name: "${{ needs.setup.outputs.viewer_branch }}"
647- # # SL-20546: want the channel and version to be visible on the
648- # # release page
649- # body: |
650- # Build ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
651- # ${{ needs.setup.outputs.viewer_channel }}
652- # ${{ needs.build.outputs.viewer_version }}
653- # ${{ needs.setup.outputs.relnotes }}
654- # prerelease: true
655- # generate_release_notes: true
656- # target_commitish: ${{ github.sha }}
657- # append_body: true
658- # fail_on_unmatched_files: true
659- # files: |
660- # macOS-installer/*.dmg
661- # Windows-installer/*.exe
662- # *.tar.xz
663- # *-viewer_version.txt
664- # Windows-releases/*
665- # macOS-releases/*
666-
667- # - name: post release URL
668- # run: |
669- # echo "::notice::Release ${{ steps.release.outputs.url }}"
712+ # forked from softprops/action-gh-release
713+ - name : Create GitHub release
714+ id : release
715+ uses : AlchemyViewer/action-gh-release@v3
716+ with :
717+ # name the release page for the branch. We want channel and version.
718+ name : " ${{ needs.setup.outputs.viewer_channel }} ${{ needs.build.outputs.viewer_version }}"
719+ body : |
720+ prerelease : true
721+ generate_release_notes : true
722+ target_commitish : ${{ github.sha }}
723+ append_body : true
724+ fail_on_unmatched_files : true
725+ files : |
726+ Windows-installer/*.exe
727+ *.tar.xz
728+ Windows-releases/*
729+
730+ - name : post release URL
731+ run : |
732+ echo "::notice::Release ${{ steps.release.outputs.url }}"
0 commit comments