isle/default.nix

184 lines
4.7 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
# We allow passing in the revision because nix flakes have their own mechanism
# for determining the git revision, and they don't have the git repo present
# to determine it off of the normal way.
revision ? null,
2023-03-25 14:58:20 +00:00
releaseName ? "dev",
buildNumber ? "1",
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;
};
2024-12-15 14:33:47 +00:00
garageNix = (import ./nix/garage);
2023-02-15 13:58:47 +00:00
in rec {
2022-10-20 20:30:30 +00:00
revisionFile = if builtins.isNull revision
then pkgsNative.stdenv.mkDerivation {
name = "revision.txt";
nativeBuildInputs = [ pkgsNative.git ];
src = ./.git;
phases = [ "installPhase" ];
installPhase = ''
git -c safe.directory='*' -C $src describe --tags > $out
'';
}
else pkgsNative.writeText "revision.txt" revision;
version = pkgs.stdenv.mkDerivation {
name = "isle-version";
inherit buildSystem hostSystem revisionFile;
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
echo "Version: $(cat $revisionFile)" >> "$versionFile"
echo "Platform: $hostSystem" >> "$versionFile"
echo "Go Version: $goVersion" >> "$versionFile"
echo "Garage Version: $garageVersion" >> "$versionFile"
echo "NixPkgs Version: $nixpkgsVersion" >> "$versionFile"
echo "Build Platform: $buildSystem" >> "$versionFile"
mkdir -p "$out"
cp "$versionFile" "$out"/version
'';
};
entrypoint = {
systemRoot ? null,
}: (pkgs.buildGoModule {
pname = "isle-entrypoint";
version = builtins.readFile revisionFile;
# 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.runCommand "isle-go-src" {} ''cp -r "${./go}" "$out"'';
2024-12-18 21:20:28 +00:00
vendorHash = "sha256-uq+UgoVKqMUE4hEVlMFQnZuyFOilUyZDmiy7ASrq338=";
subPackages = [ "./cmd/entrypoint" ];
}).overrideAttrs (prev: {
ldflags = prev.ldflags ++
(if builtins.isNull systemRoot
then []
else [ "-X main.systemRoot=${systemRoot}" ]);
});
dnsmasq = (pkgs.callPackage ./nix/dnsmasq.nix {
stdenv = pkgs.pkgsStatic.stdenv;
});
nebula = pkgs.callPackage ./nix/nebula.nix {};
garage = garageNix.package {
inherit pkgsNix buildSystem hostSystem;
};
appDirBase = pkgs.runCommand "isle-AppDir-base" {} ''
mkdir -p "$out"/usr/libexec/isle
cp ${dnsmasq}/bin/* "$out"/usr/libexec/isle
cp ${nebula}/bin/* "$out"/usr/libexec/isle
cp ${garage}/bin/* "$out"/usr/libexec/isle
cp ${pkgs.minio-client}/bin/* "$out"/usr/libexec/isle
cp ${./AppDir}/* "$out"/
mkdir -p "$out"/usr/share/isle
cp ${version}/* "$out"/usr/share/isle
'';
appDir = { systemRoot ? null, }: pkgs.stdenv.mkDerivation {
2024-10-05 19:12:29 +00:00
name = "isle-AppDir";
2024-10-05 19:12:29 +00:00
src = appDirBase;
entrypoint = entrypoint { inherit systemRoot; };
builder = builtins.toFile "build.sh" ''
source $stdenv/setup
cp -rL "$src" "$out"
chmod +w "$out" -R
cd "$out"
mkdir -p ./usr/bin
cp $entrypoint/bin/entrypoint ./usr/bin/isle
ln -s ./usr/bin/isle ./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
];
};
appimagekit = pkgsNative.callPackage ./nix/appimagetool {
inherit hostSystem;
};
build = rec {
appImage = pkgs.stdenv.mkDerivation {
name = "isle-AppImage";
src = appDir {};
inherit revisionFile;
nativeBuildInputs = [ appimagekit ];
builder = builtins.toFile "build.sh" ''
source $stdenv/setup
cp -rL "$src" isle.AppDir
chmod +w isle.AppDir -R
export VERSION=$(cat $revisionFile)
mkdir -p "$out"/bin
appimagetool ./isle.AppDir "$out"/bin/isle
'';
};
archPkg = ((import ./dist/linux/arch) {
inherit hostSystem releaseName buildNumber;
pkgs = pkgsNative;
appDir = appDir { systemRoot = "/"; };
});
2024-12-20 11:49:01 +00:00
debPkg = ((import ./dist/linux/deb) {
inherit hostSystem releaseName buildNumber;
2024-12-20 11:49:01 +00:00
pkgs = pkgsNative;
appDir = appDir { systemRoot = "/"; };
});
};
}