From 0924c52e118076abbfb13c09fc6e869613a02321 Mon Sep 17 00:00:00 2001 From: David Mejorado Date: Tue, 19 Nov 2024 12:59:14 -0800 Subject: [PATCH] feat: local development and CI tests We're using nix, direnv and devenv to run the project's tests in both dev and CI environments. --- .conform.yaml | 27 +++++++++ .envrc | 3 + .github/workflows/test.yml | 26 +++++++++ .gitignore | 16 +++++ README.md | 4 ++ devenv.lock | 116 +++++++++++++++++++++++++++++++++++++ devenv.nix | 17 ++++++ devenv.yaml | 15 +++++ 8 files changed, 224 insertions(+) create mode 100644 .conform.yaml create mode 100644 .envrc create mode 100644 .github/workflows/test.yml create mode 100644 devenv.lock create mode 100644 devenv.nix create mode 100644 devenv.yaml diff --git a/.conform.yaml b/.conform.yaml new file mode 100644 index 0000000..61580d0 --- /dev/null +++ b/.conform.yaml @@ -0,0 +1,27 @@ +policies: + - type: commit + spec: + header: + length: 89 + imperative: true + case: lower + invalidLastCharacters: . + body: + required: true + dco: false + gpg: + required: true + spellcheck: + locale: US + maximumOfOneCommit: false + conventional: + scopes: + - master + - deps + types: + - feat + - fix + - chore + - deps + - docs + - ci diff --git a/.envrc b/.envrc new file mode 100644 index 0000000..5bf8fc1 --- /dev/null +++ b/.envrc @@ -0,0 +1,3 @@ +source_url "https://raw.githubusercontent.com/cachix/devenv/95f329d49a8a5289d31e0982652f7058a189bfca/direnvrc" "sha256-d+8cBpDfDBj41inrADaJt+bDWhOktwslgoP5YiGJ1v0=" + +use devenv \ No newline at end of file diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..01b9437 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,26 @@ +name: "Test" + +on: + pull_request: + push: + branches: + - master + +jobs: + tests: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + - uses: cachix/install-nix-action@v26 + - uses: cachix/cachix-action@v14 + with: + name: devenv + - name: Install devenv.sh + run: nix profile install nixpkgs#devenv + + - name: Build the devenv shell and run any pre-commit hooks + run: devenv test + + - name: OpenRailRouting tests + run: devenv shell mvn test diff --git a/.gitignore b/.gitignore index abe6e14..4d0765a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ # data graph-cache/ +data/ # web frontend **/node_modules @@ -154,3 +155,18 @@ buildNumber.properties .mvn/wrapper/maven-wrapper.jar # End of https://www.gitignore.io/api/java,macos,maven,intellij +# Devenv +.devenv* +devenv.local.nix + +# direnv +.direnv + +# pre-commit +.pre-commit-config.yaml + +# jdtls +.classpath +.factorypath +.project +.settings/ diff --git a/README.md b/README.md index 8ef7fe7..ff6601a 100644 --- a/README.md +++ b/README.md @@ -35,6 +35,10 @@ Missing features: This project includes a web frontend which is a fork of the original GraphHopper web frontend. +## Development environment + +We're using nix with [direnv](https://direnv.net/) and [devenv](https://devenv.sh/) to manage our development environment. + ## Building This project uses Maven (for the Java code) and NodeJS for the web frontend for building. diff --git a/devenv.lock b/devenv.lock new file mode 100644 index 0000000..82b9209 --- /dev/null +++ b/devenv.lock @@ -0,0 +1,116 @@ +{ + "nodes": { + "devenv": { + "locked": { + "dir": "src/modules", + "lastModified": 1731169617, + "owner": "cachix", + "repo": "devenv", + "rev": "983153344922e5fb8545aae7e5e70127da981a71", + "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": 1716977621, + "owner": "cachix", + "repo": "devenv-nixpkgs", + "rev": "4267e705586473d3e5c8d50299e71503f16a6fb6", + "type": "github" + }, + "original": { + "owner": "cachix", + "ref": "rolling", + "repo": "devenv-nixpkgs", + "type": "github" + } + }, + "nixpkgs-stable": { + "locked": { + "lastModified": 1730963269, + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "83fb6c028368e465cd19bb127b86f971a5e41ebc", + "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..c59d2a1 --- /dev/null +++ b/devenv.nix @@ -0,0 +1,17 @@ +{ pkgs, lib, config, inputs, ... }: + +{ + languages.java.enable = true; + languages.java.maven.enable = true; + languages.javascript.enable = true; + + cachix.enable = false; + + packages = with pkgs; [ + osmctools + ]; + + pre-commit.hooks = { + conform.enable = true; + }; +} diff --git a/devenv.yaml b/devenv.yaml new file mode 100644 index 0000000..116a2ad --- /dev/null +++ b/devenv.yaml @@ -0,0 +1,15 @@ +# yaml-language-server: $schema=https://devenv.sh/devenv.schema.json +inputs: + nixpkgs: + 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