diff --git a/.gitignore b/.gitignore index 125bfe3..5d1242b 100644 --- a/.gitignore +++ b/.gitignore @@ -114,6 +114,10 @@ ENV/ env.bak/ venv.bak/ +#direnv +.envrc +.direnv + # Spyder project settings .spyderproject .spyproject diff --git a/do.sh b/do.sh index 2bbaaaf..ccea975 100644 --- a/do.sh +++ b/do.sh @@ -4,25 +4,47 @@ set -Eeuo pipefail # -e "Automatic exit from bash shell script on error" -u "Treat unset variables and parameters as errors" +checknix() { + if [[ "${DO_NIX_CUSTOM:=0}" -eq 1 ]]; then + echo "In an interactive nix env." + else + echo "Using poetry as runner, no nix detected." + fi +} + build() { echo "I am ${FUNCNAME[0]}ing" poetry build } -test() { - echo "I am ${FUNCNAME[0]}ing" - poetry run flake8 pdme tests - poetry run mypy pdme - poetry run pytest -} - fmt() { - poetry run black . + if [[ "${DO_NIX_CUSTOM:=0}" -eq 1 ]]; then + black . + else + poetry run black . + fi find . -type f -name "*.py" -exec sed -i -e 's/ /\t/g' {} \; } +test() { + echo "I am ${FUNCNAME[0]}ing" + if [[ "${DO_NIX_CUSTOM:=0}" -eq 1 ]]; then + flake8 pdme tests + mypy pdme + pytest + else + poetry run flake8 pdme tests + poetry run mypy pdme + poetry run pytest + fi +} + htmlcov() { - poetry run pytest --cov-report=html + if [[ "${DO_NIX_CUSTOM:=0}" -eq 1 ]]; then + pytest --cov-report=html + else + poetry run pytest --cov-report=html + fi } release() { @@ -30,7 +52,7 @@ release() { } all() { - build && test + build && fmt && test } "$@" # <- execute the task diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..971b191 --- /dev/null +++ b/flake.lock @@ -0,0 +1,95 @@ +{ + "nodes": { + "flake-utils": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + } + }, + "flake-utils_2": { + "locked": { + "lastModified": 1653893745, + "narHash": "sha256-0jntwV3Z8//YwuOjzhV2sgJJPt+HY6KhU7VZUL0fKZQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "1ed9fb1935d260de5fe1c2f7ee0ebaae17ed2fa1", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1648854265, + "narHash": "sha256-e/RlfodBOMr2SH9diDPYMraTWvhOWSSsXDQikHFdUvM=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e194871435cad8ffb1d64b64fb7df3b2b8a10088", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e194871435cad8ffb1d64b64fb7df3b2b8a10088", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1655043425, + "narHash": "sha256-A+oT+aQGhW5lXy8H0cqBLsYtgcnT5glmGOXWQDcGw6I=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "914ef51ffa88d9b386c71bdc88bffc5273c08ada", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "poetry2nix": { + "inputs": { + "flake-utils": "flake-utils_2", + "nixpkgs": "nixpkgs_2" + }, + "locked": { + "lastModified": 1654921554, + "narHash": "sha256-hkfMdQAHSwLWlg0sBVvgrQdIiBP45U1/ktmFpY4g2Mo=", + "owner": "nix-community", + "repo": "poetry2nix", + "rev": "7b71679fa7df00e1678fc3f1d1d4f5f372341b63", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "poetry2nix", + "rev": "7b71679fa7df00e1678fc3f1d1d4f5f372341b63", + "type": "github" + } + }, + "root": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs", + "poetry2nix": "poetry2nix" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..abeac54 --- /dev/null +++ b/flake.nix @@ -0,0 +1,55 @@ +{ + description = "Application packaged using poetry2nix"; + + inputs.flake-utils.url = "github:numtide/flake-utils?rev=0f8662f1319ad6abf89b3380dd2722369fc51ade"; + inputs.nixpkgs.url = "github:NixOS/nixpkgs?rev=e194871435cad8ffb1d64b64fb7df3b2b8a10088"; + inputs.poetry2nix.url = "github:nix-community/poetry2nix?rev=7b71679fa7df00e1678fc3f1d1d4f5f372341b63"; + + outputs = { self, nixpkgs, flake-utils, poetry2nix }: + { + # Nixpkgs overlay providing the application + overlay = nixpkgs.lib.composeManyExtensions [ + poetry2nix.overlay + (final: prev: { + # The application + pdme = prev.poetry2nix.mkPoetryApplication { + overrides = [ + prev.poetry2nix.defaultPoetryOverrides + ]; + projectDir = ./.; + }; + pdmeEnv = prev.poetry2nix.mkPoetryEnv { + overrides = [ + prev.poetry2nix.defaultPoetryOverrides + ]; + projectDir = ./.; + }; + }) + ]; + } // (flake-utils.lib.eachDefaultSystem (system: + let + pkgs = import nixpkgs { + inherit system; + overlays = [ self.overlay ]; + }; + in + { + apps = { + pdme = pkgs.pdme; + }; + + defaultApp = pkgs.pdme; + devShell = pkgs.mkShell { + buildInputs = [ + pkgs.poetry + pkgs.pdmeEnv + pkgs.pdme + ]; + shellHook = '' + export DO_NIX_CUSTOM=1 + ''; + packages = [ pkgs.nodejs-16_x ]; + }; + + })); +}