feat(release): add windows msi installers (#4031)
* feat(release): add windows msi installers * add install documentation * use intransparent ico-file * run installer tests on push, add continue-on-error
This commit is contained in:
parent
df5c2d8836
commit
89fd5320af
|
@ -66,14 +66,17 @@ jobs:
|
|||
- target: x86_64-pc-windows-msvc
|
||||
os: windows-latest
|
||||
name: starship-x86_64-pc-windows-msvc.zip
|
||||
rustflags: -C target-feature=+crt-static
|
||||
|
||||
- target: i686-pc-windows-msvc
|
||||
os: windows-latest
|
||||
name: starship-i686-pc-windows-msvc.zip
|
||||
rustflags: -C target-feature=+crt-static
|
||||
|
||||
- target: aarch64-pc-windows-msvc
|
||||
os: windows-latest
|
||||
name: starship-aarch64-pc-windows-msvc.zip
|
||||
rustflags: -C target-feature=+crt-static
|
||||
|
||||
- target: x86_64-unknown-freebsd
|
||||
os: ubuntu-latest
|
||||
|
@ -81,6 +84,8 @@ jobs:
|
|||
|
||||
runs-on: ${{ matrix.os }}
|
||||
continue-on-error: true
|
||||
env:
|
||||
RUSTFLAGS: ${{ matrix.rustflags || '' }}
|
||||
steps:
|
||||
- name: Setup | Checkout
|
||||
uses: actions/checkout@v3
|
||||
|
@ -93,6 +98,15 @@ jobs:
|
|||
profile: minimal
|
||||
target: ${{ matrix.target }}
|
||||
|
||||
- name: Setup | Install cargo-wix [Windows]
|
||||
continue-on-error: true
|
||||
# aarch64 is only supported in wix 4.0 development builds
|
||||
if: matrix.os == 'windows-latest' && matrix.target != 'aarch64-pc-windows-msvc'
|
||||
run: cargo install --version 0.3.2 cargo-wix
|
||||
env:
|
||||
# cargo-wix does not require static crt
|
||||
RUSTFLAGS: ''
|
||||
|
||||
- name: Build | Build
|
||||
uses: actions-rs/cargo@v1.0.3
|
||||
with:
|
||||
|
@ -100,6 +114,14 @@ jobs:
|
|||
args: --release --locked --target ${{ matrix.target }}
|
||||
use-cross: ${{ matrix.os == 'ubuntu-latest' }}
|
||||
|
||||
- name: Build | Installer [Windows]
|
||||
continue-on-error: true
|
||||
if: matrix.os == 'windows-latest' && matrix.target != 'aarch64-pc-windows-msvc'
|
||||
uses: actions-rs/cargo@v1.0.3
|
||||
with:
|
||||
command: wix
|
||||
args: -v --nocapture -I install/windows/main.wxs --target ${{ matrix.target }} --output target/wix/starship.msi
|
||||
|
||||
- name: Post Build | Prepare artifacts [Windows]
|
||||
if: matrix.os == 'windows-latest'
|
||||
run: |
|
||||
|
@ -123,6 +145,14 @@ jobs:
|
|||
name: ${{ matrix.name }}
|
||||
path: ${{ matrix.name }}
|
||||
|
||||
- name: Release | Upload installer artifacts [Windows]
|
||||
continue-on-error: true
|
||||
if: matrix.os == 'windows-latest' && matrix.target != 'aarch64-pc-windows-msvc'
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: starship-${{ matrix.target }}.msi
|
||||
path: target/wix/starship.msi
|
||||
|
||||
# Notarize starship binaries for MacOS and build notarized pkg installers
|
||||
notarize_and_pkgbuild:
|
||||
runs-on: macos-latest
|
||||
|
|
|
@ -166,6 +166,11 @@ jobs:
|
|||
matrix:
|
||||
os: [ubuntu-latest, macOS-latest, windows-latest]
|
||||
rust: [stable, nightly]
|
||||
include:
|
||||
- os: windows-latest
|
||||
rustflags: -C target-feature=+crt-static
|
||||
env:
|
||||
RUSTFLAGS: ${{ matrix.rustflags || '' }}
|
||||
steps:
|
||||
- name: Setup | Checkout
|
||||
uses: actions/checkout@v3
|
||||
|
@ -185,6 +190,18 @@ jobs:
|
|||
- name: Install cargo-llvm-cov
|
||||
uses: taiki-e/install-action@cargo-llvm-cov
|
||||
|
||||
# For windows installer test
|
||||
# On stable rust & main repo pushes only
|
||||
- name: Install cargo-wix [Windows]
|
||||
continue-on-error: true
|
||||
if: >
|
||||
matrix.os == 'windows-latest' && matrix.rust == 'stable' &&
|
||||
github.repository == 'starship/starship' && github.event.type == 'push_event'
|
||||
run: cargo install --version 0.3.2 cargo-wix
|
||||
env:
|
||||
# cargo-wix does not require static crt
|
||||
RUSTFLAGS: ''
|
||||
|
||||
# Install Mercurial (pre-installed on Linux and windows)
|
||||
- name: Setup | Mercurial (macos)
|
||||
if: matrix.os == 'macOS-latest'
|
||||
|
@ -202,6 +219,16 @@ jobs:
|
|||
# Avoid -D warnings on nightly builds
|
||||
RUSTFLAGS: ""
|
||||
|
||||
- name: Build | Installer [Windows]
|
||||
continue-on-error: true
|
||||
if: >
|
||||
matrix.os == 'windows-latest' && matrix.rust == 'stable' &&
|
||||
github.repository == 'starship/starship' && github.event.type == 'push_event'
|
||||
uses: actions-rs/cargo@v1.0.3
|
||||
with:
|
||||
command: wix
|
||||
args: --dbg-build -v --nocapture -I install/windows/main.wxs
|
||||
|
||||
- name: Upload coverage to Codecov
|
||||
uses: codecov/codecov-action@v3
|
||||
if: github.repository == 'starship/starship'
|
||||
|
|
|
@ -251,6 +251,8 @@ Alternatively, install Starship using any of the following package managers:
|
|||
<details>
|
||||
<summary>Windows</summary>
|
||||
|
||||
Install the latest version for your system with the MSI-installers from the [releases section](https://github.com/starship/starship/releases/latest).
|
||||
|
||||
Install Starship using any of the following package managers:
|
||||
|
||||
| Repository | Instructions |
|
||||
|
|
3
build.rs
3
build.rs
|
@ -6,7 +6,8 @@ fn main() -> Result<(), Box<dyn Error>> {
|
|||
#[cfg(windows)]
|
||||
{
|
||||
let mut res = winres::WindowsResource::new();
|
||||
res.set_manifest_file("starship.exe.manifest");
|
||||
res.set_manifest_file("starship.exe.manifest")
|
||||
.set_icon("media/icon.ico");
|
||||
res.compile()?;
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,183 @@
|
|||
<?xml version='1.0' encoding='windows-1252'?>
|
||||
<!--
|
||||
Copyright (C) 2017 Christopher R. Field.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
|
||||
<!--
|
||||
The "cargo wix" subcommand provides a variety of predefined variables available
|
||||
for customization of this template. The values for each variable are set at
|
||||
installer creation time. The following variables are available:
|
||||
|
||||
TargetTriple = The rustc target triple name.
|
||||
TargetEnv = The rustc target environment. This is typically either
|
||||
"msvc" or "gnu" depending on the toolchain downloaded and
|
||||
installed.
|
||||
TargetVendor = The rustc target vendor. This is typically "pc", but Rust
|
||||
does support other vendors, like "uwp".
|
||||
CargoTargetBinDir = The complete path to the binary (exe). The default would
|
||||
be "target\release\<BINARY_NAME>.exe" where
|
||||
"<BINARY_NAME>" is replaced with the name of each binary
|
||||
target defined in the package's manifest (Cargo.toml). If
|
||||
a different rustc target triple is used than the host,
|
||||
i.e. cross-compiling, then the default path would be
|
||||
"target\<CARGO_TARGET>\<CARGO_PROFILE>\<BINARY_NAME>.exe",
|
||||
where "<CARGO_TARGET>" is replaced with the "CargoTarget"
|
||||
variable value and "<CARGO_PROFILE>" is replaced with the
|
||||
value from the `CargoProfile` variable.
|
||||
CargoTargetDir = The path to the directory for the build artifacts, i.e.
|
||||
"target".
|
||||
CargoProfile = Either "debug" or `release` depending on the build
|
||||
profile. The default is "release".
|
||||
Version = The version for the installer. The default is the
|
||||
"Major.Minor.Fix" semantic versioning number of the Rust
|
||||
package.
|
||||
-->
|
||||
|
||||
<!--
|
||||
Please do not remove these pre-processor If-Else blocks. These are used with
|
||||
the `cargo wix` subcommand to automatically determine the installation
|
||||
destination for 32-bit versus 64-bit installers. Removal of these lines will
|
||||
cause installation errors.
|
||||
-->
|
||||
<?if $(sys.BUILDARCH) = x64 or $(sys.BUILDARCH) = arm64?>
|
||||
<?define PlatformProgramFilesFolder = "ProgramFiles64Folder"?>
|
||||
<?else ?>
|
||||
<?define PlatformProgramFilesFolder = "ProgramFilesFolder"?>
|
||||
<?endif ?>
|
||||
|
||||
<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>
|
||||
|
||||
<Product Id='*' Name='starship' UpgradeCode='0E489D6B-0FEA-4B6E-B57F-62DD1E892C46' Manufacturer='Starship Contributors' Language='1033' Codepage='1252' Version='$(var.Version)'>
|
||||
|
||||
<Package Id='*' Keywords='Installer' Description='The minimal, blazing-fast, and infinitely customizable prompt for any shell! ☄🌌️
|
||||
' Manufacturer='Starship Contributors' InstallerVersion='450' Languages='1033' Compressed='yes' InstallScope='perMachine' SummaryCodepage='1252' />
|
||||
|
||||
<MajorUpgrade Schedule='afterInstallInitialize' DowngradeErrorMessage='A newer version of [ProductName] is already installed. Setup will now exit.' />
|
||||
|
||||
<Media Id='1' Cabinet='media1.cab' EmbedCab='yes' DiskPrompt='CD-ROM #1' />
|
||||
<Property Id='DiskPrompt' Value='starship Installation' />
|
||||
|
||||
<Directory Id='TARGETDIR' Name='SourceDir'>
|
||||
<Directory Id='$(var.PlatformProgramFilesFolder)' Name='PFiles'>
|
||||
<Directory Id='APPLICATIONFOLDER' Name='starship'>
|
||||
|
||||
<!--
|
||||
Enabling the license sidecar file in the installer is a four step process:
|
||||
|
||||
1. Uncomment the `Component` tag and its contents.
|
||||
2. Change the value for the `Source` attribute in the `File` tag to a path
|
||||
to the file that should be included as the license sidecar file. The path
|
||||
can, and probably should be, relative to this file.
|
||||
3. Change the value for the `Name` attribute in the `File` tag to the
|
||||
desired name for the file when it is installed alongside the `bin` folder
|
||||
in the installation directory. This can be omitted if the desired name is
|
||||
the same as the file name.
|
||||
4. Uncomment the `ComponentRef` tag with the Id attribute value of "License"
|
||||
further down in this file.
|
||||
-->
|
||||
<Component Id='License' Guid='*'>
|
||||
<File Id='LicenseFile' Name='LICENSE' DiskId='1' Source='LICENSE' KeyPath='yes' />
|
||||
</Component>
|
||||
|
||||
<Directory Id='Bin' Name='bin'>
|
||||
<Component Id='Path' Guid='964FD77A-B1CF-4FC4-8F71-8015A879CB9C' KeyPath='yes'>
|
||||
<Environment Id='PATH' Name='PATH' Value='[Bin]' Permanent='no' Part='last' Action='set' System='yes' />
|
||||
</Component>
|
||||
<Component Id='binary0' Guid='*'>
|
||||
<File Id='exe0' Name='starship.exe' DiskId='1' Source='$(var.CargoTargetBinDir)\starship.exe' KeyPath='yes' />
|
||||
</Component>
|
||||
</Directory>
|
||||
</Directory>
|
||||
</Directory>
|
||||
</Directory>
|
||||
|
||||
<Feature Id='Binaries' Title='Application' Description='Installs all binaries and the license.' Level='1' ConfigurableDirectory='APPLICATIONFOLDER' AllowAdvertise='no' Display='expand' Absent='disallow'>
|
||||
|
||||
<!--
|
||||
Uncomment the following `ComponentRef` tag to add the license
|
||||
sidecar file to the installer.
|
||||
-->
|
||||
<ComponentRef Id='License' />
|
||||
|
||||
<ComponentRef Id='binary0' />
|
||||
|
||||
<Feature Id='Environment' Title='PATH Environment Variable' Description='Add the install location of the [ProductName] executable to the PATH system environment variable. This allows the [ProductName] executable to be called from any location.' Level='1' Absent='allow'>
|
||||
<ComponentRef Id='Path' />
|
||||
</Feature>
|
||||
</Feature>
|
||||
|
||||
<SetProperty Id='ARPINSTALLLOCATION' Value='[APPLICATIONFOLDER]' After='CostFinalize' />
|
||||
|
||||
|
||||
<!--
|
||||
The product icon is the graphic that appears in the Add/Remove
|
||||
Programs control panel for the application.
|
||||
-->
|
||||
<Icon Id='ProductICO' SourceFile='media\icon.ico' />
|
||||
<Property Id='ARPPRODUCTICON' Value='ProductICO' />
|
||||
|
||||
<Property Id='ARPHELPLINK' Value='https://starship.rs/guide/' />
|
||||
|
||||
<UI>
|
||||
<UIRef Id='WixUI_FeatureTree' />
|
||||
|
||||
<!--
|
||||
Enabling the EULA dialog in the installer is a three step process:
|
||||
|
||||
1. Comment out or remove the two `Publish` tags that follow the
|
||||
`WixVariable` tag.
|
||||
2. Uncomment the `<WixVariable Id='WixUILicenseRtf' Value='Path\to\Eula.rft'>` tag futher down
|
||||
3. Replace the `Value` attribute of the `WixVariable` tag with
|
||||
the path to a RTF file that will be used as the EULA and
|
||||
displayed in the license agreement dialog.
|
||||
-->
|
||||
<Publish Dialog='WelcomeDlg' Control='Next' Event='NewDialog' Value='CustomizeDlg' Order='99'>1</Publish>
|
||||
<Publish Dialog='CustomizeDlg' Control='Back' Event='NewDialog' Value='WelcomeDlg' Order='99'>1</Publish>
|
||||
|
||||
</UI>
|
||||
|
||||
|
||||
<!--
|
||||
Enabling the EULA dialog in the installer requires uncommenting
|
||||
the following `WixUILicenseRTF` tag and changing the `Value`
|
||||
attribute.
|
||||
-->
|
||||
<WixVariable Id='WixUILicenseRtf' Value='install\windows\pkg_resources\license.rtf' />
|
||||
|
||||
|
||||
<!--
|
||||
Uncomment the next `WixVaraible` tag to customize the installer's
|
||||
Graphical User Interface (GUI) and add a custom banner image across
|
||||
the top of each screen. See the WiX Toolset documentation for details
|
||||
about customization.
|
||||
|
||||
The banner BMP dimensions are 493 x 58 pixels.
|
||||
-->
|
||||
<WixVariable Id='WixUIBannerBmp' Value='install\windows\pkg_resources\Banner.bmp' />
|
||||
|
||||
|
||||
<!--
|
||||
Uncomment the next `WixVariable` tag to customize the installer's
|
||||
Graphical User Interface (GUI) and add a custom image to the first
|
||||
dialog, or screen. See the WiX Toolset documentation for details about
|
||||
customization.
|
||||
|
||||
The dialog BMP dimensions are 493 x 312 pixels.
|
||||
-->
|
||||
<WixVariable Id='WixUIDialogBmp' Value='install\windows\pkg_resources\Dialog.bmp' />
|
||||
|
||||
</Product>
|
||||
|
||||
</Wix>
|
Binary file not shown.
After Width: | Height: | Size: 112 KiB |
Binary file not shown.
After Width: | Height: | Size: 601 KiB |
|
@ -0,0 +1,4 @@
|
|||
{\pard \ql \f0 \sa180 \li0 \fi0 ISC License\par}
|
||||
{\pard \ql \f0 \sa180 \li0 \fi0 Copyright (c) 2019-2022, Starship Contributors\par}
|
||||
{\pard \ql \f0 \sa180 \li0 \fi0 Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.\par}
|
||||
{\pard \ql \f0 \sa180 \li0 \fi0 THE SOFTWARE IS PROVIDED \u8220"AS IS\u8221" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\par}
|
Binary file not shown.
After Width: | Height: | Size: 155 KiB |
Loading…
Reference in New Issue