env:
CARGO_INCREMENTAL: '0'
CARGO_NET_RETRY: '10'
RUSTUP_MAX_RETRIES: '10'
RUST_BACKTRACE: short
jobs:
load_nix:
runs-on: ubuntu-latest
steps:
- name: Install Nix
uses: DeterminateSystems/nix-installer-action@main
- name: Setup Nix cache
uses: DeterminateSystems/magic-nix-cache-action@main
- name: Cache packages
run: '# Pre-fetch packages into nix store so they''re cached for dependent jobs
# Use nix-shell which properly sets up env vars like PKG_CONFIG_PATH
nix-shell -p mold egl-wayland wayland libGL libgbm fd pkg-config pkg-config
openssl.out openssl.dev --run "echo packages cached"
'
pre_ci:
uses: valeratrades/.github/.github/workflows/pre_ci.yml@master
rust-tests:
if: needs.pre_ci.outputs.continue
name: Rust ${{matrix.rust}}
needs:
- load_nix
- pre_ci
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Nix
uses: DeterminateSystems/nix-installer-action@main
- name: Restore Nix cache
uses: DeterminateSystems/magic-nix-cache-action@main
- name: Debug nix environment
run: "echo \"=== NIX ENVIRONMENT DEBUG ===\"\necho \"\"\necho \"1. Which nix:\"\
\nwhich nix || echo \"nix not found in PATH\"\necho \"\"\necho \"2. Nix version:\"\
\nnix --version || echo \"failed\"\necho \"\"\necho \"3. Current PATH:\"\n\
echo \"$PATH\" | tr ':' '\\n'\necho \"\"\necho \"4. LD_LIBRARY_PATH (before\
\ nix-shell):\"\necho \"$LD_LIBRARY_PATH\"\necho \"\"\necho \"5. NIX_PROFILES:\"\
\necho \"$NIX_PROFILES\"\necho \"\"\necho \"6. Package store paths:\"\necho\
\ \" mold: $(nix-build '<nixpkgs>' -A mold --no-out-link 2>/dev/null || echo\
\ 'FAILED')\"\n\necho \" egl-wayland: $(nix-build '<nixpkgs>' -A egl-wayland\
\ --no-out-link 2>/dev/null || echo 'FAILED')\"\n\necho \" wayland: $(nix-build\
\ '<nixpkgs>' -A wayland --no-out-link 2>/dev/null || echo 'FAILED')\"\n\n\
echo \" libGL: $(nix-build '<nixpkgs>' -A libGL --no-out-link 2>/dev/null\
\ || echo 'FAILED')\"\n\necho \" libgbm: $(nix-build '<nixpkgs>' -A libgbm\
\ --no-out-link 2>/dev/null || echo 'FAILED')\"\n\necho \" fd: $(nix-build\
\ '<nixpkgs>' -A fd --no-out-link 2>/dev/null || echo 'FAILED')\"\n\necho\
\ \" pkg-config: $(nix-build '<nixpkgs>' -A pkg-config --no-out-link 2>/dev/null\
\ || echo 'FAILED')\"\n\necho \" pkg-config: $(nix-build '<nixpkgs>' -A pkg-config\
\ --no-out-link 2>/dev/null || echo 'FAILED')\"\n\necho \" openssl.out: $(nix-build\
\ '<nixpkgs>' -A openssl.out --no-out-link 2>/dev/null || echo 'FAILED')\"\
\n\necho \" openssl.dev: $(nix-build '<nixpkgs>' -A openssl.dev --no-out-link\
\ 2>/dev/null || echo 'FAILED')\"\n\necho \"\"\necho \"7. libssl.so locations\
\ in nix store:\"\nfind /nix/store -name 'libssl.so*' 2>/dev/null | head -20\
\ || echo \"none found\"\necho \"\"\necho \"8. libgbm.so locations in nix\
\ store:\"\nfind /nix/store -name 'libgbm.so*' 2>/dev/null | head -20 || echo\
\ \"none found\"\necho \"\"\necho \"9. Contents of openssl lib dir:\"\nls\
\ -la \"$(nix-build '<nixpkgs>' -A openssl --no-out-link)/lib/\" 2>/dev/null\
\ || echo \"failed\"\necho \"\"\necho \"10. Contents of openssl.dev lib dir:\"\
\nls -la \"$(nix-build '<nixpkgs>' -A openssl.dev --no-out-link)/lib/\" 2>/dev/null\
\ || echo \"failed\"\necho \"\"\necho \"11. ldd on a test binary (if exists):\"\
\nif [ -f target/debug/todo ]; then\n ldd target/debug/todo 2>&1 || echo\
\ \"ldd failed\"\nelse\n echo \"binary not built yet\"\nfi\necho \"\"\necho\
\ \"12. System LD_LIBRARY_PATH search dirs:\"\ncat /etc/ld.so.conf 2>/dev/null\
\ || echo \"no ld.so.conf\"\nldconfig -p 2>/dev/null | grep -E \"libssl|libgbm\"\
\ | head -10 || echo \"ldconfig failed or no matches\"\necho \"\"\necho \"\
13. Test nix-shell environment:\"\nnix-shell -p mold egl-wayland wayland libGL\
\ libgbm fd pkg-config pkg-config openssl.out openssl.dev --run 'echo \"Inside\
\ nix-shell LD_LIBRARY_PATH: $LD_LIBRARY_PATH\"'\necho \"\"\necho \"14. Test\
\ nix-shell with manual LD_LIBRARY_PATH:\"\nnix-shell -p mold egl-wayland\
\ wayland libGL libgbm fd pkg-config pkg-config openssl.out openssl.dev --command\
\ 'export LD_LIBRARY_PATH=\"$(nix-build \"<nixpkgs>\" -A openssl --no-out-link)/lib${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH\"\
\ && echo \"Manual LD_LIBRARY_PATH: $LD_LIBRARY_PATH\"'\necho \"\"\necho \"\
15. Check if openssl lib has libssl.so.3:\"\nOPENSSL_PATH=$(nix-build '<nixpkgs>'\
\ -A openssl --no-out-link 2>/dev/null)\nif [ -n \"$OPENSSL_PATH\" ]; then\n\
\ ls -la \"$OPENSSL_PATH/lib/\" | grep ssl || echo \"no ssl libs in openssl\"\
\nfi\necho \"\"\necho \"16. Check openssl.out (runtime output):\"\nnix-build\
\ '<nixpkgs>' -A openssl.out --no-out-link 2>/dev/null && ls -la \"$(nix-build\
\ '<nixpkgs>' -A openssl.out --no-out-link)/lib/\" | grep ssl || echo \"openssl.out\
\ failed\"\necho \"\"\necho \"17. Env vars in nix-shell:\"\nnix-shell -p openssl\
\ --run 'env | grep -E \"^(LD_|NIX_|PATH=)\" | sort'\necho \"\"\necho \"18.\
\ Test subprocess inheritance:\"\nnix-shell -p mold egl-wayland wayland libGL\
\ libgbm fd pkg-config pkg-config openssl.out openssl.dev --command 'export\
\ LD_LIBRARY_PATH=\"$(nix-build \"<nixpkgs>\" -A openssl --no-out-link)/lib:$LD_LIBRARY_PATH\"\
\ && bash -c \"echo subprocess sees: \\$LD_LIBRARY_PATH\"'\necho \"\"\necho\
\ \"19. All openssl-related packages:\"\nnix-env -qaP 'openssl.*' 2>/dev/null\
\ | head -20 || echo \"query failed\"\necho \"\"\necho \"20. System libssl:\"\
\nldconfig -p 2>/dev/null | grep libssl || echo \"no system libssl\"\necho\
\ \"\"\necho \"=== END DEBUG ===\"\n"
- uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{matrix.rust}}
- name: Install mold
uses: rui314/setup-mold@v1
- if: github.ref == 'refs/heads/release'
name: Set RUSTFLAGS for release branch
run: echo "RUSTFLAGS=-Dwarnings" >> $GITHUB_ENV
- if: matrix.rust == 'nightly'
name: Enable type layout randomization
run: echo RUSTFLAGS=${RUSTFLAGS}\ -Zrandomize-layout\ --cfg=exhaustive >> $GITHUB_ENV
- name: Download modified by pre-ci Cargo.toml files
uses: actions/download-artifact@v4
with:
name: modified-cargo-files
- run: nix-shell -p mold egl-wayland wayland libGL libgbm fd pkg-config pkg-config
openssl.out openssl.dev --command "export LD_LIBRARY_PATH=\"\$(nix-build '<nixpkgs>'
-A mold --no-out-link)/lib\${LD_LIBRARY_PATH:+:}\$LD_LIBRARY_PATH\" && export
LD_LIBRARY_PATH=\"\$(nix-build '<nixpkgs>' -A egl-wayland --no-out-link)/lib\${LD_LIBRARY_PATH:+:}\$LD_LIBRARY_PATH\"
&& export LD_LIBRARY_PATH=\"\$(nix-build '<nixpkgs>' -A wayland --no-out-link)/lib\${LD_LIBRARY_PATH:+:}\$LD_LIBRARY_PATH\"
&& export LD_LIBRARY_PATH=\"\$(nix-build '<nixpkgs>' -A libGL --no-out-link)/lib\${LD_LIBRARY_PATH:+:}\$LD_LIBRARY_PATH\"
&& export LD_LIBRARY_PATH=\"\$(nix-build '<nixpkgs>' -A libgbm --no-out-link)/lib\${LD_LIBRARY_PATH:+:}\$LD_LIBRARY_PATH\"
&& export LD_LIBRARY_PATH=\"\$(nix-build '<nixpkgs>' -A fd --no-out-link)/lib\${LD_LIBRARY_PATH:+:}\$LD_LIBRARY_PATH\"
&& export LD_LIBRARY_PATH=\"\$(nix-build '<nixpkgs>' -A pkg-config --no-out-link)/lib\${LD_LIBRARY_PATH:+:}\$LD_LIBRARY_PATH\"
&& export LD_LIBRARY_PATH=\"\$(nix-build '<nixpkgs>' -A pkg-config --no-out-link)/lib\${LD_LIBRARY_PATH:+:}\$LD_LIBRARY_PATH\"
&& export LD_LIBRARY_PATH=\"\$(nix-build '<nixpkgs>' -A openssl.out --no-out-link)/lib\${LD_LIBRARY_PATH:+:}\$LD_LIBRARY_PATH\"
&& export LD_LIBRARY_PATH=\"\$(nix-build '<nixpkgs>' -A openssl.dev --no-out-link)/lib\${LD_LIBRARY_PATH:+:}\$LD_LIBRARY_PATH\"
&& cargo update"
- run: nix-shell -p mold egl-wayland wayland libGL libgbm fd pkg-config pkg-config
openssl.out openssl.dev --command "export LD_LIBRARY_PATH=\"\$(nix-build '<nixpkgs>'
-A mold --no-out-link)/lib\${LD_LIBRARY_PATH:+:}\$LD_LIBRARY_PATH\" && export
LD_LIBRARY_PATH=\"\$(nix-build '<nixpkgs>' -A egl-wayland --no-out-link)/lib\${LD_LIBRARY_PATH:+:}\$LD_LIBRARY_PATH\"
&& export LD_LIBRARY_PATH=\"\$(nix-build '<nixpkgs>' -A wayland --no-out-link)/lib\${LD_LIBRARY_PATH:+:}\$LD_LIBRARY_PATH\"
&& export LD_LIBRARY_PATH=\"\$(nix-build '<nixpkgs>' -A libGL --no-out-link)/lib\${LD_LIBRARY_PATH:+:}\$LD_LIBRARY_PATH\"
&& export LD_LIBRARY_PATH=\"\$(nix-build '<nixpkgs>' -A libgbm --no-out-link)/lib\${LD_LIBRARY_PATH:+:}\$LD_LIBRARY_PATH\"
&& export LD_LIBRARY_PATH=\"\$(nix-build '<nixpkgs>' -A fd --no-out-link)/lib\${LD_LIBRARY_PATH:+:}\$LD_LIBRARY_PATH\"
&& export LD_LIBRARY_PATH=\"\$(nix-build '<nixpkgs>' -A pkg-config --no-out-link)/lib\${LD_LIBRARY_PATH:+:}\$LD_LIBRARY_PATH\"
&& export LD_LIBRARY_PATH=\"\$(nix-build '<nixpkgs>' -A pkg-config --no-out-link)/lib\${LD_LIBRARY_PATH:+:}\$LD_LIBRARY_PATH\"
&& export LD_LIBRARY_PATH=\"\$(nix-build '<nixpkgs>' -A openssl.out --no-out-link)/lib\${LD_LIBRARY_PATH:+:}\$LD_LIBRARY_PATH\"
&& export LD_LIBRARY_PATH=\"\$(nix-build '<nixpkgs>' -A openssl.dev --no-out-link)/lib\${LD_LIBRARY_PATH:+:}\$LD_LIBRARY_PATH\"
&& cargo check"
- run: nix-shell -p mold egl-wayland wayland libGL libgbm fd pkg-config pkg-config
openssl.out openssl.dev --command "export LD_LIBRARY_PATH=\"\$(nix-build '<nixpkgs>'
-A mold --no-out-link)/lib\${LD_LIBRARY_PATH:+:}\$LD_LIBRARY_PATH\" && export
LD_LIBRARY_PATH=\"\$(nix-build '<nixpkgs>' -A egl-wayland --no-out-link)/lib\${LD_LIBRARY_PATH:+:}\$LD_LIBRARY_PATH\"
&& export LD_LIBRARY_PATH=\"\$(nix-build '<nixpkgs>' -A wayland --no-out-link)/lib\${LD_LIBRARY_PATH:+:}\$LD_LIBRARY_PATH\"
&& export LD_LIBRARY_PATH=\"\$(nix-build '<nixpkgs>' -A libGL --no-out-link)/lib\${LD_LIBRARY_PATH:+:}\$LD_LIBRARY_PATH\"
&& export LD_LIBRARY_PATH=\"\$(nix-build '<nixpkgs>' -A libgbm --no-out-link)/lib\${LD_LIBRARY_PATH:+:}\$LD_LIBRARY_PATH\"
&& export LD_LIBRARY_PATH=\"\$(nix-build '<nixpkgs>' -A fd --no-out-link)/lib\${LD_LIBRARY_PATH:+:}\$LD_LIBRARY_PATH\"
&& export LD_LIBRARY_PATH=\"\$(nix-build '<nixpkgs>' -A pkg-config --no-out-link)/lib\${LD_LIBRARY_PATH:+:}\$LD_LIBRARY_PATH\"
&& export LD_LIBRARY_PATH=\"\$(nix-build '<nixpkgs>' -A pkg-config --no-out-link)/lib\${LD_LIBRARY_PATH:+:}\$LD_LIBRARY_PATH\"
&& export LD_LIBRARY_PATH=\"\$(nix-build '<nixpkgs>' -A openssl.out --no-out-link)/lib\${LD_LIBRARY_PATH:+:}\$LD_LIBRARY_PATH\"
&& export LD_LIBRARY_PATH=\"\$(nix-build '<nixpkgs>' -A openssl.dev --no-out-link)/lib\${LD_LIBRARY_PATH:+:}\$LD_LIBRARY_PATH\"
&& cargo test"
strategy:
fail-fast: false
matrix:
rust:
- nightly
- nightly-2025-08-01
timeout-minutes: 45
name: Errors
'on':
pull_request: {}
push: {}
workflow_dispatch: {}
permissions:
contents: read