Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
8d415fd
Add PS version 0.15.0-alpha-01
JordanMartinez Mar 7, 2022
e316447
Centralize versions for purescript
JordanMartinez Mar 8, 2022
10ee69c
Add validator when using bundle or CJS
JordanMartinez Mar 7, 2022
3674ee4
Fail when use purs bundle if purs not support it
JordanMartinez Mar 4, 2022
61dcab3
Update init to download es-modules branches
JordanMartinez Mar 7, 2022
654eba4
Update run/test tests to work on es modules
JordanMartinez Mar 7, 2022
e258fb9
Add fn to skip test if using <0.15.0 PS release
JordanMartinez Mar 5, 2022
0bf935d
Ignore tests that will fail on v0.15.0
JordanMartinez Mar 8, 2022
89b3d64
Add support for running/testing ES FFI
JordanMartinez Mar 8, 2022
1deb17f
Drop compiler-specific deps for v0.11.0 on `pulp init`
JordanMartinez Mar 8, 2022
c7925d5
For v0.15.0 int test, use deps with real versions
JordanMartinez Mar 8, 2022
b5dfe13
Fix logic in getting purs version
JordanMartinez Mar 8, 2022
98e6c64
Use Object.assign, not Object.merge
JordanMartinez Mar 8, 2022
b9f05b7
Use same bower.json for all tests on pulp version
JordanMartinez Mar 8, 2022
a81afbe
Only reinstall bower deps on v0.15.0
JordanMartinez Mar 8, 2022
7b0c4c3
Add extra blank line
JordanMartinez Mar 8, 2022
7d82ecc
Drop extra comma
JordanMartinez Mar 8, 2022
8767aeb
Drop any extra info before checking purs version
JordanMartinez Mar 8, 2022
e81214c
Update changelog entry
JordanMartinez Mar 8, 2022
dc3597c
Use .js for run/test file names
JordanMartinez Mar 9, 2022
3be7f52
Fix error message since fold isn't adding spaces
JordanMartinez Mar 9, 2022
9a983c8
Verify package.json file exists
JordanMartinez Mar 9, 2022
444c3da
Run pulp build before checking for package.json file
JordanMartinez Mar 9, 2022
3cb39b3
Revert test printing of package.json contents
JordanMartinez Mar 9, 2022
1b97367
Revert back to `.mjs` for ES files
JordanMartinez Mar 9, 2022
c32640b
Run all tests again
JordanMartinez Mar 9, 2022
357325d
Revert "Revert back to `.mjs` for ES files"
JordanMartinez Mar 11, 2022
7267ef7
Increase minimum node version to 12
JordanMartinez Mar 11, 2022
4ae259c
Refactor code into getNodeVersion
JordanMartinez Mar 11, 2022
490961e
Account for --experimental-modules node flag
JordanMartinez Mar 11, 2022
3d0852b
Add package.json file to temp file if need to
JordanMartinez Mar 11, 2022
8ad6aa0
Update changelog to mention min node version
JordanMartinez Mar 11, 2022
e007f5e
Fix typos
JordanMartinez Mar 11, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ jobs:
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
purs_test_version: [v0.12.0, v0.12.4, v0.12.5, v0.13.0, v0.14.0, v0.14.5]
purs_test_version: [v0.12.0, v0.12.4, v0.12.5, v0.13.0, v0.14.0, v0.14.5, v0.15.0-alpha-01]
fail-fast: false
runs-on: ${{ matrix.os }}
env:
Expand Down
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,11 @@ Breaking:
compiler versions earlier than that. (#399 by @JordanMartinez)
* Increased minimum `psa` version to `v0.7.0` and dropped support for all
versions earlier than that. (#399 by @JordanMartinez)
* Increased minimum `node` version to `v12.0.0` and dropped support for all
versions earlier than that. (#401 by @JordanMartinez)

Internal:
* Added support for the `v0.15.0` compiler version (#401 by @JordanMartinez)
* Update project and its dependencies to use PureScript `v0.14.5` and
`v0.14.0`-compatible libraries. (#399 by @JordanMartinez)
* Migrated from Travis CI to GitHub Actions. (#399 by @JordanMartinez)
Expand Down
29 changes: 10 additions & 19 deletions src/Main.purs
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,8 @@ import Data.Either (Either(..), either)
import Data.Foldable (elem)
import Data.List (List(Nil))
import Data.Map (insert)
import Data.Maybe (Maybe(..), fromMaybe)
import Data.String (stripPrefix, Pattern(..))
import Data.Version (Version, version, showVersion, parseVersion)
import Data.Maybe (Maybe(..))
import Data.Version (Version, showVersion, version)
import Effect (Effect)
import Effect.Aff (Aff, attempt, runAff, throwError)
import Effect.Class (liftEffect)
Expand Down Expand Up @@ -44,7 +43,7 @@ import Pulp.Server as Server
import Pulp.Shell as Shell
import Pulp.System.FFI (unsafeInspect)
import Pulp.Test as Test
import Pulp.Validate (validate)
import Pulp.Validate (getNodeVersion, validate)
import Pulp.Version (printVersion)
import Pulp.Watch as Watch
import Text.Parsing.Parser (parseErrorMessage)
Expand Down Expand Up @@ -241,7 +240,7 @@ succeeded = const (pure unit)

main :: Effect Unit
main = void $ runAff (either failed succeeded) do
requireNodeAtLeast (version 4 0 0 Nil Nil)
requireNodeAtLeast (version 12 0 0 Nil Nil)
argv <- drop 2 <$> liftEffect Process.argv
args <- parse globals commands argv
case args of
Expand Down Expand Up @@ -304,20 +303,12 @@ runWithArgs args = do

requireNodeAtLeast :: Version -> Aff Unit
requireNodeAtLeast minimum = do
case parseVersion (stripV Process.version) of
Left err ->
let message = parseErrorMessage err
in throwError (error ("Failed to parse node.js version: " <> message))
Right actual ->
when (actual < minimum)
(throwError (error
("Your node.js version is too old " <>
"(required: " <> showVersion minimum <>
", actual: " <> showVersion actual <> ")")))

where
stripV str =
fromMaybe str (stripPrefix (Pattern "v") str)
actual <- getNodeVersion
when (actual < minimum) do
throwError $ error $
"Your node.js version is too old " <>
"(required: " <> showVersion minimum <>
", actual: " <> showVersion actual <> ")"

argsParserDiagnostics :: Args.Args -> Aff Unit
argsParserDiagnostics opts = do
Expand Down
8 changes: 6 additions & 2 deletions src/Pulp/Browserify.purs
Original file line number Diff line number Diff line change
Expand Up @@ -27,16 +27,20 @@ import Pulp.Exec (pursBundle)
import Pulp.Files (outputModules)
import Pulp.Outputter (getOutputter)
import Pulp.Project (Project(..))
import Pulp.Run (makeEntry, jsEscape)
import Pulp.Run (jsEscape, makeCjsEntry)
import Pulp.Sorcery (sorcery)
import Pulp.System.FFI (Callback, runNode)
import Pulp.System.Files (openTemp)
import Pulp.System.Stream (WritableStream)
import Pulp.Validate (failIfUsingEsModulesPsVersion)

action :: Action
action = Action \args -> do
out <- getOutputter args

failIfUsingEsModulesPsVersion out $ Just
"Code path reason: browserify only works on CommonJS modules"

cwd <- liftEffect Process.cwd
out.log $ "Browserifying project in " <> cwd

Expand All @@ -52,7 +56,7 @@ makeExport :: String -> Boolean -> String
makeExport main export =
if export
then "module.exports = require(\"" <> jsEscape main <> "\");\n"
else makeEntry main
else makeCjsEntry main

makeOptExport :: String -> String
makeOptExport main = "module.exports = PS[\"" <> jsEscape main <> "\"];\n"
Expand Down
18 changes: 14 additions & 4 deletions src/Pulp/Build.purs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ module Pulp.Build
, testBuild
, runBuild
, withOutputStream
, shouldBundle
) where

import Prelude
Expand Down Expand Up @@ -31,7 +32,8 @@ import Pulp.Outputter (getOutputter)
import Pulp.Sorcery (sorcery)
import Pulp.System.Files as Files
import Pulp.System.Stream (write, end, WritableStream, stdout)
import Pulp.Validate (getPsaVersion, getPursVersion)
import Pulp.Validate (dropPreRelBuildMeta, failIfUsingEsModulesPsVersion, getPsaVersion, getPursVersion)
import Pulp.Versions.PureScript (psVersions)

data BuildType = NormalBuild | TestBuild | RunBuild

Expand Down Expand Up @@ -68,7 +70,7 @@ go buildType = Action \args -> do
jobs :: Maybe Int <- getOption "jobs" args.commandOpts
let jobsArgs = maybe [] (\j -> ["+RTS", "-N" <> show j, "-RTS"]) jobs
sourceMapArg = case sourceMaps of
true | ver >= Version (NEL.cons' 0 (Cons 12 (Cons 0 Nil))) Nil -> [ "--codegen", "sourcemaps" ]
true | (dropPreRelBuildMeta ver) >= psVersions.v0_12_0 -> [ "--codegen", "sourcemaps" ]
true -> ["--source-maps"]
_ -> []
sourceGlobs = sources globs
Expand All @@ -90,8 +92,16 @@ go buildType = Action \args -> do

out.log "Build successful."

shouldBundle <- (||) <$> getFlag "optimise" opts <*> hasOption "to" opts
when shouldBundle (bundle args)
shouldBundle' <- shouldBundle args
when shouldBundle' do
failIfUsingEsModulesPsVersion out $ Just
"Code path reason: you used the --optimize and/or --to flag(s)"
bundle args

shouldBundle :: Args -> Aff Boolean
shouldBundle args = do
let opts = union args.globalOpts args.commandOpts
(||) <$> getFlag "optimise" opts <*> hasOption "to" opts

shouldUsePsa :: Args -> Aff Boolean
shouldUsePsa args = do
Expand Down
8 changes: 3 additions & 5 deletions src/Pulp/Docs.purs
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,18 @@ module Pulp.Docs where

import Prelude

import Data.List (List(..))
import Data.List.NonEmpty as NEL
import Data.Map as Map
import Data.Maybe (Maybe(..))
import Data.Set as Set
import Data.Version.Haskell (Version(..))
import Effect.Class (liftEffect)
import Node.Process as Process
import Pulp.Args (Action(..))
import Pulp.Args.Get (getFlag, getOption')
import Pulp.Exec (exec)
import Pulp.Files (defaultGlobs, sources, testGlobs)
import Pulp.Outputter (getOutputter)
import Pulp.Validate (getPursVersion)
import Pulp.Validate (dropPreRelBuildMeta, getPursVersion)
import Pulp.Versions.PureScript (psVersions)

action :: Action
action = Action \args -> do
Expand All @@ -35,7 +33,7 @@ action = Action \args -> do

buildPath <- getOption' "buildPath" opts

when (pursVersion < Version (NEL.cons' 0 (Cons 13 (Cons 0 Nil))) Nil)
when ((dropPreRelBuildMeta pursVersion) < psVersions.v0_13_0)
(out.log "Warning: 'pulp docs' now only supports 'purs' v0.13.0 and above. Please either update 'purs' or downgrade 'pulp'.")

exec "purs" (["docs", "--compile-output", buildPath] <> args.remainder <> sources globInputFiles) Nothing
Expand Down
42 changes: 25 additions & 17 deletions src/Pulp/Init.purs
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,8 @@ import Prelude
import Control.Monad.Error.Class (throwError)
import Data.Array (cons)
import Data.Foldable (for_)
import Data.List (List(..), (:))
import Data.List.NonEmpty as NEL
import Data.Maybe (Maybe(..))
import Data.String (joinWith)
import Data.Version.Haskell (Version(..))
import Data.Version.Haskell as HVer
import Effect.Aff (Aff)
import Effect.Class (liftEffect)
import Effect.Exception (error)
Expand All @@ -25,7 +22,8 @@ import Pulp.Outputter (Outputter, getOutputter)
import Pulp.PackageManager (launchBower, launchPscPackage)
import Pulp.System.Files (mkdirIfNotExist)
import Pulp.Utils (throw)
import Pulp.Validate (getPursVersion)
import Pulp.Validate (dropPreRelBuildMeta, failIfUsingEsModulesPsVersion, getPursVersion)
import Pulp.Versions.PureScript (psVersions)

foreign import bowerFile :: String -> String

Expand Down Expand Up @@ -141,10 +139,12 @@ init initStyle effOrEffect force out = do

psVer <- getPursVersion out

install initStyle effOrEffect (getDepsVersions psVer)
install initStyle effOrEffect (getDepsVersions $ dropPreRelBuildMeta psVer)

where
install Bower UseEff p = do
failIfUsingEsModulesPsVersion out $ Just
"'purescript-eff' has been archived, so the FFI's CJS modules cannot be migrated to ES modules."
launchBower ["install", "--save", p.prelude, p.console]
launchBower ["install", "--save-dev", p.psciSupport]

Expand All @@ -153,42 +153,50 @@ init initStyle effOrEffect force out = do
launchBower ["install", "--save-dev", p.psciSupport ]

install PscPackage UseEff _ = do
failIfUsingPscPackageAndEsModules

launchPscPackage ["init"]
launchPscPackage ["install", "eff"]
launchPscPackage ["install", "console"]
launchPscPackage ["install", "psci-support"]

install PscPackage UseEffect _ = do
failIfUsingPscPackageAndEsModules

launchPscPackage ["init"]
launchPscPackage ["install", "effect"]
launchPscPackage ["install", "console"]
launchPscPackage ["install", "psci-support"]

failIfUsingPscPackageAndEsModules = do
failIfUsingEsModulesPsVersion out $ Just
"'psc-package' not yet supported on a `purs` version that compiles to ES modules."

getDepsVersions v
| v >= Version (NEL.cons' 0 (14 : 0 : Nil)) Nil =
| v >= psVersions.v0_15_0 =
{ prelude: "purescript-prelude=working-group-purescript-es/purescript-prelude#es-modules-libraries"
, console: "purescript-console=working-group-purescript-es/purescript-console#es-modules-libraries"
, effect: "purescript-effect=working-group-purescript-es/purescript-effect#es-modules-libraries"
, psciSupport: "purescript-psci-support=purescript/purescript-psci-support#update-to-0.15"
}
| v >= psVersions.v0_14_0 =
{ prelude: "purescript-prelude@v5.0.1"
, console: "purescript-console@v5.0.0"
, effect: "purescript-effect@v3.0.0"
, psciSupport: "purescript-psci-support@v5.0.0"
}
| v >= Version (NEL.cons' 0 (13 : 0 : Nil)) Nil =
| v >= psVersions.v0_13_0 =
{ prelude: "purescript-prelude@v4.1.1"
, console: "purescript-console@v4.4.0"
, effect: "purescript-effect@v2.0.1"
, psciSupport: "purescript-psci-support@v4.0.0"
}
| v >= Version (NEL.cons' 0 (12 : 0 : Nil)) Nil =
| otherwise =
{ prelude: "purescript-prelude@v4.1.1"
, console: "purescript-console@v4.4.0"
, effect: "purescript-effect@v2.0.1"
, psciSupport: "purescript-psci-support@v4.0.0"
}
| otherwise =
{ prelude: "purescript-prelude@v3.3.0"
, console: "purescript-console@v3.0.0"
, effect: "purescript-effect@v1.1.0"
, psciSupport: "purescript-psci-support@v3.0.0"
}

action :: Action
action = Action \args -> do
Expand All @@ -205,13 +213,13 @@ action = Action \args -> do

where

minEffectVersion = HVer.Version (NEL.cons' 0 (Cons 12 (Cons 0 Nil))) Nil
minEffectVersion = psVersions.v0_12_0

getEffOrEffect out withEff withEffect
| withEff = pure UseEff
| withEffect = pure UseEffect
| otherwise = do
ver <- getPursVersion out
if ver < minEffectVersion
if (dropPreRelBuildMeta ver) < minEffectVersion
then pure UseEff
else pure UseEffect
8 changes: 3 additions & 5 deletions src/Pulp/Publish.purs
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,13 @@ import Control.Parallel (parTraverse)
import Data.Array as Array
import Data.Either (Either(..))
import Data.Foldable (fold, or)
import Data.List (List(..))
import Data.List.NonEmpty as NEL
import Data.Maybe (Maybe(..), maybe)
import Data.Options ((:=))
import Data.String as String
import Data.Tuple (Tuple(..))
import Data.Tuple.Nested ((/\))
import Data.Version (Version)
import Data.Version as Version
import Data.Version.Haskell (Version(..)) as Haskell
import Effect.Aff (Aff, attempt, throwError)
import Effect.Class (liftEffect)
import Foreign (renderForeignError)
Expand All @@ -39,7 +36,8 @@ import Pulp.System.HTTP (httpRequest)
import Pulp.System.Read as Read
import Pulp.System.Stream (concatStream, concatStreamToBuffer, createGzip, end, write)
import Pulp.Utils (orErr, throw)
import Pulp.Validate (getPursVersion)
import Pulp.Validate (dropPreRelBuildMeta, getPursVersion)
import Pulp.Versions.PureScript (psVersions)
import Simple.JSON as SimpleJSON

-- TODO:
Expand Down Expand Up @@ -195,7 +193,7 @@ resolutionsFile manifest args = do
out <- getOutputter args
ver <- getPursVersion out
resolutionsData <-
if ver >= Haskell.Version (NEL.cons' 0 (Cons 12 (Cons 4 Nil))) Nil
if (dropPreRelBuildMeta ver) >= psVersions.v0_12_4
then do
let hasDependencies =
maybe false (not <<< Object.isEmpty) manifest.dependencies
Expand Down
Loading