diff options
Diffstat (limited to 'default.nix')
-rw-r--r-- | default.nix | 112 |
1 files changed, 23 insertions, 89 deletions
diff --git a/default.nix b/default.nix index 3f814b9..de75f93 100644 --- a/default.nix +++ b/default.nix @@ -5,10 +5,7 @@ let sha256 = "0hk4y2vkgm1qadpsm4b0q1vxq889jhxzjx3ragybrlwwg54mzp4f"; }) { }; pkgs = pkgsUnstable; - rootSrc = pkgs.nix-gitignore.gitignoreSource [] ./.; - nixfmt = import (builtins.fetchTarball - "https://github.com/serokell/nixfmt/archive/master.tar.gz") { }; # Taken from: # http://www.cs.yale.edu/homes/lucas.paul/posts/2017-04-10-hakyll-on-nix.html @@ -23,94 +20,53 @@ let ghc -O2 -dynamic --make Main.hs -o $out/bin/build-site ''; }; - baseTask = pkgs.stdenv.mkDerivation { - name = "website-task"; +in rec { + utils = import ./utils.nix { + pkgs = pkgs; src = rootSrc; - buildInputs = [pkgs.perl]; - phases = "unpackPhase buildPhase"; - buildPhase = '' - echo "ERROR: base task buildPhase not overriden." - exit 1 - ''; + baseName = "website"; }; -in with pkgs; -with pkgs.stdenv; rec { subtasks = rec { - fixme = baseTask.overrideAttrs (baseAttrs: { - name = "${baseAttrs.name}-fixme"; - buildInputs = baseAttrs.buildInputs ++ [ag]; - buildPhase = '' - ag FIXME --ignore default.nix --ignore pastebin/skeleton.org || { - touch $out - } - ''; - }); - perlPodCheck = baseTask.overrideAttrs (baseAttrs: { + perlPodCheck = utils.baseTask.overrideAttrs (baseAttrs: { name = "${baseAttrs.name}-perl-podcheck"; + buildInputs = baseAttrs.buildInputs ++ [pkgs.perl]; buildPhase = '' podchecker website pastebin/website-pastebin slides/website-slides touch $out ''; }); - batsTest = baseTask.overrideAttrs (baseAttrs: { + batsTest = utils.baseTask.overrideAttrs (baseAttrs: { name = "${baseAttrs.name}-bats-test"; - buildInputs = baseAttrs.buildInputs ++ [bats]; + buildInputs = baseAttrs.buildInputs ++ [pkgs.bats pkgs.perl]; buildPhase = '' patchShebangs . ./t/website.bats touch $out ''; }); - perlInternalTest = baseTask.overrideAttrs (baseAttrs: { + perlInternalTest = utils.baseTask.overrideAttrs (baseAttrs: { name = "${baseAttrs.name}-perl-test"; + buildInputs = baseAttrs.buildInputs ++ [pkgs.perl]; buildPhase = '' patchShebangs . ./website test 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 - ''; - }); - hunspellCheck = baseTask.overrideAttrs (baseAttrs: { + hunspellCheck = utils.baseTask.overrideAttrs (baseAttrs: { name = "${baseAttrs.name}-hunspell"; buildInputs = baseAttrs.buildInputs - ++ [(hunspellWithDicts (with hunspellDicts; [en-us]))]; + ++ [(pkgs.hunspellWithDicts (with pkgs.hunspellDicts; [en-us]))]; buildPhase = '' - # Required by =sort= and =hunspell= - export LANG=C.UTF-8 - - for DICT in spelling/*.txt; do - diff <(sort $DICT) $DICT || { - echo "The $DICT dictionary is unsorted. To fix it, run:" - echo " LANG=C.UTF-8 sort $DICT | sponge $DICT" - exit 1 - } - done - - HTML_DIR="${subtasks.docs}" - hunspell -l -p <(cat spelling/international.dic.txt spelling/en_US.dic.txt spelling/en_US.aff.txt) -d en_US -i utf-8 $(find "$HTML_DIR" -type f -name '*.html') | tee spelling.txt - [[ -s spelling.txt ]] && { - echo "Mispelled words detected by hunspell." - exit 1 - } - + patchShebangs . + ./spelling/check-spelling.sh "${subtasks.docs}" touch $out ''; }); - docs = baseTask.overrideAttrs (baseAttrs: { + docs = utils.baseTask.overrideAttrs (baseAttrs: { name = "${baseAttrs.name}-docs"; src = ./site; - buildInputs = [ websiteBuilder pandoc ]; + buildInputs = [ websiteBuilder pkgs.pandoc ]; buildPhase = '' export LOCALE_ARCHIVE="${pkgs.glibcLocales}/lib/locale/locale-archive"; export LANG=en_US.UTF-8 @@ -124,44 +80,22 @@ with pkgs.stdenv; rec { ''; }); }; - test = baseTask.overrideAttrs (baseAttrs: rec { - name = "${baseAttrs.name}-test"; - buildInputs = [ - subtasks.fixme + test = utils.test [ + utils.formatNix + (utils.shellcheck null) + (utils.fixme ["pastebin/skeleton.org" "utils.nix"]) subtasks.perlPodCheck subtasks.batsTest subtasks.perlInternalTest - subtasks.formatNix subtasks.hunspellCheck ]; - buildPhase = '' - echo "Ran tests for:" - for d in ${builtins.toString buildInputs}; do - echo " $d" - done - echo "All tests passed!" - touch $out - ''; - }); - shell = mkShell rec { + shell = pkgs.mkShell rec { name = "website-shell"; buildInputs = [ websiteBuilder (pkgs.haskellPackages.ghcWithPackages (p: with p; [hakyll])) - nixfmt - (hunspellWithDicts (with hunspellDicts; [en-us])) + (pkgs.hunspellWithDicts (with pkgs.hunspellDicts; [en-us])) ]; }; - publishScript = pkgs.writeShellScriptBin "publish.sh" '' - set -euo pipefail - ${pkgs.rsync}/bin/rsync --verbose \ - --copy-links \ - --progress \ - --stats \ - --update \ - --recursive \ - --rsh="ssh -o StrictHostKeyChecking=no" \ - ${subtasks.docs}/ \ - "$SERVER_URL:$DOCS_SERVER_PATH" - ''; + publishScript = utils.publishScript subtasks.docs; } |