Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 50 additions & 7 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -65,18 +65,42 @@ jobs:
instrumented: false
primary: true
stdenv: stdenv
withAWS: true
withCurlS3: false
# TODO: remove once curl-based-s3 fully lands
- scenario: on ubuntu (no s3)
runs-on: ubuntu-24.04
os: linux
instrumented: false
primary: false
stdenv: stdenv
withAWS: false
withCurlS3: false
# TODO: remove once curl-based-s3 fully lands
- scenario: on ubuntu (curl s3)
runs-on: ubuntu-24.04
os: linux
instrumented: false
primary: false
stdenv: stdenv
withAWS: false
withCurlS3: true
- scenario: on macos
runs-on: macos-14
os: darwin
instrumented: false
primary: true
stdenv: stdenv
withAWS: true
withCurlS3: false
- scenario: on ubuntu (with sanitizers / coverage)
runs-on: ubuntu-24.04
os: linux
instrumented: true
primary: false
stdenv: clangStdenv
withAWS: true
withCurlS3: false
name: tests ${{ matrix.scenario }}
runs-on: ${{ matrix.runs-on }}
timeout-minutes: 60
Expand All @@ -99,7 +123,9 @@ jobs:
run: |
nix build --file ci/gha/tests/wrapper.nix componentTests -L \
--arg withInstrumentation ${{ matrix.instrumented }} \
--argstr stdenv "${{ matrix.stdenv }}"
--argstr stdenv "${{ matrix.stdenv }}" \
${{ format('--arg withAWS {0}', matrix.withAWS) }} \
${{ format('--arg withCurlS3 {0}', matrix.withCurlS3) }}
- name: Run flake checks and prepare the installer tarball
run: |
ci/gha/tests/build-checks
Expand All @@ -110,6 +136,8 @@ jobs:
nix build --file ci/gha/tests/wrapper.nix codeCoverage.coverageReports -L \
--arg withInstrumentation ${{ matrix.instrumented }} \
--argstr stdenv "${{ matrix.stdenv }}" \
${{ format('--arg withAWS {0}', matrix.withAWS) }} \
${{ format('--arg withCurlS3 {0}', matrix.withCurlS3) }} \
--out-link coverage-reports
cat coverage-reports/index.txt >> $GITHUB_STEP_SUMMARY
if: ${{ matrix.instrumented }}
Expand Down Expand Up @@ -240,6 +268,18 @@ jobs:

vm_tests:
needs: basic-checks
strategy:
fail-fast: false
matrix:
include:
# TODO: remove once curl-based-s3 fully lands
- scenario: legacy s3
withAWS: true
withCurlS3: false
- scenario: curl s3
withAWS: false
withCurlS3: true
name: vm_tests (${{ matrix.scenario }})
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v5
Expand All @@ -250,13 +290,16 @@ jobs:
experimental-features = nix-command flakes
github_token: ${{ secrets.GITHUB_TOKEN }}
- uses: DeterminateSystems/magic-nix-cache-action@main
- run: |
- name: Build VM tests
run: |
nix build -L \
.#hydraJobs.tests.functional_user \
.#hydraJobs.tests.githubFlakes \
.#hydraJobs.tests.nix-docker \
.#hydraJobs.tests.tarballFlakes \
;
--file ci/gha/vm-tests/wrapper.nix \
${{ format('--arg withAWS {0}', matrix.withAWS) }} \
${{ format('--arg withCurlS3 {0}', matrix.withCurlS3) }} \
functional_user \
githubFlakes \
nix-docker \
tarballFlakes

flake_regressions:
needs: vm_tests
Expand Down
8 changes: 8 additions & 0 deletions ci/gha/tests/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
componentTestsPrefix ? "",
withSanitizers ? false,
withCoverage ? false,
withAWS ? null,
withCurlS3 ? null,
...
}:

Expand Down Expand Up @@ -65,6 +67,12 @@ rec {
# Boehm is incompatible with ASAN.
nix-expr = prev.nix-expr.override { enableGC = !withSanitizers; };

# Override AWS configuration if specified
nix-store = prev.nix-store.override (
lib.optionalAttrs (withAWS != null) { inherit withAWS; }
// lib.optionalAttrs (withCurlS3 != null) { inherit withCurlS3; }
);

mesonComponentOverrides = lib.composeManyExtensions componentOverrides;
# Unclear how to make Perl bindings work with a dynamically linked ASAN.
nix-perl-bindings = if withSanitizers then null else prev.nix-perl-bindings;
Expand Down
3 changes: 3 additions & 0 deletions ci/gha/tests/wrapper.nix
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,15 @@
stdenv ? "stdenv",
componentTestsPrefix ? "",
withInstrumentation ? false,
withAWS ? null,
withCurlS3 ? null,
}@args:
import ./. (
args
// {
getStdenv = p: p.${stdenv};
withSanitizers = withInstrumentation;
withCoverage = withInstrumentation;
inherit withAWS withCurlS3;
}
)
45 changes: 45 additions & 0 deletions ci/gha/vm-tests/wrapper.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
{
nixFlake ? builtins.getFlake ("git+file://" + toString ../../..),
system ? "x86_64-linux",
withAWS ? null,
withCurlS3 ? null,
}:

let
pkgs = nixFlake.inputs.nixpkgs.legacyPackages.${system};
lib = pkgs.lib;

# Create base nixComponents using the flake's makeComponents
baseNixComponents = nixFlake.lib.makeComponents {
inherit pkgs;
};

# Override nixComponents if AWS parameters are specified
nixComponents =
if (withAWS == null && withCurlS3 == null) then
baseNixComponents
else
baseNixComponents.overrideScope (
final: prev: {
nix-store = prev.nix-store.override (
lib.optionalAttrs (withAWS != null) { inherit withAWS; }
// lib.optionalAttrs (withCurlS3 != null) { inherit withCurlS3; }
);
}
);

# Import NixOS tests with the overridden nixComponents
tests = import ../../../tests/nixos {
inherit lib pkgs nixComponents;
nixpkgs = nixFlake.inputs.nixpkgs;
inherit (nixFlake.inputs) nixpkgs-23-11;
};
in
{
inherit (tests)
functional_user
githubFlakes
nix-docker
tarballFlakes
;
}
3 changes: 3 additions & 0 deletions src/libstore/package.nix
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,9 @@ let
inherit (lib) fileset;
in

assert lib.assertMsg (!withAWS || !withCurlS3)
"withAWS and withCurlS3 are mutually exclusive - cannot enable both S3 implementations simultaneously";

mkMesonLibrary (finalAttrs: {
pname = "nix-store";
inherit version;
Expand Down
Loading