diff --git a/app/src/App/CLI/PursVersions.purs b/app/src/App/CLI/PursVersions.purs new file mode 100644 index 00000000..968a5a90 --- /dev/null +++ b/app/src/App/CLI/PursVersions.purs @@ -0,0 +1,26 @@ +module Registry.App.CLI.PursVersions where + +import Registry.App.Prelude + +import Data.Array as Array +import Data.Array.NonEmpty as NEA +import Data.String as String +import Node.Library.Execa as Execa +import Registry.Version as Version +import Run (AFF, Run) +import Run as Run +import Run.Except (EXCEPT) +import Run.Except as Except + +pursVersions :: forall r. Run (EXCEPT String + AFF + r) (NonEmptyArray Version) +pursVersions = do + result <- Run.liftAff $ _.result =<< Execa.execa "purs-versions" [] identity + { stdout } <- Except.rethrow $ lmap (\{ stdout, stderr } -> stdout <> stderr) result + let { fail, success } = partitionEithers $ map Version.parse (String.split (String.Pattern " ") stdout) + + when (Array.length fail > 0) do + Except.throw (String.joinWith ", " fail) + + case NEA.fromArray success of + Nothing -> Except.throw "No purs versions" + Just arr -> pure arr diff --git a/app/test/App/CLI/PursVersions.purs b/app/test/App/CLI/PursVersions.purs new file mode 100644 index 00000000..95f26fee --- /dev/null +++ b/app/test/App/CLI/PursVersions.purs @@ -0,0 +1,51 @@ +module Test.Registry.App.CLI.PursVersions (spec) where + +import Registry.App.Prelude + +import Data.Array as Array +import Data.Array.NonEmpty as NEA +import Registry.App.CLI.PursVersions (pursVersions) +import Registry.Test.Assert as Assert +import Registry.Test.Assert.Run as Test.Run +import Registry.Version as Version +import Test.Spec as Spec + +-- NOTE: This should be kept up to date as new versions of the compiler are released. +-- Upon release of a new compiler version and update of `purescript-overlay`, the tests below will fail until the version is added here. +knownCompilers :: Array Version +knownCompilers = map (unsafeFromRight <<< Version.parse) + [ "0.13.0" + , "0.13.2" + , "0.13.3" + , "0.13.4" + , "0.13.5" + , "0.13.6" + , "0.13.8" + , "0.14.0" + , "0.14.1" + , "0.14.2" + , "0.14.3" + , "0.14.4" + , "0.14.5" + , "0.14.6" + , "0.14.7" + , "0.14.8" + , "0.14.9" + , "0.15.0" + , "0.15.2" + , "0.15.3" + , "0.15.4" + , "0.15.5" + , "0.15.6" + , "0.15.7" + , "0.15.8" + , "0.15.9" + , "0.15.10" + ] + +spec :: Spec.Spec Unit +spec = do + Spec.it "All expected versions are present in purs-version" do + versionsNonEmpty <- Test.Run.runBaseEffects pursVersions + let versions = NEA.toArray versionsNonEmpty + Array.sort versions `Assert.shouldEqual` Array.sort knownCompilers diff --git a/app/test/Main.purs b/app/test/Main.purs index 866501ff..857ec28b 100644 --- a/app/test/Main.purs +++ b/app/test/Main.purs @@ -7,6 +7,7 @@ import Test.Registry.App.API as Test.API import Test.Registry.App.Auth as Test.Auth import Test.Registry.App.CLI.Licensee as Test.CLI.Licensee import Test.Registry.App.CLI.Purs as Test.CLI.Purs +import Test.Registry.App.CLI.PursVersions as Test.CLI.PursVersions import Test.Registry.App.CLI.Tar as Test.CLI.Tar import Test.Registry.App.Effect.PackageSets as Test.Effect.PackageSets import Test.Registry.App.GitHubIssue as Test.GitHubIssue @@ -24,6 +25,7 @@ main = launchAff_ $ runSpec' (defaultConfig { timeout = Just $ Milliseconds 10_0 Spec.describe "Licensee" Test.CLI.Licensee.spec Spec.describe "Tar" Test.CLI.Tar.spec Spec.describe "Purs" Test.CLI.Purs.spec + Spec.describe "PursVersions" Test.CLI.PursVersions.spec Spec.describe "Registry.App.Effect" do Test.Effect.PackageSets.spec