90 lines
2.5 KiB
Nix
90 lines
2.5 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 registry."
|
|
|
|
# 3. Upload to container registry
|
|
${pkgs.skopeo}/bin/skopeo copy \
|
|
--dest-creds "''${REGISTRY_USERNAME}:''${REGISTRY_PASSWORD}" \
|
|
--insecure-policy \
|
|
docker-archive:result \
|
|
docker://gitlab.julian-mutter.de/julian/sheetless-server:latest
|
|
else
|
|
echo "Local Environment detected: Skipping login, relying on existing auth."
|
|
|
|
# 3. Upload to container registry
|
|
${pkgs.skopeo}/bin/skopeo copy \
|
|
--insecure-policy \
|
|
docker-archive:result \
|
|
docker://gitlab.julian-mutter.de/julian/sheetless-server:latest
|
|
fi
|
|
'';
|
|
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";
|
|
};
|
|
};
|
|
}
|
|
);
|
|
}
|