From f9de4c152ed532ed9f80da711718e2acc92142a1 Mon Sep 17 00:00:00 2001 From: Gal Schlezinger Date: Sun, 13 Jan 2019 19:03:38 +0200 Subject: [PATCH] Nsw --- .ci/create-static-binary.sh | 9 + .ci/esy-build-steps.yml | 6 +- .ci/prepare-static-build.sh | 1 + .ci/shasum | 3 + .dockerignore | 4 + .gitignore | 1 + Dockerfile | 18 ++ README.md | 61 ++-- azure-pipelines.yml | 41 ++- docs/nvm_comparison.png | Bin 0 -> 199436 bytes esy.lock/index.json | 262 ++++++++++++++++-- esy.lock/opam/cmdliner.1.0.3/opam | 36 +++ esy.lock/opam/lambdasoup.0.6.3/opam | 35 +++ esy.lock/opam/markup.0.8.0/opam | 52 ++++ esy.lock/opam/semver.0.1.0/opam | 35 +++ esy.lock/opam/topkg.1.0.0/opam | 49 ++++ esy.lock/opam/uchar.0.0.2/opam | 36 +++ esy.lock/opam/uutf.1.0.1/opam | 38 +++ executable/Env.re | 9 + executable/Install.re | 101 +++++++ executable/ListInstallations.re | 137 ++------- executable/ListLocal.re | 24 ++ executable/ListRemote.re | 26 ++ executable/NswApp.re | 100 ++++++- executable/Use.re | 63 +++++ executable/dune | 6 +- feature_tests/basic/run.sh | 8 + feature_tests/nvmrc/.nvmrc | 1 + feature_tests/nvmrc/run.sh | 10 + feature_tests/run.sh | 32 +++ library/Compression.re | 15 + library/Directories.re | 13 + library/Fs.re | 19 ++ library/Http.re | 53 ++++ library/Nvmrc.re | 14 + library/Opt.re | 33 +++ library/Result.re | 43 +++ library/System.re | 70 +++++ library/Util.re | 1 - library/Versions.re | 147 ++++++++++ library/dune | 2 + package.json | 21 +- test/SmokeTest.re | 17 ++ test/TestFramework.re | 31 +++ test/TestNsw.re | 5 +- .../Smoke_test.4d362c3c.0.snapshot | 3 + test/dune | 3 +- 47 files changed, 1508 insertions(+), 186 deletions(-) create mode 100755 .ci/create-static-binary.sh create mode 100644 .ci/prepare-static-build.sh create mode 100755 .ci/shasum create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100644 docs/nvm_comparison.png create mode 100644 esy.lock/opam/cmdliner.1.0.3/opam create mode 100644 esy.lock/opam/lambdasoup.0.6.3/opam create mode 100644 esy.lock/opam/markup.0.8.0/opam create mode 100644 esy.lock/opam/semver.0.1.0/opam create mode 100644 esy.lock/opam/topkg.1.0.0/opam create mode 100644 esy.lock/opam/uchar.0.0.2/opam create mode 100644 esy.lock/opam/uutf.1.0.1/opam create mode 100644 executable/Env.re create mode 100644 executable/Install.re create mode 100644 executable/ListLocal.re create mode 100644 executable/ListRemote.re create mode 100644 executable/Use.re create mode 100644 feature_tests/basic/run.sh create mode 100644 feature_tests/nvmrc/.nvmrc create mode 100644 feature_tests/nvmrc/run.sh create mode 100755 feature_tests/run.sh create mode 100644 library/Compression.re create mode 100644 library/Directories.re create mode 100644 library/Fs.re create mode 100644 library/Http.re create mode 100644 library/Nvmrc.re create mode 100644 library/Opt.re create mode 100644 library/Result.re create mode 100644 library/System.re delete mode 100644 library/Util.re create mode 100644 library/Versions.re create mode 100644 test/SmokeTest.re create mode 100644 test/TestFramework.re create mode 100644 test/__snapshots__/Smoke_test.4d362c3c.0.snapshot diff --git a/.ci/create-static-binary.sh b/.ci/create-static-binary.sh new file mode 100755 index 0000000..27e934b --- /dev/null +++ b/.ci/create-static-binary.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +echo "Building binary in docker" + +docker build . -t schlez/nsw-static-binary + +echo "Copying to ./nsw-linux" + +docker run --rm -v $(pwd):$(pwd) --workdir $(pwd) schlez/nsw-static-binary cp /app/_build/default/executable/NswApp.exe ./nsw-linux diff --git a/.ci/esy-build-steps.yml b/.ci/esy-build-steps.yml index 7aad2d6..6f98189 100644 --- a/.ci/esy-build-steps.yml +++ b/.ci/esy-build-steps.yml @@ -4,8 +4,8 @@ steps: - task: NodeTool@0 inputs: versionSpec: '8.9' - - script: npm install -g esy@0.4.3 - displayName: 'npm install -g esy@0.4.3' + - script: npm install -g esy@latest + displayName: 'npm install -g esy@latest' - script: esy install displayName: 'esy install' - script: esy pesy @@ -14,7 +14,7 @@ steps: displayName: 'esy build' - script: esy test displayName: 'esy test' - - script: esy x NswApp.exe + - script: esy x nsw.exe displayName: 'Run the main binary' - script: esy ls-libs continueOnError: true diff --git a/.ci/prepare-static-build.sh b/.ci/prepare-static-build.sh new file mode 100644 index 0000000..f84570e --- /dev/null +++ b/.ci/prepare-static-build.sh @@ -0,0 +1 @@ +sed -i 's@"flags": \[\]@"flags": ["-ccopt", "-static"]@' package.json diff --git a/.ci/shasum b/.ci/shasum new file mode 100755 index 0000000..1d9c32d --- /dev/null +++ b/.ci/shasum @@ -0,0 +1,3 @@ +#!/bin/bash +shift 2 +sha1sum $@ diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..7ac74dd --- /dev/null +++ b/.dockerignore @@ -0,0 +1,4 @@ +_build +_esy +node_modules +Dockerfile diff --git a/.gitignore b/.gitignore index b079809..d4d1fb9 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ _esy/ nsw.install .DS_Store *.install +.tmp diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..9abc7c5 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,18 @@ +FROM frolvlad/alpine-glibc + +RUN apk add --no-cache nodejs bash npm curl g++ make m4 patch gmp-dev perl git jq +ADD .ci/shasum /usr/bin/shasum + +USER root + +RUN npm -g config set user root +RUN npm i -g esy@latest + +WORKDIR /app +ADD . /app + +RUN jq '. | .buildDirs.executable.flags |= . + ["-ccopt", "-static"]' package.json > package.json.new && mv package.json.new package.json +RUN npx esy i +RUN npx esy pesy +RUN npx esy b +RUN npx esy test \ No newline at end of file diff --git a/README.md b/README.md index 7594aa5..835ebbc 100644 --- a/README.md +++ b/README.md @@ -1,35 +1,45 @@ -# nsw +

+ Node Switcher (nsw) Build Status +

+> A simple and fast `nvm` replacement, built in native ReasonML. -[![CircleCI](https://circleci.com/gh/yourgithubhandle/nsw/tree/master.svg?style=svg)](https://circleci.com/gh/yourgithubhandle/nsw/tree/master) +:rocket: Single executable :rocket: Blazing fast :rocket: +![Blazing fast](./docs/nvm_comparison.png) -**Contains the following libraries and executables:** +## Features +- Single file, easy installation :sparkles: +- Fast fast fast fast :rocket: +- Install multiple node versions without a hassle! :clap: +- [Project-specific `.nvmrc` file support](./features_tests/nvmrc) -``` -nsw@0.0.0 -│ -├─test/ -│ name: TestNsw.exe -│ main: TestNsw -│ require: nsw.lib -│ -├─library/ -│ library name: nsw.lib -│ namespace: Nsw -│ require: -│ -└─executable/ - name: NswApp.exe - main: NswApp - require: nsw.lib -``` +## Installation + +* Download the [latest release binary](https://github.com/Schniz/nsw/releases) for your system +* Make it available globally on `$PATH` +* Add the following line to your `.bashrc`/`.zshrc` file: + + ```bash + eval `nsw env` + ``` + +## TODO +- [ ] Feature: make versions complete the latest: `10` would infer the latest minor and patch versions of node 10. `10.1` would infer the latest patch version of node 10.1 +- [ ] Feature: `nsw use --install`, `nsw use --quiet` +- [ ] Feature: `nsw install lts`? +- [ ] Feature: `nsw alias`? +- [ ] Feature: Consider nvm-like per-shell usage with symlinks on `/tmp` directory +- [ ] OSX: Add to homebrew? +- [ ] Windows Support? +- [ ] Linux: Replace `curl` usage with `cohttp`/`ocurl` or something else which is statically-linkable +- [ ] Linux: Replace `tar` with a statically linked library too (for ungzip + untar) ## Developing: ``` npm install -g esy -git clone +git clone https://github.com/Schniz/nsw.git esy install esy build ``` @@ -39,12 +49,15 @@ esy build After building the project, you can run the main binary that is produced. ``` -esy x NswApp.exe +esy x nsw.exe ``` ## Running Tests: ``` -# Runs the "test" command in `package.json`. +# Runs some smoke-unity test esy test + +# Runs the feature tests +feature_tests/run.sh ``` diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 820a199..5b0aee1 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -17,8 +17,16 @@ jobs: steps: # TODO: Uncomment both this and 'publish-build-cache' below to enable build caching for Linux. # - template: .ci/restore-build-cache.yml - - template: .ci/esy-build-steps.yml + - script: .ci/create-static-binary.sh + - script: ./feature_tests/run.sh $(pwd)/nsw-linux + # - script: bash .ci/prepare-static-build.sh + # - template: .ci/esy-build-steps.yml # - template: .ci/publish-build-cache.yml + - task: PublishBuildArtifacts@1 + displayName: 'Save artifact' + inputs: + PathtoPublish: 'nsw-linux' + ArtifactName: nsw-linux - job: MacOS timeoutInMinutes: 0 @@ -33,21 +41,28 @@ jobs: # TODO: Uncomment both this and 'publish-build-cache' below to enable build caching for Mac. # - template: .ci/restore-build-cache.yml - template: .ci/esy-build-steps.yml + - script: cp _build/default/executable/NswApp.exe _build/nsw + - script: ./feature_tests/run.sh $(pwd)/_build/nsw # - template: .ci/publish-build-cache.yml + - task: PublishBuildArtifacts@1 + displayName: 'Save artifact' + inputs: + PathtoPublish: '_build/nsw' + ArtifactName: nsw-macos -- job: Windows - timeoutInMinutes: 0 - pool: - vmImage: 'vs2017-win2016' +# - job: Windows +# timeoutInMinutes: 0 +# pool: +# vmImage: 'vs2017-win2016' - variables: - ESY__CACHE_INSTALL_PATH: C:\Users\VssAdministrator\.esy\3_\i - ESY__CACHE_SOURCE_TARBALL_PATH: C:\Users\VssAdministrator\.esy\source\i +# variables: +# ESY__CACHE_INSTALL_PATH: C:\Users\VssAdministrator\.esy\3_\i +# ESY__CACHE_SOURCE_TARBALL_PATH: C:\Users\VssAdministrator\.esy\source\i - steps: - - template: .ci/restore-build-cache.yml - - template: .ci/esy-build-steps.yml - - template: .ci/publish-build-cache.yml +# steps: +# - template: .ci/restore-build-cache.yml +# - template: .ci/esy-build-steps.yml +# - template: .ci/publish-build-cache.yml - job: Release timeoutInMinutes: 0 @@ -55,7 +70,7 @@ jobs: dependsOn: - Linux - MacOS - - Windows + # - Windows condition: succeeded() pool: vmImage: ubuntu-16.04 diff --git a/docs/nvm_comparison.png b/docs/nvm_comparison.png new file mode 100644 index 0000000000000000000000000000000000000000..7c3c2913f97f16de4866fa33a51531bfe7e4c613 GIT binary patch literal 199436 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 literal 0 HcmV?d00001 diff --git a/esy.lock/index.json b/esy.lock/index.json index 6251a8f..fa96723 100644 --- a/esy.lock/index.json +++ b/esy.lock/index.json @@ -1,5 +1,5 @@ { - "checksum": "fc3353f4500533a4dfc452ed120be173", + "checksum": "bc7707f147bdaf3b3f87430bb4b3f0cd", "root": "nsw@link:./package.json", "node": { "refmterr@3.1.10@d41d8cd9": { @@ -15,7 +15,7 @@ "overrides": [], "dependencies": [ "ocaml@4.6.9@d41d8cd9", "@opam/re@opam:1.7.3@83095efd", - "@opam/dune@opam:1.6.3@a7d7baed", "@esy-ocaml/reason@3.3.7@d41d8cd9" + "@opam/dune@opam:1.6.3@a7d7baed", "@esy-ocaml/reason@3.4.0@d41d8cd9" ], "devDependencies": [] }, @@ -55,46 +55,87 @@ "overrides": [], "dependencies": [ "refmterr@3.1.10@d41d8cd9", "pesy@0.4.1@d41d8cd9", - "ocaml@4.6.9@d41d8cd9", "@reason-native/pastel@0.0.0@d41d8cd9", - "@reason-native/console@0.0.1@d41d8cd9", + "ocaml@4.6.9@d41d8cd9", "@reason-native/rely@1.0.1@d41d8cd9", + "@reason-native/pastel@0.0.1@d41d8cd9", + "@reason-native/console@0.0.2@d41d8cd9", + "@opam/semver@opam:0.1.0@595ed2e0", "@opam/ppx_let@opam:v0.11.0@15f51b1c", "@opam/lwt_ppx@opam:1.2.1@db1172a7", "@opam/lwt@opam:4.1.0@111fc2bf", + "@opam/lambdasoup@opam:0.6.3@b8ef0a81", "@opam/dune@opam:1.6.3@a7d7baed", "@opam/core@opam:v0.11.3@ac79d7b5", - "@esy-ocaml/reason@3.3.7@d41d8cd9" + "@opam/cmdliner@opam:1.0.3@96d31520", + "@esy-ocaml/reason@3.4.0@d41d8cd9" ], "devDependencies": [ "@opam/merlin@opam:3.2.2@829ee6dd" ] }, - "@reason-native/pastel@0.0.0@d41d8cd9": { - "id": "@reason-native/pastel@0.0.0@d41d8cd9", - "name": "@reason-native/pastel", - "version": "0.0.0", + "@reason-native/rely@1.0.1@d41d8cd9": { + "id": "@reason-native/rely@1.0.1@d41d8cd9", + "name": "@reason-native/rely", + "version": "1.0.1", "source": { "type": "install", "source": [ - "archive:https://registry.npmjs.org/@reason-native/pastel/-/pastel-0.0.0.tgz#sha1:44f357fea33b894c9fbf651ecb3f2029e04ee013" + "archive:https://registry.npmjs.org/@reason-native/rely/-/rely-1.0.1.tgz#sha1:14afdbf5bada7739dd9a68d4817c53e7d5ddd50c" ] }, "overrides": [], "dependencies": [ "refmterr@3.1.10@d41d8cd9", "ocaml@4.6.9@d41d8cd9", - "@opam/dune@opam:1.6.3@a7d7baed", "@esy-ocaml/reason@3.3.7@d41d8cd9" + "@reason-native/pastel@0.0.1@d41d8cd9", + "@reason-native/file-context-printer@0.0.2@d41d8cd9", + "@opam/dune@opam:1.6.3@a7d7baed", "@esy-ocaml/reason@3.4.0@d41d8cd9" ], "devDependencies": [] }, - "@reason-native/console@0.0.1@d41d8cd9": { - "id": "@reason-native/console@0.0.1@d41d8cd9", - "name": "@reason-native/console", + "@reason-native/pastel@0.0.1@d41d8cd9": { + "id": "@reason-native/pastel@0.0.1@d41d8cd9", + "name": "@reason-native/pastel", "version": "0.0.1", "source": { "type": "install", "source": [ - "archive:https://registry.npmjs.org/@reason-native/console/-/console-0.0.1.tgz#sha1:08a6786dd34a1aa326f88a5cf3c9819df3339fb1" + "archive:https://registry.npmjs.org/@reason-native/pastel/-/pastel-0.0.1.tgz#sha1:ff305233ffd915d317cdcebee534d16c0aada198" ] }, "overrides": [], "dependencies": [ - "refmterr@3.1.10@d41d8cd9", "ocaml@4.6.9@d41d8cd9", - "@opam/dune@opam:1.6.3@a7d7baed", "@esy-ocaml/reason@3.3.7@d41d8cd9" + "ocaml@4.6.9@d41d8cd9", "@opam/dune@opam:1.6.3@a7d7baed", + "@esy-ocaml/reason@3.4.0@d41d8cd9" + ], + "devDependencies": [] + }, + "@reason-native/file-context-printer@0.0.2@d41d8cd9": { + "id": "@reason-native/file-context-printer@0.0.2@d41d8cd9", + "name": "@reason-native/file-context-printer", + "version": "0.0.2", + "source": { + "type": "install", + "source": [ + "archive:https://registry.npmjs.org/@reason-native/file-context-printer/-/file-context-printer-0.0.2.tgz#sha1:effbcb6db360cca9ac293a0075bc0d5912bd0ce0" + ] + }, + "overrides": [], + "dependencies": [ + "ocaml@4.6.9@d41d8cd9", "@reason-native/pastel@0.0.1@d41d8cd9", + "@opam/re@opam:1.7.3@83095efd", "@opam/dune@opam:1.6.3@a7d7baed", + "@esy-ocaml/reason@3.4.0@d41d8cd9" + ], + "devDependencies": [] + }, + "@reason-native/console@0.0.2@d41d8cd9": { + "id": "@reason-native/console@0.0.2@d41d8cd9", + "name": "@reason-native/console", + "version": "0.0.2", + "source": { + "type": "install", + "source": [ + "archive:https://registry.npmjs.org/@reason-native/console/-/console-0.0.2.tgz#sha1:25bd391653579a56d53ddf7cc502a237b784163b" + ] + }, + "overrides": [], + "dependencies": [ + "ocaml@4.6.9@d41d8cd9", "@opam/dune@opam:1.6.3@a7d7baed", + "@esy-ocaml/reason@3.4.0@d41d8cd9" ], "devDependencies": [] }, @@ -156,6 +197,58 @@ "@opam/base@opam:v0.11.1@0e54024e" ] }, + "@opam/uutf@opam:1.0.1@c4650647": { + "id": "@opam/uutf@opam:1.0.1@c4650647", + "name": "@opam/uutf", + "version": "opam:1.0.1", + "source": { + "type": "install", + "source": [ + "archive:https://opam.ocaml.org/cache/md5/b8/b8535f974027357094c5cdb4bf03a21b#md5:b8535f974027357094c5cdb4bf03a21b", + "archive:http://erratique.ch/software/uutf/releases/uutf-1.0.1.tbz#md5:b8535f974027357094c5cdb4bf03a21b" + ], + "opam": { + "name": "uutf", + "version": "1.0.1", + "path": "esy.lock/opam/uutf.1.0.1" + } + }, + "overrides": [], + "dependencies": [ + "ocaml@4.6.9@d41d8cd9", "@opam/uchar@opam:0.0.2@c8218eea", + "@opam/topkg@opam:1.0.0@61f4ccf9", + "@opam/ocamlfind@opam:1.8.0@96572762", + "@opam/ocamlbuild@opam:0.12.0@6c616094", + "@opam/cmdliner@opam:1.0.3@96d31520", + "@esy-ocaml/substs@0.0.1@d41d8cd9" + ], + "devDependencies": [ + "ocaml@4.6.9@d41d8cd9", "@opam/uchar@opam:0.0.2@c8218eea" + ] + }, + "@opam/uchar@opam:0.0.2@c8218eea": { + "id": "@opam/uchar@opam:0.0.2@c8218eea", + "name": "@opam/uchar", + "version": "opam:0.0.2", + "source": { + "type": "install", + "source": [ + "archive:https://opam.ocaml.org/cache/md5/c9/c9ba2c738d264c420c642f7bb1cf4a36#md5:c9ba2c738d264c420c642f7bb1cf4a36", + "archive:https://github.com/ocaml/uchar/releases/download/v0.0.2/uchar-0.0.2.tbz#md5:c9ba2c738d264c420c642f7bb1cf4a36" + ], + "opam": { + "name": "uchar", + "version": "0.0.2", + "path": "esy.lock/opam/uchar.0.0.2" + } + }, + "overrides": [], + "dependencies": [ + "ocaml@4.6.9@d41d8cd9", "@opam/ocamlbuild@opam:0.12.0@6c616094", + "@esy-ocaml/substs@0.0.1@d41d8cd9" + ], + "devDependencies": [ "ocaml@4.6.9@d41d8cd9" ] + }, "@opam/typerep@opam:v0.11.0@625676b6": { "id": "@opam/typerep@opam:v0.11.0@625676b6", "name": "@opam/typerep", @@ -182,6 +275,34 @@ "ocaml@4.6.9@d41d8cd9", "@opam/base@opam:v0.11.1@0e54024e" ] }, + "@opam/topkg@opam:1.0.0@61f4ccf9": { + "id": "@opam/topkg@opam:1.0.0@61f4ccf9", + "name": "@opam/topkg", + "version": "opam:1.0.0", + "source": { + "type": "install", + "source": [ + "archive:https://opam.ocaml.org/cache/md5/e3/e3d76bda06bf68cb5853caf6627da603#md5:e3d76bda06bf68cb5853caf6627da603", + "archive:http://erratique.ch/software/topkg/releases/topkg-1.0.0.tbz#md5:e3d76bda06bf68cb5853caf6627da603" + ], + "opam": { + "name": "topkg", + "version": "1.0.0", + "path": "esy.lock/opam/topkg.1.0.0" + } + }, + "overrides": [], + "dependencies": [ + "ocaml@4.6.9@d41d8cd9", "@opam/result@opam:1.3@bee8bf2e", + "@opam/ocamlfind@opam:1.8.0@96572762", + "@opam/ocamlbuild@opam:0.12.0@6c616094", + "@esy-ocaml/substs@0.0.1@d41d8cd9" + ], + "devDependencies": [ + "ocaml@4.6.9@d41d8cd9", "@opam/result@opam:1.3@bee8bf2e", + "@opam/ocamlbuild@opam:0.12.0@6c616094" + ] + }, "@opam/stdio@opam:v0.11.0@3b11cb88": { "id": "@opam/stdio@opam:v0.11.0@3b11cb88", "name": "@opam/stdio", @@ -312,6 +433,30 @@ "@opam/parsexp@opam:v0.11.0@7febd99d", "@opam/num@opam:1.1@dcdca088" ] }, + "@opam/semver@opam:0.1.0@595ed2e0": { + "id": "@opam/semver@opam:0.1.0@595ed2e0", + "name": "@opam/semver", + "version": "opam:0.1.0", + "source": { + "type": "install", + "source": [ + "archive:https://opam.ocaml.org/cache/md5/ce/ce6614ba2f91754028b29a12989f9da6#md5:ce6614ba2f91754028b29a12989f9da6", + "archive:https://github.com/rgrinberg/ocaml-semver/archive/v0.1.0.tar.gz#md5:ce6614ba2f91754028b29a12989f9da6" + ], + "opam": { + "name": "semver", + "version": "0.1.0", + "path": "esy.lock/opam/semver.0.1.0" + } + }, + "overrides": [], + "dependencies": [ + "ocaml@4.6.9@d41d8cd9", "@opam/ocamlfind@opam:1.8.0@96572762", + "@opam/ocamlbuild@opam:0.12.0@6c616094", + "@esy-ocaml/substs@0.0.1@d41d8cd9" + ], + "devDependencies": [ "ocaml@4.6.9@d41d8cd9" ] + }, "@opam/result@opam:1.3@bee8bf2e": { "id": "@opam/result@opam:1.3@bee8bf2e", "name": "@opam/result", @@ -1517,6 +1662,33 @@ ], "devDependencies": [ "ocaml@4.6.9@d41d8cd9" ] }, + "@opam/markup@opam:0.8.0@e4958f14": { + "id": "@opam/markup@opam:0.8.0@e4958f14", + "name": "@opam/markup", + "version": "opam:0.8.0", + "source": { + "type": "install", + "source": [ + "archive:https://opam.ocaml.org/cache/md5/be/be0e44a8e8a540f633996e0e26109b4d#md5:be0e44a8e8a540f633996e0e26109b4d", + "archive:https://github.com/aantron/markup.ml/archive/0.8.0.tar.gz#md5:be0e44a8e8a540f633996e0e26109b4d" + ], + "opam": { + "name": "markup", + "version": "0.8.0", + "path": "esy.lock/opam/markup.0.8.0" + } + }, + "overrides": [], + "dependencies": [ + "ocaml@4.6.9@d41d8cd9", "@opam/uutf@opam:1.0.1@c4650647", + "@opam/uchar@opam:0.0.2@c8218eea", "@opam/dune@opam:1.6.3@a7d7baed", + "@esy-ocaml/substs@0.0.1@d41d8cd9" + ], + "devDependencies": [ + "ocaml@4.6.9@d41d8cd9", "@opam/uutf@opam:1.0.1@c4650647", + "@opam/uchar@opam:0.0.2@c8218eea" + ] + }, "@opam/lwt_ppx@opam:1.2.1@db1172a7": { "id": "@opam/lwt_ppx@opam:1.2.1@db1172a7", "name": "@opam/lwt_ppx", @@ -1579,6 +1751,32 @@ "ocaml@4.6.9@d41d8cd9", "@opam/result@opam:1.3@bee8bf2e" ] }, + "@opam/lambdasoup@opam:0.6.3@b8ef0a81": { + "id": "@opam/lambdasoup@opam:0.6.3@b8ef0a81", + "name": "@opam/lambdasoup", + "version": "opam:0.6.3", + "source": { + "type": "install", + "source": [ + "archive:https://opam.ocaml.org/cache/md5/89/89f0596aa05a6e7a33bf9d74797905f1#md5:89f0596aa05a6e7a33bf9d74797905f1", + "archive:https://github.com/aantron/lambda-soup/archive/0.6.3.tar.gz#md5:89f0596aa05a6e7a33bf9d74797905f1" + ], + "opam": { + "name": "lambdasoup", + "version": "0.6.3", + "path": "esy.lock/opam/lambdasoup.0.6.3" + } + }, + "overrides": [], + "dependencies": [ + "ocaml@4.6.9@d41d8cd9", "@opam/markup@opam:0.8.0@e4958f14", + "@opam/jbuilder@opam:transition@58bdfe0a", + "@esy-ocaml/substs@0.0.1@d41d8cd9" + ], + "devDependencies": [ + "ocaml@4.6.9@d41d8cd9", "@opam/markup@opam:0.8.0@e4958f14" + ] + }, "@opam/jbuilder@opam:transition@58bdfe0a": { "id": "@opam/jbuilder@opam:transition@58bdfe0a", "name": "@opam/jbuilder", @@ -1903,6 +2101,28 @@ "dependencies": [ "@esy-ocaml/substs@0.0.1@d41d8cd9" ], "devDependencies": [] }, + "@opam/cmdliner@opam:1.0.3@96d31520": { + "id": "@opam/cmdliner@opam:1.0.3@96d31520", + "name": "@opam/cmdliner", + "version": "opam:1.0.3", + "source": { + "type": "install", + "source": [ + "archive:https://opam.ocaml.org/cache/md5/36/3674ad01d4445424105d33818c78fba8#md5:3674ad01d4445424105d33818c78fba8", + "archive:http://erratique.ch/software/cmdliner/releases/cmdliner-1.0.3.tbz#md5:3674ad01d4445424105d33818c78fba8" + ], + "opam": { + "name": "cmdliner", + "version": "1.0.3", + "path": "esy.lock/opam/cmdliner.1.0.3" + } + }, + "overrides": [], + "dependencies": [ + "ocaml@4.6.9@d41d8cd9", "@esy-ocaml/substs@0.0.1@d41d8cd9" + ], + "devDependencies": [ "ocaml@4.6.9@d41d8cd9" ] + }, "@opam/biniou@opam:1.2.0@c8516f18": { "id": "@opam/biniou@opam:1.2.0@c8516f18", "name": "@opam/biniou", @@ -2049,14 +2269,14 @@ "dependencies": [], "devDependencies": [] }, - "@esy-ocaml/reason@3.3.7@d41d8cd9": { - "id": "@esy-ocaml/reason@3.3.7@d41d8cd9", + "@esy-ocaml/reason@3.4.0@d41d8cd9": { + "id": "@esy-ocaml/reason@3.4.0@d41d8cd9", "name": "@esy-ocaml/reason", - "version": "3.3.7", + "version": "3.4.0", "source": { "type": "install", "source": [ - "archive:https://registry.npmjs.org/@esy-ocaml/reason/-/reason-3.3.7.tgz#sha1:4d75b8876807c4178c6fff2359962066bb69d944" + "archive:https://registry.npmjs.org/@esy-ocaml/reason/-/reason-3.4.0.tgz#sha1:8c84c183a95d489a3e82ff0465effe4b56ff12af" ] }, "overrides": [], diff --git a/esy.lock/opam/cmdliner.1.0.3/opam b/esy.lock/opam/cmdliner.1.0.3/opam new file mode 100644 index 0000000..661a34b --- /dev/null +++ b/esy.lock/opam/cmdliner.1.0.3/opam @@ -0,0 +1,36 @@ +opam-version: "2.0" +maintainer: "Daniel Bünzli " +authors: ["Daniel Bünzli "] +homepage: "http://erratique.ch/software/cmdliner" +doc: "http://erratique.ch/software/cmdliner/doc/Cmdliner" +dev-repo: "git+http://erratique.ch/repos/cmdliner.git" +bug-reports: "https://github.com/dbuenzli/cmdliner/issues" +tags: [ "cli" "system" "declarative" "org:erratique" ] +license: "ISC" +depends:[ "ocaml" {>= "4.03.0"} ] +build: [[ make "all" "PREFIX=%{prefix}%" ]] +install: +[[make "install" "LIBDIR=%{_:lib}%" "DOCDIR=%{_:doc}%" ] + [make "install-doc" "LIBDIR=%{_:lib}%" "DOCDIR=%{_:doc}%" ]] + +synopsis: """Declarative definition of command line interfaces for OCaml""" +description: """\ + +Cmdliner allows the declarative definition of command line interfaces +for OCaml. + +It provides a simple and compositional mechanism to convert command +line arguments to OCaml values and pass them to your functions. The +module automatically handles syntax errors, help messages and UNIX man +page generation. It supports programs with single or multiple commands +and respects most of the [POSIX][1] and [GNU][2] conventions. + +Cmdliner has no dependencies and is distributed under the ISC license. + +[1]: http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap12.html +[2]: http://www.gnu.org/software/libc/manual/html_node/Argument-Syntax.html +""" +url { +archive: "http://erratique.ch/software/cmdliner/releases/cmdliner-1.0.3.tbz" +checksum: "3674ad01d4445424105d33818c78fba8" +} diff --git a/esy.lock/opam/lambdasoup.0.6.3/opam b/esy.lock/opam/lambdasoup.0.6.3/opam new file mode 100644 index 0000000..f27c067 --- /dev/null +++ b/esy.lock/opam/lambdasoup.0.6.3/opam @@ -0,0 +1,35 @@ +opam-version: "2.0" +version: "0.6.3" +homepage: "https://github.com/aantron/lambda-soup" +doc: "http://aantron.github.io/lambda-soup" +bug-reports: "https://github.com/aantron/lambda-soup/issues" +license: "BSD" + +authors: "Anton Bachin " +maintainer: "Anton Bachin " +dev-repo: "git+https://github.com/aantron/lambda-soup.git" +depends: [ + "ocaml" + "jbuilder" {build & >= "1.0+beta10"} + "markup" {>= "0.7.1"} + "ounit" {with-test} +] +build: [ + ["jbuilder" "build" "-p" name "-j" jobs] +] +synopsis: "Easy functional HTML scraping and manipulation with CSS selectors" +description: """ +Lambda Soup is an HTML scraping library inspired by Python's Beautiful Soup. It +provides lazy traversals from HTML nodes to their parents, children, siblings, +etc., and to nodes matching CSS selectors. The traversals can be manipulated +using standard functional combinators such as fold, filter, and map. + +The DOM tree is mutable. You can use Lambda Soup for automatic HTML rewriting in +scripts. Lambda Soup rewrites its own ocamldoc page this way. + +A major goal of Lambda Soup is to be easy to use, including in interactive +sessions, and to have a minimal learning curve. It is a very simple library.""" +url { + src: "https://github.com/aantron/lambda-soup/archive/0.6.3.tar.gz" + checksum: "md5=89f0596aa05a6e7a33bf9d74797905f1" +} diff --git a/esy.lock/opam/markup.0.8.0/opam b/esy.lock/opam/markup.0.8.0/opam new file mode 100644 index 0000000..a22644c --- /dev/null +++ b/esy.lock/opam/markup.0.8.0/opam @@ -0,0 +1,52 @@ +opam-version: "2.0" +version: "0.8.0" + +maintainer: "Anton Bachin " +authors: "Anton Bachin " +homepage: "https://github.com/aantron/markup.ml" +doc: "http://aantron.github.io/markup.ml" +bug-reports: "https://github.com/aantron/markup.ml/issues" +dev-repo: "git+https://github.com/aantron/markup.ml.git" +license: "BSD" + +depends: [ + "ocaml" + "dune" {build} + "ounit" {with-test} + "uchar" + "uutf" {>= "1.0.0"} +] +# Markup.ml implicitly requires OCaml 4.02.3, as this is a contraint of Dune. +# Without that, Markup.ml implicitly requires OCaml 4.01.0, as this is a +# constraint of Uutf. Without *that*, Markup.ml works on OCaml 3.11 or searlier. + +build: [ + ["dune" "build" "-p" name "-j" jobs] +] + +synopsis: "Error-recovering functional HTML5 and XML parsers and writers" + +description: """ +Markup.ml provides an HTML parser and an XML parser. The parsers are wrapped in +a simple interface: they are functions that transform byte streams to parsing +signal streams. Streams can be manipulated in various ways, such as processing +by fold, filter, and map, assembly into DOM tree structures, or serialization +back to HTML or XML. + +Both parsers are based on their respective standards. The HTML parser, in +particular, is based on the state machines defined in HTML5. + +The parsers are error-recovering by default, and accept fragments. This makes it +very easy to get a best-effort parse of some input. The parsers can, however, be +easily configured to be strict, and to accept only full documents. + +Apart from this, the parsers are streaming (do not build up a document in +memory), non-blocking (can be used with threading libraries), lazy (do not +consume input unless the signal stream is being read), and process the input in +a single pass. They automatically detect the character encoding of the input +stream, and convert everything to UTF-8.""" + +url { + src: "https://github.com/aantron/markup.ml/archive/0.8.0.tar.gz" + checksum: "md5=be0e44a8e8a540f633996e0e26109b4d" +} diff --git a/esy.lock/opam/semver.0.1.0/opam b/esy.lock/opam/semver.0.1.0/opam new file mode 100644 index 0000000..3ee31e3 --- /dev/null +++ b/esy.lock/opam/semver.0.1.0/opam @@ -0,0 +1,35 @@ +opam-version: "2.0" +maintainer: "rudi.grinberg@gmail.com" +authors: [ + "Tikhon Jelvis" + "Rudi Grinberg" +] +homepage: "https://github.com/rgrinberg/ocaml-semver" +bug-reports: "https://github.com/rgrinberg/ocaml-semver/issues" +license: "BSD3" +dev-repo: "git+https://github.com/rgrinberg/ocaml-semver.git" +build: [ + ["ocaml" "setup.ml" "-configure"] + ["ocaml" "setup.ml" "-build"] + ["ocaml" "setup.ml" "-configure" "--enable-tests"] {with-test} + ["ocaml" "setup.ml" "-build"] {with-test} + ["ocaml" "setup.ml" "-test"] {with-test} + ["ocaml" "setup.ml" "-doc"] {with-doc} +] +install: ["ocaml" "setup.ml" "-install"] +remove: ["ocamlfind" "remove" "semver"] +depends: [ + "ocaml" {>= "4.02.0"} + "ocamlfind" {build} + "ounit" {with-test} + "ocamlbuild" {build} +] +synopsis: "Semantic versioning module" +description: """ +Provides a single module `Semver` that can parse, compare, and manipulate +software versions of the form x.x.x. See http://semver.org/""" +flags: light-uninstall +url { + src: "https://github.com/rgrinberg/ocaml-semver/archive/v0.1.0.tar.gz" + checksum: "md5=ce6614ba2f91754028b29a12989f9da6" +} diff --git a/esy.lock/opam/topkg.1.0.0/opam b/esy.lock/opam/topkg.1.0.0/opam new file mode 100644 index 0000000..2276edb --- /dev/null +++ b/esy.lock/opam/topkg.1.0.0/opam @@ -0,0 +1,49 @@ +opam-version: "2.0" +maintainer: "Daniel Bünzli " +authors: ["Daniel Bünzli "] +homepage: "http://erratique.ch/software/topkg" +doc: "http://erratique.ch/software/topkg/doc" +license: "ISC" +dev-repo: "git+http://erratique.ch/repos/topkg.git" +bug-reports: "https://github.com/dbuenzli/topkg/issues" +tags: ["packaging" "ocamlbuild" "org:erratique"] +depends: [ + "ocaml" {>= "4.01.0"} + "ocamlfind" {build & >= "1.6.1"} + "ocamlbuild" + "result" ] +build: [[ + "ocaml" "pkg/pkg.ml" "build" + "--pkg-name" name + "--dev-pkg" "%{pinned}%" ]] +synopsis: """The transitory OCaml software packager""" +description: """\ + +Topkg is a packager for distributing OCaml software. It provides an +API to describe the files a package installs in a given build +configuration and to specify information about the package's +distribution, creation and publication procedures. + +The optional topkg-care package provides the `topkg` command line tool +which helps with various aspects of a package's life cycle: creating +and linting a distribution, releasing it on the WWW, publish its +documentation, add it to the OCaml opam repository, etc. + +Topkg is distributed under the ISC license and has **no** +dependencies. This is what your packages will need as a *build* +dependency. + +Topkg-care is distributed under the ISC license it depends on +[fmt][fmt], [logs][logs], [bos][bos], [cmdliner][cmdliner], +[webbrowser][webbrowser] and `opam-format`. + +[fmt]: http://erratique.ch/software/fmt +[logs]: http://erratique.ch/software/logs +[bos]: http://erratique.ch/software/bos +[cmdliner]: http://erratique.ch/software/cmdliner +[webbrowser]: http://erratique.ch/software/webbrowser +""" +url { +src: "http://erratique.ch/software/topkg/releases/topkg-1.0.0.tbz" +checksum: "md5=e3d76bda06bf68cb5853caf6627da603" +} diff --git a/esy.lock/opam/uchar.0.0.2/opam b/esy.lock/opam/uchar.0.0.2/opam new file mode 100644 index 0000000..428d7aa --- /dev/null +++ b/esy.lock/opam/uchar.0.0.2/opam @@ -0,0 +1,36 @@ +opam-version: "2.0" +maintainer: "Daniel Bünzli " +authors: ["Daniel Bünzli "] +homepage: "http://ocaml.org" +doc: "https://ocaml.github.io/uchar/" +dev-repo: "git+https://github.com/ocaml/uchar.git" +bug-reports: "https://github.com/ocaml/uchar/issues" +tags: [ "text" "character" "unicode" "compatibility" "org:ocaml.org" ] +license: "typeof OCaml system" +depends: [ + "ocaml" {>= "3.12.0"} + "ocamlbuild" {build} +] +build: [ + ["ocaml" "pkg/git.ml"] + [ + "ocaml" + "pkg/build.ml" + "native=%{ocaml:native}%" + "native-dynlink=%{ocaml:native-dynlink}%" + ] +] +synopsis: "Compatibility library for OCaml's Uchar module" +description: """ +The `uchar` package provides a compatibility library for the +[`Uchar`][1] module introduced in OCaml 4.03. + +The `uchar` package is distributed under the license of the OCaml +compiler. See [LICENSE](LICENSE) for details. + +[1]: http://caml.inria.fr/pub/docs/manual-ocaml/libref/Uchar.html""" +url { + src: + "https://github.com/ocaml/uchar/releases/download/v0.0.2/uchar-0.0.2.tbz" + checksum: "md5=c9ba2c738d264c420c642f7bb1cf4a36" +} diff --git a/esy.lock/opam/uutf.1.0.1/opam b/esy.lock/opam/uutf.1.0.1/opam new file mode 100644 index 0000000..e0d3ea8 --- /dev/null +++ b/esy.lock/opam/uutf.1.0.1/opam @@ -0,0 +1,38 @@ +opam-version: "2.0" +maintainer: "Daniel Bünzli " +authors: ["Daniel Bünzli "] +homepage: "http://erratique.ch/software/uutf" +doc: "http://erratique.ch/software/uutf/doc/Uutf" +dev-repo: "git+http://erratique.ch/repos/uutf.git" +bug-reports: "https://github.com/dbuenzli/uutf/issues" +tags: [ "unicode" "text" "utf-8" "utf-16" "codec" "org:erratique" ] +license: "ISC" +depends: [ + "ocaml" {>= "4.01.0"} + "ocamlfind" {build} + "ocamlbuild" {build} + "topkg" {build} + "uchar" +] +depopts: ["cmdliner"] +conflicts: ["cmdliner" { < "0.9.6"} ] +build: [[ + "ocaml" "pkg/pkg.ml" "build" + "--pinned" "%{pinned}%" + "--with-cmdliner" "%{cmdliner:installed}%" ]] +synopsis: "Non-blocking streaming Unicode codec for OCaml" +description: """ +Uutf is a non-blocking streaming codec to decode and encode the UTF-8, +UTF-16, UTF-16LE and UTF-16BE encoding schemes. It can efficiently +work character by character without blocking on IO. Decoders perform +character position tracking and support newline normalization. + +Functions are also provided to fold over the characters of UTF encoded +OCaml string values and to directly encode characters in OCaml +Buffer.t values. + +Uutf has no dependency and is distributed under the ISC license.""" +url { + src: "http://erratique.ch/software/uutf/releases/uutf-1.0.1.tbz" + checksum: "md5=b8535f974027357094c5cdb4bf03a21b" +} diff --git a/executable/Env.re b/executable/Env.re new file mode 100644 index 0000000..0571385 --- /dev/null +++ b/executable/Env.re @@ -0,0 +1,9 @@ +open Nsw; + +let run = () => { + Console.log( + Printf.sprintf("export PATH=%s/bin:$PATH", Directories.currentVersion), + ); + + Lwt.return(); +}; diff --git a/executable/Install.re b/executable/Install.re new file mode 100644 index 0000000..c5a090a --- /dev/null +++ b/executable/Install.re @@ -0,0 +1,101 @@ +open Nsw; + +let mkDownloadsDir = () => { + let exists = Lwt_unix.file_exists(Directories.downloads); + if%lwt (exists |> Lwt.map(x => !x)) { + Console.log( + + "Creating " + Directories.downloads + " for the first time" + , + ); + let%lwt _ = System.mkdirp(Directories.downloads); + Lwt.return(); + } else { + Lwt.return(); + }; +}; + +let main = (~version as versionName) => { + let%lwt os = System.NodeOS.get() + and arch = System.NodeArch.get() + and versionName = + switch (versionName) { + | Some(versionName) => Lwt.return(versionName) + | None => Nvmrc.getVersion() + }; + + let versionName = Versions.format(versionName); + + Console.log( + + "Looking for node " + versionName + " for " + + {System.NodeOS.toString(os)} + " " + {System.NodeArch.toString(arch)} + + , + ); + + let%lwt filepath = + Versions.getFileToDownload(~version=versionName, ~os, ~arch); + let tarDestination = + Filename.concat(Directories.downloads, versionName ++ ".tar.gz"); + + Console.log( + + "Downloading " + filepath + " to " + tarDestination + , + ); + + let%lwt _ = System.mkdirp(Filename.dirname(tarDestination)); + let%lwt _ = Http.download(filepath, ~into=tarDestination); + let extractionDestination = + Filename.concat(Directories.nodeVersions, versionName); + + Console.log( + + "Extracting " + tarDestination + " to " + extractionDestination + , + ); + + let%lwt _ = + Compression.extractFile(tarDestination, ~into=extractionDestination); + + Lwt.return(); +}; + +let run = (~version) => + try%lwt (main(~version)) { + | Versions.No_Download_For_System(os, arch) => + Console.log( + + "Version exists, but can't find a file for your system:\n" + " OS: " + {System.NodeOS.toString(os)} + "\n" + " Architecture: " + {System.NodeArch.toString(arch)} + , + ) + |> Lwt.return + | Versions.Version_not_found(version) => + Console.log( + + "Version " + version + " not found!" + , + ) + |> Lwt.return + }; \ No newline at end of file diff --git a/executable/ListInstallations.re b/executable/ListInstallations.re index 97b211c..15558f9 100644 --- a/executable/ListInstallations.re +++ b/executable/ListInstallations.re @@ -1,122 +1,37 @@ -module Path = { - let rec join = xs => - switch (xs) { - | [x] => x - | [x, ...xs] => Filename.concat(x, join(xs)) - | [] => "" - }; -}; - -module Fs = { - open Core; - let readdir = dir => - switch (Sys.readdir(dir)) { - | x => Ok(x) - | exception (Sys_error(error)) => Error(error) - }; - - let realpath = Filename.realpath; -}; - -module Result = { - let return = x => Ok(x); - - let both = (a, b) => - switch (a, b) { - | (Error(_) as e, _) - | (_, Error(_) as e) => e - | (Ok(ax), Ok(bx)) => Ok((ax, bx)) - }; - - let map = (fn, res) => - switch (res) { - | Ok(x) => Ok(fn(x)) - | Error(_) as e => e - }; - - let bind = (fn, res) => - switch (res) { - | Ok(x) => fn(x) - | Error(_) as e => e - }; - - let fold = (error, ok, res) => - switch (res) { - | Ok(x) => ok(x) - | Error(x) => error(x) - }; - - module Let_syntax = { - let map = (x, ~f) => map(f, x); - let bind = (x, ~f) => bind(f, x); - }; -}; - -module Opt = { - let orThrow = (message, opt) => - switch (opt) { - | None => failwith(message) - | Some(x) => x - }; - - let fold = (none, some, opt) => - switch (opt) { - | None => none() - | Some(x) => some(x) - }; - - let toResult = (error, opt) => - switch (opt) { - | None => Error(error) - | Some(x) => Ok(x) - }; -}; - -module Directories = { - open Core; - let home = - Sys.getenv("HOME") - |> Opt.orThrow("There isn't $HOME environment variable set."); - let sfwRoot = Path.join([home, ".nsw"]); - let nodeVersions = Path.join([sfwRoot, "node-versions"]); - let currentVersion = Path.join([sfwRoot, "current"]); -}; - -let currentVersion = () => - switch (Fs.realpath(Directories.currentVersion)) { - | x => Some(x) - | exception (Unix.Unix_error(_, _, _)) => None - }; - -let printableVersions = (~current, ~versions) => { - open Pastel; +open Nsw; +let colorizeVersions = (~current, ~versions) => { let strings = versions |> List.map(version => { - let fullPath = Path.join([Directories.nodeVersions, version]); - let str = "- " ++ version; - fullPath == current ? str : str; + open Versions.Local; + let str = "- " ++ version.name; + + let color = + current + |> Opt.bind(current => + current.name == version.name ? Some(Pastel.Green) : None + ); + + str ; }); - ...strings ; + + "## List of installed versions:\n" + ...strings + ; }; -let run = () => { - open Result; +let getVersionsString = () => + Result.( + { + let%bind versions = + Versions.getInstalledVersions() |> Result.map(Array.to_list); - let%bind current = - currentVersion() - |> Opt.toResult("No version selected") - |> Result.fold(x => x, x => x) - |> Result.return; - let%bind x = Fs.readdir(Directories.nodeVersions); - let%bind versions = - Fs.readdir(Directories.nodeVersions) |> Result.map(Array.to_list); + let current = Versions.getCurrentVersion(); - Console.log( - "## List of installed versions:" , + colorizeVersions(~current, ~versions) |> Result.return; + } ); - printableVersions(~current, ~versions) |> Console.log; - Result.return(); -}; \ No newline at end of file + +let run = () => getVersionsString() |> Result.map(Console.log) |> Lwt.return; diff --git a/executable/ListLocal.re b/executable/ListLocal.re new file mode 100644 index 0000000..1d95c10 --- /dev/null +++ b/executable/ListLocal.re @@ -0,0 +1,24 @@ +open Nsw; + +let run = () => + Versions.Local.( + { + let%lwt versions = Versions.getInstalledVersions() |> Result.toLwt; + let currentVersion = Versions.getCurrentVersion(); + + Console.log("The following versions are installed:"); + + versions + |> Array.iter(version => { + let color = + switch (currentVersion) { + | None => None + | Some(x) when x.name == version.name => Some(Pastel.Cyan) + | Some(_) => None + }; + Console.log( "* " {version.name} ); + }); + + Lwt.return(); + } + ); diff --git a/executable/ListRemote.re b/executable/ListRemote.re new file mode 100644 index 0000000..4b013c6 --- /dev/null +++ b/executable/ListRemote.re @@ -0,0 +1,26 @@ +open Nsw; + +let run = () => { + Console.log("Looking for some node versions upstream..."); + + let%lwt versions = Versions.getRemoteVersions(); + let currentVersion = Versions.getCurrentVersion(); + + versions + |> List.iter(version => { + open Versions.Remote; + let str = "* " ++ version.name; + let color = + switch (currentVersion, version.installed) { + | (Some({name: currentVersionName, _}), _) + when currentVersionName == version.name => + Some(Pastel.Cyan) + | (_, true) => Some(Pastel.Green) + | (_, false) => None + }; + + Console.log( str ); + }); + + Lwt.return(); +}; diff --git a/executable/NswApp.re b/executable/NswApp.re index c94b841..b883bf5 100644 --- a/executable/NswApp.re +++ b/executable/NswApp.re @@ -1 +1,99 @@ -ListInstallations.run(); \ No newline at end of file +let version = "1.0.0"; + +module Commands = { + let use = version => Lwt_main.run(Use.run(version)); + let listRemote = () => Lwt_main.run(ListRemote.run()); + let listLocal = () => Lwt_main.run(ListLocal.run()); + let install = version => Lwt_main.run(Install.run(~version)); + let env = () => Lwt_main.run(Env.run()); +}; + +open Cmdliner; + +let help_secs = [ + `S(Manpage.s_common_options), + `P("These options are common to all commands."), + `S("MORE HELP"), + `P("Use `$(mname) $(i,COMMAND) --help' for help on a single command."), + `Noblank, + `S(Manpage.s_bugs), + `P("File bug reports at https://github.com/Schniz/nsw"), +]; + +let install = { + let doc = "Install another node version"; + let man = []; + + let selectedVersion = { + let doc = "Install another version specified in $(docv)."; + Arg.( + value & pos(0, some(string), None) & info([], ~docv="VERSION", ~doc) + ); + }; + + ( + Term.(const(Commands.install) $ selectedVersion), + Term.info("install", ~version, ~doc, ~exits=Term.default_exits, ~man), + ); +}; + +let listLocal = { + let doc = "List all the installed versions"; + let man = []; + + ( + Term.(app(const(Commands.listLocal), const())), + Term.info("ls", ~version, ~doc, ~exits=Term.default_exits, ~man), + ); +}; + +let listRemote = { + let doc = "List all the versions upstream"; + let man = []; + + ( + Term.(app(const(Commands.listRemote), const())), + Term.info("ls-remote", ~version, ~doc, ~exits=Term.default_exits, ~man), + ); +}; + +let use = { + let doc = "Switch to another installed node version"; + let man = []; + + let selectedVersion = { + let doc = "Switch to version $(docv).\nLeave empty to look for value from `.nvmrc`"; + Arg.( + value & pos(0, some(string), None) & info([], ~docv="VERSION", ~doc) + ); + }; + + ( + Term.(const(Commands.use) $ selectedVersion), + Term.info("use", ~version, ~doc, ~exits=Term.default_exits, ~man), + ); +}; + +let env = { + let doc = "Show env configurations"; + let sdocs = Manpage.s_common_options; + let man = help_secs; + ( + Term.(const(Commands.env) $ const()), + Term.info("env", ~version, ~doc, ~exits=Term.default_exits, ~man, ~sdocs), + ); +}; + +let defaultCmd = { + let doc = "Manage Node.js installations"; + let sdocs = Manpage.s_common_options; + let man = help_secs; + ( + Term.(ret(const(_ => `Help((`Pager, None))) $ const())), + Term.info("nsw", ~version, ~doc, ~exits=Term.default_exits, ~man, ~sdocs), + ); +}; + +let _ = + Term.eval_choice(defaultCmd, [install, use, listLocal, listRemote, env]) + |> Term.exit; diff --git a/executable/Use.re b/executable/Use.re new file mode 100644 index 0000000..df11b2e --- /dev/null +++ b/executable/Use.re @@ -0,0 +1,63 @@ +open Nsw; + +let lwtIgnore = lwt => Lwt.catch(() => lwt, _ => Lwt.return()); + +exception Version_Not_Installed(string); + +let switchVersion = version => { + let versionDir = Filename.concat(Directories.nodeVersions, version); + + let%lwt _ = + if%lwt (Lwt_unix.file_exists(versionDir) |> Lwt.map(x => !x)) { + Lwt.fail(Version_Not_Installed(version)); + }; + + let destination = Filename.concat(versionDir, "installation"); + let source = Directories.currentVersion; + + Console.log( + + "Linking " + source + " to " + destination + , + ); + + let%lwt _ = Lwt_unix.unlink(Directories.currentVersion) |> lwtIgnore; + let%lwt _ = Lwt_unix.symlink(destination, Directories.currentVersion); + + Console.log( + "Using " version , + ); + + Lwt.return(); +}; + +let main = (~version as providedVersion) => { + let%lwt version = + switch (providedVersion) { + | Some(version) => Lwt.return(version) + | None => Nvmrc.getVersion() + }; + switchVersion(Versions.format(version)); +}; + +let run = version => + try%lwt (main(~version)) { + | Version_Not_Installed(version) => + Console.log( + + "The following version is not installed: " + version + , + ) + |> Lwt.return + | Nvmrc.Version_Not_Provided => + Console.log( + + "No .nvmrc was found in the current directory. Please provide a version number." + , + ) + |> Lwt.return + }; diff --git a/executable/dune b/executable/dune index a22c448..a4234b3 100644 --- a/executable/dune +++ b/executable/dune @@ -5,8 +5,8 @@ (executable ; The entrypoint module (name NswApp) ; From package.json main field - ; The name of the executable (runnable via esy x NswApp.exe) - (public_name NswApp.exe) ; From package.json name field - (libraries core lwt lwt.unix console.lib pastel.lib nsw.lib ) ; From package.json require field (array of strings) + ; The name of the executable (runnable via esy x nsw.exe) + (public_name nsw.exe) ; From package.json name field + (libraries core cmdliner lwt lwt.unix lambdasoup console.lib pastel.lib nsw.lib ) ; From package.json require field (array of strings) (preprocess ( pps lwt_ppx ppx_let )) ; From package.json preprocess field ) \ No newline at end of file diff --git a/feature_tests/basic/run.sh b/feature_tests/basic/run.sh new file mode 100644 index 0000000..95b34e9 --- /dev/null +++ b/feature_tests/basic/run.sh @@ -0,0 +1,8 @@ +eval $(nsw env) +nsw install v8.11.3 +nsw use v8.11.3 + +if [ "$(node --version)" != "v8.11.3" ]; then + echo "Node version is not v8.11.3!" + exit 1 +fi \ No newline at end of file diff --git a/feature_tests/nvmrc/.nvmrc b/feature_tests/nvmrc/.nvmrc new file mode 100644 index 0000000..e3cbcda --- /dev/null +++ b/feature_tests/nvmrc/.nvmrc @@ -0,0 +1 @@ +10.9.0 \ No newline at end of file diff --git a/feature_tests/nvmrc/run.sh b/feature_tests/nvmrc/run.sh new file mode 100644 index 0000000..206a8ad --- /dev/null +++ b/feature_tests/nvmrc/run.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +eval $(nsw env) +nsw install +nsw use + +if [ "$(node --version)" != "v10.9.0" ]; then + echo "Node version is not v10.9.0!" + exit 1 +fi \ No newline at end of file diff --git a/feature_tests/run.sh b/feature_tests/run.sh new file mode 100755 index 0000000..683f522 --- /dev/null +++ b/feature_tests/run.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +set -e + +DIRECTORY=`dirname $0` +BINARY=$1 +TEMP_DIR_BASE=$(pwd)/$DIRECTORY/.tmp +TEMP_BINARY_PATH=$TEMP_DIR_BASE/bin +TEMP_NSW_DIR=$TEMP_DIR_BASE/.nsw + +if [ "$BINARY" == "" ]; then + echo "No binary supplied!" + exit 1 +fi + +echo "using nvm=$BINARY" + +rm -rf $TEMP_DIR_BASE +mkdir $TEMP_DIR_BASE $TEMP_BINARY_PATH +cp $BINARY $TEMP_BINARY_PATH/nsw + +for test_file in $DIRECTORY/*/run.sh; do + rm -rf $TEMP_NSW_DIR + + echo "Running test in $test_file" + echo "Running test in $test_file" | sed "s/./-/g" + (cd $(dirname $test_file) && NSW_DIR=$TEMP_NSW_DIR PATH=$TEMP_BINARY_PATH:$PATH bash $(basename $test_file)) + echo "" + echo " -> Finished!" + + rm -rf $TEMP_NSW_DIR +done diff --git a/library/Compression.re b/library/Compression.re new file mode 100644 index 0000000..e983e63 --- /dev/null +++ b/library/Compression.re @@ -0,0 +1,15 @@ +let extractFile = (~into as destination, filepath) => { + let%lwt _ = System.mkdirp(destination); + let%lwt _ = + System.unix_exec( + "tar", + ~args=[|"-xvf", filepath, "--directory", destination|], + ~stderr=`Dev_null, + ); + let%lwt files = Fs.readdir(destination) |> Result.toLwt; + let filename = files[0]; + Lwt_unix.rename( + Filename.concat(destination, filename), + Filename.concat(destination, "installation"), + ); +}; diff --git a/library/Directories.re b/library/Directories.re new file mode 100644 index 0000000..179a695 --- /dev/null +++ b/library/Directories.re @@ -0,0 +1,13 @@ +let sfwRoot = + Opt.( + Sys.getenv_opt("NSW_DIR") + or { + let home = + Sys.getenv_opt("HOME") + |> Opt.orThrow("There isn't $HOME environment variable set."); + Filename.concat(home, ".nsw"); + } + ); +let nodeVersions = Filename.concat(sfwRoot, "node-versions"); +let currentVersion = Filename.concat(sfwRoot, "current"); +let downloads = Filename.concat(sfwRoot, "downloads"); \ No newline at end of file diff --git a/library/Fs.re b/library/Fs.re new file mode 100644 index 0000000..6be72ae --- /dev/null +++ b/library/Fs.re @@ -0,0 +1,19 @@ +open Core; + +let readdir = dir => + switch (Sys.readdir(dir)) { + | x => Ok(x) + | exception (Sys_error(error)) => Error(error) + }; + +let writeFile = (path, contents) => { + let%lwt x = Lwt_unix.openfile(path, [Unix.O_RDWR, Unix.O_CREAT], 777); + let%lwt _ = + Lwt.finalize( + () => Lwt_unix.write_string(x, contents, 0, String.length(contents)), + () => Lwt_unix.close(x), + ); + Lwt.return(); +}; + +let realpath = Filename.realpath; diff --git a/library/Http.re b/library/Http.re new file mode 100644 index 0000000..bba03db --- /dev/null +++ b/library/Http.re @@ -0,0 +1,53 @@ +type response = { + body: string, + status: int, +}; + +let body = response => response.body; +let status = response => response.status; + +let rec getBody = listOfStrings => { + switch (listOfStrings) { + | [] => "" + | ["", ...rest] => String.concat("\n", rest) + | [_, ...xs] => getBody(xs) + }; +}; + +let rec getStatus = string => { + List.nth(String.split_on_char(' ', string), 1); +}; + +exception Unknown_status_code(response); +exception Not_found(response); +exception Internal_server_error(response); + +let verifyStatus = response => { + switch (response.status) { + | 200 => Lwt.return(response) + | x when x / 100 == 4 => Lwt.fail(Not_found(response)) + | x when x / 100 == 5 => Lwt.fail(Internal_server_error(response)) + | x => Lwt.fail(Unknown_status_code(response)) + }; +}; + +let parseResponse = lines => { + let body = getBody(lines); + let status = getStatus(lines |> List.hd) |> int_of_string; + {body, status}; +}; + +let makeRequest = url => { + let%lwt response = + System.unix_exec("curl", ~args=[|url, "-D", "-", "--silent"|]); + response |> parseResponse |> verifyStatus; +}; + +let download = (url, ~into) => { + let%lwt response = + System.unix_exec( + "curl", + ~args=[|url, "-D", "-", "--silent", "-o", into|], + ); + response |> parseResponse |> verifyStatus; +}; \ No newline at end of file diff --git a/library/Nvmrc.re b/library/Nvmrc.re new file mode 100644 index 0000000..ff8c370 --- /dev/null +++ b/library/Nvmrc.re @@ -0,0 +1,14 @@ +exception Version_Not_Provided; + +let getVersion = () => { + let%lwt cwd = Lwt_unix.getcwd(); + let nvmrcFile = Filename.concat(cwd, ".nvmrc"); + try%lwt ( + Lwt_io.lines_of_file(nvmrcFile) + |> Lwt_stream.to_list + |> Lwt.map(List.hd) + |> Lwt.map(String.trim) + ) { + | Unix.Unix_error(Unix.ENOENT, _, _) => Lwt.fail(Version_Not_Provided) + }; +}; diff --git a/library/Opt.re b/library/Opt.re new file mode 100644 index 0000000..d2e5ebf --- /dev/null +++ b/library/Opt.re @@ -0,0 +1,33 @@ +let orThrow = (message, opt) => + switch (opt) { + | None => failwith(message) + | Some(x) => x + }; + +let map = (fn, opt) => + switch (opt) { + | None => None + | Some(x) => Some(fn(x)) + }; + +let bind = (fn, opt) => + switch (opt) { + | None => None + | Some(x) => fn(x) + }; + +let fold = (none, some, opt) => + switch (opt) { + | None => none() + | Some(x) => some(x) + }; + +let toResult = (error, opt) => + switch (opt) { + | None => Error(error) + | Some(x) => Ok(x) + }; + +let some = x => Some(x); + +let (or) = (opt, b) => fold(() => b, x => x, opt); diff --git a/library/Result.re b/library/Result.re new file mode 100644 index 0000000..3df533f --- /dev/null +++ b/library/Result.re @@ -0,0 +1,43 @@ +let return = x => Ok(x); + +let both = (a, b) => + switch (a, b) { + | (Error(_) as e, _) + | (_, Error(_) as e) => e + | (Ok(ax), Ok(bx)) => Ok((ax, bx)) + }; + +let mapError = (fn, res) => + switch (res) { + | Error(x) => Error(fn(x)) + | Ok(_) as x => x + }; + +let map = (fn, res) => + switch (res) { + | Ok(x) => Ok(fn(x)) + | Error(_) as e => e + }; + +let bind = (fn, res) => + switch (res) { + | Ok(x) => fn(x) + | Error(_) as e => e + }; + +let fold = (error, ok, res) => + switch (res) { + | Ok(x) => ok(x) + | Error(x) => error(x) + }; + +module Let_syntax = { + let map = (x, ~f) => map(f, x); + let bind = (x, ~f) => bind(f, x); +}; + +let toLwt = res => + switch (res) { + | Error(x) => Lwt.fail_with(x) + | Ok(x) => Lwt.return(x) + }; diff --git a/library/System.re b/library/System.re new file mode 100644 index 0000000..925c553 --- /dev/null +++ b/library/System.re @@ -0,0 +1,70 @@ +let unix_exec = + (~args=[||], ~env=?, ~stderr: Lwt_process.redirection=`Keep, command) => { + let realArgs = Array.append([|command|], args); + Lwt_process.pread_lines(~stderr, ~env?, ("", realArgs)) + |> Lwt_stream.to_list; +}; + +let mkdirp = destination => + unix_exec("mkdir", ~stderr=`Dev_null, ~args=[|"-p", destination|]); + +module NodeArch = { + type t = + | X32 + | X64 + | Other; + + let rec last = xs => + switch (xs) { + | [x] => Some(x) + | [_, ...xs] => last(xs) + | [] => None + }; + + let findArches = unameResult => { + let words = unameResult |> List.hd |> String.split_on_char(' '); + List.exists(word => word == "x86_64", words) ? X64 : X32; + }; + + /* Get node-compliant architecture (x64, x86) */ + let get = () => + switch (Sys.os_type) { + | "Unix" => + let%lwt result = unix_exec("uname", ~args=[|"-a"|]); + try (result |> findArches |> Lwt.return) { + | _ => Lwt.fail_with("Error getting unix information") + }; + | _ => Lwt.return(Other) + }; + + let toString = + fun + | X64 => "x64" + | X32 => "x32" + | Other => "other"; +}; + +module NodeOS = { + type t = + | Darwin + | Linux + | Other(string); + + let get = () => + switch (Sys.os_type) { + | "Unix" => + let%lwt result = unix_exec("uname", ~args=[|"-s"|]); + switch (result |> List.hd) { + | "Darwin" => Lwt.return(Darwin) + | _ => Lwt.return(Linux) + | exception _ => Lwt.fail_with("Error getting unix information") + }; + | other => Other(other) |> Lwt.return + }; + + let toString = + fun + | Darwin => "darwin" + | Linux => "linux" + | Other(_) => "other"; +}; diff --git a/library/Util.re b/library/Util.re deleted file mode 100644 index 0e75268..0000000 --- a/library/Util.re +++ /dev/null @@ -1 +0,0 @@ -let foo = () => print_endline("Hello"); diff --git a/library/Versions.re b/library/Versions.re new file mode 100644 index 0000000..2954f32 --- /dev/null +++ b/library/Versions.re @@ -0,0 +1,147 @@ +module VersionSet = Set.Make(String); + +module Local = { + type t = { + name: string, + fullPath: string, + }; +}; + +exception Version_not_found(string); + +module Remote = { + type t = { + name: string, + baseURL: string, + installed: bool, + }; + + let skip = (~amount, str) => + Str.last_chars(str, String.length(str) - amount); + + let parseSemver = version => version |> skip(~amount=1) |> Semver.of_string; + + let compare = (v1, v2) => + switch (parseSemver(v1), parseSemver(v2)) { + | (Some(v1), Some(v2)) => Semver.compare(v1, v2) + | (None, _) + | (_, None) => - Core.String.compare(v1, v2) + }; + + let getInstalledVersionSet = () => + Fs.readdir(Directories.nodeVersions) + |> Result.fold(_ => [||], x => x) + |> Array.fold_left( + (acc, curr) => VersionSet.add(curr, acc), + VersionSet.empty, + ); + + let getRelativeLinksFromHTML = html => + Soup.parse(html) + |> Soup.select("pre a") + |> Soup.to_list + |> List.map(Soup.attribute("href")) + |> Core.List.filter_map(~f=x => x); + + let downloadFileSuffix = ".tar.gz"; + + let getVersionFromFilename = filename => { + let strings = filename |> String.split_on_char('-'); + List.nth(strings, 1); + }; +}; + +let format = version => { + let version = + switch (Str.first_chars(version, 1) |> Int32.of_string) { + | _ => "v" ++ version + | exception _ => version + }; + + version; +}; + +let endsWith = (~suffix, str) => { + let suffixLength = String.length(suffix); + + String.length(str) > suffixLength + && Str.last_chars(str, suffixLength) == suffix; +}; + +exception No_Download_For_System(System.NodeOS.t, System.NodeArch.t); + +let getFileToDownload = (~version as versionName, ~os, ~arch) => { + let versionName = + switch (Str.first_chars(versionName, 1) |> Int32.of_string) { + | _ => "v" ++ versionName + | exception _ => versionName + }; + let url = "https://nodejs.org/dist/" ++ versionName ++ "/"; + let%lwt html = + try%lwt (Http.makeRequest(url) |> Lwt.map(Http.body)) { + | Http.Not_found(_) => Lwt.fail(Version_not_found(versionName)) + }; + let filenames = + html + |> Remote.getRelativeLinksFromHTML + |> List.filter( + endsWith( + ~suffix= + System.NodeOS.toString(os) + ++ "-" + ++ System.NodeArch.toString(arch) + ++ Remote.downloadFileSuffix, + ), + ); + + switch (filenames |> List.hd) { + | x => Lwt.return(url ++ x) + | exception _ => Lwt.fail(No_Download_For_System(os, arch)) + }; +}; + +let getCurrentVersion = () => + switch (Fs.realpath(Directories.currentVersion)) { + | installationPath => + let fullPath = Filename.dirname(installationPath); + Some(Local.{fullPath, name: Core.Filename.basename(fullPath)}); + | exception (Unix.Unix_error(_, _, _)) => None + }; + +let getInstalledVersions = () => + Fs.readdir(Directories.nodeVersions) + |> Result.map(x => { + Array.sort(Remote.compare, x); + x; + }) + |> Result.map( + Array.map(name => + Local.{ + name, + fullPath: Filename.concat(Directories.nodeVersions, name), + } + ), + ); + +let getRemoteVersions = () => { + let%lwt bodyString = + Http.makeRequest("https://nodejs.org/dist/") |> Lwt.map(Http.body); + + let versions = bodyString |> Remote.getRelativeLinksFromHTML; + let installedVersions = Remote.getInstalledVersionSet(); + + versions + |> Core.List.filter(~f=x => + Str.last_chars(x, 1) == "/" && Str.first_chars(x, 1) != "." + ) + |> Core.List.map(~f=x => Str.first_chars(x, String.length(x) - 1)) + |> List.sort(Remote.compare) + |> List.map(name => + Remote.{ + name, + installed: VersionSet.find_opt(name, installedVersions) != None, + baseURL: "https://nodejs.org/dist/" ++ name ++ "/", + } + ) + |> Lwt.return; +}; \ No newline at end of file diff --git a/library/dune b/library/dune index 30a4e79..ac7c1d6 100644 --- a/library/dune +++ b/library/dune @@ -7,4 +7,6 @@ (name Nsw) ; Other libraries list this name in their package.json 'require' field to use this library. (public_name nsw.lib) + (libraries str core lwt lwt.unix lambdasoup semver ) + (preprocess ( pps lwt_ppx ppx_let )) ; From package.json preprocess field ) \ No newline at end of file diff --git a/package.json b/package.json index 1515a7e..a4c814f 100644 --- a/package.json +++ b/package.json @@ -4,42 +4,51 @@ "description": "My Project", "esy": { "build": "pesy", + "buildsInSource": "_build", "release": { "releasedBinaries": [ - "NswApp.exe" + "nsw.exe" ] } }, "buildDirs": { "test": { - "require": ["nsw.lib"], + "require": ["nsw.lib", "rely.lib"], "main": "TestNsw", - "name": "TestNsw.exe" + "name": "TestNsw.exe", + "ocamloptFlags": ["-linkall", "-g"] }, "library": { + "preprocess": ["pps", "lwt_ppx", "ppx_let"], + "require": ["str", "core", "lwt", "lwt.unix", "lambdasoup", "semver"], "name": "nsw.lib", "namespace": "Nsw" }, "executable": { "preprocess": ["pps", "lwt_ppx", "ppx_let"], - "require": ["core", "lwt", "lwt.unix", "console.lib", "pastel.lib", "nsw.lib"], + "require": ["core", "cmdliner", "lwt", "lwt.unix", "lambdasoup", "console.lib", "pastel.lib", "nsw.lib"], "main": "NswApp", - "name": "NswApp.exe" + "name": "nsw.exe" } }, "scripts": { "pesy": "bash -c 'env PESY_MODE=update pesy'", - "test": "esy x TestNsw.exe" + "test": "esy x TestNsw.exe", + "fmt": "bash -c 'refmt --in-place {library,executable,test}/*.re'" }, "dependencies": { "@opam/dune": "*", + "@opam/semver": "*", "@opam/core": "*", + "@opam/cmdliner": "*", "@opam/lwt": "*", "@opam/lwt_ppx": "*", "@opam/ppx_let": "*", "@reason-native/console": "*", "@reason-native/pastel": "*", + "@reason-native/rely": "*", "@esy-ocaml/reason": "*", + "@opam/lambdasoup": "*", "refmterr": "*", "ocaml": "~4.6.0", "pesy": "*" diff --git a/test/SmokeTest.re b/test/SmokeTest.re new file mode 100644 index 0000000..cbb57fd --- /dev/null +++ b/test/SmokeTest.re @@ -0,0 +1,17 @@ +open TestFramework; + +describe("Smoke test", ({test}) => { + test("Tests run!", ({expect}) => + expect.int(1).toBe(1) + ); + + test("Get version", ({expect}) => { + let version = run([|"--version"|]); + expect.string(version).toMatch("^[0-9]+.[0-9]+.[0-9]+$"); + }); + + test("env", ({expect}) => { + let env = run([|"env"|]) |> redactSfwRoot; + expect.string(env).toMatchSnapshot(); + }); +}); \ No newline at end of file diff --git a/test/TestFramework.re b/test/TestFramework.re new file mode 100644 index 0000000..d72f7f5 --- /dev/null +++ b/test/TestFramework.re @@ -0,0 +1,31 @@ +let projectDir = Sys.getcwd(); +let tmpDir = Filename.concat(projectDir, ".nswTmp"); + +include Rely.Make({ + let config = + Rely.TestFrameworkConfig.initialize({ + snapshotDir: + Filename.concat( + projectDir, + Filename.concat("test", "__snapshots__"), + ), + projectDir, + }); +}); + +let run = args => { + let arguments = + args |> Array.append([|"./_build/default/executable/NswApp.exe"|]); + let env = Unix.environment() |> Array.append([|"NSW_DIR=" ++ tmpDir|]); + let result = + Lwt_process.pread_chars(~env, ("", arguments)) |> Lwt_stream.to_string; + Lwt_main.run(result); +}; + +let clearTmpDir = () => { + let _ = Lwt_process.pread(("", [|"rm", "-rf", tmpDir|])) |> Lwt_main.run; + (); +}; + +let redactSfwRoot = + Str.global_replace(Str.regexp_string(tmpDir), ""); \ No newline at end of file diff --git a/test/TestNsw.re b/test/TestNsw.re index bc88c6a..9c58607 100644 --- a/test/TestNsw.re +++ b/test/TestNsw.re @@ -1,2 +1,3 @@ -Nsw.Util.foo(); -print_endline("Add Your Test Cases Here"); +include SmokeTest; + +TestFramework.cli(); \ No newline at end of file diff --git a/test/__snapshots__/Smoke_test.4d362c3c.0.snapshot b/test/__snapshots__/Smoke_test.4d362c3c.0.snapshot new file mode 100644 index 0000000..4156fab --- /dev/null +++ b/test/__snapshots__/Smoke_test.4d362c3c.0.snapshot @@ -0,0 +1,3 @@ +Smoke test › env +export PATH=/current/bin:$PATH + diff --git a/test/dune b/test/dune index 209103e..331f7cf 100644 --- a/test/dune +++ b/test/dune @@ -7,5 +7,6 @@ (name TestNsw) ; From package.json main field ; The name of the executable (runnable via esy x TestNsw.exe) (public_name TestNsw.exe) ; From package.json name field - (libraries nsw.lib ) ; From package.json require field (array of strings) + (libraries nsw.lib rely.lib ) ; From package.json require field (array of strings) + (ocamlopt_flags ( -linkall -g )) ; From package.json ocamloptFlags field ) \ No newline at end of file