From 6bc8756e2790598ef574c18d58e1dd42eb550dac Mon Sep 17 00:00:00 2001 From: Jan De Dobbeleer Date: Tue, 19 Nov 2024 14:42:20 +0100 Subject: [PATCH] feat(install): add msi --- .github/workflows/msi.yml | 53 ++++++++++++++++++++++++++++++++++ .gitignore | 2 ++ packages/inno/build.ps1 | 9 ++++-- packages/msi/README.md | 40 ++++++++++++++++++++++++++ packages/msi/build.ps1 | 56 ++++++++++++++++++++++++++++++++++++ packages/msi/icon.ico | Bin 0 -> 34903 bytes packages/msi/oh-my-posh.wxs | 41 ++++++++++++++++++++++++++ 7 files changed, 198 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/msi.yml create mode 100644 packages/msi/README.md create mode 100644 packages/msi/build.ps1 create mode 100644 packages/msi/icon.ico create mode 100644 packages/msi/oh-my-posh.wxs diff --git a/.github/workflows/msi.yml b/.github/workflows/msi.yml new file mode 100644 index 00000000..a3cd0c13 --- /dev/null +++ b/.github/workflows/msi.yml @@ -0,0 +1,53 @@ +name: MSI +on: + release: + types: [published] + +jobs: + package: + runs-on: windows-latest + strategy: + matrix: + arch: [x64, arm64, x86] + defaults: + run: + shell: pwsh + working-directory: ${{ github.workspace }}/packages/inno + steps: + - name: Checkout code 👋 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 + - name: Build installer 📦 + id: build + env: + AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }} + AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }} + AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} + run: | + $version = $env:GITHUB_REF.TrimStart("refs/tags/v") + ./build.ps1 -Architecture ${{ matrix.arch }} -Version $version -Sign + - name: Upload artifacts 🆙 + uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea + with: + github-token: ${{secrets.GITHUB_TOKEN}} + script: | + console.log('environment', process.versions); + + const fs = require('fs').promises; + + const { repo: { owner, repo }, sha } = context; + console.log({ owner, repo, sha }); + + for (let file of await fs.readdir('./packages/msi/out')) { + if (file.indexOf(".msi") < 0) { + continue; + } + + console.log('uploading', file); + + await github.rest.repos.uploadReleaseAsset({ + owner, repo, + release_id: ${{ github.event.release.id }}, + name: file, + data: await fs.readFile(`./packages/msi/out/${file}`) + }); + } diff --git a/.gitignore b/.gitignore index ba1e861e..0bb22199 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,8 @@ src/test/umbraco/obj/ src/keys *.prof +*.wixpdb +packages/msi/Microsoft.Trusted.Signing.Client # Created by https://www.toptal.com/developers/gitignore/api/node,go,visualstudiocode # Edit at https://www.toptal.com/developers/gitignore?templates=node,go,visualstudiocode diff --git a/packages/inno/build.ps1 b/packages/inno/build.ps1 index e94c4ecd..ff3463aa 100644 --- a/packages/inno/build.ps1 +++ b/packages/inno/build.ps1 @@ -5,7 +5,10 @@ Param [System.String]$Architecture, [parameter(Mandatory = $true)] [string] - $Version + $Version, + [parameter(Mandatory = $false)] + [string] + $SDKVersion = "10.0.22621.0" ) $PSDefaultParameterValues['Out-File:Encoding']='UTF8' @@ -13,9 +16,9 @@ $PSDefaultParameterValues['Out-File:Encoding']='UTF8' # setup dependencies nuget.exe install Microsoft.Trusted.Signing.Client -Version 1.0.60 -x $signtoolDlib = "$PWD/Microsoft.Trusted.Signing.Client/bin/x64/Azure.CodeSigning.Dlib.dll" -$signtool = 'C:/Program Files (x86)/Windows Kits/10/bin/10.0.22621.0/x64/signtool.exe' +$signtool = "C:/Program Files (x86)/Windows Kits/10/bin/$SDKVersion/x64/signtool.exe" -New-Item -Path "." -Name "bin" -ItemType Directory +New-Item -Path "." -Name "bin" -ItemType Directory -ErrorAction SilentlyContinue Copy-Item -Path "../../themes" -Destination "./bin" -Recurse # download the executable diff --git a/packages/msi/README.md b/packages/msi/README.md new file mode 100644 index 00000000..4a759f8d --- /dev/null +++ b/packages/msi/README.md @@ -0,0 +1,40 @@ +# MSI Package + +## Prerequisites + +- [dotnet] +- [wix]: `dotnet tool install --global wix` + +## Build the package + +This guide assumes and advices the use of PowerShell as your shell environment for this purpose. + +### Set the environment variables + +```powershell +$env:VERSION = "1.3.37" +$env:INSTALLER= "msi" +``` + +### Build the installer + +```powershell +wix build -arch arm64 -out install-arm64.msi +``` + +## Install the package + +### For the current user + +```powershell +install-arm64.msi +``` + +### For all users + +```powershell +install-arm64.msi ALLUSERS=1 +``` + +[dotnet]: https://dotnet.microsoft.com/en-us/download/dotnet?cid=getdotnetcorecli +[wix]: https://wixtoolset.org/docs/intro/ diff --git a/packages/msi/build.ps1 b/packages/msi/build.ps1 new file mode 100644 index 00000000..6a8b2872 --- /dev/null +++ b/packages/msi/build.ps1 @@ -0,0 +1,56 @@ +Param +( + [parameter(Mandatory = $true)] + [ValidateSet('x64', 'arm64', 'x86')] + [System.String]$Architecture, + [parameter(Mandatory = $true)] + [string] + $Version, + [parameter(Mandatory = $false)] + [string] + $SDKVersion = "10.0.22621.0", + [parameter(Mandatory = $false)] + [boolean] + $Download = $true, + [parameter(Mandatory = $false)] + [boolean] + $Sign = $false +) + +$PSDefaultParameterValues['Out-File:Encoding'] = 'UTF8' + +New-Item -Path "." -Name "dist" -ItemType Directory -ErrorAction SilentlyContinue +New-Item -Path "." -Name "out" -ItemType Directory -ErrorAction SilentlyContinue + +if ($Download) { + # download the executable + $file = "posh-windows-$Architecture.exe" + $name = "oh-my-posh.exe" + $download = "https://github.com/jandedobbeleer/oh-my-posh/releases/download/v$Version/$($file)" + Invoke-WebRequest $download -Out "./dist/$($name)" +} + +# variables +$env:VERSION = $Version + +# create MSI +$installer = "./out/install-$Architecture.msi" +wix build -arch $Architecture -out $installer .\oh-my-posh.wxs + +if ($Sign) { + # setup dependencies + nuget.exe install Microsoft.Trusted.Signing.Client -Version 1.0.60 -x + $signtoolDlib = "$PWD/Microsoft.Trusted.Signing.Client/bin/x64/Azure.CodeSigning.Dlib.dll" + $signtool = "C:/Program Files (x86)/Windows Kits/10/bin/$SDKVersion/x64/signtool.exe" + + # clean paths + $signtool = $signtool -Replace '\\', '/' + $signtoolDlib = $signtoolDlib -Replace '\\', '/' + + # sign installer + & "$signtool" sign /v /debug /fd SHA256 /tr 'http://timestamp.acs.microsoft.com' /td SHA256 /dlib "$signtoolDlib" /dmdf ../../src/metadata.json $installer +} + +# get hash +$zipHash = Get-FileHash $installer -Algorithm SHA256 +$zipHash.Hash | Out-File -Encoding 'UTF8' "$installer.sha256" diff --git a/packages/msi/icon.ico b/packages/msi/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..9bbf13c61d3919a0522998b962e88eb83ce2fb30 GIT binary patch literal 34903 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 p-CVwen+*I$eN + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +