Switch CI to Nix flakes
We also move tests to Flakes. This would allow users to submit PRs with a fork of nixpkgs when they want to test nixpkgs PRs against SNM.
This commit is contained in:
parent
a9f87ca461
commit
a0f9688a31
|
@ -8,56 +8,26 @@ let
|
||||||
{ enabled = 1;
|
{ enabled = 1;
|
||||||
hidden = false;
|
hidden = false;
|
||||||
description = "PR ${num}: ${info.title}";
|
description = "PR ${num}: ${info.title}";
|
||||||
nixexprinput = "snm";
|
|
||||||
nixexprpath = ".hydra/default.nix";
|
|
||||||
checkinterval = 30;
|
checkinterval = 30;
|
||||||
schedulingshares = 20;
|
schedulingshares = 20;
|
||||||
enableemail = false;
|
enableemail = false;
|
||||||
emailoverride = "";
|
emailoverride = "";
|
||||||
keepnr = 1;
|
keepnr = 1;
|
||||||
type = 0;
|
type = 1;
|
||||||
inputs = {
|
flake = "gitlab:simple-nixos-mailserver/nixos-mailserver/merge-requests/${info.iid}/head";
|
||||||
# This is only used to allow Niv to use pkgs.fetchzip which is
|
|
||||||
# required because of Hydra restricted evaluation mode.
|
|
||||||
nixpkgs = {
|
|
||||||
value = "https://github.com/NixOS/nixpkgs b6eefa48d8e10491e43c0c6155ac12b463f6fed3";
|
|
||||||
type = "git";
|
|
||||||
emailresponsible = false;
|
|
||||||
};
|
|
||||||
snm = {
|
|
||||||
type = "git";
|
|
||||||
value = "${info.target_repo_url} merge-requests/${info.iid}/head";
|
|
||||||
emailresponsible = false;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
) prs;
|
) prs;
|
||||||
mkJobset = branch: {
|
mkJobset = branch: {
|
||||||
description = "Build ${branch} branch of Simple NixOS MailServer";
|
description = "Build ${branch} branch of Simple NixOS MailServer";
|
||||||
checkinterval = "60";
|
checkinterval = "60";
|
||||||
enabled = "1";
|
enabled = "1";
|
||||||
nixexprinput = "snm";
|
|
||||||
nixexprpath = ".hydra/default.nix";
|
|
||||||
schedulingshares = 100;
|
schedulingshares = 100;
|
||||||
enableemail = false;
|
enableemail = false;
|
||||||
emailoverride = "";
|
emailoverride = "";
|
||||||
keepnr = 3;
|
keepnr = 3;
|
||||||
hidden = false;
|
hidden = false;
|
||||||
type = 0;
|
type = 1;
|
||||||
inputs = {
|
flake = "gitlab:simple-nixos-mailserver/nixos-mailserver/${branch}";
|
||||||
# This is only used to allow Niv to use pkgs.fetchzip which is
|
|
||||||
# required because of Hydra restricted evaluation mode.
|
|
||||||
nixpkgs = {
|
|
||||||
value = "https://github.com/NixOS/nixpkgs b6eefa48d8e10491e43c0c6155ac12b463f6fed3";
|
|
||||||
type = "git";
|
|
||||||
emailresponsible = false;
|
|
||||||
};
|
|
||||||
snm = {
|
|
||||||
value = "https://gitlab.com/simple-nixos-mailserver/nixos-mailserver ${branch}";
|
|
||||||
type = "git";
|
|
||||||
emailresponsible = false;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
desc = prJobsets // {
|
desc = prJobsets // {
|
||||||
|
@ -66,10 +36,20 @@ let
|
||||||
"nixos-21.05" = mkJobset "nixos-21.05";
|
"nixos-21.05" = mkJobset "nixos-21.05";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
log = {
|
||||||
|
pulls = prs;
|
||||||
|
jobsets = desc;
|
||||||
|
};
|
||||||
|
|
||||||
in {
|
in {
|
||||||
jobsets = pkgs.runCommand "spec-jobsets.json" {} ''
|
jobsets = pkgs.runCommand "spec-jobsets.json" {} ''
|
||||||
cat >$out <<EOF
|
cat >$out <<EOF
|
||||||
${builtins.toJSON desc}
|
${builtins.toJSON desc}
|
||||||
EOF
|
EOF
|
||||||
|
# This is to get nice .jobsets build logs on Hydra
|
||||||
|
cat >tmp <<EOF
|
||||||
|
${builtins.toJSON log}
|
||||||
|
EOF
|
||||||
|
${pkgs.jq}/bin/jq . tmp
|
||||||
'';
|
'';
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,13 +9,23 @@ You can also chat with us on the Libera IRC channel ``#nixos-mailserver``.
|
||||||
Run NixOS tests
|
Run NixOS tests
|
||||||
---------------
|
---------------
|
||||||
|
|
||||||
You can run the testsuite via
|
To run the test suite, you need to enable `Nix Flakes
|
||||||
|
<https://nixos.wiki/wiki/Flakes#Installing_flakes>`.
|
||||||
|
|
||||||
|
You can then run the testsuite via
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
$ nix-build tests -A external.nixpkgs_20_03
|
$ nix flake check -L
|
||||||
$ nix-build tests -A internal.nixpkgs_unstable
|
|
||||||
...
|
Since Nix doesn't garantee your machine have enough resources to run
|
||||||
|
all test VMs in parallel, some tests can fail. You would then haev to
|
||||||
|
run tests manually. For instance:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
$ nix build .#hydraJobs.x86_64-linux.external-unstable -L
|
||||||
|
|
||||||
|
|
||||||
Contributing to the documentation
|
Contributing to the documentation
|
||||||
---------------------------------
|
---------------------------------
|
||||||
|
|
33
flake.lock
33
flake.lock
|
@ -1,5 +1,21 @@
|
||||||
{
|
{
|
||||||
"nodes": {
|
"nodes": {
|
||||||
|
"blobs": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1604995301,
|
||||||
|
"narHash": "sha256-wcLzgLec6SGJA8fx1OEN1yV/Py5b+U5iyYpksUY/yLw=",
|
||||||
|
"owner": "simple-nixos-mailserver",
|
||||||
|
"repo": "blobs",
|
||||||
|
"rev": "2cccdf1ca48316f2cfd1c9a0017e8de5a7156265",
|
||||||
|
"type": "gitlab"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "simple-nixos-mailserver",
|
||||||
|
"repo": "blobs",
|
||||||
|
"type": "gitlab"
|
||||||
|
}
|
||||||
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1607522989,
|
"lastModified": 1607522989,
|
||||||
|
@ -15,9 +31,26 @@
|
||||||
"type": "indirect"
|
"type": "indirect"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"nixpkgs-21_05": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1625692408,
|
||||||
|
"narHash": "sha256-e9L3TLLDVIJpMnHtiNHJE62oOh6emRtSZ244bgYJUZs=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "c06613c25df3fe1dd26243847a3c105cf6770627",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"id": "nixpkgs",
|
||||||
|
"ref": "nixos-21.05",
|
||||||
|
"type": "indirect"
|
||||||
|
}
|
||||||
|
},
|
||||||
"root": {
|
"root": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
|
"blobs": "blobs",
|
||||||
"nixpkgs": "nixpkgs",
|
"nixpkgs": "nixpkgs",
|
||||||
|
"nixpkgs-21_05": "nixpkgs-21_05",
|
||||||
"utils": "utils"
|
"utils": "utils"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
52
flake.nix
52
flake.nix
|
@ -4,15 +4,55 @@
|
||||||
inputs = {
|
inputs = {
|
||||||
utils.url = "github:numtide/flake-utils";
|
utils.url = "github:numtide/flake-utils";
|
||||||
nixpkgs.url = "flake:nixpkgs/nixos-unstable";
|
nixpkgs.url = "flake:nixpkgs/nixos-unstable";
|
||||||
|
nixpkgs-21_05.url = "flake:nixpkgs/nixos-21.05";
|
||||||
|
blobs = {
|
||||||
|
url = "gitlab:simple-nixos-mailserver/blobs";
|
||||||
|
flake = false;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs = { self, utils, nixpkgs }: {
|
outputs = { self, utils, blobs, nixpkgs, nixpkgs-21_05 }: let
|
||||||
|
system = "x86_64-linux";
|
||||||
|
pkgs = nixpkgs.legacyPackages.${system};
|
||||||
|
# We want to test nixos-mailserver on several nixos releases
|
||||||
|
releases = [
|
||||||
|
{
|
||||||
|
name = "unstable";
|
||||||
|
pkgs = nixpkgs.legacyPackages.${system};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "21_05";
|
||||||
|
pkgs = nixpkgs-21_05.legacyPackages.${system};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
testNames = [
|
||||||
|
"internal"
|
||||||
|
"external"
|
||||||
|
"clamav"
|
||||||
|
"multiple"
|
||||||
|
];
|
||||||
|
genTest = testName: release: {
|
||||||
|
"name"= "${testName}-${release.name}";
|
||||||
|
"value"= import (./tests/. + "/${testName}.nix") {
|
||||||
|
pkgs = release.pkgs;
|
||||||
|
inherit blobs;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
# Generate an attribute set such as
|
||||||
|
# {
|
||||||
|
# external-unstable = <derivation>;
|
||||||
|
# external-21_05 = <derivation>;
|
||||||
|
# ...
|
||||||
|
# }
|
||||||
|
allTests = pkgs.lib.listToAttrs (
|
||||||
|
pkgs.lib.flatten (map (t: map (r: genTest t r) releases) testNames));
|
||||||
|
|
||||||
|
in {
|
||||||
nixosModules.mailserver = import ./.;
|
nixosModules.mailserver = import ./.;
|
||||||
nixosModule = self.nixosModules.mailserver;
|
nixosModule = self.nixosModules.mailserver;
|
||||||
} // utils.lib.eachDefaultSystem (system: let
|
hydraJobs.${system} = allTests;
|
||||||
pkgs = nixpkgs.legacyPackages.${system};
|
checks.${system} = allTests;
|
||||||
in {
|
devShell.${system} = pkgs.mkShell {
|
||||||
devShell = pkgs.mkShell {
|
|
||||||
buildInputs = with pkgs; [
|
buildInputs = with pkgs; [
|
||||||
(python3.withPackages (p: with p; [
|
(python3.withPackages (p: with p; [
|
||||||
sphinx
|
sphinx
|
||||||
|
@ -22,5 +62,5 @@
|
||||||
clamav
|
clamav
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
});
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,19 +14,12 @@
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>
|
# along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||||
|
|
||||||
{ pkgs ? import <nixpkgs> {}}:
|
{ pkgs ? import <nixpkgs> {}, blobs}:
|
||||||
|
|
||||||
pkgs.nixosTest {
|
pkgs.nixosTest {
|
||||||
name = "clamav";
|
name = "clamav";
|
||||||
nodes = {
|
nodes = {
|
||||||
server = { config, pkgs, lib, ... }:
|
server = { config, pkgs, lib, ... }:
|
||||||
let
|
|
||||||
sources = import ../nix/sources.nix;
|
|
||||||
blobs = pkgs.fetchzip {
|
|
||||||
url = sources.blobs.url;
|
|
||||||
sha256 = sources.blobs.sha256;
|
|
||||||
};
|
|
||||||
in
|
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
../default.nix
|
../default.nix
|
||||||
|
|
|
@ -1,48 +0,0 @@
|
||||||
# Generate an attribute sets containing all tests for all releaeses
|
|
||||||
# It looks like:
|
|
||||||
# - external.nixpkgs_20.03
|
|
||||||
# - external.nixpkgs_unstable
|
|
||||||
# - internal.nixpkgs_20.03
|
|
||||||
# - internal.nixpkgs_unstable
|
|
||||||
|
|
||||||
with builtins;
|
|
||||||
|
|
||||||
let
|
|
||||||
sources = import ../nix/sources.nix;
|
|
||||||
|
|
||||||
releases = listToAttrs (map genRelease releaseNames);
|
|
||||||
|
|
||||||
genRelease = name: {
|
|
||||||
name = name;
|
|
||||||
value = import sources."${name}" {};
|
|
||||||
};
|
|
||||||
|
|
||||||
genTest = testName: release:
|
|
||||||
let
|
|
||||||
pkgs = releases."${release}";
|
|
||||||
test = pkgs.callPackage (./. + "/${testName}.nix") { };
|
|
||||||
in {
|
|
||||||
"name"= builtins.replaceStrings ["." "-"] ["_" "_"] release;
|
|
||||||
"value"= test;
|
|
||||||
};
|
|
||||||
|
|
||||||
releaseNames = [
|
|
||||||
"nixpkgs-unstable"
|
|
||||||
"nixpkgs-20.09"
|
|
||||||
"nixpkgs-21.05"
|
|
||||||
];
|
|
||||||
|
|
||||||
testNames = [
|
|
||||||
"internal"
|
|
||||||
"external"
|
|
||||||
"clamav"
|
|
||||||
"multiple"
|
|
||||||
];
|
|
||||||
|
|
||||||
# Generate an attribute set containing one test per releases
|
|
||||||
genTests = testName: {
|
|
||||||
name = testName;
|
|
||||||
value = listToAttrs (map (genTest testName) (builtins.attrNames releases));
|
|
||||||
};
|
|
||||||
|
|
||||||
in listToAttrs (map genTests testNames)
|
|
|
@ -14,7 +14,7 @@
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>
|
# along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||||
|
|
||||||
{ pkgs ? import <nixpkgs> {}}:
|
{ pkgs ? import <nixpkgs> {}, ...}:
|
||||||
|
|
||||||
pkgs.nixosTest {
|
pkgs.nixosTest {
|
||||||
name = "external";
|
name = "external";
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>
|
# along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||||
|
|
||||||
{ pkgs ? import <nixpkgs> {}}:
|
{ pkgs ? import <nixpkgs> {}, ...}:
|
||||||
|
|
||||||
let
|
let
|
||||||
sendMail = pkgs.writeTextFile {
|
sendMail = pkgs.writeTextFile {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# This tests is used to test features requiring several mail domains.
|
# This tests is used to test features requiring several mail domains.
|
||||||
|
|
||||||
{ pkgs ? import <nixpkgs> {}}:
|
{ pkgs ? import <nixpkgs> {}, ...}:
|
||||||
|
|
||||||
let
|
let
|
||||||
hashPassword = password: pkgs.runCommand
|
hashPassword = password: pkgs.runCommand
|
||||||
|
|
Loading…
Reference in New Issue