Add testing infrastructure
This commit is contained in:
parent
6e4e8d3d93
commit
2e39ef952b
|
@ -20,7 +20,7 @@ jobs:
|
||||||
git config --unset "http.${GITHUB_SERVER_URL}/.extraHeader"
|
git config --unset "http.${GITHUB_SERVER_URL}/.extraHeader"
|
||||||
git lfs install --local
|
git lfs install --local
|
||||||
git lfs pull
|
git lfs pull
|
||||||
- name: Build
|
- name: Build and test
|
||||||
run: nix build -L .#li7y .#li7y-oci
|
run: nix build -L .#li7y .#li7y-oci
|
||||||
- name: Push OCI image
|
- name: Push OCI image
|
||||||
if: github.ref == 'refs/heads/master'
|
if: github.ref == 'refs/heads/master'
|
||||||
|
|
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -3,5 +3,6 @@
|
||||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
|
||||||
/target
|
/target
|
||||||
|
/.tarpaulin_target
|
||||||
result*
|
result*
|
||||||
.pre-commit-config.yaml
|
.pre-commit-config.yaml
|
||||||
|
|
16
.tarpaulin.toml
Normal file
16
.tarpaulin.toml
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
# SPDX-FileCopyrightText: 2024 Simon Bruder <simon@sbruder.de>
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
|
||||||
|
[default]
|
||||||
|
# Tarpaulin uses custom options
|
||||||
|
# that are incompatible with the default options.
|
||||||
|
# This sets a different target directory,
|
||||||
|
# so the files from tarpaulin do not interfere with the regular outputs.
|
||||||
|
target-dir = ".tarpaulin_target"
|
||||||
|
# Do not recompile everything on every run
|
||||||
|
skip-clean = true
|
||||||
|
|
||||||
|
[report]
|
||||||
|
out = ["Html"]
|
||||||
|
output-dir = "target/tarpaulin"
|
74
flake.nix
74
flake.nix
|
@ -74,31 +74,77 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
packages = rec {
|
packages =
|
||||||
li7y = naersk'.buildPackage {
|
let
|
||||||
src = self;
|
# naersk does not easily allow overrideAttrs
|
||||||
};
|
commonNaerskConfigurarion = {
|
||||||
default = li7y;
|
src = self;
|
||||||
|
|
||||||
li7y-oci = pkgs.dockerTools.buildLayeredImage {
|
checkInputs = with pkgs; [
|
||||||
name = "li7y";
|
postgresql
|
||||||
tag = "latest";
|
postgresqlTestHook
|
||||||
|
];
|
||||||
|
|
||||||
contents = [
|
# otherwise the deps derivation is also tested (which just wastes time as there are no tests)
|
||||||
li7y
|
overrideMain = (o: o // {
|
||||||
];
|
doCheck = true;
|
||||||
|
});
|
||||||
|
|
||||||
config = {
|
# tests need to be able to create and drop databases
|
||||||
Cmd = [ "${li7y}/bin/li7y" ];
|
postgresqlTestUserOptions = "LOGIN SUPERUSER";
|
||||||
|
|
||||||
|
postgresqlTestSetupPost = ''
|
||||||
|
export DATABASE_URL="postgres://''${PGUSER}/''${PGDATABASE}?port=5432&host=''${PGHOST}"
|
||||||
|
'';
|
||||||
|
|
||||||
|
# Otherwise SQLx tries to infer the databse schema from an empty database
|
||||||
|
# (as it can only run the migrations once the test binary is built).
|
||||||
|
# Also, this enforces that the full query cache is included in the repository.
|
||||||
|
SQLX_OFFLINE = true;
|
||||||
|
};
|
||||||
|
in
|
||||||
|
rec {
|
||||||
|
li7y = naersk'.buildPackage commonNaerskConfigurarion;
|
||||||
|
default = li7y;
|
||||||
|
|
||||||
|
li7y-tarpaulin = naersk'.buildPackage (commonNaerskConfigurarion // {
|
||||||
|
name = "li7y-tarpaulin";
|
||||||
|
|
||||||
|
checkInputs = commonNaerskConfigurarion.checkInputs ++ (with pkgs; [
|
||||||
|
cargo-tarpaulin
|
||||||
|
]);
|
||||||
|
|
||||||
|
dontBuild = true;
|
||||||
|
singleStep = true; # tarpaulin uses different options anyway
|
||||||
|
|
||||||
|
cargoTestCommands = _: [ "cargo tarpaulin" ];
|
||||||
|
|
||||||
|
postInstall = ''
|
||||||
|
rm -r $out
|
||||||
|
cp -r target/tarpaulin $out
|
||||||
|
'';
|
||||||
|
});
|
||||||
|
|
||||||
|
li7y-oci = pkgs.dockerTools.buildLayeredImage {
|
||||||
|
name = "li7y";
|
||||||
|
tag = "latest";
|
||||||
|
|
||||||
|
contents = [
|
||||||
|
li7y
|
||||||
|
];
|
||||||
|
|
||||||
|
config = {
|
||||||
|
Cmd = [ "${li7y}/bin/li7y" ];
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
|
||||||
|
|
||||||
devShells.default = pkgs.mkShell {
|
devShells.default = pkgs.mkShell {
|
||||||
buildInputs = [
|
buildInputs = [
|
||||||
rustPackageDev
|
rustPackageDev
|
||||||
] ++ (with pkgs; [
|
] ++ (with pkgs; [
|
||||||
cargo-deny
|
cargo-deny
|
||||||
|
cargo-tarpaulin
|
||||||
cargo-watch
|
cargo-watch
|
||||||
clippy
|
clippy
|
||||||
graphviz
|
graphviz
|
||||||
|
|
Loading…
Reference in a new issue