From b2d1b1eb71223dac7b97de8e41533620dc935fb5 Mon Sep 17 00:00:00 2001 From: Alexander Kobjolke Date: Fri, 8 Nov 2024 00:10:09 +0100 Subject: [PATCH] feat: Setup development environment The environment includes java, maven, IntelliJ and a postgres server. --- .envrc | 3 ++ .gitignore | 9 ++++ devenv.lock | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++++ devenv.nix | 70 +++++++++++++++++++++++++++++++ devenv.yaml | 16 ++++++++ 5 files changed, 214 insertions(+) create mode 100644 .envrc create mode 100644 devenv.lock create mode 100644 devenv.nix create mode 100644 devenv.yaml diff --git a/.envrc b/.envrc new file mode 100644 index 0000000..894571b --- /dev/null +++ b/.envrc @@ -0,0 +1,3 @@ +source_url "https://raw.githubusercontent.com/cachix/devenv/82c0147677e510b247d8b9165c54f73d32dfd899/direnvrc" "sha256-7u4iDd1nZpxL4tCzmPG0dQgC5V+/44Ba+tHkPob1v2k=" + +use devenv diff --git a/.gitignore b/.gitignore index ef2e37e..0a60382 100644 --- a/.gitignore +++ b/.gitignore @@ -29,3 +29,12 @@ replay_pid* result result-* +# Devenv +.devenv* +devenv.local.nix + +# direnv +.direnv + +# pre-commit +.pre-commit-config.yaml diff --git a/devenv.lock b/devenv.lock new file mode 100644 index 0000000..f0ba1fa --- /dev/null +++ b/devenv.lock @@ -0,0 +1,116 @@ +{ + "nodes": { + "devenv": { + "locked": { + "dir": "src/modules", + "lastModified": 1730890834, + "owner": "cachix", + "repo": "devenv", + "rev": "c5353d1a0483b8f0dc15933de91c6b1b9a892831", + "type": "github" + }, + "original": { + "dir": "src/modules", + "owner": "cachix", + "repo": "devenv", + "type": "github" + } + }, + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "gitignore": { + "inputs": { + "nixpkgs": [ + "pre-commit-hooks", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1730958623, + "owner": "nixos", + "repo": "nixpkgs", + "rev": "85f7e662eda4fa3a995556527c87b2524b691933", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-stable": { + "locked": { + "lastModified": 1730883749, + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "dba414932936fde69f0606b4f1d87c5bc0003ede", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-24.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "pre-commit-hooks": { + "inputs": { + "flake-compat": "flake-compat", + "gitignore": "gitignore", + "nixpkgs": [ + "nixpkgs" + ], + "nixpkgs-stable": "nixpkgs-stable" + }, + "locked": { + "lastModified": 1730814269, + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "rev": "d70155fdc00df4628446352fc58adc640cd705c2", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "type": "github" + } + }, + "root": { + "inputs": { + "devenv": "devenv", + "nixpkgs": "nixpkgs", + "pre-commit-hooks": "pre-commit-hooks" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/devenv.nix b/devenv.nix new file mode 100644 index 0000000..22f9970 --- /dev/null +++ b/devenv.nix @@ -0,0 +1,70 @@ +{ + pkgs, + lib, + config, + inputs, + ... +}: + +{ + imports = [ ]; + + # https://devenv.sh/packages/ + packages = [ + pkgs.git + pkgs.jetbrains.idea-community-bin + ]; + + languages.java.enable = true; + languages.java.maven.enable = true; + languages.nix.enable = true; + + # https://devenv.sh/processes/ + # processes.cargo-watch.exec = "cargo-watch"; + + processes.flexinale-monolith.exec = '' + java -Dspring.datasource.url=jdbc:postgresql://localhost:5432/monolith -jar flex-training-flexinale/flexinale-monolith/target/flexinale-monolith-2024.3.0-spring-boot-fat-jar.jar + ''; + + # https://devenv.sh/services/ + services.postgres = { + enable = true; + listen_addresses = "127.0.0.1"; + initialScript = + let + createDB = n: '' + CREATE DATABASE "${n}"; + GRANT ALL PRIVILEGES ON DATABASE "${n}" TO "flexinale"; + ''; + in + '' + CREATE USER flexinale WITH SUPERUSER PASSWORD 'flexinale'; + '' + + (lib.strings.concatMapStringsSep "\n" createDB [ + "monolith" + "modulith-1" + "modulith-2" + "distributed-backoffice" + "distributed-besucherportal" + "distributed-ticketing" + "distributed-test" + ]); + }; + + # https://devenv.sh/scripts/ + scripts.monolith-load.exec = '' + cd ${config.env.DEVENV_ROOT}/flex-training-flexinale + mvn test -Dtest=testdata.TestDataLoader -pl flexinale-monolith -am + ''; + + # https://devenv.sh/tests/ + enterTest = '' + echo "Running tests" + git --version | grep --color=auto "${pkgs.git.version}" + ''; + + # https://devenv.sh/pre-commit-hooks/ + pre-commit.hooks.shellcheck.enable = true; + + # See full reference at https://devenv.sh/reference/options/ +} diff --git a/devenv.yaml b/devenv.yaml new file mode 100644 index 0000000..d8b8f76 --- /dev/null +++ b/devenv.yaml @@ -0,0 +1,16 @@ +# yaml-language-server: $schema=https://devenv.sh/devenv.schema.json +inputs: + nixpkgs: + url: github:nixos/nixpkgs/nixpkgs-unstable + #url: github:cachix/devenv-nixpkgs/rolling + +# If you're using non-OSS software, you can set allowUnfree to true. +# allowUnfree: true + +# If you're willing to use a package that's vulnerable +# permittedInsecurePackages: +# - "openssl-1.1.1w" + +# If you have more than one devenv you can merge them +#imports: +# - ./backend