Files
sheetless-server/flake.nix
T
2026-06-04 11:35:58 +02:00

85 lines
2.3 KiB
Nix

{
description = "The server backend for the sheetless music reader.";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
flake-utils.url = "github:numtide/flake-utils";
};
outputs = {
nixpkgs,
flake-utils,
...
}:
flake-utils.lib.eachDefaultSystem (
system: let
pkgs = nixpkgs.legacyPackages.${system};
deploy-script = pkgs.writeShellScriptBin "deploy" ''
set -e; set -o pipefail; set -x;
# 1. Build the docker image
nix build .#docker
# 2. Authenticate if CI environment variables are present
if [ -n "''${REGISTRY_USERNAME:-}" ] && [ -n "''${REGISTRY_PASSWORD:-}" ]; then
echo "CI Environment detected: Logging in to Harbor."
${pkgs.skopeo}/bin/skopeo login gitlab.julian-mutter.de \
--username "''${HARBOR_USERNAME}" \
--password "''${HARBOR_PASSWORD}"
else
echo "Local Environment detected: Skipping login, relying on existing auth."
fi
# 3. Upload to container registry
${pkgs.skopeo}/bin/skopeo copy \
docker-archive:result \
docker://gitlab.julian-mutter.de/julian/sheetless-server:latest
'';
in {
devShells.default = pkgs.mkShell {
buildInputs = with pkgs; [
go
gopls
go-tools
deploy-script
];
};
packages = rec {
default = sheetless-server;
deploy = deploy-script;
sheetless-server = pkgs.buildGoModule {
pname = "sheetless-server";
version = "0.1.0";
src = ./src;
vendorHash = "sha256-jJe13G5zoUCY2SD9ZerN+6ahc/qOJ3oAhDXJgIhyuvw=";
};
docker = pkgs.dockerTools.buildLayeredImage {
name = "sheetless-server";
tag = "latest";
contents = with pkgs; [
dockerTools.usrBinEnv
dockerTools.binSh
dockerTools.caCertificates
coreutils
sheetless-server
];
config = {
Cmd = ["/bin/sheetless-server"];
Expose = "8080";
};
created = "now";
};
};
}
);
}