ci performance: add check to ensure nothing depends on the whole repo
Since this project is an ever growing monorepo, having derivations depending on the whole repo leads to bad CI performance, as the cache is busted on every commit. -> We never want any derivations depend on the whole repo ...except: the test that tests that nothing depends on the whole repo, which is added by this commit. For now only add this check to packages to allow contributors to build it locally. We might want to add it to the CI later once all occurrences are fixed.
This commit is contained in:
@@ -12,75 +12,18 @@
|
||||
...
|
||||
}:
|
||||
let
|
||||
clanCore = self.filter {
|
||||
include = [
|
||||
"clanModules"
|
||||
"flakeModules"
|
||||
"lib"
|
||||
"nixosModules"
|
||||
"flake.lock"
|
||||
"templates"
|
||||
];
|
||||
};
|
||||
flakeLock = lib.importJSON (clanCore + "/flake.lock");
|
||||
flakeInputs = builtins.removeAttrs inputs [ "self" ];
|
||||
flakeLockVendoredDeps =
|
||||
flakeLock:
|
||||
flakeLock
|
||||
// {
|
||||
nodes =
|
||||
flakeLock.nodes
|
||||
// (lib.flip lib.mapAttrs flakeInputs (
|
||||
name: _:
|
||||
# remove follows and let 'nix flake lock' re-compute it later
|
||||
# (lib.removeAttrs flakeLock.nodes.${name} ["inputs"])
|
||||
flakeLock.nodes.${name}
|
||||
// {
|
||||
locked = {
|
||||
inherit (flakeLock.nodes.${name}.locked) narHash;
|
||||
lastModified =
|
||||
# lol, nixpkgs has a different timestamp on the fs???
|
||||
if name == "nixpkgs" then 0 else 1;
|
||||
path = "${inputs.${name}}";
|
||||
type = "path";
|
||||
};
|
||||
}
|
||||
));
|
||||
};
|
||||
clanCoreLock = flakeLockVendoredDeps flakeLock;
|
||||
clanCoreLockFile = builtins.toFile "clan-core-flake.lock" (builtins.toJSON clanCoreLock);
|
||||
|
||||
clanCoreNode = {
|
||||
|
||||
inputs = lib.mapAttrs (name: _input: name) flakeInputs;
|
||||
locked = {
|
||||
lastModified = 1;
|
||||
path = "${clanCore}";
|
||||
type = "path";
|
||||
};
|
||||
original = {
|
||||
type = "tarball";
|
||||
url = "https://git.clan.lol/clan/clan-core/archive/main.tar.gz";
|
||||
clanCoreWithVendoredDeps = self'.packages.clan-core-flake.override {
|
||||
clanCore = self.filter {
|
||||
include = [
|
||||
"clanModules"
|
||||
"flakeModules"
|
||||
"lib"
|
||||
"nixosModules"
|
||||
"flake.lock"
|
||||
"templates"
|
||||
];
|
||||
};
|
||||
};
|
||||
# generate a lock file that nix will accept for our flake templates,
|
||||
# in order to not require internet access during tests.
|
||||
templateLock = clanCoreLock // {
|
||||
nodes = clanCoreLock.nodes // {
|
||||
clan-core = clanCoreNode;
|
||||
nixpkgs-lib = clanCoreLock.nodes.nixpkgs; # required by flake-parts
|
||||
flake-parts = clanCoreLock.nodes.flake-parts;
|
||||
root = clanCoreLock.nodes.root // {
|
||||
inputs = clanCoreLock.nodes.root.inputs // {
|
||||
clan-core = "clan-core";
|
||||
nixpkgs = "nixpkgs";
|
||||
clan = "clan-core";
|
||||
flake-parts = "flake-parts";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
templateLockFile = builtins.toFile "template-flake.lock" (builtins.toJSON templateLock);
|
||||
|
||||
# We need to add the paths of the templates to the nix store such that they are available
|
||||
# only adding clanCoreWithVendoredDeps to the nix store is not enough
|
||||
@@ -89,41 +32,6 @@
|
||||
builtins.attrValues (self.clanLib.select "clan.templates.clan.*.path" self)
|
||||
++ builtins.attrValues (self.clanLib.select "clan.templates.machine.*.path" self);
|
||||
};
|
||||
|
||||
clanCoreWithVendoredDeps =
|
||||
pkgs.runCommand "clan-core-with-vendored-deps"
|
||||
{
|
||||
buildInputs = [
|
||||
pkgs.findutils
|
||||
pkgs.git
|
||||
pkgs.jq
|
||||
pkgs.nix
|
||||
];
|
||||
}
|
||||
''
|
||||
set -e
|
||||
export HOME=$(realpath .)
|
||||
export NIX_STATE_DIR=$HOME
|
||||
export NIX_STORE_DIR=$HOME
|
||||
cp -r ${clanCore} $out
|
||||
chmod +w -R $out
|
||||
cp ${clanCoreLockFile} $out/flake.lock
|
||||
nix flake lock $out --extra-experimental-features 'nix-command flakes'
|
||||
clanCoreHash=$(nix hash path ${clanCore} --extra-experimental-features 'nix-command')
|
||||
|
||||
## ==> We need this to make nix flake update work on the templates
|
||||
## however then we have to re-add the clan templates to the nix store
|
||||
## which is not possible (or I don't know how)
|
||||
# for templateDir in $(find $out/templates/clan -mindepth 1 -maxdepth 1 -type d); do
|
||||
# if ! [ -e "$templateDir/flake.nix" ]; then
|
||||
# continue
|
||||
# fi
|
||||
# cp ${templateLockFile} $templateDir/flake.lock
|
||||
# cat $templateDir/flake.lock | jq ".nodes.\"clan-core\".locked.narHash = \"$clanCoreHash\"" > $templateDir/flake.lock.final
|
||||
# mv $templateDir/flake.lock.final $templateDir/flake.lock
|
||||
# nix flake lock $templateDir --extra-experimental-features 'nix-command flakes'
|
||||
# done
|
||||
'';
|
||||
in
|
||||
{
|
||||
devShells.clan-cli = pkgs.callPackage ./shell.nix {
|
||||
|
||||
75
pkgs/clan-core-flake/flake-module.nix
Normal file
75
pkgs/clan-core-flake/flake-module.nix
Normal file
@@ -0,0 +1,75 @@
|
||||
{ self, inputs, ... }:
|
||||
{
|
||||
perSystem =
|
||||
{
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
# A flake lock for offline use.
|
||||
# All flake inputs are locked to an existing store path
|
||||
clanCoreLockFile =
|
||||
clanCore:
|
||||
let
|
||||
flakeLock = lib.importJSON (clanCore + "/flake.lock");
|
||||
flakeInputs = builtins.removeAttrs inputs [ "self" ];
|
||||
flakeLockVendoredDeps =
|
||||
flakeLock:
|
||||
flakeLock
|
||||
// {
|
||||
nodes =
|
||||
flakeLock.nodes
|
||||
// (lib.flip lib.mapAttrs flakeInputs (
|
||||
name: _:
|
||||
# remove follows and let 'nix flake lock' re-compute it later
|
||||
# (lib.removeAttrs flakeLock.nodes.${name} ["inputs"])
|
||||
flakeLock.nodes.${name}
|
||||
// {
|
||||
locked = {
|
||||
inherit (flakeLock.nodes.${name}.locked) narHash;
|
||||
lastModified =
|
||||
# lol, nixpkgs has a different timestamp on the fs???
|
||||
if name == "nixpkgs" then 0 else 1;
|
||||
path = "${inputs.${name}}";
|
||||
type = "path";
|
||||
};
|
||||
}
|
||||
));
|
||||
};
|
||||
clanCoreLock = flakeLockVendoredDeps flakeLock;
|
||||
clanCoreLockFile = builtins.toFile "clan-core-flake.lock" (builtins.toJSON clanCoreLock);
|
||||
in
|
||||
clanCoreLockFile;
|
||||
in
|
||||
{
|
||||
packages.clan-core-flake =
|
||||
let
|
||||
package =
|
||||
{
|
||||
clanCore,
|
||||
}:
|
||||
pkgs.runCommand "clan-core-flake"
|
||||
{
|
||||
buildInputs = [
|
||||
pkgs.findutils
|
||||
pkgs.git
|
||||
pkgs.jq
|
||||
pkgs.nix
|
||||
];
|
||||
}
|
||||
''
|
||||
set -e
|
||||
export HOME=$(realpath .)
|
||||
export NIX_STATE_DIR=$HOME
|
||||
export NIX_STORE_DIR=$HOME
|
||||
cp -r ${clanCore} $out
|
||||
chmod +w -R $out
|
||||
cp ${clanCoreLockFile clanCore} $out/flake.lock
|
||||
nix flake lock $out --extra-experimental-features 'nix-command flakes'
|
||||
clanCoreHash=$(nix hash path ${clanCore} --extra-experimental-features 'nix-command')
|
||||
'';
|
||||
in
|
||||
pkgs.callPackage package { clanCore = self; };
|
||||
};
|
||||
}
|
||||
@@ -10,6 +10,7 @@
|
||||
./distro-packages/flake-module.nix
|
||||
./icon-update/flake-module.nix
|
||||
./generate-test-vars/flake-module.nix
|
||||
./clan-core-flake/flake-module.nix
|
||||
];
|
||||
|
||||
flake.packages.x86_64-linux =
|
||||
|
||||
Reference in New Issue
Block a user