diff --git a/.gitignore b/.gitignore index 525b0b8..d7ae60c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ .direnv/ +.dev/ result/ .DS_Store rust/target diff --git a/nix/packages/mx-aliases-devenv-up/default.nix b/nix/packages/mx-aliases-devenv-up/default.nix new file mode 100644 index 0000000..2e7a6eb --- /dev/null +++ b/nix/packages/mx-aliases-devenv-up/default.nix @@ -0,0 +1,80 @@ +{ + pkgs, + lib, + ... +}: +let + mock-oidc-provider = pkgs.stdenvNoCC.mkDerivation (finalAttrs: { + pname = "mock-oidc-provider"; + version = "0.1.1"; + src = pkgs.fetchFromGitHub { + owner = "bluecatengineering"; + repo = "mock-oidc-provider"; + tag = "v${finalAttrs.version}"; + hash = "sha256-kGS8/4b/RuxUjr+GOeDXl2RCkBTu50gBdrrFwRhvRXE="; + }; + npmDeps = pkgs.fetchNpmDeps { + inherit (finalAttrs) src; + hash = "sha256-f+ZjL1sCcyFewKOCX54sHAv5TUBx6LiWZUhnSpY2t0I="; + }; + nativeBuildInputs = [ + pkgs.npmHooks.npmConfigHook + pkgs.npmHooks.npmInstallHook + pkgs.nodejs + ]; + + postInstall = '' + mkdir -p $out/bin + echo -e "#!${lib.getExe pkgs.bash}\nexec ${lib.getExe' pkgs.nodejs "node"} $out/lib/node_modules/@bluecateng/mock-oidc-provider/src/server.js" > $out/bin/mock-oidc-provider + chmod +x $out/bin/mock-oidc-provider + ''; + }); + start-postgres = pkgs.writeShellApplication { + name = "start-postgres"; + runtimeInputs = [ + pkgs.postgresql + pkgs.uutils-coreutils-noprefix + pkgs.khscodes.find-flake-root + ]; + text = '' + flake_root=$(find-flake-root) + PGDATA="$flake_root/.dev/mx-aliases/postgresql" + export PGDATA + PGPORT=55432 + export PGPORT + PGHOST=127.0.0.1 + export PGHOST + + if [[ ! -d "$PGDATA" ]]; then + initdb --locale=C --encoding=UTF8 + cp ${./postgresql.conf} "$PGDATA/postgresql.conf" + cp ${./pg_hba.conf} "$PGDATA/pg_hba.conf" + pg_ctl -D "$PGDATA" -w start -o "-c unix_socket_directories= -c listen_addresses=127.0.0.1,::1 -p 55432" + trap 'pg_ctl -D "$PGDATA" -m fast -w stop' EXIT + psql --dbname postgres < ${./init.sql} + pg_ctl -D "$PGDATA" -m fast -w stop + trap - EXIT + fi + exec postgres + ''; + }; +in +pkgs.writeShellApplication { + name = "mx-aliases-devenv-up"; + runtimeInputs = [ + start-postgres + mock-oidc-provider + ]; + text = '' + trap 'kill "$pg" > /dev/null 2> /dev/null || true; kill "$oidc" > /dev/null 2> /dev/null || true' EXIT + start-postgres & + pg=$! + + mock-oidc-provider & + oidc=$! + + + wait -n + wait -n + ''; +} diff --git a/nix/packages/mx-aliases-devenv-up/init.sql b/nix/packages/mx-aliases-devenv-up/init.sql new file mode 100644 index 0000000..3549185 --- /dev/null +++ b/nix/packages/mx-aliases-devenv-up/init.sql @@ -0,0 +1,3 @@ +CREATE ROLE postgres SUPERUSER; +CREATE ROLE "mx-aliases"; +CREATE DATABASE "mx-aliases" WITH OWNER "mx-aliases"; diff --git a/nix/packages/mx-aliases-devenv-up/pg_hba.conf b/nix/packages/mx-aliases-devenv-up/pg_hba.conf new file mode 100644 index 0000000..de846cf --- /dev/null +++ b/nix/packages/mx-aliases-devenv-up/pg_hba.conf @@ -0,0 +1,3 @@ +# TYPE DATABASE USER ADDRESS METHOD + host all all 127.0.0.1/32 trust + host all all ::1/128 trust diff --git a/nix/packages/mx-aliases-devenv-up/postgresql.conf b/nix/packages/mx-aliases-devenv-up/postgresql.conf new file mode 100644 index 0000000..16a4714 --- /dev/null +++ b/nix/packages/mx-aliases-devenv-up/postgresql.conf @@ -0,0 +1,3 @@ +listen_addresses='127.0.0.1,::1' +port = 55432 +unix_socket_directories='' diff --git a/nix/shells/default/default.nix b/nix/shells/default/default.nix index 9473286..47202e9 100644 --- a/nix/shells/default/default.nix +++ b/nix/shells/default/default.nix @@ -8,6 +8,7 @@ mkShell { packages = [ pkgs.nixd pkgs.nixfmt-rfc-style + pkgs.khscodes.mx-aliases-devenv-up ] ++ (lib.khscodes.mkRust pkgs "${inputs.self}/rust").devDeps ++ (import "${inputs.self}/mx-aliases" {