From 41791362c6794ff14bf9f9ef095e2a8070032046 Mon Sep 17 00:00:00 2001 From: Brian Hicks Date: Wed, 28 Oct 2020 22:34:44 -0500 Subject: [PATCH] add shake options --- Shakefile.hs | 194 +++++++++++++++++++++++++++------------------------ 1 file changed, 101 insertions(+), 93 deletions(-) diff --git a/Shakefile.hs b/Shakefile.hs index 83bafbfb..5160ddc9 100644 --- a/Shakefile.hs +++ b/Shakefile.hs @@ -6,114 +6,122 @@ import Development.Shake.Util main :: IO () main = -- TODO: better shake options. Parallelism, hash changes. - shakeArgs shakeOptions {shakeFiles = "_build"} $ do - -- things that should be kept under version control - "tests/elm-verify-examples.json" %> \out -> do - need ["elm.json"] - Stdout newConfig <- cmd "jq" "--indent" "4" ["{ root: \"../src\", tests: .[\"exposed-modules\"] }"] "elm.json" - writeFileChanged out newConfig + shakeArgs + shakeOptions + { shakeFiles = "_build", + shakeLintIgnore = ["node_modules/**/*"], + shakeThreads = 0, + shakeStaunch = True, + shakeChange = ChangeModtimeAndDigest + } + $ do + -- things that should be kept under version control + "tests/elm-verify-examples.json" %> \out -> do + need ["elm.json"] + Stdout newConfig <- cmd "jq" "--indent" "4" ["{ root: \"../src\", tests: .[\"exposed-modules\"] }"] "elm.json" + writeFileChanged out newConfig - -- temporary files, used to produce CI reports - "log/format.txt" %> \out -> do - let placesToLook = ["src", "tests", "styleguide-app"] - elmFiles <- getDirectoryFiles "." (map (\place -> place "**" "*.elm") placesToLook) - need elmFiles - Stdout report <- cmd "elm-format" "--validate" placesToLook - writeFileChanged out report + -- temporary files, used to produce CI reports + "log/format.txt" %> \out -> do + let placesToLook = ["src", "tests", "styleguide-app"] + elmFiles <- getDirectoryFiles "." (map (\place -> place "**" "*.elm") placesToLook) + need elmFiles + Stdout report <- cmd "elm-format" "--validate" placesToLook + writeFileChanged out report - "log/percy-tests.txt" %> \out -> do - percyToken <- getEnv "PERCY_TOKEN" - case percyToken of - Nothing -> do - writeFileChanged out "Skipped running Percy tests, PERCY_TOKEN not set." - Just _ -> do - need ["log/npm-install.txt"] - Stdout report <- cmd "script/percy-tests.sh" - writeFileChanged out report + "log/percy-tests.txt" %> \out -> do + percyToken <- getEnv "PERCY_TOKEN" + case percyToken of + Nothing -> do + writeFileChanged out "Skipped running Percy tests, PERCY_TOKEN not set." + Just _ -> do + need ["log/npm-install.txt"] + Stdout report <- cmd "script/percy-tests.sh" + writeFileChanged out report - "log/axe-report.json" %> \out -> do - need ["log/npm-install.txt", "script/run-axe.sh", "script/axe-puppeteer.js"] - Stdout report <- cmd "script/run-axe.sh" - writeFileChanged out report + "log/axe-report.json" %> \out -> do + need ["log/npm-install.txt", "script/run-axe.sh", "script/axe-puppeteer.js"] + Stdout report <- cmd "script/run-axe.sh" + writeFileChanged out report - "log/axe-report.txt" %> \out -> do - need ["log/axe-report.json", "script/format-axe-report.sh", "script/axe-report.jq"] - Stdout report <- cmd "script/format-axe-report.sh" "log/axe-report.json" - writeFileChanged out report + "log/axe-report.txt" %> \out -> do + need ["log/axe-report.json", "script/format-axe-report.sh", "script/axe-report.jq"] + Stdout report <- cmd "script/format-axe-report.sh" "log/axe-report.json" + writeFileChanged out report - -- dev deps we get dynamically instead of from Nix (frowny face) - "log/npm-install.txt" %> \out -> do - need ["package.json", "package-lock.json"] - Stdout report <- cmd "npm install" - writeFileChanged out report + -- dev deps we get dynamically instead of from Nix (frowny face) + "log/npm-install.txt" %> \out -> do + need ["package.json", "package-lock.json"] + Stdout report <- cmd "npm install" + writeFileChanged out report - ----------------- - -- DANGER ZONE -- - ----------------- - -- - -- everything below this line has been translated extremely literally from - -- the old Makefile, and probably has serious issues. As I make sure all - -- the dependencies are actually tracked and satisfied, they'll move above - -- this line. + ----------------- + -- DANGER ZONE -- + ----------------- + -- + -- everything below this line has been translated extremely literally from + -- the old Makefile, and probably has serious issues. As I make sure all + -- the dependencies are actually tracked and satisfied, they'll move above + -- this line. - phony "clean" $ do - removeFilesAfter "elm-stuff" ["//*"] - removeFilesAfter "log" ["//*"] - removeFilesAfter "node_modules" ["//*"] - removeFilesAfter "public" ["//*"] - removeFilesAfter "styleguide-app" ["elm.js", "bundle.js", "elm-stuff"] + phony "clean" $ do + removeFilesAfter "elm-stuff" ["//*"] + removeFilesAfter "log" ["//*"] + removeFilesAfter "node_modules" ["//*"] + removeFilesAfter "public" ["//*"] + removeFilesAfter "styleguide-app" ["elm.js", "bundle.js", "elm-stuff"] - phony "test" $ do - need ["log/node_modules.txt", "tests/elm-verify-examples.json"] - cmd_ "npx" "elm-verify-examples" - cmd_ "npx" "elm-test" - need ["log/axe-report.txt", "log/percy-tests.txt", "log/deprecated-imports-report.txt"] + phony "test" $ do + need ["log/node_modules.txt", "tests/elm-verify-examples.json"] + cmd_ "npx" "elm-verify-examples" + cmd_ "npx" "elm-test" + need ["log/axe-report.txt", "log/percy-tests.txt", "log/deprecated-imports-report.txt"] - phony "ci" $ do - need ["log/check-exposed.txt", "test", "log/format.txt", "log/documentation.json", "public"] + phony "ci" $ do + need ["log/check-exposed.txt", "test", "log/format.txt", "log/documentation.json", "public"] - -- deprecated imports - -- - -- still need something to error when they fail (i.e. when running the - -- `check` subcommand) - "log/deprecated-imports-report.txt" %> \out -> do - need ["script/deprecated-imports.py"] - Stdout report <- cmd "script/deprecated-imports.py report" - writeFileChanged out report + -- deprecated imports + -- + -- still need something to error when they fail (i.e. when running the + -- `check` subcommand) + "log/deprecated-imports-report.txt" %> \out -> do + need ["script/deprecated-imports.py"] + Stdout report <- cmd "script/deprecated-imports.py report" + writeFileChanged out report - "log/deprecated-imports.csv" %> \out -> do - need ["script/deprecated-imports.py"] - cmd_ "script/deprecated-imports.py" "--imports-file" out "update" + "log/deprecated-imports.csv" %> \out -> do + need ["script/deprecated-imports.py"] + cmd_ "script/deprecated-imports.py" "--imports-file" out "update" - "log/check-exposed.txt" %> \out -> do - need ["script/check-exposed.py"] -- TODO: need Elm files, elm JSON - Stdout report <- cmd "script/check-exposed.py" - writeFileChanged out report + "log/check-exposed.txt" %> \out -> do + need ["script/check-exposed.py"] -- TODO: need Elm files, elm JSON + Stdout report <- cmd "script/check-exposed.py" + writeFileChanged out report - "log/documentation.json" %> \out -> do - need ["log/node_modules.txt"] - cmd_ "elm" "make" "--docs" out + "log/documentation.json" %> \out -> do + need ["log/node_modules.txt"] + cmd_ "elm" "make" "--docs" out - "styleguide-app/bundle.js" %> \out -> do - need ["lib/index.js", "styleguide-app/manifest.js", "log/node_modules.txt"] - cmd_ "npx" "browserify" "--entry" "styleguide-app/manifest.js" "--outfile" out + "styleguide-app/bundle.js" %> \out -> do + need ["lib/index.js", "styleguide-app/manifest.js", "log/node_modules.txt"] + cmd_ "npx" "browserify" "--entry" "styleguide-app/manifest.js" "--outfile" out - "styleguide-app/elm.js" %> \out -> do - need ["styleguide-app/bundle.js"] -- ported directly from Make... why is this needed? - elmSources <- getDirectoryFiles "." ["styleguide/**/*.elm", "src/**/*.elm"] - need elmSources - cmd_ (Cwd "styleguide-app") "npx" "elm" "make" "Main.elm" "--output" (takeFileName out) + "styleguide-app/elm.js" %> \out -> do + need ["styleguide-app/bundle.js"] -- ported directly from Make... why is this needed? + elmSources <- getDirectoryFiles "." ["styleguide/**/*.elm", "src/**/*.elm"] + need elmSources + cmd_ (Cwd "styleguide-app") "npx" "elm" "make" "Main.elm" "--output" (takeFileName out) - -- public folder for styleguide - "public/**/*" %> \out -> - copyFileChanged (replaceDirectory1 out "styleguide-app") out + -- public folder for styleguide + "public/**/*" %> \out -> + copyFileChanged (replaceDirectory1 out "styleguide-app") out - "log/public.txt" %> \out -> do - styleguideAssets <- getDirectoryFiles ("styleguide-app" "assets") ["**/*"] - need - ( ["public/index.html", "public/elm.js", "public/bundle.js"] - ++ map (("public" "assets") ) styleguideAssets - ) - writeFileChanged out "done" + "log/public.txt" %> \out -> do + styleguideAssets <- getDirectoryFiles ("styleguide-app" "assets") ["**/*"] + need + ( ["public/index.html", "public/elm.js", "public/bundle.js"] + ++ map (("public" "assets") ) styleguideAssets + ) + writeFileChanged out "done" - phony "public" $ need ["log/public.txt"] + phony "public" $ need ["log/public.txt"]