Skip to content

Commit feb6306

Browse files
committed
release: Default to shared version for the selection UI when all current versions are identical
1 parent 51ceb2b commit feb6306

2 files changed

Lines changed: 62 additions & 2 deletions

File tree

packages/hix/lib/Hix/Managed/Release/ReleasePlan.hs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ import Hix.Managed.Data.Packages (Packages)
1313
import Hix.Managed.Data.ReleaseConfig (ReleaseConfig (..), ReleaseVersion (..))
1414
import Hix.Managed.Data.ReleaseContext (ReleaseContext (..), ReleasePackage (..))
1515
import Hix.Managed.Release.Data.ReleasePlan (ConfiguredTarget (..))
16-
import Hix.Managed.Release.Data.SelectedVersion (SelectedVersion, explicitVersion, keepVersion)
16+
import Hix.Managed.Release.Data.SelectedVersion (SelectedVersion, explicitVersion, implicitVersion, keepVersion)
17+
1718
import Hix.Managed.Release.Data.TargetSpec (TargetSpec (..), targetSpecName, targetSpecVersion)
1819
import Hix.Managed.Report (plural)
1920
import Hix.Managed.VersionIncrement (incrementVersion)
@@ -104,6 +105,13 @@ configuredReleaseVersions ReleaseContext {packages} config =
104105
sequence (updateVersion <$> currentSharedVersion selected <*> config.version)
105106
else pure Nothing
106107
targets <- nViaA (traverse (configuredTarget config explicitVersions sharedVersion)) selected
107-
pure (sharedVersion, nMap excludedTarget excluded <> targets)
108+
-- When no --version was specified but all packages share the same current version,
109+
-- provide that as an implicit shared version so the UI can default to shared mode.
110+
-- Only do this when there are no explicit per-package versions, since the implicit shared version
111+
-- would cause batch mode to enter the SharedVersion path, ignoring per-package overrides.
112+
let uiSharedVersion
113+
| nNull explicitVersions = sharedVersion <|> (implicitVersion <$> currentSharedVersion selected)
114+
| otherwise = sharedVersion
115+
pure (uiSharedVersion, nMap excludedTarget excluded <> targets)
108116
where
109117
allTargets pkgs = pure RestrictedTargets {selected = pkgs, excluded = [], explicitVersions = []}

packages/integration/test/Hix/Integration/ReleaseFlowTest.hs

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -449,3 +449,55 @@ releaseFlowInitialRenderTest = do
449449
test_releaseFlowInitialRender :: TestT IO ()
450450
test_releaseFlowInitialRender =
451451
tmuxTest True 10 releaseFlowInitialRenderTest
452+
453+
-- | Context proto with packages at the same version and no --version flag.
454+
-- This should default to shared mode in the UI.
455+
sharedDefaultContext :: ReleaseContextProto
456+
sharedDefaultContext =
457+
ReleaseContextProto {
458+
packages = [
459+
("local1", ReleasePackage {name = "local1", version = [0, 5, 0, 0], path = [reldir|local1|]}),
460+
("local2", ReleasePackage {name = "local2", version = [0, 5, 0, 0], path = [reldir|local2|]})
461+
],
462+
hackage = [unsafeCentralHackageContextFixed],
463+
hooks = [],
464+
commitExtraArgs = [],
465+
tagExtraArgs = [],
466+
managed = True
467+
}
468+
469+
sharedDefaultConfig :: ReleaseConfig
470+
sharedDefaultConfig =
471+
def {
472+
publish = bothArtifacts,
473+
targets = Just ["local1", "local2"],
474+
version = Nothing,
475+
interactive = True
476+
}
477+
478+
sharedDefaultVersionBox :: Text
479+
sharedDefaultVersionBox =
480+
[exon|┌──────────────────────────────────┐
481+
│██ Choose release versions │
482+
│ │
483+
│● All packages 0.5.0.0 bump b│
484+
│ shared s│
485+
│○ local1 0.5.0.0 quit q│
486+
│○ local2 0.5.0.0 help ?│
487+
└──────────────────────────────────┘
488+
|]
489+
490+
sharedDefaultFlowTest :: TmuxTest M ()
491+
sharedDefaultFlowTest = do
492+
debug <- tmuxLiftM brickDebug
493+
handlers <- tmuxLiftM (handlersFlowTest defaultTestConfig debug)
494+
withAsync (tmuxLiftM (void (release handlers sharedDefaultConfig sharedDefaultContext))) \ _ -> do
495+
runStep debug FlowStep {
496+
label = "version-selection (shared default)",
497+
expected = sharedDefaultVersionBox,
498+
keys = [KEnter]
499+
}
500+
501+
test_releaseFlowSharedDefault :: TestT IO ()
502+
test_releaseFlowSharedDefault =
503+
tmuxTest True 10 sharedDefaultFlowTest

0 commit comments

Comments
 (0)