From 1c6397ccdebd0d7a94bc125749a6630dbebec867 Mon Sep 17 00:00:00 2001 From: Gabriel Gonzalez Date: Tue, 7 Jan 2020 18:29:56 -0800 Subject: [PATCH] Improve coverage for `./scripts/generate.sh` (#100) `./scripts/generate.sh` will now also auto-update the `./examples/*.dhall` files and `./package.dhall`, too --- Makefile | 23 ----------- README.md | 7 ++-- examples/deployment.dhall | 5 ++- examples/ingress.dhall | 3 +- examples/service.dhall | 5 ++- nix/dhall-kubernetes.nix | 86 +++++++++++++++++++++++++++++++-------- scripts/generate.sh | 10 ++--- 7 files changed, 89 insertions(+), 50 deletions(-) delete mode 100644 Makefile diff --git a/Makefile b/Makefile deleted file mode 100644 index 9da06e07..00000000 --- a/Makefile +++ /dev/null @@ -1,23 +0,0 @@ -.PHONY: install build check default - -default: build -README.md: docs/README.md.dhall - ./scripts/build-readme.sh - -build: README.md - mkdir -p types defaults - dhall-kubernetes-generator "${OPENAPI_SPEC}" - - dhall freeze --all --inplace ./types.dhall - dhall freeze --all --inplace ./typesUnion.dhall - dhall freeze --all --inplace ./defaults.dhall - dhall freeze --all --inplace ./schemas.dhall -check: build - LC_ALL=en_US.UTF-8 ./scripts/check-source.py - mkdir -p tmp - LC_ALL=en_US.UTF-8 ./scripts/build-examples.py tmp -install: build - cp -r types defaults schemas "${out}" - cp types.dhall defaults.dhall typesUnion.dhall schemas.dhall "${out}" - cp README.md "${out}" - diff --git a/README.md b/README.md index 27a72702..f74a64e9 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@ In the following example, we: -- examples/deploymentSimple.dhall let kubernetes = - ../package.dhall sha256:0a6949aabfb5a1250f08c4e3a533024d4705bea98ace08d8d107417e54a9648a + ../package.dhall sha256:63eb2e2bb9a50632801b673e67e666740c09c89deb0a0d0592d165178b5eba53 let deployment = kubernetes.Deployment::{ @@ -144,14 +144,15 @@ Things to note in the following example: ```dhall -- examples/ingress.dhall -let Prelude = ../Prelude.dhall +let Prelude = + ../Prelude.dhall sha256:771c7131fc87e13eb18f770a27c59f9418879f7e230ba2a50e46f4461f43ec69 let map = Prelude.List.map let kv = Prelude.JSON.keyText let kubernetes = - ../package.dhall sha256:0a6949aabfb5a1250f08c4e3a533024d4705bea98ace08d8d107417e54a9648a + ../package.dhall sha256:63eb2e2bb9a50632801b673e67e666740c09c89deb0a0d0592d165178b5eba53 let Service = { name : Text, host : Text, version : Text } diff --git a/examples/deployment.dhall b/examples/deployment.dhall index c746d7c7..e63c87ce 100644 --- a/examples/deployment.dhall +++ b/examples/deployment.dhall @@ -1,7 +1,10 @@ +let Prelude = + ../Prelude.dhall sha256:771c7131fc87e13eb18f770a27c59f9418879f7e230ba2a50e46f4461f43ec69 + let kubernetes = ../package.dhall sha256:0a6949aabfb5a1250f08c4e3a533024d4705bea98ace08d8d107417e54a9648a -let kv = (../Prelude.dhall).JSON.keyText +let kv = Prelude.JSON.keyText let deployment = kubernetes.Deployment::{ diff --git a/examples/ingress.dhall b/examples/ingress.dhall index c9851df0..865f3b04 100644 --- a/examples/ingress.dhall +++ b/examples/ingress.dhall @@ -1,4 +1,5 @@ -let Prelude = ../Prelude.dhall +let Prelude = + ../Prelude.dhall sha256:771c7131fc87e13eb18f770a27c59f9418879f7e230ba2a50e46f4461f43ec69 let map = Prelude.List.map diff --git a/examples/service.dhall b/examples/service.dhall index ca0fd40a..afe30e32 100644 --- a/examples/service.dhall +++ b/examples/service.dhall @@ -1,7 +1,10 @@ +let Prelude = + ../Prelude.dhall sha256:771c7131fc87e13eb18f770a27c59f9418879f7e230ba2a50e46f4461f43ec69 + let kubernetes = ../package.dhall sha256:0a6949aabfb5a1250f08c4e3a533024d4705bea98ace08d8d107417e54a9648a -let kv = (../Prelude.dhall).JSON.keyText +let kv = Prelude.JSON.keyText let spec = { selector = [ kv "app" "nginx" ] diff --git a/nix/dhall-kubernetes.nix b/nix/dhall-kubernetes.nix index f9ee2387..9f13131b 100644 --- a/nix/dhall-kubernetes.nix +++ b/nix/dhall-kubernetes.nix @@ -1,4 +1,5 @@ -{ dhall +{ coreutils +, dhall , dhall-json , dhallPackages , glibcLocales @@ -8,22 +9,75 @@ , python3 , stdenv }: + let # Ignore generated files - ignoreOutputs = name: type: !(lib.elem name (map toString [../README.md ../types ../defaults ../schemas ../defaults.dhall ../types.dhall ../typesUnion.dhall ../schemas.dhall ])); + ignoreOutputs = + name: type: + !(lib.elem name + (map toString + [ ../README.md + ../types + ../defaults + ../schemas + ../defaults.dhall + ../types.dhall + ../typesUnion.dhall + ../schemas.dhall + ] + ) + ); + in -stdenv.mkDerivation { - name = "dhall-kubernetes"; - DHALL_PRELUDE = "${dhallPackages.prelude}/package.dhall"; - OPENAPI_SPEC = "${kubernetes-openapi-spec}"; - doCheck = true; - buildInputs = [ haskellPackages.dhall-kubernetes-generator dhall dhall-json python3 glibcLocales ]; - preBuild = '' - patchShebangs ./scripts/build-readme.sh - ''; - preCheck = '' - patchShebangs ./scripts/build-examples.py - patchShebangs ./scripts/check-source.py - ''; - src = lib.cleanSourceWith {filter = ignoreOutputs; src = lib.cleanSource ./..;}; + stdenv.mkDerivation { + name = "dhall-kubernetes"; + + DHALL_PRELUDE = "${dhallPackages.prelude}/package.dhall"; + + XDG_CACHE_HOME = "."; + + buildInputs = + [ dhall + dhall-json + python3 + glibcLocales + ]; + + buildPhase = '' + patchShebangs ./scripts/build-readme.sh + + ./scripts/build-readme.sh + + ${coreutils}/bin/mkdir -p types defaults + + ${haskellPackages.dhall-kubernetes-generator}/bin/dhall-kubernetes-generator '${kubernetes-openapi-spec}' + + for file in ./types.dhall ./typesUnion.dhall ./defaults.dhall ./schemas.dhall ./package.dhall ./examples/*.dhall; do + echo "Freezing file '$file'" + + ${dhall}/bin/dhall freeze --all --inplace "$file" + done + ''; + + checkPhase = '' + patchShebangs ./scripts/build-examples.py + + patchShebangs ./scripts/check-source.py + + LC_ALL=en_US.UTF-8 ./scripts/check-source.py + + mkdir -p tmp + + LC_ALL=en_US.UTF-8 ./scripts/build-examples.py tmp + ''; + + installPhase = '' + ${coreutils}/bin/mkdir --parents "$out" + + cp -r types defaults schemas examples types.dhall defaults.dhall typesUnion.dhall schemas.dhall package.dhall README.md "$out" + ''; + + src = + lib.cleanSourceWith + { filter = ignoreOutputs; src = lib.cleanSource ./..; }; } diff --git a/scripts/generate.sh b/scripts/generate.sh index d32672ff..e3fb9287 100755 --- a/scripts/generate.sh +++ b/scripts/generate.sh @@ -1,5 +1,5 @@ #!/bin/sh -if dir=$(nix-build release.nix -A dhall-kubernetes --no-out-link); then +if dir=$(nix-build release.nix --attr dhall-kubernetes --no-out-link); then rm -rf ./defaults ./types cp -r "$dir"/defaults . chmod u+w ./defaults @@ -7,10 +7,10 @@ if dir=$(nix-build release.nix -A dhall-kubernetes --no-out-link); then chmod u+w ./types cp -r "$dir"/schemas . chmod u+w ./schemas - cp "$dir"/types.dhall "$dir"/typesUnion.dhall "$dir"/defaults.dhall "$dir"/schemas.dhall . - chmod u+w ./types.dhall ./typesUnion.dhall ./defaults.dhall ./schemas.dhall + cp -r "$dir"/examples . + chmod u+w ./examples + cp "$dir"/types.dhall "$dir"/typesUnion.dhall "$dir"/defaults.dhall "$dir"/schemas.dhall "$dir"/package.dhall . + chmod u+w ./types.dhall ./typesUnion.dhall ./defaults.dhall ./schemas.dhall ./package.dhall cp "$dir/README.md" README.md chmod u+w ./README.md fi - -