diff options
author | EuAndreh <eu@euandre.org> | 2019-06-04 15:02:04 -0300 |
---|---|---|
committer | EuAndreh <eu@euandre.org> | 2019-06-04 15:02:29 -0300 |
commit | c12079c3b61a5f795350a29c71322d932162e260 (patch) | |
tree | fb9a18b26e91602285eabc30d30da1c5c25a0619 | |
parent | TODOs.org (diff) | |
download | server-c12079c3b61a5f795350a29c71322d932162e260.tar.gz server-c12079c3b61a5f795350a29c71322d932162e260.tar.xz |
Add utils.nix and remove common derivations from default.nix
-rw-r--r-- | default.nix | 103 | ||||
-rw-r--r-- | utils.nix | 96 |
2 files changed, 120 insertions, 79 deletions
diff --git a/default.nix b/default.nix index 9ed4049..4ea1ec0 100644 --- a/default.nix +++ b/default.nix @@ -1,51 +1,14 @@ -let - pkgsUnstable = import <nixpkgs> { }; - pkgsPinned = import (pkgsUnstable.fetchzip { - url = "https://github.com/NixOS/nixpkgs/archive/18.03.zip"; - sha256 = "0hk4y2vkgm1qadpsm4b0q1vxq889jhxzjx3ragybrlwwg54mzp4f"; - }) { }; - pkgs = pkgsUnstable; - - nixfmt = import (builtins.fetchTarball - "https://github.com/serokell/nixfmt/archive/master.tar.gz") { }; - - baseTask = pkgs.stdenv.mkDerivation { - name = "vps-task"; +let pkgs = import <nixpkgs> { }; +in rec { + utils = import ./utils.nix { + pkgs = pkgs; src = pkgs.nix-gitignore.gitignoreSource [ ] ./.; - phases = "unpackPhase buildPhase"; - buildInputs = [ ]; - buildPhase = '' - echo "ERROR: base task buildPhase not overriden." - exit 1 - ''; + baseName = "dotfiles"; }; -in with pkgs; -with pkgs.stdenv; rec { subtasks = rec { - shellCheck = baseTask.overrideAttrs (baseAttrs: { - name = "${baseAttrs.name}-shellcheck"; - buildInputs = baseAttrs.buildInputs ++ [ shellcheck ]; - buildPhase = '' - find . -type f -name '*.sh' | xargs shellcheck - touch $out - ''; - }); - fixme = baseTask.overrideAttrs (baseAttrs: { - name = "${baseAttrs.name}-fixme"; - buildInputs = baseAttrs.buildInputs ++ [ ag ]; - buildPhase = '' - ag FIXME --ignore default.nix || { - touch $out - exit 0 - } - echo "^^^^^^^^^^^^^^^^^" - echo " Found dangling FIXME markers on the project xp" - exit 1 - ''; - }); - formatTerraform = baseTask.overrideAttrs (baseAttrs: { + formatTerraform = utils.baseTask.overrideAttrs (baseAttrs: { name = "${baseAttrs.name}-format-terraform"; - buildInputs = baseAttrs.buildInputs ++ [ terraform ]; + buildInputs = baseAttrs.buildInputs ++ [ pkgs.terraform ]; buildPhase = '' terraform fmt -check=true -diff=true || { echo "Terraform files are unformatted. To fix it, run:" @@ -55,9 +18,9 @@ with pkgs.stdenv; rec { touch $out ''; }); - dockerComposeLint = baseTask.overrideAttrs (baseAttrs: { + dockerComposeLint = utils.baseTask.overrideAttrs (baseAttrs: { name = "${baseAttrs.name}-docker-compose-lint"; - buildInputs = baseAttrs.buildInputs ++ [ docker-compose ]; + buildInputs = baseAttrs.buildInputs ++ [ pkgs.docker-compose ]; buildPhase = '' source .envrc docker-compose config &> /dev/null || { @@ -67,41 +30,23 @@ with pkgs.stdenv; rec { touch $out ''; }); - formatNix = baseTask.overrideAttrs (baseAttrs: { - name = "${baseAttrs.name}-nixfmt"; - buildInputs = baseAttrs.buildInputs ++ [ nixfmt ]; - buildPhase = '' - diff <(nixfmt < default.nix) default.nix || { - echo "The default.nix is unformatted. To fix it, run:" - echo " nixfmt default.nix" - exit 1 - } - touch $out - ''; - }); }; - test = baseTask.overrideAttrs (baseAttrs: rec { - name = "${baseAttrs.name}-test"; - buildInputs = [ - subtasks.shellCheck - subtasks.fixme - subtasks.formatTerraform - subtasks.dockerComposeLint - subtasks.formatNix - ]; - buildPhase = '' - echo "Ran tests for:" - for d in ${builtins.toString buildInputs}; do - echo " $d" - done - echo "All tests passed!" - touch $out - ''; - }); + test = utils.test [ + (utils.shellcheck null) + (utils.fixme null) + utils.formatNix + subtasks.formatTerraform + subtasks.dockerComposeLint + ]; # Used in .build.yml to run Bash scripts - shell = mkShell rec { + shell = pkgs.mkShell rec { name = "vps-shell"; - buildInputs = - [ gitMinimal git-crypt gettext terraform-providers.digitalocean terraform ]; + buildInputs = with pkgs; [ + gitMinimal + git-crypt + gettext + terraform-providers.digitalocean + terraform + ]; }; } diff --git a/utils.nix b/utils.nix new file mode 100644 index 0000000..3167399 --- /dev/null +++ b/utils.nix @@ -0,0 +1,96 @@ +{ pkgs, src, baseName }: +let + nixfmt = import (builtins.fetchTarball + "https://github.com/serokell/nixfmt/archive/master.tar.gz") { }; +in rec { + baseTask = pkgs.stdenv.mkDerivation { + name = "${baseName}-task"; + src = src; + buildInputs = [ ]; + phases = "unpackPhase buildPhase"; + buildPhase = '' + echo "ERROR: base task buildPhase not overriden." + exit 1 + ''; + }; + shellcheck = ignoredFindPattern: + baseTask.overrideAttrs (baseAttrs: rec { + name = "${baseAttrs.name}-shellcheck"; + buildInputs = baseAttrs.buildInputs ++ [ pkgs.shellcheck ]; + ignoredPattern = + if ignoredFindPattern == null then "" else ignoredFindPattern; + buildPhase = '' + find . -type f \( -name '*.sh' -and -regextype egrep ! -regex '${ignoredPattern}' \) -print0 | xargs -0 shellcheck -x + touch $out + ''; + }); + formatNix = baseTask.overrideAttrs (baseAttrs: { + name = "${baseAttrs.name}-nixfmt"; + buildInputs = baseAttrs.buildInputs ++ [ nixfmt ]; + buildPhase = '' + format() { + nix_file="$1" + diff <(nixfmt < "$nix_file") "$nix_file" || { + echo "The $nix_file is unformatted. To fix it, run:" + echo " nixfmt $nix_file" + exit 1 + } + } + export -f format + find . -type f -name '*.nix' -print0 | xargs -0 -I{} bash -c "format {}" \; + touch $out + ''; + }); + fixme = ignoredFiles: + baseTask.overrideAttrs (baseAttrs: rec { + name = "${baseAttrs.name}-fixme"; + buildInputs = baseAttrs.buildInputs ++ [ pkgs.ag ]; + ignoredPattern = pkgs.lib.fold (a: b: " --ignore ${a} ${b}") "" + (if ignoredFiles == null then [ + "utils.nix" + "TODOs.org" + ] else + ignoredFiles); + buildPhase = '' + ag FIXME ${ignoredPattern} || { + touch $out + exit 0 + } + echo " Found dangling FIXME markers on the project." + echo " You should write them down properly on TODOs.org." + exit 1 + ''; + }); + readmeOrg = title: + baseTask.overrideAttrs (baseAttrs: { + name = "${baseAttrs.name}-readme-docs"; + buildInputs = [ pkgs.pandoc ]; + buildPhase = '' + pandoc README.org -o $out --css docs/README.css --to=html5 --self-contained --metadata title="${title}" + ''; + }); + test = testDerivations: + baseTask.overrideAttrs (baseAttrs: { + name = "${baseAttrs.name}-test"; + buildPhase = '' + echo "Ran tests for:" + for d in ${builtins.toString testDerivations}; do + echo " $d" + done + echo "All tests passed!" + touch $out + ''; + }); + overwritingPublishScript = { docsDerivation, overwrite ? true }: + pkgs.writeShellScriptBin "publish.sh" '' + set -euo pipefail + OUT_DOCS="${docsDerivation}" + ${ + if overwrite then "" else "# " + }${pkgs.openssh}/bin/ssh -o StrictHostKeyChecking=no "$SERVER_URL" rm -rf "$DOCS_SERVER_PATH/*" + ${pkgs.rsync}/bin/rsync -avzP \ + --rsh="ssh -o StrictHostKeyChecking=no" \ + "$OUT_DOCS/" \ + "$SERVER_URL:$DOCS_SERVER_PATH" + ''; +} |