Skip to content

nix: backport importCargoLock static.crates.io fix#441

Merged
kp-mariappan-ramasamy merged 1 commit into
mainfrom
fix-nix-builds
May 29, 2026
Merged

nix: backport importCargoLock static.crates.io fix#441
kp-mariappan-ramasamy merged 1 commit into
mainfrom
fix-nix-builds

Conversation

@kp-mariappan-ramasamy

@kp-mariappan-ramasamy kp-mariappan-ramasamy commented May 29, 2026

Copy link
Copy Markdown
Contributor

Description

crates.io now rejects requests with curl/* User-Agent, returning HTTP 403 on [https://crates.io/api/v1/crates/<name>/<ver>/download].
nixpkgs fetchurl calls curl with its default UA, so rustPlatform.buildRustPackage with cargoLock.lockFile (which routes through importCargoLock and fetches each crate tarball via fetchurl) fails on the first uncached crate, e.g.:

  trying https://crates.io/api/v1/crates/autocfg/1.5.1/download
  curl: (22) The requested URL returned error: 403

Override rustPlatform.importCargoLock with a copy of the upstream file patched to use https://static.crates.io/crates instead of the API host.
This mirrors NixOS/nixpkgs#524985.

Upstream references:

Drop this overlay once flake.lock is bumped to a nixpkgs-unstable revision that includes NixOS/nixpkgs#524985.

Motivation and Context

nix builds are failing in PRs

How Has This Been Tested?

nix builds are passing with this overlay

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)

Checklist:

  • My change requires a change to the documentation.
  • I have updated the documentation accordingly.
  • The correct base branch is being used, if not main

@github-actions

github-actions Bot commented May 29, 2026

Copy link
Copy Markdown

Code coverage summary for 2a5379e:

Filename                                                          Regions    Missed Regions     Cover   Functions  Missed Functions  Executed       Lines      Missed Lines     Cover    Branches   Missed Branches     Cover
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
lightway-app-utils/src/args/cipher.rs                                   5                 5     0.00%           1                 1     0.00%           5                 5     0.00%           0                 0         -
lightway-app-utils/src/args/connection_type.rs                          8                 8     0.00%           2                 2     0.00%           8                 8     0.00%           0                 0         -
lightway-app-utils/src/args/duration.rs                               121                22    81.82%          11                 5    54.55%          64                15    76.56%           0                 0         -
lightway-app-utils/src/args/ip_map.rs                                  27                27     0.00%           5                 5     0.00%          19                19     0.00%           0                 0         -
lightway-app-utils/src/args/keyshare.rs                                 5                 5     0.00%           1                 1     0.00%           5                 5     0.00%           0                 0         -
lightway-app-utils/src/args/logging.rs                                 37                37     0.00%           3                 3     0.00%          31                31     0.00%           0                 0         -
lightway-app-utils/src/args/nonzero_duration.rs                       128                24    81.25%          10                 4    60.00%          68                16    76.47%           0                 0         -
lightway-app-utils/src/connection_ticker.rs                           229                17    92.58%          28                 4    85.71%         126                15    88.10%           0                 0         -
lightway-app-utils/src/dplpmtud_timer.rs                              209                13    93.78%          22                 4    81.82%         117                11    90.60%           0                 0         -
lightway-app-utils/src/event_stream.rs                                 19                 0   100.00%           3                 0   100.00%          11                 0   100.00%           0                 0         -
lightway-app-utils/src/packet_codec.rs                                  2                 2     0.00%           1                 1     0.00%           1                 1     0.00%           0                 0         -
lightway-app-utils/src/sockopt/ip_mtu_discover.rs                      81                81     0.00%           6                 6     0.00%          72                72     0.00%           0                 0         -
lightway-app-utils/src/sockopt/ip_pktinfo.rs                           14                14     0.00%           1                 1     0.00%          16                16     0.00%           0                 0         -
lightway-app-utils/src/tun.rs                                         284               284     0.00%          31                31     0.00%         178               178     0.00%           0                 0         -
lightway-app-utils/src/utils.rs                                        21                21     0.00%           1                 1     0.00%          11                11     0.00%           0                 0         -
lightway-client/src/config.rs                                         292                96    67.12%          13                 6    53.85%         198                59    70.20%           0                 0         -
lightway-client/src/dns_manager.rs                                     18                18     0.00%           4                 4     0.00%          16                16     0.00%           0                 0         -
lightway-client/src/io/inside/tun.rs                                   82                82     0.00%          12                12     0.00%          60                60     0.00%           0                 0         -
lightway-client/src/io/outside.rs                                      14                14     0.00%           2                 2     0.00%          12                12     0.00%           0                 0         -
lightway-client/src/io/outside/tcp.rs                                  89                89     0.00%          12                12     0.00%          56                56     0.00%           0                 0         -
lightway-client/src/io/outside/udp.rs                                 167               167     0.00%          17                17     0.00%         108               108     0.00%           0                 0         -
lightway-client/src/io/outside/udp_batch_receiver.rs                   61                11    81.97%           6                 1    83.33%          56                12    78.57%           0                 0         -
lightway-client/src/keepalive.rs                                      615                44    92.85%          55                 6    89.09%         330                25    92.42%           0                 0         -
lightway-client/src/lib.rs                                           1246               670    46.23%         102                53    48.04%         835               489    41.44%           0                 0         -
lightway-client/src/main.rs                                           351               351     0.00%          20                20     0.00%         233               233     0.00%           0                 0         -
lightway-client/src/platform/linux/dns_manager.rs                     118                91    22.88%          14                 9    35.71%          87                62    28.74%           0                 0         -
lightway-client/src/platform/linux/dns_manager/direct_file.rs         106                42    60.38%          12                 6    50.00%          65                29    55.38%           0                 0         -
lightway-client/src/platform/linux/dns_manager/resolvconf.rs           61                61     0.00%           8                 8     0.00%          52                52     0.00%           0                 0         -
lightway-client/src/platform/linux/dns_manager/resolvectl.rs           41                41     0.00%           5                 5     0.00%          34                34     0.00%           0                 0         -
lightway-client/src/route_manager.rs                                 1190               212    82.18%          77                 8    89.61%         663               117    82.35%           0                 0         -
lightway-core/src/borrowed_bytesmut.rs                                373                 0   100.00%          24                 0   100.00%         185                 0   100.00%           0                 0         -
lightway-core/src/builder_predicates.rs                                24                12    50.00%           4                 2    50.00%          24                12    50.00%           0                 0         -
lightway-core/src/cipher.rs                                            13                 0   100.00%           2                 0   100.00%          10                 0   100.00%           0                 0         -
lightway-core/src/connection.rs                                      1663               826    50.33%          72                27    62.50%        1173               552    52.94%           0                 0         -
lightway-core/src/connection/builders.rs                              252                46    81.75%          22                 8    63.64%         259                53    79.54%           0                 0         -
lightway-core/src/connection/dplpmtud.rs                             1741                81    95.35%          63                 0   100.00%         830                 7    99.16%           0                 0         -
lightway-core/src/connection/expresslane.rs                            27                11    59.26%           4                 1    75.00%          36                 7    80.56%           0                 0         -
lightway-core/src/connection/fragment_map.rs                          366                 6    98.36%          25                 0   100.00%         254                 3    98.82%           0                 0         -
lightway-core/src/connection/io_adapter.rs                            526                23    95.63%          34                 5    85.29%         276                21    92.39%           0                 0         -
lightway-core/src/connection/key_update.rs                             34                13    61.76%           5                 0   100.00%          38                19    50.00%           0                 0         -
lightway-core/src/context.rs                                          214                51    76.17%          28                11    60.71%         235                64    72.77%           0                 0         -
lightway-core/src/context/ip_pool.rs                                    8                 3    62.50%           1                 0   100.00%           5                 0   100.00%           0                 0         -
lightway-core/src/context/server_auth.rs                               37                37     0.00%           4                 4     0.00%          26                26     0.00%           0                 0         -
lightway-core/src/encoding_request_states.rs                            3                 0   100.00%           1                 0   100.00%           3                 0   100.00%           0                 0         -
lightway-core/src/io.rs                                                10                10     0.00%           3                 3     0.00%           9                 9     0.00%           0                 0         -
lightway-core/src/keyshare.rs                                           5                 0   100.00%           1                 0   100.00%           5                 0   100.00%           0                 0         -
lightway-core/src/lib.rs                                                9                 0   100.00%           3                 0   100.00%           9                 0   100.00%           0                 0         -
lightway-core/src/metrics.rs                                           51                41    19.61%          21                17    19.05%          47                37    21.28%           0                 0         -
lightway-core/src/packet.rs                                            38                10    73.68%           4                 1    75.00%          30                 6    80.00%           0                 0         -
lightway-core/src/plugin.rs                                           303                13    95.71%          21                 3    85.71%         145                 7    95.17%           0                 0         -
lightway-core/src/tls/mod.rs                                            4                 4     0.00%           1                 1     0.00%           3                 3     0.00%           0                 0         -
lightway-core/src/utils.rs                                            334                26    92.22%          22                 2    90.91%         165                17    89.70%           0                 0         -
lightway-core/src/version.rs                                           93                 0   100.00%          17                 0   100.00%          82                 0   100.00%           0                 0         -
lightway-core/src/wire.rs                                             438                42    90.41%          29                 1    96.55%         235                12    94.89%           0                 0         -
lightway-core/src/wire/auth_failure.rs                                 27                 1    96.30%           3                 0   100.00%          17                 0   100.00%           0                 0         -
lightway-core/src/wire/auth_request.rs                                684                57    91.67%          34                 1    97.06%         351                24    93.16%           0                 0         -
lightway-core/src/wire/auth_success_with_config_ipv4.rs               222                 3    98.65%          11                 0   100.00%         124                 0   100.00%           0                 0         -
lightway-core/src/wire/data.rs                                         51                 1    98.04%           5                 0   100.00%          33                 0   100.00%           0                 0         -
lightway-core/src/wire/data_frag.rs                                   127                 1    99.21%          14                 0   100.00%          80                 0   100.00%           0                 0         -
lightway-core/src/wire/encoding_request.rs                             82                 2    97.56%           6                 0   100.00%          42                 1    97.62%           0                 0         -
lightway-core/src/wire/encoding_response.rs                            82                 2    97.56%           6                 0   100.00%          42                 1    97.62%           0                 0         -
lightway-core/src/wire/expresslane_config.rs                          192                 1    99.48%          10                 0   100.00%         110                 0   100.00%           0                 0         -
lightway-core/src/wire/expresslane_data.rs                           1330                69    94.81%          48                 5    89.58%         679                37    94.55%           0                 0         -
lightway-core/src/wire/ping.rs                                         95                 2    97.89%           7                 0   100.00%          59                 0   100.00%           0                 0         -
lightway-core/src/wire/pong.rs                                        109                 2    98.17%           8                 0   100.00%          72                 0   100.00%           0                 0         -
lightway-core/src/wire/server_config.rs                                69                 2    97.10%           4                 0   100.00%          37                 0   100.00%           0                 0         -
lightway-server/src/auth.rs                                           273                49    82.05%          22                 6    72.73%         171                28    83.63%           0                 0         -
lightway-server/src/config.rs                                          26                26     0.00%           1                 1     0.00%          44                44     0.00%           0                 0         -
lightway-server/src/connection.rs                                     137               137     0.00%          11                11     0.00%         110               110     0.00%           0                 0         -
lightway-server/src/connection_manager.rs                             339               339     0.00%          40                40     0.00%         294               294     0.00%           0                 0         -
lightway-server/src/connection_manager/connection_map.rs              407                20    95.09%          21                 1    95.24%         228                 8    96.49%           0                 0         -
lightway-server/src/io/inside/tun.rs                                   44                44     0.00%           9                 9     0.00%          30                30     0.00%           0                 0         -
lightway-server/src/io/outside/tcp.rs                                  90                90     0.00%           9                 9     0.00%          65                65     0.00%           0                 0         -
lightway-server/src/io/outside/udp.rs                                 320               320     0.00%          16                16     0.00%         206               206     0.00%           0                 0         -
lightway-server/src/io/outside/udp/cmsg.rs                            197                53    73.10%          14                 5    64.29%         158                43    72.78%           0                 0         -
lightway-server/src/ip_manager.rs                                     542                50    90.77%          22                 4    81.82%         242                23    90.50%           0                 0         -
lightway-server/src/ip_manager/ip_pool.rs                             545                 0   100.00%          28                 0   100.00%         257                 0   100.00%           0                 0         -
lightway-server/src/lib.rs                                            298               298     0.00%          15                15     0.00%         198               198     0.00%           0                 0         -
lightway-server/src/main.rs                                           246               246     0.00%          10                10     0.00%         129               129     0.00%           0                 0         -
lightway-server/src/metrics.rs                                        254               250     1.57%          85                83     2.35%         215               211     1.86%           0                 0         -
lightway-server/src/statistics.rs                                     132                59    55.30%           8                 4    50.00%          90                39    56.67%           0                 0         -
uniffi-bindgen/src/uniffi-bindgen.rs                                    3                 3     0.00%           1                 1     0.00%           3                 3     0.00%           0                 0         -
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
TOTAL                                                               19130              5931    69.00%        1364               545    60.04%       11707              4116    64.84%           0                 0         -

✅ Region coverage 68% passes
✅ Line coverage 64% passes

@kp-mariappan-ramasamy kp-mariappan-ramasamy force-pushed the fix-nix-builds branch 2 times, most recently from 1ffef64 to 0e9f8a4 Compare May 29, 2026 03:35
@kp-mariappan-ramasamy kp-mariappan-ramasamy changed the title nix: workaround crates.io UA block in fetchurl nix: backport importCargoLock static.crates.io fix May 29, 2026
@kp-mariappan-ramasamy kp-mariappan-ramasamy marked this pull request as ready for review May 29, 2026 03:40
@kp-mariappan-ramasamy kp-mariappan-ramasamy requested a review from a team as a code owner May 29, 2026 03:40
crates.io now rejects requests with curl/* User-Agent, returning HTTP 403
on `https://crates.io/api/v1/crates/<name>/<ver>/download`. nixpkgs
`fetchurl` calls curl with its default UA, so `rustPlatform.buildRustPackage`
with `cargoLock.lockFile` (which routes through `importCargoLock` and
fetches each crate tarball via `fetchurl`) fails on the first uncached
crate, e.g.:

  trying https://crates.io/api/v1/crates/autocfg/1.5.1/download
  curl: (22) The requested URL returned error: 403

Reproduced UA blocklist:

  curl/8.5.0          -> 403
  empty UA            -> 302
  cargo (...)         -> 200
  static.crates.io/*  -> 200 (no UA gate)

Override `pkgs.makeRustPlatform` (not `pkgs.rustPlatform.importCargoLock`):
nixpkgs' `pkgs/development/compilers/rust/make-rust-platform.nix`
constructs a fresh `importCargoLock` via `buildPackages.callPackage` against
a hardcoded path to `pkgs/build-support/rust/import-cargo-lock.nix`, so
overriding the top-level `rustPlatform.importCargoLock` is ignored by every
call site that goes through `makeRustPlatform`. Both `nix/modules/native.nix`
and `nix/modules/cross.nix` build their `rustPlatform` via
`(pkgsCross.)makeRustPlatform { cargo = ...; rustc = ...; }`, so a top-level
override silently misses macOS, Linux musl, and every cross target. Intercept
`makeRustPlatform` instead and re-inject the patched `importCargoLock` via
`overrideScope` on the returned scope so that `buildRustPackage` (resolved
through `callPackage` against the scope's `self`) picks it up.

The patched `import-cargo-lock.nix` is materialised at evaluation time via
`builtins.toFile`/`builtins.readFile`/`builtins.replaceStrings` rather than
`runCommand`. `runCommand` adds a build-time dependency on `/bin/sh` which
fails on macOS sandbox builds with
"requested impure path '/bin/sh', but it was not in allowed-impure-host-deps".
`builtins.toFile` produces a store path purely at eval time with no
derivation to build, sidestepping the sandbox check entirely.

The one-line URL change inside `import-cargo-lock.nix` mirrors
NixOS/nixpkgs#524985 byte-for-byte.

Verified across all four flake systems by inspecting the rendered
`cargo-vendor-dir.drv` graph - every crate tarball URL resolves to
`https://static.crates.io/crates/<name>/<ver>/download`:

  - x86_64-darwin            (native + Darwin-to-Darwin cross)
  - aarch64-darwin           (native + cross to x86_64-darwin)
  - x86_64-linux             (native + gnu/musl cross)
  - aarch64-linux            (native + gnu/musl cross)

Upstream references:

  - rust-lang/crates.io#13482: original ticket (closed). Initially
    flagged python-requests/2.32.5+ UA; crates.io has since extended
    the blocklist to include curl/*.
  - NixOS/nixpkgs#512735 (merged 2026-04-26): sets
    `nixpkgs-fetchCargoVendor/2 (...)` UA and switches to
    `static.crates.io`. Only patches `fetchCargoVendor`.
  - NixOS/nixpkgs#524979 (closed 2026-05-27): tracking issue for the
    same 403 hitting `importCargoLock` (the path lightway uses).
  - NixOS/nixpkgs#524985 (merged 2026-05-27 to master): fix for
    `importCargoLock` - switches crate downloads to
    `https://static.crates.io/crates/<name>/<ver>/download`, which has
    no UA gate. As of this commit the fix is on master only;
    `nixpkgs-unstable` (the channel this flake tracks at f9d8b65,
    2026-05-25) does not yet contain it.

Drop this overlay once `flake.lock` is bumped to a `nixpkgs-unstable`
revision that includes NixOS/nixpkgs#524985.
@kp-mariappan-ramasamy kp-mariappan-ramasamy merged commit 67557b8 into main May 29, 2026
22 checks passed
@kp-mariappan-ramasamy kp-mariappan-ramasamy deleted the fix-nix-builds branch May 29, 2026 05:33
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