diff --git a/.ci/esy-build-steps.yml b/.ci/esy-build-steps.yml index 81f754c..6c3a74a 100644 --- a/.ci/esy-build-steps.yml +++ b/.ci/esy-build-steps.yml @@ -8,6 +8,8 @@ steps: displayName: 'npm install -g esy@latest' - script: esy install displayName: 'esy install' + - script: esy verify-fnm-package + displayName: 'Verify Fnm__Package.re file' - script: esy pesy displayName: 'esy pesy' - script: esy build diff --git a/.ci/prepare-fnm-package.js b/.ci/prepare-fnm-package.js new file mode 100755 index 0000000..c056ffd --- /dev/null +++ b/.ci/prepare-fnm-package.js @@ -0,0 +1,43 @@ +#!/usr/bin/env node + +const fs = require("fs"); +const path = require("path"); +const cp = require("child_process"); +const jestDiff = require("jest-diff"); + +const version = require("../package.json").version; +const filepath = path.resolve(__dirname, "..", "library", "Fnm__Package.re"); + +main({ failOnDifference: process.argv[2] === "--fail-on-difference" }); + +function generateModule() { + const moduleText = ` + let version = "${version}"; + `; + return cp.execSync(`esy refmt`, { input: moduleText }).toString(); +} + +function readFile() { + try { + return fs.readFileSync(filepath, "utf8"); + } catch (e) { + return ""; + } +} + +function main({ failOnDifference }) { + const result = generateModule(); + + if (failOnDifference) { + const currentContents = readFile(); + if (currentContents !== result) { + console.log(jestDiff(result, currentContents)); + console.log( + "Fnm__Package.re is outdated! Please update it with `esy update-fnm-package`." + ); + process.exit(1); + } + } + + fs.writeFileSync(filepath, result); +} diff --git a/Dockerfile b/Dockerfile index 9abc7c5..5ed13c5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,6 +13,7 @@ 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 verify-fnm-package RUN npx esy pesy RUN npx esy b -RUN npx esy test \ No newline at end of file +RUN npx esy test diff --git a/docs/fnm.svg b/docs/fnm.svg index 6114e75..1928c6b 100644 --- a/docs/fnm.svg +++ b/docs/fnm.svg @@ -1 +1 @@ -evaleval`fnmenv`ffnfnmfnm--version1.0.0catcat.nvmrc10.9.0fnminstallLookingfornodev10.9.0fordarwinx64Downloadinghttps://nodejs.org/dist/v10.9.0/node-v10.9.0-darwin-x64.tar.gzto~/.fnm/downloads/v10.9.0.tar.gzExtracting~/.fnm/downloads/v10.9.0.tar.gzto~/.fnm/node-versions/v10.9.0fnmuseLinking~/.fnm/currentto~/.fnm/node-versions/v10.9.0/installationUsingv10.9.0nodenode-vv10.9.0eevevaeval`eval`feval`fneval`fnmeval`fnmeeval`fnmeneval`fnmenvfnm-fnm--fnm--vfnm--vefnm--verfnm--versifnm--versioccacat.ncat.nvcat.nvmcat.nvmrfnmifnminfnminsfnminstfnminstafnminstalfnmufnmusnnonodnode- \ No newline at end of file +evaleval`fnmeval`fnmenv`ffnfnmfnm--version1.1.0catcat.nvmrc10.9.0fnminstallLookingfornodev10.9.0fordarwinx64Downloadinghttps://nodejs.org/dist/v10.9.0/node-v10.9.0-darwin-x64.tar.gzto~/.fnm/downloads/v10.9.0.tar.gzExtracting~/.fnm/downloads/v10.9.0.tar.gzto~/.fnm/node-versions/v10.9.0fnmuseLinking~/.fnm/currentto~/.fnm/node-versions/v10.9.0/installationUsingv10.9.0nodenode-vv10.9.0eevevaeval`eval`feval`fneval`fnmeeval`fnmeneval`fnmenvfnm-fnm--fnm--vfnm--vefnm--verfnm--versifnm--versioccacat.cat.ncat.nvcat.nvmcat.nvmrfnmifnminfnminsfnminstfnminstafnminstalfnmufnmusnnonodnode- \ No newline at end of file diff --git a/esy.lock/index.json b/esy.lock/index.json index d326f59..5333785 100644 --- a/esy.lock/index.json +++ b/esy.lock/index.json @@ -1,7 +1,21 @@ { - "checksum": "bc7707f147bdaf3b3f87430bb4b3f0cd", + "checksum": "6af635d6f5efe2f01ba9a6fba48c2952", "root": "fnm@link:./package.json", "node": { + "supports-color@5.5.0@d41d8cd9": { + "id": "supports-color@5.5.0@d41d8cd9", + "name": "supports-color", + "version": "5.5.0", + "source": { + "type": "install", + "source": [ + "archive:https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz#sha1:e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + ] + }, + "overrides": [], + "dependencies": [ "has-flag@3.0.0@d41d8cd9" ], + "devDependencies": [] + }, "refmterr@3.1.10@d41d8cd9": { "id": "refmterr@3.1.10@d41d8cd9", "name": "refmterr", @@ -19,6 +33,36 @@ ], "devDependencies": [] }, + "pretty-format@24.0.0@d41d8cd9": { + "id": "pretty-format@24.0.0@d41d8cd9", + "name": "pretty-format", + "version": "24.0.0", + "source": { + "type": "install", + "source": [ + "archive:https://registry.npmjs.org/pretty-format/-/pretty-format-24.0.0.tgz#sha1:cb6599fd73ac088e37ed682f61291e4678f48591" + ] + }, + "overrides": [], + "dependencies": [ + "ansi-styles@3.2.1@d41d8cd9", "ansi-regex@4.0.0@d41d8cd9" + ], + "devDependencies": [] + }, + "prettier@1.16.2@d41d8cd9": { + "id": "prettier@1.16.2@d41d8cd9", + "name": "prettier", + "version": "1.16.2", + "source": { + "type": "install", + "source": [ + "archive:https://registry.npmjs.org/prettier/-/prettier-1.16.2.tgz#sha1:f60bc5929a7f9a05260cc88d5430391100092414" + ] + }, + "overrides": [], + "dependencies": [], + "devDependencies": [] + }, "pesy@0.4.1@d41d8cd9": { "id": "pesy@0.4.1@d41d8cd9", "name": "pesy", @@ -47,6 +91,51 @@ "dependencies": [], "devDependencies": [] }, + "jest-get-type@24.0.0@d41d8cd9": { + "id": "jest-get-type@24.0.0@d41d8cd9", + "name": "jest-get-type", + "version": "24.0.0", + "source": { + "type": "install", + "source": [ + "archive:https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.0.0.tgz#sha1:36e72930b78e33da59a4f63d44d332188278940b" + ] + }, + "overrides": [], + "dependencies": [], + "devDependencies": [] + }, + "jest-diff@24.0.0@d41d8cd9": { + "id": "jest-diff@24.0.0@d41d8cd9", + "name": "jest-diff", + "version": "24.0.0", + "source": { + "type": "install", + "source": [ + "archive:https://registry.npmjs.org/jest-diff/-/jest-diff-24.0.0.tgz#sha1:a3e5f573dbac482f7d9513ac9cfa21644d3d6b34" + ] + }, + "overrides": [], + "dependencies": [ + "pretty-format@24.0.0@d41d8cd9", "jest-get-type@24.0.0@d41d8cd9", + "diff-sequences@24.0.0@d41d8cd9", "chalk@2.4.2@d41d8cd9" + ], + "devDependencies": [] + }, + "has-flag@3.0.0@d41d8cd9": { + "id": "has-flag@3.0.0@d41d8cd9", + "name": "has-flag", + "version": "3.0.0", + "source": { + "type": "install", + "source": [ + "archive:https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz#sha1:b5d454dc2199ae225699f3467e5a07f3b955bafd" + ] + }, + "overrides": [], + "dependencies": [], + "devDependencies": [] + }, "fnm@link:./package.json": { "id": "fnm@link:./package.json", "name": "fnm", @@ -55,9 +144,9 @@ "overrides": [], "dependencies": [ "refmterr@3.1.10@d41d8cd9", "pesy@0.4.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", + "ocaml@4.6.9@d41d8cd9", "@reason-native/rely@1.1.0@d41d8cd9", + "@reason-native/pastel@0.1.0@d41d8cd9", + "@reason-native/console@0.0.3@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", @@ -66,35 +155,139 @@ "@opam/cmdliner@opam:1.0.3@96d31520", "@esy-ocaml/reason@3.4.0@d41d8cd9" ], - "devDependencies": [ "@opam/merlin@opam:3.2.2@829ee6dd" ] + "devDependencies": [ + "prettier@1.16.2@d41d8cd9", "jest-diff@24.0.0@d41d8cd9", + "@opam/merlin@opam:3.2.2@829ee6dd" + ] }, - "@reason-native/rely@1.0.1@d41d8cd9": { - "id": "@reason-native/rely@1.0.1@d41d8cd9", + "escape-string-regexp@1.0.5@d41d8cd9": { + "id": "escape-string-regexp@1.0.5@d41d8cd9", + "name": "escape-string-regexp", + "version": "1.0.5", + "source": { + "type": "install", + "source": [ + "archive:https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#sha1:1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + ] + }, + "overrides": [], + "dependencies": [], + "devDependencies": [] + }, + "diff-sequences@24.0.0@d41d8cd9": { + "id": "diff-sequences@24.0.0@d41d8cd9", + "name": "diff-sequences", + "version": "24.0.0", + "source": { + "type": "install", + "source": [ + "archive:https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.0.0.tgz#sha1:cdf8e27ed20d8b8d3caccb4e0c0d8fe31a173013" + ] + }, + "overrides": [], + "dependencies": [], + "devDependencies": [] + }, + "color-name@1.1.3@d41d8cd9": { + "id": "color-name@1.1.3@d41d8cd9", + "name": "color-name", + "version": "1.1.3", + "source": { + "type": "install", + "source": [ + "archive:https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz#sha1:a7d0558bd89c42f795dd42328f740831ca53bc25" + ] + }, + "overrides": [], + "dependencies": [], + "devDependencies": [] + }, + "color-convert@1.9.3@d41d8cd9": { + "id": "color-convert@1.9.3@d41d8cd9", + "name": "color-convert", + "version": "1.9.3", + "source": { + "type": "install", + "source": [ + "archive:https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz#sha1:bb71850690e1f136567de629d2d5471deda4c1e8" + ] + }, + "overrides": [], + "dependencies": [ "color-name@1.1.3@d41d8cd9" ], + "devDependencies": [] + }, + "chalk@2.4.2@d41d8cd9": { + "id": "chalk@2.4.2@d41d8cd9", + "name": "chalk", + "version": "2.4.2", + "source": { + "type": "install", + "source": [ + "archive:https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz#sha1:cd42541677a54333cf541a49108c1432b44c9424" + ] + }, + "overrides": [], + "dependencies": [ + "supports-color@5.5.0@d41d8cd9", + "escape-string-regexp@1.0.5@d41d8cd9", "ansi-styles@3.2.1@d41d8cd9" + ], + "devDependencies": [] + }, + "ansi-styles@3.2.1@d41d8cd9": { + "id": "ansi-styles@3.2.1@d41d8cd9", + "name": "ansi-styles", + "version": "3.2.1", + "source": { + "type": "install", + "source": [ + "archive:https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz#sha1:41fbb20243e50b12be0f04b8dedbf07520ce841d" + ] + }, + "overrides": [], + "dependencies": [ "color-convert@1.9.3@d41d8cd9" ], + "devDependencies": [] + }, + "ansi-regex@4.0.0@d41d8cd9": { + "id": "ansi-regex@4.0.0@d41d8cd9", + "name": "ansi-regex", + "version": "4.0.0", + "source": { + "type": "install", + "source": [ + "archive:https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz#sha1:70de791edf021404c3fd615aa89118ae0432e5a9" + ] + }, + "overrides": [], + "dependencies": [], + "devDependencies": [] + }, + "@reason-native/rely@1.1.0@d41d8cd9": { + "id": "@reason-native/rely@1.1.0@d41d8cd9", "name": "@reason-native/rely", - "version": "1.0.1", + "version": "1.1.0", "source": { "type": "install", "source": [ - "archive:https://registry.npmjs.org/@reason-native/rely/-/rely-1.0.1.tgz#sha1:14afdbf5bada7739dd9a68d4817c53e7d5ddd50c" + "archive:https://registry.npmjs.org/@reason-native/rely/-/rely-1.1.0.tgz#sha1:f60e228c997d7c24b660624db647a1ffac9a113a" ] }, "overrides": [], "dependencies": [ "refmterr@3.1.10@d41d8cd9", "ocaml@4.6.9@d41d8cd9", - "@reason-native/pastel@0.0.1@d41d8cd9", + "@reason-native/pastel@0.1.0@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/pastel@0.0.1@d41d8cd9": { - "id": "@reason-native/pastel@0.0.1@d41d8cd9", + "@reason-native/pastel@0.1.0@d41d8cd9": { + "id": "@reason-native/pastel@0.1.0@d41d8cd9", "name": "@reason-native/pastel", - "version": "0.0.1", + "version": "0.1.0", "source": { "type": "install", "source": [ - "archive:https://registry.npmjs.org/@reason-native/pastel/-/pastel-0.0.1.tgz#sha1:ff305233ffd915d317cdcebee534d16c0aada198" + "archive:https://registry.npmjs.org/@reason-native/pastel/-/pastel-0.1.0.tgz#sha1:2b262a654b8d807215df74768e628e9b05b3f5e3" ] }, "overrides": [], @@ -116,20 +309,20 @@ }, "overrides": [], "dependencies": [ - "ocaml@4.6.9@d41d8cd9", "@reason-native/pastel@0.0.1@d41d8cd9", + "ocaml@4.6.9@d41d8cd9", "@reason-native/pastel@0.1.0@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", + "@reason-native/console@0.0.3@d41d8cd9": { + "id": "@reason-native/console@0.0.3@d41d8cd9", "name": "@reason-native/console", - "version": "0.0.2", + "version": "0.0.3", "source": { "type": "install", "source": [ - "archive:https://registry.npmjs.org/@reason-native/console/-/console-0.0.2.tgz#sha1:25bd391653579a56d53ddf7cc502a237b784163b" + "archive:https://registry.npmjs.org/@reason-native/console/-/console-0.0.3.tgz#sha1:b9b6bdf800e13361cfb4daccb540316c3a11ce38" ] }, "overrides": [], diff --git a/executable/FnmApp.re b/executable/FnmApp.re index 53920c4..359c3a0 100644 --- a/executable/FnmApp.re +++ b/executable/FnmApp.re @@ -1,4 +1,4 @@ -let version = "1.0.0"; +let version = Fnm.Fnm__Package.version; module Commands = { let use = version => Lwt_main.run(Use.run(version)); diff --git a/library/Fnm__Package.re b/library/Fnm__Package.re new file mode 100644 index 0000000..e19ad97 --- /dev/null +++ b/library/Fnm__Package.re @@ -0,0 +1 @@ +let version = "1.1.0"; diff --git a/package.json b/package.json index fd17603..4efe3ef 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,8 @@ }, "scripts": { "pesy": "bash -c 'env PESY_MODE=update pesy'", + "update-fnm-package": "node ./.ci/prepare-fnm-package.js", + "verify-fnm-package": "node ./.ci/prepare-fnm-package.js --fail-on-difference", "test": "esy x TestFnm.exe", "fmt": "bash -c 'refmt --in-place {library,executable,test}/*.re'" }, @@ -54,6 +56,8 @@ "pesy": "*" }, "devDependencies": { - "@opam/merlin": "*" + "@opam/merlin": "*", + "prettier": "*", + "jest-diff": "24.0.0" } }