desktop: Add wix config and build msi as part of release
This commit is contained in:
parent
dc3a3a9228
commit
5df2636dee
|
@ -89,12 +89,14 @@ jobs:
|
||||||
target: i686-pc-windows-msvc
|
target: i686-pc-windows-msvc
|
||||||
RUSTFLAGS: -Ctarget-feature=+crt-static
|
RUSTFLAGS: -Ctarget-feature=+crt-static
|
||||||
DESKTOP_FEATURES: jpegxr
|
DESKTOP_FEATURES: jpegxr
|
||||||
|
MSI_ARCH: x86
|
||||||
|
|
||||||
- build_name: windows-x86_64
|
- build_name: windows-x86_64
|
||||||
os: windows-latest
|
os: windows-latest
|
||||||
target: x86_64-pc-windows-msvc
|
target: x86_64-pc-windows-msvc
|
||||||
RUSTFLAGS: -Ctarget-feature=+crt-static
|
RUSTFLAGS: -Ctarget-feature=+crt-static
|
||||||
DESKTOP_FEATURES: jpegxr
|
DESKTOP_FEATURES: jpegxr
|
||||||
|
MSI_ARCH: x64
|
||||||
|
|
||||||
env:
|
env:
|
||||||
PACKAGE_FILE: ${{ needs.create-nightly-release.outputs.package_prefix }}-${{ matrix.build_name }}.${{ startsWith(matrix.build_name, 'win') && 'zip' || 'tar.gz' }}
|
PACKAGE_FILE: ${{ needs.create-nightly-release.outputs.package_prefix }}-${{ matrix.build_name }}.${{ startsWith(matrix.build_name, 'win') && 'zip' || 'tar.gz' }}
|
||||||
|
@ -117,6 +119,13 @@ jobs:
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt install -y libasound2-dev libxcb-shape0-dev libxcb-xfixes0-dev libgtk-3-dev libudev-dev
|
sudo apt install -y libasound2-dev libxcb-shape0-dev libxcb-xfixes0-dev libgtk-3-dev libudev-dev
|
||||||
|
|
||||||
|
- name: Install WiX
|
||||||
|
run: |
|
||||||
|
dotnet tool install --global wix
|
||||||
|
wix extension add -g WixToolset.UI.wixext
|
||||||
|
wix extension add -g WixToolset.Util.wixext
|
||||||
|
if: runner.os == 'Windows'
|
||||||
|
|
||||||
- name: Cargo build
|
- name: Cargo build
|
||||||
run: cargo build --locked --package ruffle_desktop --release ${{matrix.DESKTOP_FEATURES && '--features' }} ${{matrix.DESKTOP_FEATURES}} ${{ matrix.target && '--target' }} ${{ matrix.target }}
|
run: cargo build --locked --package ruffle_desktop --release ${{matrix.DESKTOP_FEATURES && '--features' }} ${{matrix.DESKTOP_FEATURES}} ${{ matrix.target && '--target' }} ${{ matrix.target }}
|
||||||
env:
|
env:
|
||||||
|
@ -129,6 +138,15 @@ jobs:
|
||||||
cp README.md package/README.md
|
cp README.md package/README.md
|
||||||
cp LICENSE.md package/LICENSE.md
|
cp LICENSE.md package/LICENSE.md
|
||||||
|
|
||||||
|
- name: Package MSI
|
||||||
|
run: |
|
||||||
|
cd desktop/packages/windows/wix
|
||||||
|
wix build ruffle.wxs -ext WixToolset.UI.wixext -ext WixToolset.Util.wixext -arch ${{ matrix.MSI_ARCH }} -o ../../../../package/setup.msi -pdbtype none
|
||||||
|
env:
|
||||||
|
RUFFLE_VERSION: "0.1.0"
|
||||||
|
CARGO_BUILD_DIR: target/${{ matrix.target }}/release
|
||||||
|
if: runner.os == 'Windows'
|
||||||
|
|
||||||
- name: Package Windows
|
- name: Package Windows
|
||||||
if: runner.os == 'Windows'
|
if: runner.os == 'Windows'
|
||||||
run: |
|
run: |
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
# Ruffle installer (.msi)
|
||||||
|
## Prerequisites
|
||||||
|
To build the msi, you need to set up your environment first:
|
||||||
|
- [Install `wix`](https://wixtoolset.org/docs/intro/#nettool) (`dotnet tool install --global wix`)
|
||||||
|
- `wix extension add -g WixToolset.UI.wixext` to add the UI extension
|
||||||
|
- `wix extension add -g WixToolset.Util.wixext` to add the util extension
|
||||||
|
- [Build Ruffle desktop](../../../../README.md) for releases (`cargo build --release`)
|
||||||
|
- or at least have a prebuilt `exe` ready to go at `target/release/ruffle_desktop.exe` (inside repository root)
|
||||||
|
|
||||||
|
## Environment variables
|
||||||
|
### `RUFFLE_VERSION` (required)
|
||||||
|
This should be set to the version of Ruffle that this MSI contains.
|
||||||
|
The format should either be `1.2.3` or `1.2.3.4` - however the fourth value is IGNORED by Windows for "is it the same version or newer" checks.
|
||||||
|
|
||||||
|
### `CARGO_BUILD_DIR` (optional)
|
||||||
|
This should be set to the folder that contains `ruffle_desktop`. The default value is `../../../../target/release`.
|
||||||
|
|
||||||
|
# Build
|
||||||
|
In this directory, run: `wix build ruffle.wxs -ext WixToolset.UI.wixext -ext WixToolset.Util.wixext -arch x64`
|
||||||
|
|
||||||
|
You can change `-arch` to `x86` to mark the msi as x86 (and install to, for example, `Program Files (x86)`)
|
||||||
|
|
||||||
|
Add `-pdbtype none` to disable generation of the `.wixpdb` if you wish.
|
||||||
|
|
||||||
|
Add `-o foo.msi` to control where the MSI is placed.
|
Binary file not shown.
After Width: | Height: | Size: 2.0 KiB |
Binary file not shown.
After Width: | Height: | Size: 26 KiB |
|
@ -0,0 +1,91 @@
|
||||||
|
<!-- Modified version of WixUI_InstallDir, originally licensed MS-RL. -->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
First-time install dialog sequence:
|
||||||
|
- WixUI_WelcomeDlg
|
||||||
|
- WixUI_InstallDirDlg
|
||||||
|
- WixUI_VerifyReadyDlg
|
||||||
|
- WixUI_DiskCostDlg
|
||||||
|
|
||||||
|
Maintenance dialog sequence:
|
||||||
|
- WixUI_MaintenanceWelcomeDlg
|
||||||
|
- WixUI_MaintenanceTypeDlg
|
||||||
|
- WixUI_InstallDirDlg
|
||||||
|
- WixUI_VerifyReadyDlg
|
||||||
|
|
||||||
|
Patch dialog sequence:
|
||||||
|
- WixUI_WelcomeDlg
|
||||||
|
- WixUI_VerifyReadyDlg
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
<Include xmlns="http://wixtoolset.org/schemas/v4/wxs">
|
||||||
|
<?foreach WIXUIARCH in X86;X64;A64 ?>
|
||||||
|
<Fragment>
|
||||||
|
<UI Id="WixUI_InstallDir_NoLicense_$(WIXUIARCH)">
|
||||||
|
<Publish Dialog="BrowseDlg" Control="OK" Event="DoAction" Value="WixUIValidatePath_$(WIXUIARCH)" Order="3"
|
||||||
|
Condition="NOT WIXUI_DONTVALIDATEPATH"/>
|
||||||
|
<Publish Dialog="InstallDirDlg" Control="Next" Event="DoAction" Value="WixUIValidatePath_$(WIXUIARCH)"
|
||||||
|
Order="2" Condition="NOT WIXUI_DONTVALIDATEPATH"/>
|
||||||
|
</UI>
|
||||||
|
|
||||||
|
<UIRef Id="WixUI_InstallDir_NoLicense"/>
|
||||||
|
</Fragment>
|
||||||
|
<?endforeach?>
|
||||||
|
|
||||||
|
<Fragment>
|
||||||
|
<UI Id="file WixUI_InstallDir_NoLicense">
|
||||||
|
<TextStyle Id="WixUI_Font_Normal" FaceName="Tahoma" Size="8"/>
|
||||||
|
<TextStyle Id="WixUI_Font_Bigger" FaceName="Tahoma" Size="12"/>
|
||||||
|
<TextStyle Id="WixUI_Font_Title" FaceName="Tahoma" Size="9" Bold="yes"/>
|
||||||
|
|
||||||
|
<Property Id="DefaultUIFont" Value="WixUI_Font_Normal"/>
|
||||||
|
|
||||||
|
<DialogRef Id="BrowseDlg"/>
|
||||||
|
<DialogRef Id="DiskCostDlg"/>
|
||||||
|
<DialogRef Id="ErrorDlg"/>
|
||||||
|
<DialogRef Id="FatalError"/>
|
||||||
|
<DialogRef Id="FilesInUse"/>
|
||||||
|
<DialogRef Id="MsiRMFilesInUse"/>
|
||||||
|
<DialogRef Id="PrepareDlg"/>
|
||||||
|
<DialogRef Id="ProgressDlg"/>
|
||||||
|
<DialogRef Id="ResumeDlg"/>
|
||||||
|
<DialogRef Id="UserExit"/>
|
||||||
|
<Publish Dialog="BrowseDlg" Control="OK" Event="SpawnDialog" Value="InvalidDirDlg" Order="4"
|
||||||
|
Condition="NOT WIXUI_DONTVALIDATEPATH AND WIXUI_INSTALLDIR_VALID<>"1""/>
|
||||||
|
|
||||||
|
<Publish Dialog="ExitDialog" Control="Finish" Event="EndDialog" Value="Return" Order="999"/>
|
||||||
|
|
||||||
|
<Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="InstallDirDlg"
|
||||||
|
Condition="NOT Installed"/>
|
||||||
|
<Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg"
|
||||||
|
Condition="Installed AND PATCH"/>
|
||||||
|
|
||||||
|
<Publish Dialog="InstallDirDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg"/>
|
||||||
|
<Publish Dialog="InstallDirDlg" Control="Next" Event="SetTargetPath" Value="[WIXUI_INSTALLDIR]" Order="1"/>
|
||||||
|
<Publish Dialog="InstallDirDlg" Control="Next" Event="SpawnDialog" Value="InvalidDirDlg" Order="3"
|
||||||
|
Condition="NOT WIXUI_DONTVALIDATEPATH AND WIXUI_INSTALLDIR_VALID<>"1""/>
|
||||||
|
<Publish Dialog="InstallDirDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg" Order="4"
|
||||||
|
Condition="WIXUI_DONTVALIDATEPATH OR WIXUI_INSTALLDIR_VALID="1""/>
|
||||||
|
<Publish Dialog="InstallDirDlg" Control="ChangeFolder" Property="_BrowseProperty" Value="[WIXUI_INSTALLDIR]"
|
||||||
|
Order="1"/>
|
||||||
|
<Publish Dialog="InstallDirDlg" Control="ChangeFolder" Event="SpawnDialog" Value="BrowseDlg" Order="2"/>
|
||||||
|
<Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="InstallDirDlg" Order="1"
|
||||||
|
Condition="NOT Installed"/>
|
||||||
|
<Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="MaintenanceTypeDlg" Order="2"
|
||||||
|
Condition="Installed AND NOT PATCH"/>
|
||||||
|
<Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg" Order="2"
|
||||||
|
Condition="Installed AND PATCH"/>
|
||||||
|
|
||||||
|
<Publish Dialog="MaintenanceWelcomeDlg" Control="Next" Event="NewDialog" Value="MaintenanceTypeDlg"/>
|
||||||
|
|
||||||
|
<Publish Dialog="MaintenanceTypeDlg" Control="RepairButton" Event="NewDialog" Value="VerifyReadyDlg"/>
|
||||||
|
<Publish Dialog="MaintenanceTypeDlg" Control="RemoveButton" Event="NewDialog" Value="VerifyReadyDlg"/>
|
||||||
|
<Publish Dialog="MaintenanceTypeDlg" Control="Back" Event="NewDialog" Value="MaintenanceWelcomeDlg"/>
|
||||||
|
|
||||||
|
<Property Id="ARPNOMODIFY" Value="1"/>
|
||||||
|
</UI>
|
||||||
|
|
||||||
|
<UIRef Id="WixUI_Common"/>
|
||||||
|
</Fragment>
|
||||||
|
</Include>
|
|
@ -0,0 +1,182 @@
|
||||||
|
<?xml version='1.0' encoding='utf-8'?>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
wix extension add -g WixToolset.UI.wixext
|
||||||
|
wix extension add -g WixToolset.Util.wixext
|
||||||
|
RUFFLE_VERSION="xxxxxx" wix build ruffle.wxs -ext WixToolset.UI.wixext -ext WixToolset.Util.wixext -arch x64
|
||||||
|
-->
|
||||||
|
|
||||||
|
<Wix xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ui="http://wixtoolset.org/schemas/v4/wxs/ui"
|
||||||
|
xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util"
|
||||||
|
xmlns="http://wixtoolset.org/schemas/v4/wxs"
|
||||||
|
xsi:schemaLocation="http://wixtoolset.org/schemas/v4/wxs https://raw.githubusercontent.com/wixtoolset/web/master/src/xsd4/wix.xsd
|
||||||
|
http://wixtoolset.org/schemas/v4/wxs/ui https://raw.githubusercontent.com/wixtoolset/web/master/src/xsd4/ui.xsd
|
||||||
|
http://wixtoolset.org/schemas/v4/wxs/util https://raw.githubusercontent.com/wixtoolset/web/master/src/xsd4/util.xsd">
|
||||||
|
<?include dialog.wxi?>
|
||||||
|
|
||||||
|
<!-- Set this to something else to be able to install the msi as a *different* package (e.g. for local testing) -->
|
||||||
|
<?define UpgradeCode = "C6A4BA50-FA08-4B87-9B55-D81A1C730D25"?>
|
||||||
|
|
||||||
|
<?ifdef env.CARGO_BUILD_DIR?>
|
||||||
|
<?define CargoBuildDir = "$(env.CARGO_BUILD_DIR)"?>
|
||||||
|
<?else?>
|
||||||
|
<?define CargoBuildDir = "../../../../target/release"?>
|
||||||
|
<?endif?>
|
||||||
|
|
||||||
|
<Package
|
||||||
|
Name='Ruffle'
|
||||||
|
UpgradeCode='$(var.UpgradeCode)'
|
||||||
|
Manufacturer='Ruffle LLC'
|
||||||
|
Language='1033'
|
||||||
|
Codepage='65001'
|
||||||
|
Version='$(env.RUFFLE_VERSION)'
|
||||||
|
InstallerVersion='500'
|
||||||
|
Compressed='yes'>
|
||||||
|
|
||||||
|
<MajorUpgrade
|
||||||
|
Schedule='afterInstallInitialize'
|
||||||
|
DowngradeErrorMessage='A newer version of Ruffle is already installed. Setup will now exit.'
|
||||||
|
AllowSameVersionUpgrades="yes"/>
|
||||||
|
|
||||||
|
<Media Id='1' Cabinet='media1.cab' EmbedCab='yes' DiskPrompt='CD-ROM #1'/>
|
||||||
|
<Property Id='DiskPrompt' Value='Ruffle Installation'/>
|
||||||
|
|
||||||
|
<StandardDirectory Id="ProgramFiles6432Folder">
|
||||||
|
<Directory Id='INSTALLFOLDER' Name='ruffle'>
|
||||||
|
<Component Id='EnsureDirectoryWritable' Guid='372b3408-c431-4f8b-99a4-f5518cb87f9e'>
|
||||||
|
<CreateFolder>
|
||||||
|
<util:PermissionEx User="Users" GenericAll="yes"/>
|
||||||
|
</CreateFolder>
|
||||||
|
</Component>
|
||||||
|
|
||||||
|
<Component Id='License' Guid='*'>
|
||||||
|
<File Id='LicenseFile'
|
||||||
|
DiskId='1'
|
||||||
|
Source='../../../../LICENSE.md'
|
||||||
|
KeyPath='yes'/>
|
||||||
|
</Component>
|
||||||
|
|
||||||
|
<Directory Id='Bin' Name='bin'>
|
||||||
|
<Component Id='Path' Guid='ABEDD436-5D52-4C25-9FD1-D810A2B66AC1' KeyPath='yes'>
|
||||||
|
<Environment
|
||||||
|
Id='PATH'
|
||||||
|
Name='PATH'
|
||||||
|
Value='[Bin]'
|
||||||
|
Permanent='no'
|
||||||
|
Part='last'
|
||||||
|
Action='set'
|
||||||
|
System='yes'/>
|
||||||
|
</Component>
|
||||||
|
<Component Id='binary0' Guid='*'>
|
||||||
|
<File
|
||||||
|
Id='DesktopEXE'
|
||||||
|
Name='ruffle.exe'
|
||||||
|
DiskId='1'
|
||||||
|
Source='$(CargoBuildDir)/ruffle_desktop.exe'
|
||||||
|
KeyPath='yes'>
|
||||||
|
<Shortcut Name="Ruffle" Directory="ProgramMenuFolder" Advertise="yes"
|
||||||
|
WorkingDirectory="INSTALLFOLDER" Icon="Icon.ico"/>
|
||||||
|
<Shortcut Name="Ruffle" Directory="DesktopFolder" Advertise="yes"
|
||||||
|
WorkingDirectory="INSTALLFOLDER" Icon="Icon.ico"/>
|
||||||
|
</File>
|
||||||
|
</Component>
|
||||||
|
</Directory>
|
||||||
|
</Directory>
|
||||||
|
</StandardDirectory>
|
||||||
|
|
||||||
|
<Component Id='Associations' Guid='2216512a-9c76-412f-ba36-08e703a56f25'>
|
||||||
|
<!--
|
||||||
|
This creates the Ruffle progids and *hints* that Ruffle can be associated with them.
|
||||||
|
This may or may not cause Windows to make the association, but more likely makes it ask the user
|
||||||
|
what they want the next time they open a swf.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<ProgId Id='Ruffle.swf' Description='Flash Movie' Icon="DesktopEXE" IconIndex="1">
|
||||||
|
<Extension Id='swf' ContentType='application/x-shockwave-flash'>
|
||||||
|
<Verb Id='open' Command='Open' TargetFile='DesktopEXE' Argument='"%1"'/>
|
||||||
|
</Extension>
|
||||||
|
</ProgId>
|
||||||
|
<ProgId Id='Ruffle.spl' Description='Flash Movie' Icon="DesktopEXE" IconIndex="1">
|
||||||
|
<Extension Id='spl' ContentType='application/x-shockwave-flash'>
|
||||||
|
<Verb Id='open' Command='Open' TargetFile='DesktopEXE' Argument='"%1"'/>
|
||||||
|
</Extension>
|
||||||
|
</ProgId>
|
||||||
|
<ProgId Id='Ruffle.ruf' Description='Ruffle Bundle' Icon="DesktopEXE" IconIndex="1">
|
||||||
|
<Extension Id='ruf' ContentType='application/x-ruffle-bundle'>
|
||||||
|
<Verb Id='open' Command='Open' TargetFile='DesktopEXE' Argument='"%1"'/>
|
||||||
|
</Extension>
|
||||||
|
</ProgId>
|
||||||
|
|
||||||
|
<!-- This tells Windows to include Ruffle in the "Open With" dialog -->
|
||||||
|
<RegistryValue Root="HKCR" Key=".swf\OpenWithProgids" Name="Ruffle.swf" Value="" Type="string"/>
|
||||||
|
<RegistryValue Root="HKCR" Key=".spl\OpenWithProgids" Name="Ruffle.spl" Value="" Type="string"/>
|
||||||
|
<RegistryValue Root="HKCR" Key=".ruf\OpenWithProgids" Name="Ruffle.ruf" Value="" Type="string"/>
|
||||||
|
</Component>
|
||||||
|
|
||||||
|
<Component Id='ApplicationInfo' Guid='f7e7c5bb-729c-427e-b913-fd0d2e11a143'>
|
||||||
|
<!--
|
||||||
|
Tell windows a few properties about our application, so that it can handle it slightly better in "Open With"
|
||||||
|
|
||||||
|
(wondering how Windows matches these to the ruffle.exe that we install at some arbitrary path the user picks?)
|
||||||
|
(well that's the fun part... it doesn't! Windows SOLELY goes by the filename. Isn't that convenient?!)
|
||||||
|
(rename an executable and suddenly windows can't associate these things with it anymore whoops)
|
||||||
|
-->
|
||||||
|
|
||||||
|
<RegistryKey Root="HKCR" Key="Applications\ruffle.exe">
|
||||||
|
<!-- Give Ruffle a better name in the "Open With" dialog, than just "ruffle.exe" -->
|
||||||
|
<RegistryValue Name="FriendlyAppName" Value="Ruffle" Type="string"/>
|
||||||
|
|
||||||
|
<!-- Hint that we can open certain files -->
|
||||||
|
<RegistryValue Key="SupportedTypes" Name=".swf" Value="" Type="string"/>
|
||||||
|
<RegistryValue Key="SupportedTypes" Name=".spl" Value="" Type="string"/>
|
||||||
|
<RegistryValue Key="SupportedTypes" Name=".ruf" Value="" Type="string"/>
|
||||||
|
</RegistryKey>
|
||||||
|
</Component>
|
||||||
|
|
||||||
|
<Feature
|
||||||
|
Id='Binaries'
|
||||||
|
Title='Application'
|
||||||
|
Description='Installs the Ruffle desktop player'
|
||||||
|
Level='1'
|
||||||
|
ConfigurableDirectory='INSTALLFOLDER'
|
||||||
|
AllowAdvertise='no'
|
||||||
|
Display='expand'>
|
||||||
|
<ComponentRef Id='EnsureDirectoryWritable'/>
|
||||||
|
<ComponentRef Id='License'/>
|
||||||
|
<ComponentRef Id='binary0'/>
|
||||||
|
<ComponentRef Id='Associations'/>
|
||||||
|
<ComponentRef Id='ApplicationInfo'/>
|
||||||
|
|
||||||
|
<Feature
|
||||||
|
Id='Environment'
|
||||||
|
Title='PATH Environment Variable'
|
||||||
|
Description='Add the install location of the Ruffle executable to the PATH system environment variable. This allows Ruffle to be called from any location.'
|
||||||
|
Level='1'>
|
||||||
|
<ComponentRef Id='Path'/>
|
||||||
|
</Feature>
|
||||||
|
</Feature>
|
||||||
|
|
||||||
|
<SetProperty Id='ARPINSTALLLOCATION' Value='[APPLICATIONFOLDER]' After='CostFinalize'/>
|
||||||
|
|
||||||
|
|
||||||
|
<Icon Id='Icon.ico' SourceFile='../../../assets/favicon.ico'/>
|
||||||
|
<Property Id='ARPPRODUCTICON' Value='Icon.ico'/>
|
||||||
|
|
||||||
|
<Property Id='ARPHELPLINK' Value='https://ruffle.rs'/>
|
||||||
|
|
||||||
|
<ui:WixUI
|
||||||
|
Id="WixUI_InstallDir_NoLicense"
|
||||||
|
InstallDirectory="INSTALLFOLDER"
|
||||||
|
>
|
||||||
|
|
||||||
|
</ui:WixUI>
|
||||||
|
<WixVariable
|
||||||
|
Id="WixUIBannerBmp"
|
||||||
|
Value="banner.png"
|
||||||
|
/>
|
||||||
|
<WixVariable
|
||||||
|
Id="WixUIDialogBmp"
|
||||||
|
Value="dialog.png"
|
||||||
|
/>
|
||||||
|
</Package>
|
||||||
|
</Wix>
|
Loading…
Reference in New Issue