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:
|
||||
nix-build -A install
|
||||
all:
|
||||
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
|
||||
|
||||
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";
|
||||
mlSMTPAddr = "";
|
||||
mlSMTPAuth = "";
|
||||
dataDir = "/tmp/mediocre-blog-data";
|
||||
publicURL = "http://localhost:4000";
|
||||
listenProto = "tcp";
|
||||
listenAddr = ":4000";
|
||||
redisListenPath = "/tmp/mediocre-blog-redis";
|
||||
|
||||
# If empty then a derived static directory is used
|
||||
staticProxyURL = "http://127.0.0.1:4001";
|
||||
}
|
||||
|
62
default.nix
62
default.nix
@ -1,28 +1,27 @@
|
||||
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;
|
||||
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}"
|
||||
'';
|
||||
baseConfig ? import ./config.nix,
|
||||
|
||||
redisCfg = pkgs.writeText "mediocregopher-mediocre-blog-redisCfg" ''
|
||||
}: rec {
|
||||
|
||||
config = baseConfig // {
|
||||
redisListenPath = "${config.runDir}/redis";
|
||||
};
|
||||
|
||||
static = (import ./static) { inherit pkgs; };
|
||||
|
||||
srv = (import ./srv) {
|
||||
inherit pkgs config;
|
||||
staticBuild=static.build;
|
||||
};
|
||||
|
||||
redisCfg = pkgs.writeText "mediocre-blog-redisCfg" ''
|
||||
port 0
|
||||
unixsocket ${config.redisListenPath}
|
||||
daemonize no
|
||||
@ -33,19 +32,19 @@ in
|
||||
dir ${config.dataDir}/redis
|
||||
'';
|
||||
|
||||
redisBin = pkgs.writeScript "mediocregopher-mediocre-blog-redisBin" ''
|
||||
redisBin = pkgs.writeScript "mediocre-blog-redisBin" ''
|
||||
#!/bin/sh
|
||||
mkdir -p ${config.dataDir}/redis
|
||||
exec ${pkgs.redis}/bin/redis-server ${redisCfg}
|
||||
'';
|
||||
|
||||
circusCfg = pkgs.writeText "mediocregopher-mediocre-blog-circusCfg" ''
|
||||
circusCfg = pkgs.writeText "mediocre-blog-circusCfg" ''
|
||||
[circus]
|
||||
endpoint = tcp://127.0.0.1:0
|
||||
pubsub_endpoint = tcp://127.0.0.1:0
|
||||
|
||||
[watcher:srv]
|
||||
cmd = ${srvBin}
|
||||
cmd = ${srv.bin}
|
||||
numprocesses = 1
|
||||
|
||||
[watcher:redis]
|
||||
@ -53,11 +52,14 @@ in
|
||||
numprocesses = 1
|
||||
'';
|
||||
|
||||
circusBin = pkgs.writeScript "mediocregopher-mediocre-blog-circusBin" ''
|
||||
entrypoint = pkgs.writeScript "mediocre-blog-entrypoint" ''
|
||||
#!/bin/sh
|
||||
mkdir -p ${config.runDir}
|
||||
mkdir -p ${config.dataDir}
|
||||
exec ${pkgs.circus}/bin/circusd ${circusCfg}
|
||||
'';
|
||||
|
||||
service = pkgs.writeText "mediocregopher-mediocre-blog" ''
|
||||
service = pkgs.writeText "mediocre-blog" ''
|
||||
[Unit]
|
||||
Description=mediocregopher mediocre blog
|
||||
Requires=network.target
|
||||
@ -67,13 +69,13 @@ in
|
||||
Restart=always
|
||||
RestartSec=1s
|
||||
User=mediocregopher
|
||||
ExecStart=${circusBin}
|
||||
ExecStart=${entrypoint}
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
'';
|
||||
|
||||
install = pkgs.writeScript "mediocregopher-mediocre-blog" ''
|
||||
install = pkgs.writeScript "mediocre-blog" ''
|
||||
set -e -x
|
||||
|
||||
sudo cp ${service} /etc/systemd/system/mediocregopher-mediocre-blog.service
|
||||
@ -81,4 +83,4 @@ in
|
||||
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,9 +1,18 @@
|
||||
let
|
||||
utils = (import ../nix) {};
|
||||
pkgs = utils.pkgs;
|
||||
system = utils.system;
|
||||
in
|
||||
{
|
||||
{pkgs, config, staticBuild}: rec {
|
||||
|
||||
opts = [
|
||||
"-pow-secret=${config.powSecret}"
|
||||
"-ml-smtp-addr=${config.mlSMTPAddr}"
|
||||
"-ml-smtp-auth='${config.mlSMTPAuth}'"
|
||||
"-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}" ]
|
||||
);
|
||||
|
||||
build = pkgs.buildGoModule {
|
||||
pname = "mediocre-blog-srv";
|
||||
@ -12,9 +21,18 @@ in
|
||||
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 ];
|
||||
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
|
||||
utils = (import ../nix) {};
|
||||
pkgs = utils.pkgs;
|
||||
system = utils.system;
|
||||
{pkgs}: rec {
|
||||
|
||||
jekyll_env = pkgs.bundlerEnv {
|
||||
name = "jekyll_env";
|
||||
depInputs = [ pkgs.imagemagick pkgs.exiftool pkgs.bundler pkgs.bundix ];
|
||||
|
||||
depShell = pkgs.stdenv.mkDerivation {
|
||||
name = "mediocre-blog-static-dep-shell";
|
||||
buildInputs = depInputs;
|
||||
};
|
||||
|
||||
jekyllEnv = pkgs.bundlerEnv {
|
||||
name = "jekyllEnv";
|
||||
ruby = pkgs.ruby;
|
||||
gemdir = ./.;
|
||||
};
|
||||
|
||||
dep_inputs = [ pkgs.imagemagick pkgs.exiftool pkgs.bundler pkgs.bundix ];
|
||||
all_inputs = [ jekyll_env ] ++ dep_inputs;
|
||||
in
|
||||
{
|
||||
build = derivation {
|
||||
inherit jekyll_env system;
|
||||
|
||||
build = pkgs.stdenv.mkDerivation {
|
||||
name = "mediocre-blog-static";
|
||||
builder = "${pkgs.bash}/bin/bash";
|
||||
args = [
|
||||
(pkgs.writeTextFile {
|
||||
name = "mediocre-blog-static-buildsh";
|
||||
text = ''
|
||||
source ${pkgs.stdenv}/setup
|
||||
set -e
|
||||
src = ./src;
|
||||
buildPhase = "${jekyllEnv}/bin/jekyll build";
|
||||
installPhase = "mv _site $out";
|
||||
};
|
||||
|
||||
mkdir -p "$out"
|
||||
$jekyll_env/bin/jekyll build -s "${./src}" -d "$out"
|
||||
serve = pkgs.writeScriptBin "static-serve" ''
|
||||
#!/bin/sh
|
||||
exec ${jekyllEnv}/bin/jekyll serve \
|
||||
-s ./src \
|
||||
-d ./_site \
|
||||
-w -I -D \
|
||||
-P 4001
|
||||
'';
|
||||
executable = true;
|
||||
})
|
||||
];
|
||||
};
|
||||
|
||||
dev = pkgs.stdenv.mkDerivation {
|
||||
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 {
|
||||
name = "mediocre-blog-static-dep-shell";
|
||||
buildInputs = dep_inputs;
|
||||
};
|
||||
allInputs = depInputs ++ [ jekyllEnv serve ];
|
||||
|
||||
shell = pkgs.stdenv.mkDerivation {
|
||||
name = "mediocre-blog-static-shell";
|
||||
buildInputs = all_inputs;
|
||||
buildInputs = allInputs;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user