Skip to content

ci(build): add Windows ARM64 to build workflow#203

Merged
ErikBjare merged 10 commits intoActivityWatch:masterfrom
TimeToBuildBob:ci/build-windows-arm64
Feb 23, 2026
Merged

ci(build): add Windows ARM64 to build workflow#203
ErikBjare merged 10 commits intoActivityWatch:masterfrom
TimeToBuildBob:ci/build-windows-arm64

Conversation

@TimeToBuildBob
Copy link
Copy Markdown
Contributor

@TimeToBuildBob TimeToBuildBob commented Feb 22, 2026

Summary

  • Adds windows-11-arm runner with aarch64-pc-windows-msvc target to the build matrix
  • Adds rustup target add step for non-default targets (same pattern as release.yml)
  • Ensures Windows ARM64 builds are verified on every push/PR before hitting it during a release

Follow-up from #202@ErikBjare requested build.yml also include Windows ARM64 so CI catches failures before release time.


Important

Adds Windows ARM64 to build workflow and ensures verification on every push/PR.

  • Build Workflow:
    • Adds windows-11-arm platform with aarch64-pc-windows-msvc target to build.yml matrix.
    • Adds rustup target add step for non-default targets in build.yml.
  • Verification:
    • Ensures Windows ARM64 builds are verified on every push/PR.

This description was created by Ellipsis for 978d12f. You can customize this summary. It will automatically update as commits are pushed.

Adds windows-11-arm runner with aarch64-pc-windows-msvc target to the
build matrix, matching what release.yml already has. This ensures
Windows ARM64 builds are verified on every push/PR, rather than
discovering failures during an actual release.

Also adds the `rustup target add` step for non-default targets.

Requested-by: @ErikBjare in ActivityWatch#202
Copy link
Copy Markdown

@ellipsis-dev ellipsis-dev Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Important

Looks good to me! 👍

Reviewed everything up to 978d12f in 6 seconds. Click for details.
  • Reviewed 24 lines of code in 1 files
  • Skipped 0 files when reviewing.
  • Skipped posting 0 draft comments. View those below.
  • Modify your settings and rules to customize what types of comments Ellipsis leaves. And don't forget to react with 👍 or 👎 to teach Ellipsis.

Workflow ID: wflow_MGw878EjE7iyoaLc

You can customize Ellipsis by changing your verbosity settings, reacting with 👍 or 👎, replying to comments, or adding code review rules.

@greptile-apps
Copy link
Copy Markdown

greptile-apps Bot commented Feb 22, 2026

Greptile Summary

Adds Windows ARM64 (windows-11-arm with aarch64-pc-windows-msvc target) to the build workflow matrix, mirroring the pattern already established in release.yml. This ensures ARM64 builds are verified on every push/PR, catching issues before release time.

  • Adds windows-11-arm platform with aarch64-pc-windows-msvc target to build matrix
  • Adds conditional rustup target add step for non-default targets (using matrix.args != null check)
  • Follows the exact same approach as release.yml for consistency

Confidence Score: 5/5

  • This PR is safe to merge with no risk
  • The changes perfectly mirror the existing pattern in release.yml that was already merged. The implementation is straightforward: adding a matrix entry and a conditional target installation step. No logical errors, correct syntax, and follows established conventions.
  • No files require special attention

Important Files Changed

Filename Overview
.github/workflows/build.yml Adds Windows ARM64 build support matching the existing release.yml pattern

Last reviewed commit: 978d12f

Copy link
Copy Markdown

@greptile-apps greptile-apps Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

1 file reviewed, no comments

Edit Code Review Agent Settings | Greptile

appdirs 0.2.0 pulls in ole32-sys and shell32-sys, which depend on
winapi 0.2.8. That crate lacks aarch64-pc-windows-msvc support —
it only defines ULONG_PTR/LONG_PTR for x86/x86_64 targets, causing
compile errors on Windows ARM64.

Replace appdirs with the dirs 5.0.1 crate, which uses windows-sys
(no winapi dependency at all) and has full ARM64 support.

Path equivalents used:
- user_config_dir("activitywatch") -> config_dir() / "activitywatch"
- user_data_dir("activitywatch")   -> data_dir() / "activitywatch"
- user_cache_dir("activitywatch")  -> cache_dir() / "activitywatch"
- user_log_dir (Windows) -> data_local_dir() / "activitywatch" / "Logs"
- user_log_dir (macOS)   -> home_dir() / "Library" / "Logs" / "activitywatch"

All resulting paths match the previous appdirs behavior.
@TimeToBuildBob
Copy link
Copy Markdown
Contributor Author

The Rust compilation succeeded for ARM64, but the bundling step failed because Tauri tried to download WiX toolset and hit a TLS error on the windows-11-arm runner:

failed to bundle project: `https://github.com/wixtoolset/wix3/.../wix314-binaries.zip: Unknown Scheme: cannot make HTTPS request because no TLS backend is configured`

Fixed in 58d9e98 by pre-downloading WiX with PowerShell (which has proper TLS) before the Tauri build step, and setting the WIX env var so Tauri uses the pre-installed copy instead of downloading it.

@TimeToBuildBob
Copy link
Copy Markdown
Contributor Author

Previous WiX pre-install fix (58d9e98) didn't work — the WIX env var isn't used by the tauri bundler. Instead, it checks its own cache directory (%LOCALAPPDATA%\tauri\WixTools314). Updated fix (ed504ca): now extracting WiX directly to that path, so the bundler finds it and skips the download.

The windows-11-arm runner lacks TLS in its default HTTP client, causing
tauri-bundler's internal downloader to fail for both WiX and NSIS.

Previous commit fixed WiX only. After WiX succeeded, the build failed at
NSIS download with the same 'no TLS backend' error. Now pre-downloads:
- WiX 3.14 binaries
- NSIS 3 base toolset
- nsis_tauri_utils plugin v0.4.1

All downloaded via PowerShell (which has proper TLS) into the exact cache
paths tauri-bundler expects (%LOCALAPPDATA%\tauri\).
@TimeToBuildBob
Copy link
Copy Markdown
Contributor Author

WiX MSI bundled successfully but NSIS bundler then hit the same TLS error downloading nsis-3.zip. Fixed in 0cb8714: now pre-downloads WiX, NSIS base, and nsis_tauri_utils plugin — all three things tauri-bundler tries to download that fail on windows-11-arm due to missing TLS.

CI triggered, should be the last TLS-related fix needed.

The nsis-3.zip contains files under nsis-3.08/ directory, but tauri-bundler
expects them at %LOCALAPPDATA%\tauri\NSIS. The bundler normally extracts
the zip then renames nsis-3.08 -> NSIS. Our pre-install step was missing
the rename, so tauri didn't find the cached NSIS and tried to re-download
(which fails due to TLS).
@TimeToBuildBob
Copy link
Copy Markdown
Contributor Author

Found the issue: the nsis-3.zip extracts as nsis-3.08/ but tauri-bundler expects NSIS/. In normal operation, the bundler does fs::rename("nsis-3.08", "NSIS") after extraction. My pre-install step was missing this rename.

Fixed in 73c94e5: now extracts the zip and renames nsis-3.08NSIS to match tauri's expected cache layout. CI triggered.

….2.7)

tauri-cli 2.2.7 expects nsis_tauri_utils v0.4.2 (not v0.4.1 from older
tauri-v2.2.2 tag). Hash mismatch caused bundler to try re-downloading,
which fails due to missing TLS on windows-11-arm runner.
@TimeToBuildBob
Copy link
Copy Markdown
Contributor Author

NSIS rename fix worked — NSIS directory was found (True). But the bundler then tried to re-download nsis_tauri_utils.dll because I pre-installed v0.4.1 while tauri-cli 2.2.7 expects v0.4.2 (different SHA). Hash mismatch → bundler tries to re-download → TLS failure.

Fixed in c67de59: updated plugin URL to v0.4.2 matching tauri-cli 2.2.7.

@TimeToBuildBob
Copy link
Copy Markdown
Contributor Author

Windows ARM64 CI failed with a transient npm ECONNRESET network error during npm install — not related to the build changes. The windows-11-arm runner appears to have unreliable npm connectivity.

All other jobs passed (ubuntu, ubuntu-arm, macOS, windows-latest). The Windows ARM64 job needs a re-run — I don't have admin rights to trigger it. @ErikBjare could you re-run the failed job?

@TimeToBuildBob
Copy link
Copy Markdown
Contributor Author

All CI checks are now green 🎉 The Windows ARM64 MSI build passed (20m35s). The npm ECONNRESET was indeed a transient runner issue — re-run succeeded. PR is ready for review/merge.

@ErikBjare ErikBjare merged commit 459b468 into ActivityWatch:master Feb 23, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants