diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f56018e..61e07d1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -90,6 +90,7 @@ jobs: - { runner: macos-latest, os: mac, arch: arm64 } - { runner: macos-15-intel, os: mac, arch: x64 } - { runner: windows-latest, os: win, arch: x64 } + - { runner: windows-11-arm, os: win, arch: arm64 } runs-on: ${{ matrix.runner }} defaults: run: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 037de08..000e05d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -65,6 +65,7 @@ jobs: - { runner: macos-latest, os: mac, arch: arm64 } - { runner: macos-15-intel, os: mac, arch: x64 } - { runner: windows-latest, os: win, arch: x64 } + - { runner: windows-11-arm, os: win, arch: arm64 } runs-on: ${{ matrix.runner }} defaults: run: diff --git a/README.md b/README.md index d13daba..ca20dd8 100644 --- a/README.md +++ b/README.md @@ -57,7 +57,7 @@ does this too on Linux when `$DISPLAY` or `$WAYLAND_DISPLAY` is set; macOS and Windows builds are on every release too: `hqterm-desktop-macos-{arm64,x64}.{dmg,zip}` (ad-hoc signed; the installer puts it in `~/Applications/hqterm.app` on a Mac -not reached over ssh) and `hqterm-desktop-windows-x64-setup.exe` / `.zip` +not reached over ssh) and `hqterm-desktop-windows-{x64,arm64}-setup.exe` / `.zip` (per-user, no admin; `install.ps1` runs it silently unless `$env:HQTERM_NO_DESKTOP` is set). Neither is notarized/code-signed yet, so the first launch of a browser download needs right-click > Open (macOS) or @@ -100,8 +100,8 @@ bun run build # single binary in dist/ Releases: push a `v*` tag matching package.json; CI builds `hqterm-{linux,darwin}-{amd64,arm64}`, `hqterm-desktop-linux-{x86_64,aarch64}.AppImage`, -`hqterm-desktop-macos-{arm64,x64}.{dmg,zip}`, `hqterm-desktop-windows-x64-setup.exe`, -`hqterm-desktop-windows-x64.zip` and `SHA256SUMS` (bump `desktop/package.json` too). +`hqterm-desktop-macos-{arm64,x64}.{dmg,zip}`, `hqterm-desktop-windows-{x64,arm64}-setup.exe`, +`hqterm-desktop-windows-{x64,arm64}.zip` and `SHA256SUMS` (bump `desktop/package.json` too). `site/index.html` is the hqterm.sh landing page and `site/docs.html` is https://hqterm.sh/docs; `install.sh` is served at https://hqterm.sh/install and diff --git a/desktop/package-lock.json b/desktop/package-lock.json index 9283fc8..2cb7f2a 100644 --- a/desktop/package-lock.json +++ b/desktop/package-lock.json @@ -1,12 +1,12 @@ { "name": "hqterm-desktop", - "version": "0.4.0", + "version": "0.4.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "hqterm-desktop", - "version": "0.4.0", + "version": "0.4.1", "license": "MIT", "dependencies": { "@xterm/addon-fit": "^0.11.0", diff --git a/desktop/package.json b/desktop/package.json index 4b0eca2..a2d015c 100644 --- a/desktop/package.json +++ b/desktop/package.json @@ -1,7 +1,7 @@ { "name": "hqterm-desktop", "productName": "hqterm", - "version": "0.4.0", + "version": "0.4.1", "description": "hqterm desktop: a terminal window that shows hqtui/qc images and HD emoji (xterm.js + node-pty).", "license": "MIT", "author": "Profullstack, Inc. ", diff --git a/install.ps1 b/install.ps1 index 5ea3784..40602d4 100644 --- a/install.ps1 +++ b/install.ps1 @@ -88,8 +88,8 @@ if (-not (Get-Service -Name sshd -ErrorAction SilentlyContinue)) { Say ' Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0' Say " Start-Service sshd; Set-Service sshd -StartupType Automatic" } -# The desktop app: a per-user NSIS installer, run silently. Windows on ARM -# runs the x64 build under emulation. +# The desktop app: a per-user NSIS installer, run silently. Native on ARM64; +# a release without an arm64 build falls back to x64 (runs under emulation). $desktop = -not $env:HQTERM_NO_DESKTOP -and -not $env:SSH_CONNECTION if ($desktop) { $hqBase = if ($env:HQTERM_VERSION) { @@ -97,13 +97,21 @@ if ($desktop) { } else { 'https://github.com/profullstack/hqterm/releases/latest/download' } - $asset = 'hqterm-desktop-windows-x64-setup.exe' + $asset = if ($arch -eq 'arm64') { 'hqterm-desktop-windows-arm64-setup.exe' } else { 'hqterm-desktop-windows-x64-setup.exe' } $tmp = Join-Path ([IO.Path]::GetTempPath()) ("hqterm-" + [Guid]::NewGuid()) New-Item -ItemType Directory -Path $tmp | Out-Null try { Say "downloading $asset from github.com/profullstack/hqterm" $file = Join-Path $tmp $asset - Invoke-WebRequest -UseBasicParsing "$hqBase/$asset" -OutFile $file + try { + Invoke-WebRequest -UseBasicParsing "$hqBase/$asset" -OutFile $file + } catch { + if ($arch -ne 'arm64') { throw } + $asset = 'hqterm-desktop-windows-x64-setup.exe' + Say "no arm64 desktop build in this release; using $asset (runs under emulation)" + $file = Join-Path $tmp $asset + Invoke-WebRequest -UseBasicParsing "$hqBase/$asset" -OutFile $file + } Invoke-WebRequest -UseBasicParsing "$hqBase/SHA256SUMS" -OutFile (Join-Path $tmp 'SHA256SUMS') $line = Get-Content (Join-Path $tmp 'SHA256SUMS') | Where-Object { $_ -match "\s\*?$([regex]::Escape($asset))$" } | Select-Object -First 1 if (-not $line) { throw "$asset is not listed in SHA256SUMS" } diff --git a/package.json b/package.json index a0f7369..7c8723b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "hqterm", - "version": "0.4.0", + "version": "0.4.1", "description": "Terminal session manager: persistent hqsh sessions with images and HD emoji, built on hqtui.", "license": "MIT", "private": true, diff --git a/site/docs.html b/site/docs.html index 1731d26..b430667 100644 --- a/site/docs.html +++ b/site/docs.html @@ -175,7 +175,8 @@

The desktop app

PlatformDownload macOS, Apple siliconhqterm-desktop-macos-arm64.dmg (or .zip) macOS, Intelhqterm-desktop-macos-x64.dmg (or .zip) - Windows 10/11 (x64; ARM64 runs it emulated)hqterm-desktop-windows-x64-setup.exe (per user, no admin), or the portable .zip + Windows 10/11, x64hqterm-desktop-windows-x64-setup.exe (per user, no admin), or the portable .zip + Windows 11, ARM64hqterm-desktop-windows-arm64-setup.exe, or the portable .zip Linux x86_64 / arm64x86_64 AppImage / aarch64 AppImage

The installers above (install and install.ps1) fetch the right one for you. The Mac and Windows builds are not signed by Apple or Microsoft yet. On a Mac, a .dmg downloaded in a browser opens after a right-click on hqterm, then Open (or xattr -dr com.apple.quarantine /Applications/hqterm.app); the curl installer needs none of that. On Windows, SmartScreen may ask once: More info, then Run anyway. Panes run your login shell; on Windows that is PowerShell 7 (pwsh) when installed, else Windows PowerShell, and remote panes need hqsh.exe on your PATH (install.ps1 puts it there).