mirror of
https://github.com/nushell/nushell.git
synced 2025-05-29 22:29:06 +02:00
Merge ce92cb381fe8b0c7a45edcce5f31310f86396d95 into a0d7c1a4fde4a6b052f536375f3790676fd7bc31
This commit is contained in:
commit
13a4f0acf1
158
.github/workflows/nightly-build.yml
vendored
158
.github/workflows/nightly-build.yml
vendored
@ -4,17 +4,19 @@
|
|||||||
# 2. https://github.com/JasonEtco/create-an-issue
|
# 2. https://github.com/JasonEtco/create-an-issue
|
||||||
# 3. https://docs.github.com/en/actions/learn-github-actions/variables
|
# 3. https://docs.github.com/en/actions/learn-github-actions/variables
|
||||||
# 4. https://github.com/actions/github-script
|
# 4. https://github.com/actions/github-script
|
||||||
|
# 5. https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions#jobsjob_idneeds
|
||||||
#
|
#
|
||||||
name: Nightly Build
|
name: Nightly Build
|
||||||
|
|
||||||
on:
|
on:
|
||||||
workflow_dispatch:
|
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- nightly # Just for test purpose only with the nightly repo
|
- nightly # Just for test purpose only with the nightly repo
|
||||||
|
- fix/arm64-and-winget
|
||||||
# This schedule will run only from the default branch
|
# This schedule will run only from the default branch
|
||||||
schedule:
|
schedule:
|
||||||
- cron: '15 0 * * *' # run at 00:15 AM UTC
|
- cron: '15 0 * * *' # run at 00:15 AM UTC
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
defaults:
|
defaults:
|
||||||
run:
|
run:
|
||||||
@ -26,6 +28,11 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
# This job is required by the release job, so we should make it run both from Nushell repo and nightly repo
|
# This job is required by the release job, so we should make it run both from Nushell repo and nightly repo
|
||||||
# if: github.repository == 'nushell/nightly'
|
# if: github.repository == 'nushell/nightly'
|
||||||
|
# Map a step output to a job output
|
||||||
|
outputs:
|
||||||
|
skip: ${{ steps.vars.outputs.skip }}
|
||||||
|
build_date: ${{ steps.vars.outputs.build_date }}
|
||||||
|
nightly_tag: ${{ steps.vars.outputs.nightly_tag }}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
@ -58,16 +65,62 @@ jobs:
|
|||||||
# All the changes will be overwritten by the upstream main branch
|
# All the changes will be overwritten by the upstream main branch
|
||||||
git reset --hard src/main
|
git reset --hard src/main
|
||||||
git push origin main -f
|
git push origin main -f
|
||||||
let sha_short = (git rev-parse --short origin/main | str trim | str substring 0..7)
|
|
||||||
let tag_name = $'nightly-($sha_short)'
|
- name: Create Tag and Output Tag Name
|
||||||
if (git ls-remote --tags origin $tag_name | is-empty) {
|
if: github.repository == 'nushell/nightly'
|
||||||
git tag -a $tag_name -m $'Nightly build from ($sha_short)'
|
id: vars
|
||||||
|
shell: nu {0}
|
||||||
|
run: |
|
||||||
|
let date = date now | format date %m%d
|
||||||
|
let version = open Cargo.toml | get package.version
|
||||||
|
let sha_short = (git rev-parse --short origin/main | str trim | str substring 0..6)
|
||||||
|
let latest_meta = http get https://api.github.com/repos/nushell/nightly/releases
|
||||||
|
| sort-by -r created_at
|
||||||
|
| where tag_name =~ nightly
|
||||||
|
| get tag_name?.0? | default ''
|
||||||
|
| parse '{version}-nightly.{build}+{hash}'
|
||||||
|
if ($latest_meta.0?.hash? | default '') == $sha_short {
|
||||||
|
print $'(ansi g)Latest nightly build is up-to-date, skip rebuilding.(ansi reset)'
|
||||||
|
$'skip=true(char nl)' o>> $env.GITHUB_OUTPUT
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
let prev_ver = $latest_meta.0?.version? | default '0.0.0'
|
||||||
|
let build = if ($latest_meta | is-empty) or ($version != $prev_ver) { 1 } else {
|
||||||
|
($latest_meta | get build?.0? | default 0 | into int) + 1
|
||||||
|
}
|
||||||
|
let nightly_tag = $'($version)-nightly.($build)+($sha_short)'
|
||||||
|
$'build_date=($date)(char nl)' o>> $env.GITHUB_OUTPUT
|
||||||
|
$'nightly_tag=($nightly_tag)(char nl)' o>> $env.GITHUB_OUTPUT
|
||||||
|
if (git ls-remote --tags origin $nightly_tag | is-empty) {
|
||||||
|
ls **/Cargo.toml | each {|file|
|
||||||
|
open --raw $file.name
|
||||||
|
| str replace --all $'version = "($version)"' $'version = "($version)-nightly.($build)"'
|
||||||
|
| save --force $file.name
|
||||||
|
}
|
||||||
|
# Disable the following two workflows for the automatic committed changes
|
||||||
|
rm .github/workflows/ci.yml
|
||||||
|
rm .github/workflows/audit.yml
|
||||||
|
|
||||||
|
# Test the latest release script before merging
|
||||||
|
# TODO: Remove the following two lines after the test
|
||||||
|
git fetch origin
|
||||||
|
if ((git branch -r) =~ fix/arm64-and-winget) {
|
||||||
|
git checkout scripts/build.rs
|
||||||
|
git checkout origin/fix/arm64-and-winget wix
|
||||||
|
git checkout origin/fix/arm64-and-winget .github/workflows/release-pkg.nu
|
||||||
|
}
|
||||||
|
# ----------- REMOVE END OF TESTING ------------------
|
||||||
|
git add .
|
||||||
|
git commit -m $'Update version to ($version)-nightly.($build)'
|
||||||
|
git tag -a $nightly_tag -m $'Nightly build from ($sha_short)'
|
||||||
git push origin --tags
|
git push origin --tags
|
||||||
|
git push origin main -f
|
||||||
}
|
}
|
||||||
|
|
||||||
standard:
|
release:
|
||||||
name: Nu
|
name: Nu
|
||||||
needs: prepare
|
needs: prepare
|
||||||
|
if: needs.prepare.outputs.skip != 'true'
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
@ -84,24 +137,15 @@ jobs:
|
|||||||
- armv7-unknown-linux-musleabihf
|
- armv7-unknown-linux-musleabihf
|
||||||
- riscv64gc-unknown-linux-gnu
|
- riscv64gc-unknown-linux-gnu
|
||||||
- loongarch64-unknown-linux-gnu
|
- loongarch64-unknown-linux-gnu
|
||||||
extra: ['bin']
|
|
||||||
include:
|
include:
|
||||||
- target: aarch64-apple-darwin
|
- target: aarch64-apple-darwin
|
||||||
os: macos-latest
|
os: macos-latest
|
||||||
- target: x86_64-apple-darwin
|
- target: x86_64-apple-darwin
|
||||||
os: macos-latest
|
os: macos-latest
|
||||||
- target: x86_64-pc-windows-msvc
|
- target: x86_64-pc-windows-msvc
|
||||||
extra: 'bin'
|
|
||||||
os: windows-latest
|
|
||||||
- target: x86_64-pc-windows-msvc
|
|
||||||
extra: msi
|
|
||||||
os: windows-latest
|
os: windows-latest
|
||||||
- target: aarch64-pc-windows-msvc
|
- target: aarch64-pc-windows-msvc
|
||||||
extra: 'bin'
|
os: windows-11-arm
|
||||||
os: windows-latest
|
|
||||||
- target: aarch64-pc-windows-msvc
|
|
||||||
extra: msi
|
|
||||||
os: windows-latest
|
|
||||||
- target: x86_64-unknown-linux-gnu
|
- target: x86_64-unknown-linux-gnu
|
||||||
os: ubuntu-22.04
|
os: ubuntu-22.04
|
||||||
- target: x86_64-unknown-linux-musl
|
- target: x86_64-unknown-linux-musl
|
||||||
@ -120,40 +164,64 @@ jobs:
|
|||||||
os: ubuntu-22.04
|
os: ubuntu-22.04
|
||||||
|
|
||||||
runs-on: ${{matrix.os}}
|
runs-on: ${{matrix.os}}
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
ref: main
|
ref: main
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Install Wix Toolset 6 for Windows
|
||||||
|
shell: pwsh
|
||||||
|
if: ${{ startsWith(matrix.os, 'windows') }}
|
||||||
|
run: |
|
||||||
|
dotnet tool install --global wix --version 6.0.0
|
||||||
|
dotnet workload install wix
|
||||||
|
$wixPath = "$env:USERPROFILE\.dotnet\tools"
|
||||||
|
echo "$wixPath" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
|
||||||
|
$env:PATH = "$wixPath;$env:PATH"
|
||||||
|
wix --version
|
||||||
|
|
||||||
- name: Update Rust Toolchain Target
|
- name: Update Rust Toolchain Target
|
||||||
run: |
|
run: |
|
||||||
echo "targets = ['${{matrix.target}}']" >> rust-toolchain.toml
|
echo "targets = ['${{matrix.target}}']" >> rust-toolchain.toml
|
||||||
|
|
||||||
- name: Setup Rust toolchain and cache
|
- name: Setup Rust toolchain and cache
|
||||||
uses: actions-rust-lang/setup-rust-toolchain@v1.12.0
|
uses: actions-rust-lang/setup-rust-toolchain@v1
|
||||||
# WARN: Keep the rustflags to prevent from the winget submission error: `CAQuietExec: Error 0xc0000135`
|
# WARN: Keep the rustflags to prevent from the winget submission error: `CAQuietExec: Error 0xc0000135`
|
||||||
with:
|
with:
|
||||||
rustflags: ''
|
rustflags: ''
|
||||||
|
|
||||||
- name: Setup Nushell
|
- name: Setup Nushell
|
||||||
uses: hustcer/setup-nu@v3
|
uses: hustcer/setup-nu@v3
|
||||||
|
if: ${{ matrix.os != 'windows-11-arm' }}
|
||||||
with:
|
with:
|
||||||
version: 0.103.0
|
version: 0.103.0
|
||||||
|
|
||||||
- name: Release Nu Binary
|
- name: Release Nu Binary
|
||||||
id: nu
|
id: nu
|
||||||
|
if: ${{ matrix.os != 'windows-11-arm' }}
|
||||||
run: nu .github/workflows/release-pkg.nu
|
run: nu .github/workflows/release-pkg.nu
|
||||||
env:
|
env:
|
||||||
OS: ${{ matrix.os }}
|
OS: ${{ matrix.os }}
|
||||||
REF: ${{ github.ref }}
|
REF: ${{ github.ref }}
|
||||||
TARGET: ${{ matrix.target }}
|
TARGET: ${{ matrix.target }}
|
||||||
_EXTRA_: ${{ matrix.extra }}
|
|
||||||
|
- name: Build Nu for Windows ARM64
|
||||||
|
id: nu0
|
||||||
|
shell: pwsh
|
||||||
|
if: ${{ matrix.os == 'windows-11-arm' }}
|
||||||
|
run: |
|
||||||
|
$env:OS = 'windows'
|
||||||
|
$env:REF = '${{ github.ref }}'
|
||||||
|
$env:TARGET = '${{ matrix.target }}'
|
||||||
|
cargo build --release --all --target aarch64-pc-windows-msvc
|
||||||
|
cp ./target/${{ matrix.target }}/release/nu.exe .
|
||||||
|
./nu.exe -c 'version'
|
||||||
|
./nu.exe ${{github.workspace}}/.github/workflows/release-pkg.nu
|
||||||
|
|
||||||
- name: Create an Issue for Release Failure
|
- name: Create an Issue for Release Failure
|
||||||
if: ${{ failure() }}
|
if: ${{ failure() }}
|
||||||
uses: JasonEtco/create-an-issue@v2.9.2
|
uses: JasonEtco/create-an-issue@v2
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
with:
|
with:
|
||||||
@ -161,13 +229,6 @@ jobs:
|
|||||||
search_existing: open
|
search_existing: open
|
||||||
filename: .github/AUTO_ISSUE_TEMPLATE/nightly-build-fail.md
|
filename: .github/AUTO_ISSUE_TEMPLATE/nightly-build-fail.md
|
||||||
|
|
||||||
- name: Set Outputs of Short SHA
|
|
||||||
id: vars
|
|
||||||
run: |
|
|
||||||
echo "date=$(date -u +'%Y-%m-%d')" >> $GITHUB_OUTPUT
|
|
||||||
sha_short=$(git rev-parse --short HEAD)
|
|
||||||
echo "sha_short=${sha_short:0:7}" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
# REF: https://github.com/marketplace/actions/gh-release
|
# REF: https://github.com/marketplace/actions/gh-release
|
||||||
# Create a release only in nushell/nightly repo
|
# Create a release only in nushell/nightly repo
|
||||||
- name: Publish Archive
|
- name: Publish Archive
|
||||||
@ -175,9 +236,39 @@ jobs:
|
|||||||
if: ${{ startsWith(github.repository, 'nushell/nightly') }}
|
if: ${{ startsWith(github.repository, 'nushell/nightly') }}
|
||||||
with:
|
with:
|
||||||
prerelease: true
|
prerelease: true
|
||||||
files: ${{ steps.nu.outputs.archive }}
|
files: |
|
||||||
tag_name: nightly-${{ steps.vars.outputs.sha_short }}
|
${{ steps.nu.outputs.msi }}
|
||||||
name: Nu-nightly-${{ steps.vars.outputs.date }}-${{ steps.vars.outputs.sha_short }}
|
${{ steps.nu0.outputs.msi }}
|
||||||
|
${{ steps.nu.outputs.archive }}
|
||||||
|
${{ steps.nu0.outputs.archive }}
|
||||||
|
tag_name: ${{ needs.prepare.outputs.nightly_tag }}
|
||||||
|
name: ${{ needs.prepare.outputs.build_date }}-${{ needs.prepare.outputs.nightly_tag }}
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
sha256sum:
|
||||||
|
needs: [prepare, release]
|
||||||
|
name: Create Sha256sum
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: github.repository == 'nushell/nightly'
|
||||||
|
steps:
|
||||||
|
- name: Download Release Archives
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
run: >-
|
||||||
|
gh release download ${{ needs.prepare.outputs.nightly_tag }}
|
||||||
|
--repo ${{ github.repository }}
|
||||||
|
--pattern '*'
|
||||||
|
--dir release
|
||||||
|
- name: Create Checksums
|
||||||
|
run: cd release && shasum -a 256 * > ../SHA256SUMS
|
||||||
|
- name: Publish Checksums
|
||||||
|
uses: softprops/action-gh-release@v2.0.9
|
||||||
|
with:
|
||||||
|
draft: false
|
||||||
|
prerelease: true
|
||||||
|
files: SHA256SUMS
|
||||||
|
tag_name: ${{ needs.prepare.outputs.nightly_tag }}
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
@ -185,12 +276,9 @@ jobs:
|
|||||||
name: Cleanup
|
name: Cleanup
|
||||||
# Should only run in nushell/nightly repo
|
# Should only run in nushell/nightly repo
|
||||||
if: github.repository == 'nushell/nightly'
|
if: github.repository == 'nushell/nightly'
|
||||||
|
needs: [release, sha256sum]
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
# Sleep for 30 minutes, waiting for the release to be published
|
|
||||||
- name: Waiting for Release
|
|
||||||
run: sleep 1800
|
|
||||||
|
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
ref: main
|
ref: main
|
||||||
@ -205,7 +293,7 @@ jobs:
|
|||||||
shell: nu {0}
|
shell: nu {0}
|
||||||
run: |
|
run: |
|
||||||
let KEEP_COUNT = 10
|
let KEEP_COUNT = 10
|
||||||
let deprecated = (http get https://api.github.com/repos/nushell/nightly/releases | sort-by -r created_at | select tag_name id | range $KEEP_COUNT..)
|
let deprecated = (http get https://api.github.com/repos/nushell/nightly/releases | sort-by -r created_at | select tag_name id | slice $KEEP_COUNT..)
|
||||||
for release in $deprecated {
|
for release in $deprecated {
|
||||||
print $'Deleting tag ($release.tag_name)'
|
print $'Deleting tag ($release.tag_name)'
|
||||||
git push origin --delete $release.tag_name
|
git push origin --delete $release.tag_name
|
||||||
|
62
.github/workflows/release-pkg.nu
vendored
62
.github/workflows/release-pkg.nu
vendored
@ -175,48 +175,42 @@ if $os in ['macos-latest'] or $USE_UBUNTU {
|
|||||||
tar -czf $archive $dest
|
tar -czf $archive $dest
|
||||||
print $'archive: ---> ($archive)'; ls $archive
|
print $'archive: ---> ($archive)'; ls $archive
|
||||||
# REF: https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/
|
# REF: https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/
|
||||||
echo $"archive=($archive)" | save --append $env.GITHUB_OUTPUT
|
echo $"archive=($archive)(char nl)" o>> $env.GITHUB_OUTPUT
|
||||||
|
|
||||||
} else if $os =~ 'windows' {
|
} else if $os =~ 'windows' {
|
||||||
|
|
||||||
let releaseStem = $'($bin)-($version)-($target)'
|
let releaseStem = $'($bin)-($version)-($target)'
|
||||||
|
|
||||||
print $'(char nl)Download less related stuffs...'; hr-line
|
print $'(char nl)(ansi g)Archive contents:(ansi reset)'; hr-line; ls | print
|
||||||
# todo: less-v661 is out but is released as a zip file. maybe we should switch to that and extract it?
|
let archive = $'($dist)/($releaseStem).zip'
|
||||||
aria2c https://github.com/jftuga/less-Windows/releases/download/less-v608/less.exe -o less.exe
|
7z a $archive ...(glob *)
|
||||||
# the below was renamed because it was failing to download for darren. it should work but it wasn't
|
let pkg = (ls -f $archive | get name)
|
||||||
# todo: maybe we should get rid of this aria2c dependency and just use http get?
|
if not ($pkg | is-empty) {
|
||||||
#aria2c https://raw.githubusercontent.com/jftuga/less-Windows/master/LICENSE -o LICENSE-for-less.txt
|
|
||||||
aria2c https://github.com/jftuga/less-Windows/blob/master/LICENSE -o LICENSE-for-less.txt
|
|
||||||
|
|
||||||
# Create Windows msi release package
|
|
||||||
if (get-env _EXTRA_) == 'msi' {
|
|
||||||
|
|
||||||
let wixRelease = $'($src)/target/wix/($releaseStem).msi'
|
|
||||||
print $'(char nl)Start creating Windows msi package with the following contents...'
|
|
||||||
cd $src; hr-line
|
|
||||||
# Wix need the binaries be stored in target/release/
|
|
||||||
cp -r ($'($dist)/*' | into glob) target/release/
|
|
||||||
ls target/release/* | print
|
|
||||||
cargo install cargo-wix --version 0.3.8
|
|
||||||
cargo wix --no-build --nocapture --package nu --output $wixRelease
|
|
||||||
# Workaround for https://github.com/softprops/action-gh-release/issues/280
|
# Workaround for https://github.com/softprops/action-gh-release/issues/280
|
||||||
let archive = ($wixRelease | str replace --all '\' '/')
|
let archive = ($pkg | get 0 | str replace --all '\' '/')
|
||||||
print $'archive: ---> ($archive)';
|
print $'archive: ---> ($archive)'
|
||||||
echo $"archive=($archive)" | save --append $env.GITHUB_OUTPUT
|
echo $"archive=($archive)(char nl)" o>> $env.GITHUB_OUTPUT
|
||||||
|
}
|
||||||
|
|
||||||
} else {
|
# Create extra Windows msi release package if dotnet and wix are available
|
||||||
|
let installed = [dotnet wix] | all { (which $in | length) > 0 }
|
||||||
|
if $installed and (wix --version | split row . | first | into int) >= 6 {
|
||||||
|
|
||||||
print $'(char nl)(ansi g)Archive contents:(ansi reset)'; hr-line; ls | print
|
print $'(char nl)Start creating Windows msi package with the following contents...'
|
||||||
let archive = $'($dist)/($releaseStem).zip'
|
cd $src; cd wix; hr-line; mkdir nu
|
||||||
7z a $archive ...(glob *)
|
# Wix need the binaries be stored in nu folder
|
||||||
let pkg = (ls -f $archive | get name)
|
cp -r ($'($dist)/*' | into glob) nu/
|
||||||
if not ($pkg | is-empty) {
|
cp $'($dist)/README.txt' .
|
||||||
# Workaround for https://github.com/softprops/action-gh-release/issues/280
|
ls -f nu/* | print
|
||||||
let archive = ($pkg | get 0 | str replace --all '\' '/')
|
let arch = if $nu.os-info.arch =~ 'x86_64' { 'x64' } else { 'arm64' }
|
||||||
print $'archive: ---> ($archive)'
|
./nu/nu.exe -c $'NU_RELEASE_VERSION=($version) dotnet build -c Release -p:Platform=($arch)'
|
||||||
echo $"archive=($archive)" | save --append $env.GITHUB_OUTPUT
|
glob **/*.msi | print
|
||||||
}
|
# Workaround for https://github.com/softprops/action-gh-release/issues/280
|
||||||
|
let wixRelease = (glob **/*.msi | where $it =~ bin | get 0 | str replace --all '\' '/')
|
||||||
|
let msi = $'($wixRelease | path dirname)/nu-($version)-($target).msi'
|
||||||
|
mv $wixRelease $msi
|
||||||
|
print $'MSI archive: ---> ($msi)';
|
||||||
|
echo $"msi=($msi)(char nl)" o>> $env.GITHUB_OUTPUT
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
44
.github/workflows/release.yml
vendored
44
.github/workflows/release.yml
vendored
@ -35,24 +35,15 @@ jobs:
|
|||||||
- armv7-unknown-linux-musleabihf
|
- armv7-unknown-linux-musleabihf
|
||||||
- riscv64gc-unknown-linux-gnu
|
- riscv64gc-unknown-linux-gnu
|
||||||
- loongarch64-unknown-linux-gnu
|
- loongarch64-unknown-linux-gnu
|
||||||
extra: ['bin']
|
|
||||||
include:
|
include:
|
||||||
- target: aarch64-apple-darwin
|
- target: aarch64-apple-darwin
|
||||||
os: macos-latest
|
os: macos-latest
|
||||||
- target: x86_64-apple-darwin
|
- target: x86_64-apple-darwin
|
||||||
os: macos-latest
|
os: macos-latest
|
||||||
- target: x86_64-pc-windows-msvc
|
- target: x86_64-pc-windows-msvc
|
||||||
extra: 'bin'
|
|
||||||
os: windows-latest
|
|
||||||
- target: x86_64-pc-windows-msvc
|
|
||||||
extra: msi
|
|
||||||
os: windows-latest
|
os: windows-latest
|
||||||
- target: aarch64-pc-windows-msvc
|
- target: aarch64-pc-windows-msvc
|
||||||
extra: 'bin'
|
os: windows-11-arm
|
||||||
os: windows-latest
|
|
||||||
- target: aarch64-pc-windows-msvc
|
|
||||||
extra: msi
|
|
||||||
os: windows-latest
|
|
||||||
- target: x86_64-unknown-linux-gnu
|
- target: x86_64-unknown-linux-gnu
|
||||||
os: ubuntu-22.04
|
os: ubuntu-22.04
|
||||||
- target: x86_64-unknown-linux-musl
|
- target: x86_64-unknown-linux-musl
|
||||||
@ -75,6 +66,17 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Install Wix Toolset 6 for Windows
|
||||||
|
shell: pwsh
|
||||||
|
if: ${{ startsWith(matrix.os, 'windows') }}
|
||||||
|
run: |
|
||||||
|
dotnet tool install --global wix --version 6.0.0
|
||||||
|
dotnet workload install wix
|
||||||
|
$wixPath = "$env:USERPROFILE\.dotnet\tools"
|
||||||
|
echo "$wixPath" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
|
||||||
|
$env:PATH = "$wixPath;$env:PATH"
|
||||||
|
wix --version
|
||||||
|
|
||||||
- name: Update Rust Toolchain Target
|
- name: Update Rust Toolchain Target
|
||||||
run: |
|
run: |
|
||||||
echo "targets = ['${{matrix.target}}']" >> rust-toolchain.toml
|
echo "targets = ['${{matrix.target}}']" >> rust-toolchain.toml
|
||||||
@ -88,17 +90,31 @@ jobs:
|
|||||||
|
|
||||||
- name: Setup Nushell
|
- name: Setup Nushell
|
||||||
uses: hustcer/setup-nu@v3
|
uses: hustcer/setup-nu@v3
|
||||||
|
if: ${{ matrix.os != 'windows-11-arm' }}
|
||||||
with:
|
with:
|
||||||
version: 0.103.0
|
version: 0.103.0
|
||||||
|
|
||||||
- name: Release Nu Binary
|
- name: Release Nu Binary
|
||||||
id: nu
|
id: nu
|
||||||
|
if: ${{ matrix.os != 'windows-11-arm' }}
|
||||||
run: nu .github/workflows/release-pkg.nu
|
run: nu .github/workflows/release-pkg.nu
|
||||||
env:
|
env:
|
||||||
OS: ${{ matrix.os }}
|
OS: ${{ matrix.os }}
|
||||||
REF: ${{ github.ref }}
|
REF: ${{ github.ref }}
|
||||||
TARGET: ${{ matrix.target }}
|
TARGET: ${{ matrix.target }}
|
||||||
_EXTRA_: ${{ matrix.extra }}
|
|
||||||
|
- name: Build Nu for Windows ARM64
|
||||||
|
id: nu0
|
||||||
|
shell: pwsh
|
||||||
|
if: ${{ matrix.os == 'windows-11-arm' }}
|
||||||
|
run: |
|
||||||
|
$env:OS = 'windows'
|
||||||
|
$env:REF = '${{ github.ref }}'
|
||||||
|
$env:TARGET = '${{ matrix.target }}'
|
||||||
|
cargo build --release --all --target aarch64-pc-windows-msvc
|
||||||
|
cp ./target/${{ matrix.target }}/release/nu.exe .
|
||||||
|
./nu.exe -c 'version'
|
||||||
|
./nu.exe ${{github.workspace}}/.github/workflows/release-pkg.nu
|
||||||
|
|
||||||
# WARN: Don't upgrade this action due to the release per asset issue.
|
# WARN: Don't upgrade this action due to the release per asset issue.
|
||||||
# See: https://github.com/softprops/action-gh-release/issues/445
|
# See: https://github.com/softprops/action-gh-release/issues/445
|
||||||
@ -107,7 +123,11 @@ jobs:
|
|||||||
if: ${{ startsWith(github.ref, 'refs/tags/') }}
|
if: ${{ startsWith(github.ref, 'refs/tags/') }}
|
||||||
with:
|
with:
|
||||||
draft: true
|
draft: true
|
||||||
files: ${{ steps.nu.outputs.archive }}
|
files: |
|
||||||
|
${{ steps.nu.outputs.msi }}
|
||||||
|
${{ steps.nu0.outputs.msi }}
|
||||||
|
${{ steps.nu.outputs.archive }}
|
||||||
|
${{ steps.nu0.outputs.archive }}
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@ fn main() {
|
|||||||
let mut res = winresource::WindowsResource::new();
|
let mut res = winresource::WindowsResource::new();
|
||||||
res.set("ProductName", "Nushell");
|
res.set("ProductName", "Nushell");
|
||||||
res.set("FileDescription", "Nushell");
|
res.set("FileDescription", "Nushell");
|
||||||
res.set("LegalCopyright", "Copyright (C) 2022");
|
res.set("LegalCopyright", "Copyright (C) 2025");
|
||||||
res.set_icon("assets/nu_logo.ico");
|
res.set_icon("assets/nu_logo.ico");
|
||||||
res.compile()
|
res.compile()
|
||||||
.expect("Failed to run the Windows resource compiler (rc.exe)");
|
.expect("Failed to run the Windows resource compiler (rc.exe)");
|
||||||
|
BIN
wix/License.rtf
BIN
wix/License.rtf
Binary file not shown.
36
wix/main.wixproj
Normal file
36
wix/main.wixproj
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
<Project Sdk="WixToolset.Sdk/6.0.0">
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>Package</OutputType>
|
||||||
|
<OutputName>nu-$(Platform)</OutputName>
|
||||||
|
<UpgradeCode>82D756D2-19FA-4F09-B10F-64942E89F364</UpgradeCode>
|
||||||
|
<DefineConstants>
|
||||||
|
SourceDir=$(MSBuildProjectDirectory)\nu;
|
||||||
|
</DefineConstants>
|
||||||
|
<SuppressValidation>true</SuppressValidation>
|
||||||
|
<SuppressIces>ICE80</SuppressIces>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<PropertyGroup Condition=" '$(Platform)' == 'x64' ">
|
||||||
|
<InstallerPlatform>x64</InstallerPlatform>
|
||||||
|
<DefineConstants>$(DefineConstants)</DefineConstants>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<PropertyGroup Condition=" '$(Platform)' == 'arm64' ">
|
||||||
|
<InstallerPlatform>arm64</InstallerPlatform>
|
||||||
|
<DefineConstants>$(DefineConstants)</DefineConstants>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="WixToolset.UI.wixext" Version="6.0.0" />
|
||||||
|
<PackageReference Include="WixToolset.Util.wixext" Version="6.0.0" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<BindPath Include="." />
|
||||||
|
<Content Include="nu.ico" />
|
||||||
|
<Content Include="README.txt" />
|
||||||
|
<Content Include="License.rtf" />
|
||||||
|
<Content Include="windows-terminal-profile.json" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
648
wix/main.wxs
648
wix/main.wxs
@ -1,468 +1,234 @@
|
|||||||
<?xml version='1.0' encoding='windows-1252'?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!--
|
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"
|
||||||
Copyright (C) 2017 Christopher R. Field.
|
xmlns:ui="http://wixtoolset.org/schemas/v4/wxs/ui"
|
||||||
|
xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util">
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
<?define ProductName = "Nushell" ?>
|
||||||
you may not use this file except in compliance with the License.
|
<?define ApplicationFolderName = "nu" ?>
|
||||||
You may obtain a copy of the License at
|
<?define ProductVersion = "$(env.NU_RELEASE_VERSION)" ?>
|
||||||
|
<?define Manufacturer = "The Nushell Project Developers" ?>
|
||||||
|
<?define UpgradeCode = "82D756D2-19FA-4F09-B10F-64942E89F364" ?>
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
<!-- https://docs.firegiant.com/wix/schema/wxs/package/ -->
|
||||||
|
<Package
|
||||||
|
Compressed="yes"
|
||||||
|
Id="Nushell.Nushell"
|
||||||
|
InstallerVersion="500"
|
||||||
|
Scope="perUserOrMachine"
|
||||||
|
Name="$(var.ProductName)"
|
||||||
|
Version="$(var.ProductVersion)"
|
||||||
|
UpgradeCode="$(var.UpgradeCode)"
|
||||||
|
Manufacturer="$(var.Manufacturer)" >
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
<MajorUpgrade
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
MigrateFeatures="yes"
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
Schedule="afterInstallInitialize"
|
||||||
See the License for the specific language governing permissions and
|
DowngradeErrorMessage="A newer version of [ProductName] is already installed. Setup will now exit." />
|
||||||
limitations under the License.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!--
|
<!-- Embed cab media to MSI file -->
|
||||||
Please do not remove these pre-processor If-Else blocks. These are used with
|
<Media Id="1" Cabinet="cab1.cab" EmbedCab="yes" />
|
||||||
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 $(var.Platform) = x64 ?>
|
|
||||||
<?define Win64 = "yes" ?>
|
|
||||||
<?define PlatformProgramFilesFolder = "ProgramFiles64Folder" ?>
|
|
||||||
<?else ?>
|
|
||||||
<?define Win64 = "no" ?>
|
|
||||||
<?define PlatformProgramFilesFolder = "ProgramFilesFolder" ?>
|
|
||||||
<?endif ?>
|
|
||||||
|
|
||||||
<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>
|
<!-- Allow install for Current User Or Machine -->
|
||||||
|
<Property Id="WixUISupportPerUser" Value="1" />
|
||||||
|
<Property Id="WixUISupportPerMachine" Value="1" />
|
||||||
|
<!-- Install for PerUser by default -->
|
||||||
|
<!-- If set to WixPerMachineFolder will install for PerMachine by default -->
|
||||||
|
<Property Id="WixAppFolder" Value="WixPerUserFolder" />
|
||||||
|
|
||||||
<Product
|
<!-- Enable UAC prompt when installing for all users -->
|
||||||
Id='*'
|
<!-- <Property Id="MSIUSEREALADMINDETECTION" Value="1" /> -->
|
||||||
Name='nu'
|
|
||||||
UpgradeCode='82D756D2-19FA-4F09-B10F-64942E89F364'
|
|
||||||
Manufacturer='The Nushell Project Developers'
|
|
||||||
Language='1033'
|
|
||||||
Codepage='1252'
|
|
||||||
Version='$(var.Version)'>
|
|
||||||
|
|
||||||
<Package Id='*'
|
<Property Id="ARPPRODUCTICON" Value="nu.ico" />
|
||||||
Keywords='Installer'
|
<Property Id='ARPHELPLINK' Value='https://www.nushell.sh/book/' />
|
||||||
Description='A new type of shell'
|
<Property Id="ApplicationFolderName" Value="$(var.ApplicationFolderName)" />
|
||||||
Manufacturer='The Nushell Project Developers'
|
|
||||||
InstallerVersion='450'
|
|
||||||
Languages='1033'
|
|
||||||
Compressed='yes'
|
|
||||||
InstallScope='perUser'
|
|
||||||
SummaryCodepage='1252'
|
|
||||||
Platform='$(var.Platform)'/>
|
|
||||||
|
|
||||||
<MajorUpgrade
|
<!-- Per Machine Install -->
|
||||||
Schedule='afterInstallInitialize'
|
<StandardDirectory Id="ProgramFiles64Folder">
|
||||||
DowngradeErrorMessage='A newer version of [ProductName] is already installed. Setup will now exit.'/>
|
<Directory Id="INSTALLDIR" Name="$(var.ApplicationFolderName)">
|
||||||
|
<Directory Id="BINDIR" Name="bin" />
|
||||||
|
</Directory>
|
||||||
|
</StandardDirectory>
|
||||||
|
|
||||||
<Media Id='1' Cabinet='media1.cab' EmbedCab='yes' DiskPrompt='CD-ROM #1'/>
|
<!-- Install for Current User -->
|
||||||
<Property Id='DiskPrompt' Value='nu Installation'/>
|
<StandardDirectory Id="LocalAppDataFolder">
|
||||||
<Property Id="ALLUSERS" Secure="yes" Value="2" />
|
<Directory Id="LocalAppProgramsFolder" Name="Programs">
|
||||||
<Property Id="MSIINSTALLPERUSER" Secure="yes" Value="1" />
|
<Directory Id="INSTALLDIR_USER" Name="$(var.ApplicationFolderName)">
|
||||||
|
<Directory Id="BINDIR_USER" Name="bin" />
|
||||||
<Directory Id='TARGETDIR' Name='SourceDir'>
|
|
||||||
<Directory Id='$(var.PlatformProgramFilesFolder)' Name='PFiles'>
|
|
||||||
<Directory Id='APPLICATIONFOLDER' Name='nu'>
|
|
||||||
<!--
|
|
||||||
Disabling the license sidecar file in the installer is a two step process:
|
|
||||||
|
|
||||||
1. Comment out or remove the `Component` tag along with its contents.
|
|
||||||
2. Comment out or remove the `ComponentRef` tag with the "License" Id
|
|
||||||
attribute value further down in this file.
|
|
||||||
-->
|
|
||||||
<Component Id='License' Guid='*' Win64='$(var.Win64)'>
|
|
||||||
<File Id='LicenseFile'
|
|
||||||
Name='License.rtf'
|
|
||||||
DiskId='1'
|
|
||||||
Source='wix\License.rtf'
|
|
||||||
KeyPath='yes'/>
|
|
||||||
</Component>
|
|
||||||
|
|
||||||
<Component Id='icon0' Guid='*' Win64='$(var.Win64)'>
|
|
||||||
<File
|
|
||||||
Id='icon0'
|
|
||||||
Name='nu.ico'
|
|
||||||
DiskId='1'
|
|
||||||
Source='assets/nu_logo.ico'
|
|
||||||
KeyPath='yes'/>
|
|
||||||
</Component>
|
|
||||||
|
|
||||||
<Directory Id='Bin' Name='bin'>
|
|
||||||
<Component Id='Path' Guid='285921EA-6DC0-4632-B12C-D7D737F30686' Win64='$(var.Win64)' KeyPath='yes'>
|
|
||||||
<Environment
|
|
||||||
Id='PATH'
|
|
||||||
Name='PATH'
|
|
||||||
Value='[Bin]'
|
|
||||||
Permanent='no'
|
|
||||||
Part='last'
|
|
||||||
Action='set'
|
|
||||||
System='no'/>
|
|
||||||
</Component>
|
|
||||||
<Component Id='binary0' Guid='*' Win64='$(var.Win64)'>
|
|
||||||
<File
|
|
||||||
Id='exe0'
|
|
||||||
Name='nu.exe'
|
|
||||||
DiskId='1'
|
|
||||||
Source='target\$(var.Profile)\nu.exe'
|
|
||||||
KeyPath='yes'/>
|
|
||||||
</Component>
|
|
||||||
<!-- <Component Id='binary1' Guid='*' Win64='$(var.Win64)'>
|
|
||||||
<File
|
|
||||||
Id='exe1'
|
|
||||||
Name='nu_plugin_binaryview.exe'
|
|
||||||
DiskId='1'
|
|
||||||
Source='target\$(var.Profile)\nu_plugin_binaryview.exe'
|
|
||||||
KeyPath='yes'/>
|
|
||||||
</Component> -->
|
|
||||||
<Component Id='binary2' Guid='*' Win64='$(var.Win64)'>
|
|
||||||
<File
|
|
||||||
Id='exe2'
|
|
||||||
Name='nu_plugin_inc.exe'
|
|
||||||
DiskId='1'
|
|
||||||
Source='target\$(var.Profile)\nu_plugin_inc.exe'
|
|
||||||
KeyPath='yes'/>
|
|
||||||
</Component>
|
|
||||||
<!-- <Component Id='binary3' Guid='*' Win64='$(var.Win64)'>
|
|
||||||
<File
|
|
||||||
Id='exe3'
|
|
||||||
Name='nu_plugin_start.exe'
|
|
||||||
DiskId='1'
|
|
||||||
Source='target\$(var.Profile)\nu_plugin_start.exe'
|
|
||||||
KeyPath='yes'/>
|
|
||||||
</Component>
|
|
||||||
<Component Id='binary4' Guid='*' Win64='$(var.Win64)'>
|
|
||||||
<File
|
|
||||||
Id='exe4'
|
|
||||||
Name='nu_plugin_textview.exe'
|
|
||||||
DiskId='1'
|
|
||||||
Source='target\$(var.Profile)\nu_plugin_textview.exe'
|
|
||||||
KeyPath='yes'/>
|
|
||||||
</Component>
|
|
||||||
<Component Id='binary5' Guid='*' Win64='$(var.Win64)'>
|
|
||||||
<File
|
|
||||||
Id='exe5'
|
|
||||||
Name='nu_plugin_tree.exe'
|
|
||||||
DiskId='1'
|
|
||||||
Source='target\$(var.Profile)\nu_plugin_tree.exe'
|
|
||||||
KeyPath='yes'/>
|
|
||||||
</Component> -->
|
|
||||||
<!-- Downloaded from here https://github.com/jftuga/less-Windows/releases/download/less-v562.0/less.exe -->
|
|
||||||
<Component Id='binary6' Guid='*' Win64='$(var.Win64)'>
|
|
||||||
<File
|
|
||||||
Id='exe6'
|
|
||||||
Name='less.exe'
|
|
||||||
DiskId='1'
|
|
||||||
Source='output\less.exe'
|
|
||||||
KeyPath='yes'/>
|
|
||||||
</Component>
|
|
||||||
<!-- <Component Id='binary7' Guid='*' Win64='$(var.Win64)'>
|
|
||||||
<File
|
|
||||||
Id='exe7'
|
|
||||||
Name='nu_plugin_match.exe'
|
|
||||||
DiskId='1'
|
|
||||||
Source='target\$(var.Profile)\nu_plugin_match.exe'
|
|
||||||
KeyPath='yes'/>
|
|
||||||
</Component> -->
|
|
||||||
<Component Id='binary8' Guid='*' Win64='$(var.Win64)'>
|
|
||||||
<File
|
|
||||||
Id='exe8'
|
|
||||||
Name='README.txt'
|
|
||||||
DiskId='1'
|
|
||||||
Source='output\README.txt'
|
|
||||||
KeyPath='yes'/>
|
|
||||||
</Component>
|
|
||||||
<Component Id='binary9' Guid='*' Win64='$(var.Win64)'>
|
|
||||||
<File
|
|
||||||
Id='exe9'
|
|
||||||
Name='LICENSE'
|
|
||||||
DiskId='1'
|
|
||||||
Source='output\LICENSE'
|
|
||||||
KeyPath='yes'/>
|
|
||||||
</Component>
|
|
||||||
<Component Id='binary10' Guid='*' Win64='$(var.Win64)'>
|
|
||||||
<File
|
|
||||||
Id='exe10'
|
|
||||||
Name='LICENSE-for-less.txt'
|
|
||||||
DiskId='1'
|
|
||||||
Source='output\LICENSE-for-less.txt'
|
|
||||||
KeyPath='yes'/>
|
|
||||||
</Component>
|
|
||||||
<!-- <Component Id='binary11' Guid='*' Win64='$(var.Win64)'>
|
|
||||||
<File
|
|
||||||
Id='exe11'
|
|
||||||
Name='nu_plugin_s3.exe'
|
|
||||||
DiskId='1'
|
|
||||||
Source='target\$(var.Profile)\nu_plugin_s3.exe'
|
|
||||||
KeyPath='yes'/>
|
|
||||||
</Component>
|
|
||||||
<Component Id='binary12' Guid='*' Win64='$(var.Win64)'>
|
|
||||||
<File
|
|
||||||
Id='exe12'
|
|
||||||
Name='nu_plugin_chart_bar.exe'
|
|
||||||
DiskId='1'
|
|
||||||
Source='target\$(var.Profile)\nu_plugin_chart_bar.exe'
|
|
||||||
KeyPath='yes'/>
|
|
||||||
</Component>
|
|
||||||
<Component Id='binary13' Guid='*' Win64='$(var.Win64)'>
|
|
||||||
<File
|
|
||||||
Id='exe13'
|
|
||||||
Name='nu_plugin_chart_line.exe'
|
|
||||||
DiskId='1'
|
|
||||||
Source='target\$(var.Profile)\nu_plugin_chart_line.exe'
|
|
||||||
KeyPath='yes'/>
|
|
||||||
</Component> -->
|
|
||||||
<Component Id='binary14' Guid='*' Win64='$(var.Win64)'>
|
|
||||||
<File
|
|
||||||
Id='exe14'
|
|
||||||
Name='nu_plugin_query.exe'
|
|
||||||
DiskId='1'
|
|
||||||
Source='target\$(var.Profile)\nu_plugin_query.exe'
|
|
||||||
KeyPath='yes'/>
|
|
||||||
</Component>
|
|
||||||
<!-- <Component Id='binary15' Guid='*' Win64='$(var.Win64)'>
|
|
||||||
<File
|
|
||||||
Id='exe15'
|
|
||||||
Name='nu_plugin_from_bson.exe'
|
|
||||||
DiskId='1'
|
|
||||||
Source='target\$(var.Profile)\nu_plugin_from_bson.exe'
|
|
||||||
KeyPath='yes'/>
|
|
||||||
</Component>
|
|
||||||
<Component Id='binary16' Guid='*' Win64='$(var.Win64)'>
|
|
||||||
<File
|
|
||||||
Id='exe16'
|
|
||||||
Name='nu_plugin_to_bson.exe'
|
|
||||||
DiskId='1'
|
|
||||||
Source='target\$(var.Profile)\nu_plugin_to_bson.exe'
|
|
||||||
KeyPath='yes'/>
|
|
||||||
</Component>
|
|
||||||
<Component Id='binary17' Guid='*' Win64='$(var.Win64)'>
|
|
||||||
<File
|
|
||||||
Id='exe17'
|
|
||||||
Name='nu_plugin_from_sqlite.exe'
|
|
||||||
DiskId='1'
|
|
||||||
Source='target\$(var.Profile)\nu_plugin_from_sqlite.exe'
|
|
||||||
KeyPath='yes'/>
|
|
||||||
</Component>
|
|
||||||
<Component Id='binary18' Guid='*' Win64='$(var.Win64)'>
|
|
||||||
<File
|
|
||||||
Id='exe18'
|
|
||||||
Name='nu_plugin_to_sqlite.exe'
|
|
||||||
DiskId='1'
|
|
||||||
Source='target\$(var.Profile)\nu_plugin_to_sqlite.exe'
|
|
||||||
KeyPath='yes'/>
|
|
||||||
</Component>
|
|
||||||
<Component Id='binary19' Guid='*' Win64='$(var.Win64)'>
|
|
||||||
<File
|
|
||||||
Id='exe19'
|
|
||||||
Name='nu_plugin_selector.exe'
|
|
||||||
DiskId='1'
|
|
||||||
Source='target\$(var.Profile)\nu_plugin_selector.exe'
|
|
||||||
KeyPath='yes'/>
|
|
||||||
</Component>
|
|
||||||
<Component Id='binary20' Guid='*' Win64='$(var.Win64)'>
|
|
||||||
<File
|
|
||||||
Id='exe20'
|
|
||||||
Name='nu_plugin_query_json.exe'
|
|
||||||
DiskId='1'
|
|
||||||
Source='target\$(var.Profile)\nu_plugin_query_json.exe'
|
|
||||||
KeyPath='yes'/>
|
|
||||||
</Component>
|
|
||||||
<Component Id='binary21' Guid='*' Win64='$(var.Win64)'>
|
|
||||||
<File
|
|
||||||
Id='exe21'
|
|
||||||
Name='nu_plugin_example.exe'
|
|
||||||
DiskId='1'
|
|
||||||
Source='target\$(var.Profile)\nu_plugin_example.exe'
|
|
||||||
KeyPath='yes'/>
|
|
||||||
</Component> -->
|
|
||||||
<Component Id='binary22' Guid='*' Win64='$(var.Win64)'>
|
|
||||||
<File
|
|
||||||
Id='exe22'
|
|
||||||
Name='nu_plugin_gstat.exe'
|
|
||||||
DiskId='1'
|
|
||||||
Source='target\$(var.Profile)\nu_plugin_gstat.exe'
|
|
||||||
KeyPath='yes'/>
|
|
||||||
</Component>
|
|
||||||
<!--
|
|
||||||
<Component Id='binary23' Guid='*' Win64='$(var.Win64)'>
|
|
||||||
<File
|
|
||||||
Id='exe23'
|
|
||||||
Name='nu_plugin_stream_example.exe'
|
|
||||||
DiskId='1'
|
|
||||||
Source='target\$(var.Profile)\nu_plugin_stream_example.exe'
|
|
||||||
KeyPath='yes'/>
|
|
||||||
</Component>
|
|
||||||
-->
|
|
||||||
<Component Id='binary24' Guid='*' Win64='$(var.Win64)'>
|
|
||||||
<File
|
|
||||||
Id='exe24'
|
|
||||||
Name='nu_plugin_polars.exe'
|
|
||||||
DiskId='1'
|
|
||||||
Source='target\$(var.Profile)\nu_plugin_polars.exe'
|
|
||||||
KeyPath='yes'/>
|
|
||||||
</Component>
|
|
||||||
</Directory>
|
|
||||||
</Directory>
|
|
||||||
</Directory>
|
|
||||||
|
|
||||||
<Directory Id='LocalAppDataFolder'>
|
|
||||||
<Directory Id='AppDataMicrosoftFolder' Name='Microsoft'>
|
|
||||||
<Directory Id='AppDataWindowsTerminalFolder' Name='Windows Terminal'>
|
|
||||||
<Directory Id='WindowsTerminalProfileFolder' Name='Fragments'>
|
|
||||||
<Directory Id='WindowsTerminalProfileAppFolder' Name='nu'>
|
|
||||||
<Component Id='WindowsTerminalProfile' Guid='957239F4-7B87-4399-9F91-7DF2ABE5ED8B' Win64='$(var.Win64)'>
|
|
||||||
<File
|
|
||||||
Id='WindowsTerminalProfileFile'
|
|
||||||
Name='nu.json'
|
|
||||||
DiskId='1'
|
|
||||||
Source='wix\windows-terminal-profile.json'
|
|
||||||
System='no'/>
|
|
||||||
<RegistryKey Root='HKCU' Key='Software\nu'>
|
|
||||||
<RegistryValue Name='WindowsTerminalProfile' Value='1' Type='integer' KeyPath='yes'/>
|
|
||||||
</RegistryKey>
|
|
||||||
<RemoveFolder Id='RemoveWindowsTerminalProfileFolder1' Directory='WindowsTerminalProfileAppFolder' On='uninstall'/>
|
|
||||||
<RemoveFolder Id='RemoveWindowsTerminalProfileFolder2' Directory='WindowsTerminalProfileFolder' On='uninstall'/>
|
|
||||||
<RemoveFolder Id='RemoveWindowsTerminalProfileFolder3' Directory='AppDataWindowsTerminalFolder' On='uninstall'/>
|
|
||||||
<RemoveFolder Id='RemoveWindowsTerminalProfileFolder4' Directory='AppDataMicrosoftFolder' On='uninstall'/>
|
|
||||||
</Component>
|
|
||||||
</Directory>
|
|
||||||
</Directory>
|
|
||||||
</Directory>
|
|
||||||
</Directory>
|
|
||||||
</Directory>
|
|
||||||
</Directory>
|
</Directory>
|
||||||
|
</Directory>
|
||||||
|
|
||||||
<Feature
|
<!-- Windows Terminal Profile Directories -->
|
||||||
Id='Binaries'
|
<Directory Id="AppDataMicrosoftFolder" Name="Microsoft">
|
||||||
Title='Application'
|
<Directory Id="AppDataWindowsTerminalFolder" Name="Windows Terminal">
|
||||||
Description='Installs all binaries and the license.'
|
<Directory Id="WindowsTerminalProfileFolder" Name="Fragments">
|
||||||
Level='1'
|
<Directory Id="WindowsTerminalProfileAppFolder" Name="nu">
|
||||||
ConfigurableDirectory='APPLICATIONFOLDER'
|
<Component Id="WindowsTerminalProfile" Guid="957239F4-7B87-4399-9F91-7DF2ABE5ED8B">
|
||||||
AllowAdvertise='no'
|
<File Id="WindowsTerminalProfileFile"
|
||||||
Display='expand'
|
Name="nu.json"
|
||||||
Absent='disallow'>
|
Source="$(var.ProjectDir)\windows-terminal-profile.json" />
|
||||||
<!--
|
<RegistryValue Root="HKCU"
|
||||||
Comment out or remove the following `ComponentRef` tag to remove
|
Key="Software\nu"
|
||||||
the license sidecar file from the installer.
|
Name="WindowsTerminalProfile"
|
||||||
-->
|
Value="1"
|
||||||
<ComponentRef Id='License'/>
|
Type="integer"
|
||||||
|
KeyPath="yes" />
|
||||||
|
<RemoveFolder Id="RemoveWindowsTerminalProfileFolderA" Directory="WindowsTerminalProfileAppFolder" On="uninstall" />
|
||||||
|
<RemoveFolder Id="RemoveWindowsTerminalProfileFolderB" Directory="WindowsTerminalProfileFolder" On="uninstall" />
|
||||||
|
<RemoveFolder Id="RemoveWindowsTerminalProfileFolderC" Directory="AppDataWindowsTerminalFolder" On="uninstall" />
|
||||||
|
<RemoveFolder Id="RemoveWindowsTerminalProfileFolderD" Directory="AppDataMicrosoftFolder" On="uninstall" />
|
||||||
|
</Component>
|
||||||
|
</Directory>
|
||||||
|
</Directory>
|
||||||
|
</Directory>
|
||||||
|
</Directory>
|
||||||
|
</StandardDirectory>
|
||||||
|
|
||||||
<ComponentRef Id='icon0'/>
|
<ComponentGroup Id="NushellBinaries" Directory="BINDIR">
|
||||||
|
<Component Id="Nu_Main" Guid="*">
|
||||||
|
<File Id="nu.exe" Source="$(var.SourceDir)\nu.exe" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
<Component Id="Nu_Plugin_Inc" Guid="*">
|
||||||
|
<File Id="nu_plugin_inc.exe" Source="$(var.SourceDir)\nu_plugin_inc.exe" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
<Component Id="Nu_Plugin_Gstat" Guid="*">
|
||||||
|
<File Id="nu_plugin_gstat.exe" Source="$(var.SourceDir)\nu_plugin_gstat.exe" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
<Component Id="Nu_Plugin_Query" Guid="*">
|
||||||
|
<File Id="nu_plugin_query.exe" Source="$(var.SourceDir)\nu_plugin_query.exe" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
<Component Id="Nu_Plugin_Polars" Guid="*">
|
||||||
|
<File Id="nu_plugin_polars.exe" Source="$(var.SourceDir)\nu_plugin_polars.exe" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
<Component Id="Nu_Plugin_Formats" Guid="*">
|
||||||
|
<File Id="nu_plugin_formats.exe" Source="$(var.SourceDir)\nu_plugin_formats.exe" KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
</ComponentGroup>
|
||||||
|
|
||||||
<ComponentRef Id='binary0'/>
|
<!-- License and Icon in main directory -->
|
||||||
<!-- <ComponentRef Id='binary1'/> -->
|
<ComponentGroup Id="NushellResources" Directory="INSTALLDIR">
|
||||||
<ComponentRef Id='binary2'/>
|
<Component Id="Nu_Icon" Guid="*">
|
||||||
<!-- <ComponentRef Id='binary3'/>
|
<File Id="nu.ico" Source="$(var.ProjectDir)\nu.ico" KeyPath="yes" />
|
||||||
<ComponentRef Id='binary4'/>
|
</Component>
|
||||||
<ComponentRef Id='binary5'/> -->
|
<Component Id="Nu_Readme" Guid="*">
|
||||||
<ComponentRef Id='binary6'/>
|
<File Id="README.txt" Source="$(var.ProjectDir)\README.txt" KeyPath="yes" />
|
||||||
<!-- <ComponentRef Id='binary7'/> -->
|
</Component>
|
||||||
<ComponentRef Id='binary8'/>
|
<Component Id="Nu_License" Guid="*">
|
||||||
<ComponentRef Id='binary9'/>
|
<File Id="License.rtf" Source="$(var.ProjectDir)\License.rtf" KeyPath="yes" />
|
||||||
<ComponentRef Id='binary10'/>
|
</Component>
|
||||||
<!-- <ComponentRef Id='binary11'/>
|
</ComponentGroup>
|
||||||
<ComponentRef Id='binary12'/>
|
|
||||||
<ComponentRef Id='binary13'/> -->
|
|
||||||
<ComponentRef Id='binary14'/>
|
|
||||||
<!-- <ComponentRef Id='binary15'/>
|
|
||||||
<ComponentRef Id='binary16'/>
|
|
||||||
<ComponentRef Id='binary17'/>
|
|
||||||
<ComponentRef Id='binary18'/>
|
|
||||||
<ComponentRef Id='binary19'/>
|
|
||||||
<ComponentRef Id='binary20'/>
|
|
||||||
<ComponentRef Id='binary21'/> -->
|
|
||||||
<ComponentRef Id='binary22'/>
|
|
||||||
<!-- <ComponentRef Id='binary23'/> -->
|
|
||||||
<ComponentRef Id='binary24'/>
|
|
||||||
|
|
||||||
<Feature
|
<!-- Environment PATH variable components - separated for per-user and per-machine -->
|
||||||
Id='Environment'
|
<DirectoryRef Id="BINDIR">
|
||||||
Title='PATH Environment Variable'
|
<!-- Per-user PATH component -->
|
||||||
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.'
|
<Component Id="EnvironmentPathUser" Guid="{D6A3A7B2-1F3A-4B6A-8A3B-3A7B2D6A3A7B}" Condition="MSIINSTALLPERUSER=1">
|
||||||
Level='1'
|
<Environment Id="PATHUser"
|
||||||
Absent='allow'>
|
Name="PATH"
|
||||||
<ComponentRef Id='Path'/>
|
Value="[BINDIR]"
|
||||||
</Feature>
|
Permanent="no"
|
||||||
|
Part="last"
|
||||||
|
Action="set"
|
||||||
|
System="no" />
|
||||||
|
<RegistryValue Root="HKCU"
|
||||||
|
Key="Software\nu"
|
||||||
|
Name="installed"
|
||||||
|
Type="integer"
|
||||||
|
Value="1"
|
||||||
|
KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
|
||||||
<Feature
|
<!-- Per-machine PATH component -->
|
||||||
Id='WindowsTerminalProfile'
|
<Component Id="EnvironmentPathMachine" Guid="{47781325-8A2B-4F8D-A058-9A2C4136E25F}" Condition="ALLUSERS=1">
|
||||||
Title='Windows Terminal Profile'
|
<Environment Id="PATHMachine"
|
||||||
Description='Add [ProductName] profile to Windows Terminal.'
|
Name="PATH"
|
||||||
Level='1'
|
Value="[BINDIR]"
|
||||||
Absent='allow'>
|
Permanent="no"
|
||||||
<ComponentRef Id='WindowsTerminalProfile'/>
|
Part="last"
|
||||||
</Feature>
|
Action="set"
|
||||||
</Feature>
|
System="yes" />
|
||||||
|
<RegistryValue Root="HKLM"
|
||||||
|
Key="Software\nu"
|
||||||
|
Name="installed"
|
||||||
|
Type="integer"
|
||||||
|
Value="1"
|
||||||
|
KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
</DirectoryRef>
|
||||||
|
|
||||||
<SetProperty Id='ARPINSTALLLOCATION' Value='[APPLICATIONFOLDER]' After='CostFinalize'/>
|
<!-- Main feature set -->
|
||||||
|
<Feature Id="ProductFeature" Title="Nushell" Level="1">
|
||||||
|
<ComponentGroupRef Id="NushellBinaries" />
|
||||||
|
<ComponentGroupRef Id="NushellResources" />
|
||||||
|
<ComponentRef Id="EnvironmentPathUser" />
|
||||||
|
<ComponentRef Id="EnvironmentPathMachine" />
|
||||||
|
</Feature>
|
||||||
|
|
||||||
<Icon Id='ProductICO' SourceFile='assets/nu_logo.ico'/>
|
<!-- Windows Terminal Profile Feature -->
|
||||||
<Property Id='ARPPRODUCTICON' Value='ProductICO' />
|
<Feature Id="WindowsTerminalProfile"
|
||||||
|
Title="Windows Terminal Profile"
|
||||||
|
Description="Add $(var.ProductName) profile to Windows Terminal."
|
||||||
|
Level="1">
|
||||||
|
<ComponentRef Id="WindowsTerminalProfile" />
|
||||||
|
</Feature>
|
||||||
|
|
||||||
<Property Id='ARPHELPLINK' Value='https://www.nushell.sh/book/'/>
|
<!-- Load Advanced UI -->
|
||||||
|
<WixVariable Id="WixUILicenseRtf" Value="$(var.ProjectDir)\License.rtf" />
|
||||||
|
<ui:WixUI Id="WixUI_Advanced" />
|
||||||
|
|
||||||
<!-- for Value, see https://learn.microsoft.com/en-ca/windows/win32/msi/formatted -->
|
<!-- Windows Version Check -->
|
||||||
<SetProperty
|
<Launch Condition="VersionNT >= 601" Message="This application requires Windows 7 or later." />
|
||||||
Id="ReplacePathsInWindowsTerminalProfile"
|
|
||||||
Sequence="execute"
|
|
||||||
Value=""[#exe0]" -c "let doc = (open `[#WindowsTerminalProfileFile]` | update profiles.commandline `[#exe0]` | update profiles.icon `[#icon0]`); $doc | save -f `[#WindowsTerminalProfileFile]`""
|
|
||||||
After='CostFinalize'/>
|
|
||||||
<CustomAction
|
|
||||||
Id="ReplacePathsInWindowsTerminalProfile"
|
|
||||||
BinaryKey="WixCA"
|
|
||||||
DllEntry="CAQuietExec"
|
|
||||||
Execute="deferred"
|
|
||||||
Return="check"
|
|
||||||
Impersonate="yes"/>
|
|
||||||
<InstallExecuteSequence>
|
|
||||||
<Custom Action='ReplacePathsInWindowsTerminalProfile' Before='InstallFinalize'>
|
|
||||||
<!-- Run the custom action if the feature is enabled -->
|
|
||||||
<![CDATA[&WindowsTerminalProfile=3 OR (!WindowsTerminalProfile=3 AND REINSTALL<>"")]]>
|
|
||||||
</Custom>
|
|
||||||
</InstallExecuteSequence>
|
|
||||||
|
|
||||||
<UI>
|
<!-- Arch checking -->
|
||||||
<UIRef Id='WixUI_FeatureTree'/>
|
<?if $(sys.BUILDARCH) = x64 ?>
|
||||||
<!--
|
<Launch Condition="VersionNT64" Message="This installation package is only supported on 64-bit Windows." />
|
||||||
Disabling the EULA dialog in the installer is a two step process:
|
<?endif?>
|
||||||
|
|
||||||
1. Uncomment the following two `Publish` tags
|
<?if $(sys.BUILDARCH) = arm64 ?>
|
||||||
2. Comment out or remove the `<WiXVariable Id='WixUILicenseRtf'...` tag further down
|
<Launch Condition="ProcessorArchitecture = 'ARM64'" Message="This installation package is only supported on ARM64 Windows." />
|
||||||
|
<?endif?>
|
||||||
|
|
||||||
-->
|
<SetProperty Id="INSTALLDIR"
|
||||||
<!--<Publish Dialog='WelcomeDlg' Control='Next' Event='NewDialog' Value='CustomizeDlg' Order='99'>1</Publish>-->
|
Action="SetINSTALLDIR_User"
|
||||||
<!--<Publish Dialog='CustomizeDlg' Control='Back' Event='NewDialog' Value='WelcomeDlg' Order='99'>1</Publish>-->
|
Value="[INSTALLDIR_USER]"
|
||||||
|
After="AppSearch"
|
||||||
|
Condition="MSIINSTALLPERUSER=1"
|
||||||
|
Sequence="both" />
|
||||||
|
<SetProperty Id="BINDIR"
|
||||||
|
Action="SetBINDIR_User"
|
||||||
|
Value="[BINDIR_USER]"
|
||||||
|
After="AppSearch"
|
||||||
|
Condition="MSIINSTALLPERUSER=1"
|
||||||
|
Sequence="both" />
|
||||||
|
|
||||||
</UI>
|
<!-- If Installed with ALLUSERS=1 set the default Install dir to ProgramFiles64Folder -->
|
||||||
|
<SetProperty Id="INSTALLDIR"
|
||||||
|
Action="SetINSTALLDIR_Machine"
|
||||||
|
Value="[ProgramFiles64Folder][ApplicationFolderName]"
|
||||||
|
After="AppSearch"
|
||||||
|
Condition="ALLUSERS=1"
|
||||||
|
Sequence="both" />
|
||||||
|
<SetProperty Id="BINDIR"
|
||||||
|
Action="SetBINDIR_Machine"
|
||||||
|
Value="[ProgramFiles64Folder][ApplicationFolderName]\bin"
|
||||||
|
After="AppSearch"
|
||||||
|
Condition="ALLUSERS=1"
|
||||||
|
Sequence="both" />
|
||||||
|
|
||||||
<!--
|
<!-- Custom Action for Windows Terminal Profile -->
|
||||||
Disabling the EULA dialog in the installer requires commenting out
|
<SetProperty Id="ReplacePathsInWindowsTerminalProfile"
|
||||||
or removing the following `WixVariable` tag
|
Sequence="execute"
|
||||||
-->
|
Value=""[#nu.exe]" -c "let doc = (open `[#WindowsTerminalProfileFile]` | update profiles.commandline `[#nu.exe]` | update profiles.icon `[#nu.ico]`); $doc | save -f `[#WindowsTerminalProfileFile]`""
|
||||||
<WixVariable Id='WixUILicenseRtf' Value='wix\License.rtf'/>
|
After="CostFinalize" />
|
||||||
|
|
||||||
|
<CustomAction Id="ReplacePathsInWindowsTerminalProfile"
|
||||||
|
Return="check"
|
||||||
|
Impersonate="yes"
|
||||||
|
Execute="deferred"
|
||||||
|
DllEntry="WixQuietExec"
|
||||||
|
BinaryRef="Wix4UtilCA_$(sys.BUILDARCHSHORT)" />
|
||||||
|
|
||||||
<!--
|
<InstallExecuteSequence>
|
||||||
Uncomment the next `WixVariable` tag to customize the installer's
|
<Custom Action="ReplacePathsInWindowsTerminalProfile" Before="InstallFinalize"
|
||||||
Graphical User Interface (GUI) and add a custom banner image across
|
Condition="(&WindowsTerminalProfile=3) OR ((!WindowsTerminalProfile=3) AND (REINSTALL<>""))" />
|
||||||
the top of each screen. See the WiX Toolset documentation for details
|
</InstallExecuteSequence>
|
||||||
about customization.
|
</Package>
|
||||||
|
|
||||||
The banner BMP dimensions are 493 x 58 pixels.
|
|
||||||
-->
|
|
||||||
<!--<WixVariable Id='WixUIBannerBmp' Value='wix\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='wix\Dialog.bmp'/>-->
|
|
||||||
|
|
||||||
</Product>
|
|
||||||
|
|
||||||
</Wix>
|
</Wix>
|
||||||
|
BIN
wix/nu.ico
Normal file
BIN
wix/nu.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 7.3 KiB |
Loading…
x
Reference in New Issue
Block a user