Merge pull request 'use a clan-core snapshots for ci tests' (#3572) from misc-fixes-2 into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/3572
This commit is contained in:
33
.gitea/workflows/update-clan-core-for-checks.yml
Normal file
33
.gitea/workflows/update-clan-core-for-checks.yml
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
name: "Update pinned clan-core for checks"
|
||||||
|
on:
|
||||||
|
repository_dispatch:
|
||||||
|
workflow_dispatch:
|
||||||
|
schedule:
|
||||||
|
- cron: "51 2 * * *"
|
||||||
|
jobs:
|
||||||
|
update-pinned-clan-core:
|
||||||
|
runs-on: nix
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
submodules: true
|
||||||
|
- name: Update clan-core for checks
|
||||||
|
run: nix run .#update-clan-core-for-checks
|
||||||
|
- uses: github.com/quentinlegot/gitea-create-pull-request@c05fb67b080696dcdb2d2b7ea83051ec413f7285 # Change full sha to last commit of this repo if needed
|
||||||
|
with:
|
||||||
|
commit-message: Bump clan-core
|
||||||
|
branch: update-clan-core-for-checks
|
||||||
|
- name: Create pull request
|
||||||
|
run: |
|
||||||
|
git commit -am ""
|
||||||
|
git push origin HEAD:update-clan-core-for-checks
|
||||||
|
curl -X POST \
|
||||||
|
-H "Authorization: token $GITEA_TOKEN" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d '{
|
||||||
|
"head": "update-clan-core-branch",
|
||||||
|
"base": "main",
|
||||||
|
"title": "Automated Update: Clan Core",
|
||||||
|
"body": "This PR updates the pinned clan-core for checks."
|
||||||
|
}' \
|
||||||
|
"${GITEA_SERVER_URL}/api/v1/repos/${GITEA_OWNER}/${GITEA_REPO}/pulls"
|
||||||
6
checks/clan-core-for-checks.nix
Normal file
6
checks/clan-core-for-checks.nix
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{ fetchgit }:
|
||||||
|
fetchgit {
|
||||||
|
url = "https://git.clan.lol/clan/clan-core.git";
|
||||||
|
rev = "1e8b9def2a021877342491ca1f4c45533a580759";
|
||||||
|
sha256 = "0f12vwr1abwa1iwjbb5z5xx8jlh80d9njwdm6iaw1z1h2m76xgzc";
|
||||||
|
}
|
||||||
@@ -101,6 +101,12 @@ in
|
|||||||
mkdir -p $out
|
mkdir -p $out
|
||||||
cat $schemaFile > $out/allSchemas.json
|
cat $schemaFile > $out/allSchemas.json
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
clan-core-for-checks = pkgs.runCommand "clan-core-for-checks" { } ''
|
||||||
|
cp -r ${pkgs.callPackage ./clan-core-for-checks.nix { }} $out
|
||||||
|
chmod +w $out/flake.lock
|
||||||
|
cp ${../flake.lock} $out/flake.lock
|
||||||
|
'';
|
||||||
};
|
};
|
||||||
legacyPackages = {
|
legacyPackages = {
|
||||||
nixosTests =
|
nixosTests =
|
||||||
|
|||||||
@@ -43,6 +43,7 @@
|
|||||||
let
|
let
|
||||||
dependencies = [
|
dependencies = [
|
||||||
pkgs.disko
|
pkgs.disko
|
||||||
|
pkgs.buildPackages.xorg.lndir
|
||||||
self.nixosConfigurations."test-flash-machine-${pkgs.hostPlatform.system}".pkgs.perlPackages.ConfigIniFiles
|
self.nixosConfigurations."test-flash-machine-${pkgs.hostPlatform.system}".pkgs.perlPackages.ConfigIniFiles
|
||||||
self.nixosConfigurations."test-flash-machine-${pkgs.hostPlatform.system}".pkgs.perlPackages.FileSlurp
|
self.nixosConfigurations."test-flash-machine-${pkgs.hostPlatform.system}".pkgs.perlPackages.FileSlurp
|
||||||
|
|
||||||
@@ -80,7 +81,7 @@
|
|||||||
|
|
||||||
# Some distros like to automount disks with spaces
|
# Some distros like to automount disks with spaces
|
||||||
machine.succeed('mkdir -p "/mnt/with spaces" && mkfs.ext4 /dev/vdb && mount /dev/vdb "/mnt/with spaces"')
|
machine.succeed('mkdir -p "/mnt/with spaces" && mkfs.ext4 /dev/vdb && mount /dev/vdb "/mnt/with spaces"')
|
||||||
machine.succeed("clan flash write --debug --flake ${../..} --yes --disk main /dev/vdb test-flash-machine-${pkgs.hostPlatform.system}")
|
machine.succeed("clan flash write --debug --flake ${self.checks.x86_64-linux.clan-core-for-checks} --yes --disk main /dev/vdb test-flash-machine-${pkgs.hostPlatform.system}")
|
||||||
'';
|
'';
|
||||||
} { inherit pkgs self; };
|
} { inherit pkgs self; };
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ let
|
|||||||
pkgs.bash.drvPath
|
pkgs.bash.drvPath
|
||||||
pkgs.nixos-anywhere
|
pkgs.nixos-anywhere
|
||||||
pkgs.bubblewrap
|
pkgs.bubblewrap
|
||||||
|
pkgs.buildPackages.xorg.lndir
|
||||||
] ++ builtins.map (i: i.outPath) (builtins.attrValues self.inputs);
|
] ++ builtins.map (i: i.outPath) (builtins.attrValues self.inputs);
|
||||||
closureInfo = pkgs.closureInfo { rootPaths = dependencies; };
|
closureInfo = pkgs.closureInfo { rootPaths = dependencies; };
|
||||||
in
|
in
|
||||||
@@ -197,7 +198,7 @@ in
|
|||||||
installer.succeed("${pkgs.coreutils}/bin/install -Dm 600 ${../assets/ssh/privkey} /root/.ssh/id_ed25519")
|
installer.succeed("${pkgs.coreutils}/bin/install -Dm 600 ${../assets/ssh/privkey} /root/.ssh/id_ed25519")
|
||||||
|
|
||||||
installer.wait_until_succeeds("timeout 2 ssh -o StrictHostKeyChecking=accept-new -v nonrootuser@localhost hostname")
|
installer.wait_until_succeeds("timeout 2 ssh -o StrictHostKeyChecking=accept-new -v nonrootuser@localhost hostname")
|
||||||
installer.succeed("cp -r ${../..} test-flake && chmod -R +w test-flake")
|
installer.succeed("cp -r ${self.checks.x86_64-linux.clan-core-for-checks} test-flake && chmod -R +w test-flake")
|
||||||
|
|
||||||
installer.succeed("clan machines install --no-reboot --debug --flake test-flake --yes test-install-machine-without-system --target-host nonrootuser@localhost --update-hardware-config nixos-facter >&2")
|
installer.succeed("clan machines install --no-reboot --debug --flake test-flake --yes test-install-machine-without-system --target-host nonrootuser@localhost --update-hardware-config nixos-facter >&2")
|
||||||
installer.shutdown()
|
installer.shutdown()
|
||||||
@@ -217,7 +218,7 @@ in
|
|||||||
installer.start()
|
installer.start()
|
||||||
installer.succeed("${pkgs.coreutils}/bin/install -Dm 600 ${../assets/ssh/privkey} /root/.ssh/id_ed25519")
|
installer.succeed("${pkgs.coreutils}/bin/install -Dm 600 ${../assets/ssh/privkey} /root/.ssh/id_ed25519")
|
||||||
installer.wait_until_succeeds("timeout 2 ssh -o StrictHostKeyChecking=accept-new -v nonrootuser@localhost hostname")
|
installer.wait_until_succeeds("timeout 2 ssh -o StrictHostKeyChecking=accept-new -v nonrootuser@localhost hostname")
|
||||||
installer.succeed("cp -r ${../..} test-flake && chmod -R +w test-flake")
|
installer.succeed("cp -r ${self.checks.x86_64-linux.clan-core-for-checks} test-flake && chmod -R +w test-flake")
|
||||||
installer.fail("test -f test-flake/machines/test-install-machine/hardware-configuration.nix")
|
installer.fail("test -f test-flake/machines/test-install-machine/hardware-configuration.nix")
|
||||||
installer.fail("test -f test-flake/machines/test-install-machine/facter.json")
|
installer.fail("test -f test-flake/machines/test-install-machine/facter.json")
|
||||||
|
|
||||||
|
|||||||
@@ -55,7 +55,7 @@
|
|||||||
testScript = ''
|
testScript = ''
|
||||||
start_all()
|
start_all()
|
||||||
actual.fail("cat /etc/testfile")
|
actual.fail("cat /etc/testfile")
|
||||||
actual.succeed("env CLAN_DIR=${self} clan machines morph test-morph-template --i-will-be-fired-for-using-this --debug --name test-morph-machine")
|
actual.succeed("env CLAN_DIR=${self.checks.x86_64-linux.clan-core-for-checks} clan machines morph test-morph-template --i-will-be-fired-for-using-this --debug --name test-morph-machine")
|
||||||
assert actual.succeed("cat /etc/testfile") == "morphed"
|
assert actual.succeed("cat /etc/testfile") == "morphed"
|
||||||
'';
|
'';
|
||||||
} { inherit pkgs self; };
|
} { inherit pkgs self; };
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ VM tests should be avoided wherever it is possible to implement a cheaper unit t
|
|||||||
|
|
||||||
Existing nixos vm tests in clan-core can be found by using ripgrep:
|
Existing nixos vm tests in clan-core can be found by using ripgrep:
|
||||||
```shellSession
|
```shellSession
|
||||||
rg "import.*/lib/test-base.nix"
|
rg self.clanLib.test.baseTest
|
||||||
```
|
```
|
||||||
|
|
||||||
### Locating definitions of failing VM tests
|
### Locating definitions of failing VM tests
|
||||||
@@ -50,7 +50,7 @@ example: locating the vm test named `borgbackup`:
|
|||||||
```shellSession
|
```shellSession
|
||||||
$ rg "borgbackup =" ./checks
|
$ rg "borgbackup =" ./checks
|
||||||
./checks/flake-module.nix
|
./checks/flake-module.nix
|
||||||
41: borgbackup = import ./borgbackup nixosTestArgs;
|
44- wayland-proxy-virtwl = self.clanLib.test.baseTest ./wayland-proxy-virtwl nixosTestArgs;
|
||||||
```
|
```
|
||||||
|
|
||||||
-> the location of that test is `/checks/flake-module.nix` line `41`.
|
-> the location of that test is `/checks/flake-module.nix` line `41`.
|
||||||
@@ -99,15 +99,15 @@ Basically everything stated under the NixOS VM tests sections applies here, exce
|
|||||||
|
|
||||||
Limitations:
|
Limitations:
|
||||||
|
|
||||||
- does not yet support networking
|
- Cannot run in interactive mode, however while the container test runs, it logs a nsenter command that can be used to log into each of the container.
|
||||||
- supports only one machine as of now
|
- setuid binaries don't work
|
||||||
|
|
||||||
|
|
||||||
### Where to find examples for NixOS container tests
|
### Where to find examples for NixOS container tests
|
||||||
|
|
||||||
Existing nixos container tests in clan-core can be found by using ripgrep:
|
Existing nixos container tests in clan-core can be found by using ripgrep:
|
||||||
|
|
||||||
```shellSession
|
```shellSession
|
||||||
rg "import.*/lib/container-test.nix"
|
rg self.clanLib.test.containerTest
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ let
|
|||||||
done
|
done
|
||||||
if ! test -e ~/clan-core; then
|
if ! test -e ~/clan-core; then
|
||||||
# git clone https://git.clan.lol/clan/clan-core.git ~/clan-core
|
# git clone https://git.clan.lol/clan/clan-core.git ~/clan-core
|
||||||
cp -rv ${self} clan-core
|
cp -rv ${self.checks.x86_64-linux.clan-core-for-checks} clan-core
|
||||||
fi
|
fi
|
||||||
cd clan-core
|
cd clan-core
|
||||||
clan machines morph demo-template --i-will-be-fired-for-using-this
|
clan machines morph demo-template --i-will-be-fired-for-using-this
|
||||||
|
|||||||
@@ -36,6 +36,7 @@
|
|||||||
classgen = pkgs.callPackage ./classgen { };
|
classgen = pkgs.callPackage ./classgen { };
|
||||||
zerotierone = pkgs.callPackage ./zerotierone { };
|
zerotierone = pkgs.callPackage ./zerotierone { };
|
||||||
webview-lib = pkgs.callPackage ./webview-lib { };
|
webview-lib = pkgs.callPackage ./webview-lib { };
|
||||||
|
update-clan-core-for-checks = pkgs.callPackage ./update-clan-core-for-checks { };
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
35
pkgs/update-clan-core-for-checks/default.nix
Normal file
35
pkgs/update-clan-core-for-checks/default.nix
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
{
|
||||||
|
writeShellApplication,
|
||||||
|
git,
|
||||||
|
jq,
|
||||||
|
nix-prefetch-git,
|
||||||
|
}:
|
||||||
|
writeShellApplication {
|
||||||
|
name = "update-clan-core-for-checks";
|
||||||
|
runtimeInputs = [
|
||||||
|
git
|
||||||
|
jq
|
||||||
|
nix-prefetch-git
|
||||||
|
];
|
||||||
|
text = ''
|
||||||
|
reporoot=$(git rev-parse --show-toplevel)
|
||||||
|
if [ -z "$reporoot" ]; then
|
||||||
|
echo "Not in a git repository. Please run this script from the root of the repository."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
cd "$reporoot"
|
||||||
|
# get latest commit of clan-core
|
||||||
|
json=$(nix-prefetch-git "$(pwd)")
|
||||||
|
sha256=$(jq -r '.sha256' <<< "$json")
|
||||||
|
rev=$(jq -r '.rev' <<< "$json")
|
||||||
|
|
||||||
|
cat > ./checks/clan-core-for-checks.nix <<EOF
|
||||||
|
{ fetchgit }:
|
||||||
|
fetchgit {
|
||||||
|
url = "https://git.clan.lol/clan/clan-core.git";
|
||||||
|
rev = "$rev";
|
||||||
|
sha256 = "$sha256";
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
'';
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user