129 lines
3.5 KiB
Nix
129 lines
3.5 KiB
Nix
{ system ? builtins.currentSystem
|
|
, version ? "latest"
|
|
, rev ? ""
|
|
, commitTime ? "1970-01-01T00:00:00+00:00"
|
|
, repoUrl ? ""
|
|
}:
|
|
|
|
let
|
|
nixpkgs = builtins.fetchTarball {
|
|
url = "https://github.com/NixOS/nixpkgs/archive/4ecab3273592f27479a583fb6d975d4aba3486fe.tar.gz";
|
|
sha256 = "10wn0l08j9lgqcw8177nh2ljrnxdrpri7bp0g7nvrsn9rkawvlbf";
|
|
};
|
|
pkgs = import nixpkgs { inherit system; };
|
|
|
|
devshell = import
|
|
(pkgs.fetchFromGitHub {
|
|
owner = "numtide";
|
|
repo = "devshell";
|
|
rev = "5143ea68647c4cf5227e4ad2100db6671fc4c369";
|
|
sha256 = "sha256-9goJTd05yOyD/McaMqZ4BUB8JW+mZMnZQJZ7VQ6C/Lw=";
|
|
})
|
|
{ nixpkgs = pkgs; };
|
|
|
|
nodejs = pkgs.nodejs_20;
|
|
|
|
go = pkgs.go_1_20;
|
|
|
|
dream2nix = pkgs.dream2nix;
|
|
|
|
buildGoModule = pkgs.buildGoModule.override { inherit go; };
|
|
golangci-lint = pkgs.golangci-lint.override { inherit buildGoModule; };
|
|
|
|
src = pkgs.lib.cleanSource ./.;
|
|
uiSrc = pkgs.lib.cleanSource ./app/frontend;
|
|
|
|
package = pkgs.buildNpmPackage {
|
|
name = "ui";
|
|
buildInputs = [
|
|
nodejs
|
|
];
|
|
pname = "ui";
|
|
src = uiSrc;
|
|
buildPhase = ''
|
|
npm run check
|
|
npm run build
|
|
mkdir $out
|
|
cp -a dist $out
|
|
'';
|
|
npmInstallFlags = "--no-audit --no-progress --no-fund";
|
|
npmDepsHash = "sha256-dnUbw0kfAA50ZaQ91q/fC+gZhAGNo6vrSQBz6Qf2ngo=";
|
|
npmPackFlags = [ "--ignore-scripts" ];
|
|
};
|
|
|
|
server = buildGoModule {
|
|
inherit src version;
|
|
pname = "cv";
|
|
postPatch = ''
|
|
rm -rf app/server/internal/files/data/public
|
|
mkdir -p app/server/internal/files/data/public
|
|
touch app/server/internal/files/data/public/.gitkeep
|
|
cp -Tr ${package}/dist/ app/server/internal/files/data/public/
|
|
chmod +w -R app/server/internal/files/data/public
|
|
sed -i 's#<script#<script nonce="{{ .CspNonce }}"#g' app/server/internal/files/data/public/index.html
|
|
'';
|
|
CGO_ENABLED = 0;
|
|
ldflags = "-s -w -X gopkg.c3c.cz/cv/app/server/internal/version.Tag=${version} -X gopkg.c3c.cz/cv/app/server/internal/version.Commit=${rev} -X gopkg.c3c.cz/cv/app/server/internal/version.commitTime=${commitTime} -X gopkg.c3c.cz/cv/app/server/internal/version.repoUrl=${repoUrl}";
|
|
subPackages = [ "app/server" ];
|
|
vendorSha256 = "sha256-BkwXD8n62+p639vTLwXpCiY8cqYtCjWxaa5tuw78u5g=";
|
|
overrideModAttrs = (_: {
|
|
impureEnvVars = pkgs.lib.fetchers.proxyImpureEnvVars ++ [ "GIT_PROXY_COMMAND" "SOCKS_SERVER" "GOPROXY" ];
|
|
});
|
|
};
|
|
|
|
in
|
|
{
|
|
image = pkgs.dockerTools.streamLayeredImage {
|
|
name = "cv";
|
|
tag = version;
|
|
|
|
config = {
|
|
Env = [ "SSL_CERT_FILE=${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt" ];
|
|
Entrypoint = [ "${server}/bin/server" ];
|
|
};
|
|
};
|
|
|
|
shell = devshell.mkShell {
|
|
devshell = {
|
|
name = "c3c-cv";
|
|
packages = [
|
|
go
|
|
golangci-lint
|
|
|
|
nodejs
|
|
|
|
# keep pinned nixpkgs so they are not garbage collected
|
|
pkgs.path
|
|
];
|
|
};
|
|
|
|
commands = [
|
|
{
|
|
name = "lint";
|
|
help = "run golangci-lint and npm run check";
|
|
command = ''
|
|
cd ''$PRJ_ROOT
|
|
golangci-lint run --sort-results --out-format tab
|
|
npm --prefix app/frontend run check
|
|
'';
|
|
}
|
|
{
|
|
name = "fmt";
|
|
help = "Format and fix found issues";
|
|
command = ''
|
|
cd ''$PRJ_ROOT
|
|
golangci-lint run --sort-results --out-format tab --fix
|
|
npm --prefix app/frontend run fix
|
|
'';
|
|
}
|
|
{
|
|
name = "dev";
|
|
help = "Starts the javascript project in dev";
|
|
command = ''
|
|
npm --prefix ''$PRJ_ROOT/app/frontend run dev
|
|
'';
|
|
}
|
|
];
|
|
};
|
|
}
|