isle/default.nix

171 lines
3.9 KiB
Nix
Raw Normal View History

2023-02-15 13:58:47 +00:00
{
buildSystem ? builtins.currentSystem,
2023-03-25 14:58:20 +00:00
hostSystem ? buildSystem,
pkgsNix ? (import ./nix/pkgs.nix),
2023-02-15 13:58:47 +00:00
revision ? "dev",
2023-03-25 14:58:20 +00:00
releaseName ? "dev",
2023-02-15 13:58:47 +00:00
}: let
pkgs = pkgsNix.default {
inherit buildSystem hostSystem;
};
2023-03-25 14:58:20 +00:00
pkgsNative = pkgsNix.default {
inherit buildSystem;
hostSystem = buildSystem;
};
2023-02-15 13:58:47 +00:00
garageNix = (import ./nix/garage.nix);
2023-02-15 13:58:47 +00:00
in rec {
2022-10-20 20:30:30 +00:00
version = pkgs.stdenv.mkDerivation {
name = "isle-version";
2023-03-25 14:58:20 +00:00
inherit buildSystem hostSystem revision releaseName;
2023-03-25 14:58:20 +00:00
nativeBuildInputs = [ pkgsNative.git ];
2022-10-20 20:30:30 +00:00
goVersion = pkgs.go.version;
2023-02-15 13:58:47 +00:00
garageVersion = garageNix.version;
nixpkgsVersion = pkgsNix.version;
builder = builtins.toFile "builder.sh" ''
source $stdenv/setup
versionFile=version
2023-03-25 14:58:20 +00:00
echo "Release: $releaseName" >> "$versionFile"
echo "Platform: $hostSystem" >> "$versionFile"
echo "Git Revision: $revision" >> "$versionFile"
echo "Go Version: $goVersion" >> "$versionFile"
echo "Garage Version: $garageVersion" >> "$versionFile"
echo "NixPkgs Version: $nixpkgsVersion" >> "$versionFile"
echo "Build Platform: $buildSystem" >> "$versionFile"
mkdir -p "$out"/share
cp "$versionFile" "$out"/share
'';
};
goBinaries = pkgs.buildGoModule {
pname = "isle-go-binaries";
version = "unstable";
# If this seems pointless, that's because it is! buildGoModule doesn't like
# it if the src derivation's name ends in "-go". So this mkDerivation here
# only serves to give buildGoModule a src derivation with a name it likes.
src = pkgs.stdenv.mkDerivation {
name = "isle-go-src";
src = ./go;
builder = builtins.toFile "builder.sh" ''
source $stdenv/setup
cp -r "$src" "$out"
'';
};
2024-12-10 12:52:57 +00:00
vendorHash = "sha256-vq4M/vs2637maLyileJunBXa38Z7g498C8P44qUCvk0=";
subPackages = [
"./cmd/entrypoint"
];
};
dnsmasq = (pkgs.callPackage ./nix/dnsmasq.nix {
stdenv = pkgs.pkgsStatic.stdenv;
});
nebula = pkgs.callPackage ./nix/nebula.nix {};
garage = let
hostPlatform = pkgs.stdenv.hostPlatform.parsed;
2023-02-15 13:58:47 +00:00
in pkgs.callPackage garageNix.package {
inherit buildSystem;
hostSystem = "${hostPlatform.cpu.name}-unknown-${hostPlatform.kernel.name}-musl";
pkgsSrc = pkgsNix.src;
};
2024-10-05 19:12:29 +00:00
appDirBase = pkgs.buildEnv {
name = "isle-AppDir-base";
paths = [
./AppDir
version
dnsmasq
nebula
garage
pkgs.minio-client
];
2024-10-05 19:12:29 +00:00
};
2024-10-05 19:12:29 +00:00
appDir = pkgs.stdenv.mkDerivation {
name = "isle-AppDir";
2024-10-05 19:12:29 +00:00
src = appDirBase;
inherit goBinaries;
builder = builtins.toFile "build.sh" ''
source $stdenv/setup
cp -rL "$src" "$out"
chmod +w "$out" -R
cd "$out"
2024-10-05 19:12:29 +00:00
cp $goBinaries/bin/entrypoint ./AppRun
'';
};
2024-10-05 19:12:29 +00:00
devShell = pkgs.mkShell {
buildInputs = [
pkgs.go
pkgs.golangci-lint
pkgs.gopls
2024-10-05 19:12:29 +00:00
(pkgs.callPackage ./nix/gowrap.nix {})
2024-11-09 22:17:10 +00:00
pkgs.go-mockery
2024-10-05 19:12:29 +00:00
];
shellHook = ''
true # placeholder
'';
};
testShell = pkgs.mkShell {
APPDIR = appDirBase;
buildInputs = [
pkgs.go
];
};
build = rec {
appImage = pkgs.stdenv.mkDerivation {
name = "isle-AppImage";
src = appDir;
nativeBuildInputs = [
(pkgsNative.callPackage ./nix/appimagetool.nix {})
];
ARCH = pkgs.stdenv.hostPlatform.parsed.cpu.name;
builder = builtins.toFile "build.sh" ''
source $stdenv/setup
cp -rL "$src" isle.AppDir
chmod +w isle.AppDir -R
export VERSION=debug
# https://github.com/probonopd/go-appimage/issues/155
unset SOURCE_DATE_EPOCH
appimagetool ./isle.AppDir
mkdir -p "$out"/bin
mv Isle-* "$out"/bin/isle
'';
};
archPkg = ((import ./dist/linux/arch) {
inherit hostSystem releaseName appImage;
pkgs = pkgsNative;
});
};
}