refactor how nix derivations are organized and built
This commit is contained in:
parent
0197d9cd49
commit
6feffc568a
25
Makefile
25
Makefile
@ -1,4 +1,25 @@
|
|||||||
|
|
||||||
install:
|
all:
|
||||||
nix-build -A install
|
nix-build -A entrypoint --arg baseConfig '(import ./config.nix) // { staticProxyURL = ""; }'
|
||||||
|
|
||||||
|
all.prod:
|
||||||
|
nix-build -A entrypoint --arg baseConfig '(import ./prod.config.nix)'
|
||||||
|
|
||||||
|
install.prod:
|
||||||
|
nix-build -A install --arg baseConfig '(import ./prod.config.nix)'
|
||||||
./result
|
./result
|
||||||
|
|
||||||
|
srv.shell:
|
||||||
|
nix-shell -A srv.shell --command 'cd srv; return'
|
||||||
|
|
||||||
|
static.shell:
|
||||||
|
nix-shell -A static.shell --command 'cd static; return'
|
||||||
|
|
||||||
|
static.serve:
|
||||||
|
nix-shell -A static.shell --run 'cd static; static-serve'
|
||||||
|
|
||||||
|
static.depShell:
|
||||||
|
nix-shell -A static.depShell --command 'cd static; return'
|
||||||
|
|
||||||
|
static.lock:
|
||||||
|
nix-shell -A static.depShell --run 'bundler lock; bundix; rm -rf .bundle vendor'
|
||||||
|
@ -1,10 +1,14 @@
|
|||||||
{
|
{
|
||||||
|
runDir = "/tmp/mediocre-blog/run";
|
||||||
|
dataDir = "/tmp/mediocre-blog/data";
|
||||||
|
|
||||||
powSecret = "ssshhh";
|
powSecret = "ssshhh";
|
||||||
mlSMTPAddr = "";
|
mlSMTPAddr = "";
|
||||||
mlSMTPAuth = "";
|
mlSMTPAuth = "";
|
||||||
dataDir = "/tmp/mediocre-blog-data";
|
|
||||||
publicURL = "http://localhost:4000";
|
publicURL = "http://localhost:4000";
|
||||||
listenProto = "tcp";
|
listenProto = "tcp";
|
||||||
listenAddr = ":4000";
|
listenAddr = ":4000";
|
||||||
redisListenPath = "/tmp/mediocre-blog-redis";
|
|
||||||
|
# If empty then a derived static directory is used
|
||||||
|
staticProxyURL = "http://127.0.0.1:4001";
|
||||||
}
|
}
|
||||||
|
144
default.nix
144
default.nix
@ -1,84 +1,86 @@
|
|||||||
let
|
{
|
||||||
utils = (import ./nix) {};
|
|
||||||
pkgs = utils.pkgs;
|
|
||||||
system = utils.system;
|
|
||||||
in
|
|
||||||
{config ? ./config.nix}: rec {
|
|
||||||
config = (import ./config.nix);
|
|
||||||
|
|
||||||
static = (import ./static).build;
|
pkgs ? import (fetchTarball {
|
||||||
|
name = "nixpkgs-21-05";
|
||||||
|
url = "https://github.com/NixOS/nixpkgs/archive/7e9b0dff974c89e070da1ad85713ff3c20b0ca97.tar.gz";
|
||||||
|
sha256 = "1ckzhh24mgz6jd1xhfgx0i9mijk6xjqxwsshnvq789xsavrmsc36";
|
||||||
|
}) {},
|
||||||
|
|
||||||
srv = (import ./srv).build;
|
baseConfig ? import ./config.nix,
|
||||||
srvBin = pkgs.writeScript "mediocregopher-mediocre-blog-srvBin" ''
|
|
||||||
#!/bin/sh
|
|
||||||
exec ${srv}/bin/mediocre-blog \
|
|
||||||
-pow-secret "${config.powSecret}" \
|
|
||||||
-ml-smtp-addr "${config.mlSMTPAddr}" \
|
|
||||||
-ml-smtp-auth "${config.mlSMTPAuth}" \
|
|
||||||
-data-dir "${config.dataDir}" \
|
|
||||||
-public-url "${config.publicURL}" \
|
|
||||||
-static-dir "${static}" \
|
|
||||||
-listen-proto "${config.listenProto}" \
|
|
||||||
-listen-addr "${config.listenAddr}"
|
|
||||||
'';
|
|
||||||
|
|
||||||
redisCfg = pkgs.writeText "mediocregopher-mediocre-blog-redisCfg" ''
|
}: rec {
|
||||||
port 0
|
|
||||||
unixsocket ${config.redisListenPath}
|
|
||||||
daemonize no
|
|
||||||
loglevel notice
|
|
||||||
logfile ""
|
|
||||||
appendonly yes
|
|
||||||
appendfilename "appendonly.aof"
|
|
||||||
dir ${config.dataDir}/redis
|
|
||||||
'';
|
|
||||||
|
|
||||||
redisBin = pkgs.writeScript "mediocregopher-mediocre-blog-redisBin" ''
|
config = baseConfig // {
|
||||||
#!/bin/sh
|
redisListenPath = "${config.runDir}/redis";
|
||||||
mkdir -p ${config.dataDir}/redis
|
};
|
||||||
exec ${pkgs.redis}/bin/redis-server ${redisCfg}
|
|
||||||
'';
|
|
||||||
|
|
||||||
circusCfg = pkgs.writeText "mediocregopher-mediocre-blog-circusCfg" ''
|
static = (import ./static) { inherit pkgs; };
|
||||||
[circus]
|
|
||||||
endpoint = tcp://127.0.0.1:0
|
|
||||||
pubsub_endpoint = tcp://127.0.0.1:0
|
|
||||||
|
|
||||||
[watcher:srv]
|
srv = (import ./srv) {
|
||||||
cmd = ${srvBin}
|
inherit pkgs config;
|
||||||
numprocesses = 1
|
staticBuild=static.build;
|
||||||
|
};
|
||||||
|
|
||||||
[watcher:redis]
|
redisCfg = pkgs.writeText "mediocre-blog-redisCfg" ''
|
||||||
cmd = ${redisBin}
|
port 0
|
||||||
numprocesses = 1
|
unixsocket ${config.redisListenPath}
|
||||||
'';
|
daemonize no
|
||||||
|
loglevel notice
|
||||||
|
logfile ""
|
||||||
|
appendonly yes
|
||||||
|
appendfilename "appendonly.aof"
|
||||||
|
dir ${config.dataDir}/redis
|
||||||
|
'';
|
||||||
|
|
||||||
circusBin = pkgs.writeScript "mediocregopher-mediocre-blog-circusBin" ''
|
redisBin = pkgs.writeScript "mediocre-blog-redisBin" ''
|
||||||
exec ${pkgs.circus}/bin/circusd ${circusCfg}
|
#!/bin/sh
|
||||||
'';
|
mkdir -p ${config.dataDir}/redis
|
||||||
|
exec ${pkgs.redis}/bin/redis-server ${redisCfg}
|
||||||
|
'';
|
||||||
|
|
||||||
service = pkgs.writeText "mediocregopher-mediocre-blog" ''
|
circusCfg = pkgs.writeText "mediocre-blog-circusCfg" ''
|
||||||
[Unit]
|
[circus]
|
||||||
Description=mediocregopher mediocre blog
|
endpoint = tcp://127.0.0.1:0
|
||||||
Requires=network.target
|
pubsub_endpoint = tcp://127.0.0.1:0
|
||||||
After=network.target
|
|
||||||
|
|
||||||
[Service]
|
[watcher:srv]
|
||||||
Restart=always
|
cmd = ${srv.bin}
|
||||||
RestartSec=1s
|
numprocesses = 1
|
||||||
User=mediocregopher
|
|
||||||
ExecStart=${circusBin}
|
|
||||||
|
|
||||||
[Install]
|
[watcher:redis]
|
||||||
WantedBy=multi-user.target
|
cmd = ${redisBin}
|
||||||
'';
|
numprocesses = 1
|
||||||
|
'';
|
||||||
|
|
||||||
install = pkgs.writeScript "mediocregopher-mediocre-blog" ''
|
entrypoint = pkgs.writeScript "mediocre-blog-entrypoint" ''
|
||||||
set -e -x
|
#!/bin/sh
|
||||||
|
mkdir -p ${config.runDir}
|
||||||
|
mkdir -p ${config.dataDir}
|
||||||
|
exec ${pkgs.circus}/bin/circusd ${circusCfg}
|
||||||
|
'';
|
||||||
|
|
||||||
sudo cp ${service} /etc/systemd/system/mediocregopher-mediocre-blog.service
|
service = pkgs.writeText "mediocre-blog" ''
|
||||||
sudo systemctl daemon-reload
|
[Unit]
|
||||||
sudo systemctl enable mediocregopher-mediocre-blog.service
|
Description=mediocregopher mediocre blog
|
||||||
sudo systemctl restart mediocregopher-mediocre-blog.service
|
Requires=network.target
|
||||||
'';
|
After=network.target
|
||||||
}
|
|
||||||
|
[Service]
|
||||||
|
Restart=always
|
||||||
|
RestartSec=1s
|
||||||
|
User=mediocregopher
|
||||||
|
ExecStart=${entrypoint}
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
'';
|
||||||
|
|
||||||
|
install = pkgs.writeScript "mediocre-blog" ''
|
||||||
|
set -e -x
|
||||||
|
|
||||||
|
sudo cp ${service} /etc/systemd/system/mediocregopher-mediocre-blog.service
|
||||||
|
sudo systemctl daemon-reload
|
||||||
|
sudo systemctl enable mediocregopher-mediocre-blog.service
|
||||||
|
sudo systemctl restart mediocregopher-mediocre-blog.service
|
||||||
|
'';
|
||||||
|
}
|
||||||
|
@ -1,13 +0,0 @@
|
|||||||
{
|
|
||||||
pkgs ? import (fetchTarball {
|
|
||||||
name = "nixpkgs-21-05";
|
|
||||||
url = "https://github.com/NixOS/nixpkgs/archive/7e9b0dff974c89e070da1ad85713ff3c20b0ca97.tar.gz";
|
|
||||||
sha256 = "1ckzhh24mgz6jd1xhfgx0i9mijk6xjqxwsshnvq789xsavrmsc36";
|
|
||||||
}) {},
|
|
||||||
system ? builtins.currentSystem,
|
|
||||||
}:
|
|
||||||
{
|
|
||||||
pkgs = pkgs;
|
|
||||||
system = system;
|
|
||||||
}
|
|
||||||
|
|
@ -1,7 +0,0 @@
|
|||||||
build:
|
|
||||||
nix-build -A build
|
|
||||||
|
|
||||||
shell:
|
|
||||||
nix-shell -A shell
|
|
||||||
|
|
||||||
|
|
@ -1,20 +1,38 @@
|
|||||||
let
|
{pkgs, config, staticBuild}: rec {
|
||||||
utils = (import ../nix) {};
|
|
||||||
pkgs = utils.pkgs;
|
|
||||||
system = utils.system;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
|
|
||||||
build = pkgs.buildGoModule {
|
opts = [
|
||||||
pname = "mediocre-blog-srv";
|
"-pow-secret=${config.powSecret}"
|
||||||
version = "dev";
|
"-ml-smtp-addr=${config.mlSMTPAddr}"
|
||||||
src = ./.;
|
"-ml-smtp-auth='${config.mlSMTPAuth}'"
|
||||||
vendorSha256 = "08wv94yv2wmlxzmanw551gixc8v8nl6zq2m721ig9nl3r540x46f";
|
"-data-dir=${config.dataDir}"
|
||||||
};
|
"-public-url=${config.publicURL}"
|
||||||
|
"-listen-proto=${config.listenProto}"
|
||||||
|
"-listen-addr=${config.listenAddr}"
|
||||||
|
] ++ (
|
||||||
|
if config.staticProxyURL == ""
|
||||||
|
then [ "-static-dir=${staticBuild}" ]
|
||||||
|
else [ "-static-proxy-url=${config.staticProxyURL}" ]
|
||||||
|
);
|
||||||
|
|
||||||
shell = pkgs.stdenv.mkDerivation {
|
build = pkgs.buildGoModule {
|
||||||
name = "mediocre-blog-srv-shell";
|
pname = "mediocre-blog-srv";
|
||||||
buildInputs = [ pkgs.go ];
|
version = "dev";
|
||||||
};
|
src = ./.;
|
||||||
|
vendorSha256 = "08wv94yv2wmlxzmanw551gixc8v8nl6zq2m721ig9nl3r540x46f";
|
||||||
|
};
|
||||||
|
|
||||||
}
|
bin = pkgs.writeScript "mediocre-blog-srv-bin" ''
|
||||||
|
#!/bin/sh
|
||||||
|
exec ${build}/bin/mediocre-blog ${toString opts}
|
||||||
|
'';
|
||||||
|
|
||||||
|
runScript = pkgs.writeScriptBin "run-mediocre-blog" ''
|
||||||
|
go run ./cmd/mediocre-blog/main.go ${toString opts}
|
||||||
|
'';
|
||||||
|
|
||||||
|
shell = pkgs.stdenv.mkDerivation {
|
||||||
|
name = "mediocre-blog-srv-shell";
|
||||||
|
buildInputs = [ pkgs.go runScript ];
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
@ -1,18 +0,0 @@
|
|||||||
build:
|
|
||||||
nix-build -A build
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm -f result
|
|
||||||
rm -rf _site
|
|
||||||
|
|
||||||
dev:
|
|
||||||
nix-shell -A dev
|
|
||||||
|
|
||||||
shell:
|
|
||||||
nix-shell -A shell
|
|
||||||
|
|
||||||
lock:
|
|
||||||
nix-shell -A depShell --run 'bundler lock; bundix; rm -rf .bundle vendor'
|
|
||||||
|
|
||||||
update:
|
|
||||||
nix-shell -A depShell --run 'bundler update; bundler lock; bundix; rm -rf .bundle vendor'
|
|
@ -1,53 +1,39 @@
|
|||||||
let
|
{pkgs}: rec {
|
||||||
utils = (import ../nix) {};
|
|
||||||
pkgs = utils.pkgs;
|
|
||||||
system = utils.system;
|
|
||||||
|
|
||||||
jekyll_env = pkgs.bundlerEnv {
|
depInputs = [ pkgs.imagemagick pkgs.exiftool pkgs.bundler pkgs.bundix ];
|
||||||
name = "jekyll_env";
|
|
||||||
|
depShell = pkgs.stdenv.mkDerivation {
|
||||||
|
name = "mediocre-blog-static-dep-shell";
|
||||||
|
buildInputs = depInputs;
|
||||||
|
};
|
||||||
|
|
||||||
|
jekyllEnv = pkgs.bundlerEnv {
|
||||||
|
name = "jekyllEnv";
|
||||||
ruby = pkgs.ruby;
|
ruby = pkgs.ruby;
|
||||||
gemdir = ./.;
|
gemdir = ./.;
|
||||||
};
|
};
|
||||||
|
|
||||||
dep_inputs = [ pkgs.imagemagick pkgs.exiftool pkgs.bundler pkgs.bundix ];
|
|
||||||
all_inputs = [ jekyll_env ] ++ dep_inputs;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
build = derivation {
|
|
||||||
inherit jekyll_env system;
|
|
||||||
|
|
||||||
name = "mediocre-blog-static";
|
build = pkgs.stdenv.mkDerivation {
|
||||||
builder = "${pkgs.bash}/bin/bash";
|
name = "mediocre-blog-static";
|
||||||
args = [
|
src = ./src;
|
||||||
(pkgs.writeTextFile {
|
buildPhase = "${jekyllEnv}/bin/jekyll build";
|
||||||
name = "mediocre-blog-static-buildsh";
|
installPhase = "mv _site $out";
|
||||||
text = ''
|
};
|
||||||
source ${pkgs.stdenv}/setup
|
|
||||||
set -e
|
|
||||||
|
|
||||||
mkdir -p "$out"
|
serve = pkgs.writeScriptBin "static-serve" ''
|
||||||
$jekyll_env/bin/jekyll build -s "${./src}" -d "$out"
|
#!/bin/sh
|
||||||
'';
|
exec ${jekyllEnv}/bin/jekyll serve \
|
||||||
executable = true;
|
-s ./src \
|
||||||
})
|
-d ./_site \
|
||||||
];
|
-w -I -D \
|
||||||
};
|
-P 4001
|
||||||
|
'';
|
||||||
|
|
||||||
dev = pkgs.stdenv.mkDerivation {
|
allInputs = depInputs ++ [ jekyllEnv serve ];
|
||||||
name = "mediocre-blog-static-dev";
|
|
||||||
buildInputs = all_inputs;
|
|
||||||
shellHook = ''
|
|
||||||
exec ${jekyll_env}/bin/jekyll serve -s ./src -d ./_site -w -I -D -H 0.0.0.0 -P 4001
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
depShell = pkgs.stdenv.mkDerivation {
|
shell = pkgs.stdenv.mkDerivation {
|
||||||
name = "mediocre-blog-static-dep-shell";
|
name = "mediocre-blog-static-shell";
|
||||||
buildInputs = dep_inputs;
|
buildInputs = allInputs;
|
||||||
};
|
};
|
||||||
|
}
|
||||||
shell = pkgs.stdenv.mkDerivation {
|
|
||||||
name = "mediocre-blog-static-shell";
|
|
||||||
buildInputs = all_inputs;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
Loading…
Reference in New Issue
Block a user