Skip to content

fix(ci): use rustls-native-roots for Windows CI build#8822

Merged
jdx merged 3 commits intomainfrom
fix/windows-ci-rustls-tls
Mar 30, 2026
Merged

fix(ci): use rustls-native-roots for Windows CI build#8822
jdx merged 3 commits intomainfrom
fix/windows-ci-rustls-tls

Conversation

@jdx
Copy link
Copy Markdown
Owner

@jdx jdx commented Mar 30, 2026

Summary

  • Switch Windows CI build-windows job from native-tls (default) to rustls-native-roots, matching what release builds already use (scripts/build-tarball.ps1)
  • Fixes windows-e2e zig mach test failure caused by pkg.hexops.org breaking TLS 1.2 support around 2026-03-27 (SEC_E_ILLEGAL_MESSAGE / os error -2146893018)
  • rustls handles TLS 1.3 negotiation correctly, while SChannel's native-tls fails on the broken TLS 1.2 handshake

Root cause

pkg.machengine.org 307-redirects to pkg.hexops.org, which broke its TLS 1.2 config. Confirmed locally:

  • PowerShell (SChannel) + TLS 1.2 → Could not create SSL/TLS secure channel
  • PowerShell (SChannel) + TLS 1.3 → 200 OK
  • curl (OpenSSL) → works fine

Test plan

  • windows-e2e CI job passes (zig mach test)
  • windows-unit CI job still passes (unchanged, still uses default features)

🤖 Generated with Claude Code


Note

Medium Risk
Moderate risk because it changes TLS backend/feature composition for Windows builds and adjusts dependency feature flags, which could affect networking and signature verification behavior. Scope is limited to CI build configuration and vfox crate feature definitions.

Overview
Windows CI build-windows now builds mise with --no-default-features and explicitly enables rustls-native-roots (plus vfox/vendored-lua and self_update) instead of relying on default native-tls.

In crates/vfox, sigstore-verification is changed to default-features = false and its TLS-related features are explicitly tied into native-tls, rustls, and rustls-native-roots so the crate’s TLS backend stays consistent.

Written by Cursor Bugbot for commit 4d2866f. This will update automatically on new commits. Configure here.

pkg.machengine.org redirects to pkg.hexops.org which broke TLS 1.2
support around 2026-03-27, causing native-tls (SChannel) to fail with
SEC_E_ILLEGAL_MESSAGE on Windows. The release build already uses
rustls-native-roots—this aligns the CI test build to match.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@gemini-code-assist
Copy link
Copy Markdown
Contributor

Note

Gemini is unable to generate a review for this pull request due to the file types involved not being currently supported.

@jdx jdx enabled auto-merge (squash) March 30, 2026 16:58
@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented Mar 30, 2026

Greptile Summary

This PR fixes a Windows CI failure caused by pkg.hexops.org (the redirect target of pkg.machengine.org) dropping TLS 1.2 support around 2026-03-27. The fix has two parts: switching the build-windows CI job to build with rustls-native-roots instead of the default native-tls, and correcting the vfox crate to prevent sigstore-verification from silently pulling in native-tls regardless of the chosen TLS backend.

  • .github/workflows/test.yml: build-windows now passes --no-default-features --features rustls-native-roots,vfox/vendored-lua,self_update, which mirrors the release build in scripts/build-tarball.ps1 and routes all TLS through rustls (capable of TLS 1.3) instead of SChannel (which fails on the broken TLS 1.2 handshake).
  • crates/vfox/Cargo.toml: sigstore-verification is changed to default-features = false, and each of the three TLS feature variants (native-tls, rustls, rustls-native-roots) now explicitly activates the matching feature on sigstore-verification. Previously, even when building vfox with rustls-native-roots, the sigstore-verification crate would still link in its default native-tls backend due to the missing default-features = false.
  • The mise-shim crate is unaffected — it has zero external dependencies and makes no network requests, so the separate cargo build -p mise-shim without --no-default-features is safe.

Confidence Score: 5/5

Safe to merge — targeted, minimal changes that align the CI build with the existing release configuration.

Both changes are correct and well-contained. The workflow change exactly mirrors what release builds already use, and the Cargo.toml fix is the standard pattern for opting out of a dependency's default TLS features. No logic, APIs, or user-facing behaviour are altered. The mise-shim crate has zero external dependencies so it is unaffected by the feature flag change. No P0 or P1 findings.

No files require special attention.

Important Files Changed

Filename Overview
.github/workflows/test.yml Switches the build-windows CI job from default cargo build (using native-tls) to --no-default-features --features rustls-native-roots,vfox/vendored-lua,self_update, matching the release build configuration and fixing TLS 1.2 failures on Windows.
crates/vfox/Cargo.toml Disables default features on sigstore-verification and explicitly threads the TLS backend (native-tls, rustls, rustls-native-roots) into the sigstore-verification dependency via each vfox feature, preventing accidental native-tls inclusion when building with a rustls variant.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    subgraph Before["Before (cargo build - default native-tls)"]
        A1[mise crate\nnative-tls feature] --> B1[reqwest/native-tls]
        A1 --> C1[vfox/native-tls]
        C1 --> D1[sigstore-verification\ndefault = native-tls ALWAYS]
        D1 -->|SChannel TLS 1.2| E1[pkg.hexops.org\nBROKEN TLS 1.2]
        E1 -->|SEC_E_ILLEGAL_MESSAGE| F1[CI Failure]
    end

    subgraph After["After (--no-default-features --features rustls-native-roots,...)"]
        A2[mise crate\nrustls-native-roots feature] --> B2[reqwest/rustls-tls-native-roots]
        A2 --> C2[vfox/rustls-native-roots]
        C2 --> D2[sigstore-verification\ndefault-features=false\n+ rustls-native-roots]
        D2 -->|rustls TLS 1.3| E2[pkg.hexops.org]
        E2 -->|200 OK| F2[CI Passes]
    end
Loading

Reviews (3): Last reviewed commit: "[autofix.ci] apply automated fixes" | Re-trigger Greptile

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Mar 30, 2026

Hyperfine Performance

mise x -- echo

Command Mean [ms] Min [ms] Max [ms] Relative
mise-2026.3.17 x -- echo 18.6 ± 0.5 17.7 22.0 1.00
mise x -- echo 19.2 ± 0.9 18.1 28.7 1.04 ± 0.06

mise env

Command Mean [ms] Min [ms] Max [ms] Relative
mise-2026.3.17 env 18.4 ± 0.7 17.4 23.4 1.00
mise env 18.6 ± 0.4 17.6 20.6 1.01 ± 0.04

mise hook-env

Command Mean [ms] Min [ms] Max [ms] Relative
mise-2026.3.17 hook-env 18.6 ± 0.4 17.8 21.1 1.00
mise hook-env 19.1 ± 0.5 18.1 21.7 1.02 ± 0.03

mise ls

Command Mean [ms] Min [ms] Max [ms] Relative
mise-2026.3.17 ls 19.3 ± 0.5 18.1 22.3 1.00
mise ls 19.7 ± 0.5 18.6 22.0 1.02 ± 0.04

xtasks/test/perf

Command mise-2026.3.17 mise Variance
install (cached) 119ms 119ms +0%
ls (cached) 69ms 70ms -1%
bin-paths (cached) 69ms 68ms +1%
task-ls (cached) 714ms 726ms -1%

jdx and others added 2 commits March 30, 2026 12:55
sigstore-verification was included with default features in vfox,
which always enabled native-tls and reqwest/native-tls. This caused
the rustls-native-roots feature flag to be ineffective—both TLS
backends were compiled in, and reqwest defaults to native-tls when
both are present.

Now sigstore-verification uses default-features = false, with the
TLS backend passed through from vfox's own feature flags.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@jdx jdx merged commit d0bf9f8 into main Mar 30, 2026
35 checks passed
@jdx jdx deleted the fix/windows-ci-rustls-tls branch March 30, 2026 18:10
mise-en-dev added a commit that referenced this pull request Mar 31, 2026
### 🚀 Features

- **(python)** add GitHub provenance verification for prebuilt binaries
by @malept in [#8820](#8820)

### 🐛 Bug Fixes

- **(ci)** use rustls-native-roots for Windows CI build by @jdx in
[#8822](#8822)
- **(go)** improve version fetching logic to support deeply nested
sub-modules by @roele in [#8823](#8823)
- **(shim)** prevent infinite recursion when system shims dir is on PATH
by @andrewthauer in [#8816](#8816)
- go backend missing supports_lockfile_url() override by
@palootcenas-outreach in [#8790](#8790)
- strip shims from PATH in credential and template subprocesses by
@antonioacg in [#8802](#8802)

### 📚 Documentation

- fix typo in shims documentation for fish by @roele in
[#8798](#8798)

### 📦️ Dependency Updates

- update ghcr.io/jdx/mise:alpine docker digest to 3e6d001 by
@renovate[bot] in [#8794](#8794)
- pin dependencies by @renovate[bot] in
[#8793](#8793)

### 📦 Registry

- fix flutter version sorting by @roele in
[#8818](#8818)
- add svgo (npm:svgo) by @3w36zj6 in
[#8817](#8817)

### New Contributors

- @antonioacg made their first contribution in
[#8802](#8802)
- @palootcenas-outreach made their first contribution in
[#8790](#8790)

## 📦 Aqua Registry Updates

#### New Packages (3)

- [`RasKrebs/sonar`](https://github.com/RasKrebs/sonar)
- [`emacs-eask/cli`](https://github.com/emacs-eask/cli)
-
[`superradcompany/microsandbox`](https://github.com/superradcompany/microsandbox)

#### Updated Packages (4)

- [`dimo414/bkt`](https://github.com/dimo414/bkt)
- [`lxc/incus`](https://github.com/lxc/incus)
-
[`shinagawa-web/gomarklint`](https://github.com/shinagawa-web/gomarklint)
- [`updatecli/updatecli`](https://github.com/updatecli/updatecli)
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.

1 participant