From c1f21f10e935022cfa3ca6162d6703a72e78835f Mon Sep 17 00:00:00 2001 From: Mike Pilgrem Date: Sun, 11 Aug 2024 13:55:35 +0100 Subject: [PATCH] Fix #6643 Respect `--no-run-tests`, `--no-run-benchmarks` when listing actions --- ChangeLog.md | 4 ++++ src/Stack/Build/Execute.hs | 37 ++++++++++++++++++++++++++++--- src/Stack/Build/ExecutePackage.hs | 6 +++++ 3 files changed, 44 insertions(+), 3 deletions(-) diff --git a/ChangeLog.md b/ChangeLog.md index 4239f8f4e4..cf20b0b37d 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -17,6 +17,10 @@ Behavior changes: consequently, if a Docker container is not being run 'detached', its standard input channel will always be kept open. (Before Docker 1.9.1 the use of an interactive container could hang in certain circumstances.) +* Stack respects the `--no-run-tests` and `--no-run-benchmarks` flags when + determining build actions. Previously Stack respected the flags when executing + the run test suites or run benchmarks actions for each targeted project + package. Other enhancements: diff --git a/src/Stack/Build/Execute.hs b/src/Stack/Build/Execute.hs index 1df18efe1c..9aca5c8699 100644 --- a/src/Stack/Build/Execute.hs +++ b/src/Stack/Build/Execute.hs @@ -367,8 +367,18 @@ executePlan' :: HasEnvConfig env -> ExecuteEnv -> RIO env () executePlan' installedMap0 targets plan ee = do + config <- view configL let !buildOpts = ee.buildOpts !testOpts = buildOpts.testOpts + !benchmarkOpts = buildOpts.benchmarkOpts + runTests = testOpts.runTests + runBenchmarks = benchmarkOpts.runBenchmarks + noNotifyIfNoRunTests = not config.notifyIfNoRunTests + noNotifyIfNoRunBenchmarks = not config.notifyIfNoRunBenchmarks + hasTests = not . Set.null . testComponents . taskComponents + hasBenches = not . Set.null . benchComponents . taskComponents + tests = Map.elems $ Map.filter hasTests plan.finals + benches = Map.elems $ Map.filter hasBenches plan.finals when testOpts.coverage deleteHpcReports cv <- view actualCompilerVersionL whenJust (nonEmpty $ Map.toList plan.unregisterLocal) $ \ids -> do @@ -400,6 +410,24 @@ executePlan' installedMap0 targets plan ee = do buildOpts.keepGoing terminal <- view terminalL terminalWidth <- view termWidthL + unless (noNotifyIfNoRunTests || runTests || null tests) $ + prettyInfo $ + fillSep + [ flow "All test running disabled by" + , style Shell "--no-run-tests" + , flow "flag. To mute this message in future, set" + , style Shell (flow "notify-if-no-run-tests: false") + , flow "in Stack's configuration." + ] + unless (noNotifyIfNoRunBenchmarks || runBenchmarks || null benches) $ + prettyInfo $ + fillSep + [ flow "All benchmark running disabled by" + , style Shell "--no-run-benchmarks" + , flow "flag. To mute this message in future, set" + , style Shell (flow "notify-if-no-run-benchmarks: false") + , flow "in Stack's configuration." + ] errs <- liftIO $ runActions threads keepGoing actions $ \doneVar actionsVar -> do let total = length actions @@ -564,8 +592,9 @@ toActions installedMap mtestLock runInBase ee (mbuild, mfinal) = , concurrency = ConcurrencyAllowed } ) $ - -- These are the "final" actions - running tests and benchmarks. - ( if Set.null tests + -- These are the "final" actions - running test suites and benchmarks, + -- unless --no-run-tests or --no-run-benchmarks is enabled. + ( if Set.null tests || not runTests then id else (:) Action { actionId = ActionId pkgId ATRunTests @@ -578,7 +607,7 @@ toActions installedMap mtestLock runInBase ee (mbuild, mfinal) = , concurrency = ConcurrencyAllowed } ) $ - ( if Set.null benches + ( if Set.null benches || not runBenchmarks then id else (:) Action { actionId = ActionId pkgId ATRunBenchmarks @@ -615,6 +644,8 @@ toActions installedMap mtestLock runInBase ee (mbuild, mfinal) = bopts = ee.buildOpts topts = bopts.testOpts beopts = bopts.benchmarkOpts + runTests = topts.runTests + runBenchmarks = beopts.runBenchmarks taskComponents :: Task -> Set NamedComponent taskComponents task = diff --git a/src/Stack/Build/ExecutePackage.hs b/src/Stack/Build/ExecutePackage.hs index f8e070c2b6..0ab79dc14d 100644 --- a/src/Stack/Build/ExecutePackage.hs +++ b/src/Stack/Build/ExecutePackage.hs @@ -997,6 +997,9 @@ singleTest topts testsToRun ac ee task installedMap = do pure True TSUnknown -> pure True else do + -- This should never be reached, because the action should have been + -- filtered out in Stack.Build.Execute.toActions. However, we leave + -- it as is, for now. The alternative would be to throw a Stack bug. notifyIfNoRunTests <- view $ configL . to (.notifyIfNoRunTests) when notifyIfNoRunTests $ announce "Test running disabled by --no-run-tests flag." @@ -1267,6 +1270,9 @@ singleBench beopts benchesToRun ac ee task installedMap = do if beopts.runBenchmarks then pure True else do + -- This should never be reached, because the action should have been + -- filtered out in Stack.Build.Execute.toActions. However, we leave + -- it as is, for now. The alternative would be to throw a Stack bug. notifyIfNoRunBenchmarks <- view $ configL . to (.notifyIfNoRunBenchmarks) when notifyIfNoRunBenchmarks $