aboutsummaryrefslogtreecommitdiff
path: root/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'default.nix')
-rw-r--r--default.nix112
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;
}