GithubHelp home page GithubHelp logo

rebel's People

Contributors

bsansouci avatar charlesetc avatar chenglou avatar jaredly avatar jlongster avatar jordwalke avatar tekknolagi avatar threepointone avatar vramana avatar yunxing avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

rebel's Issues

Infamous "inconsistent assumptions" error.

I changed one file, then tried to rebuild, and I got the following:

build/ocamlfind/lib/core_bench/core_bench.cmxa _build/src/Src.cmx _build/src/Src__LayoutTypes.cmx _build/src/Src__LayoutSupport.cmx _build/src/Src__LayoutPrint.cmx _build/src/Src__ReJsPrelude.cmx _build/src/Src__Layout.cmx _build/src/Src__LayoutTestUtils.cmx _build/src/Src__LayoutTest.cmx
File "_none_", line 1:
Error: Files _build/src/Src__LayoutTest.cmx
       and _build/src/Src__LayoutTestUtils.cmx
       make inconsistent assumptions over implementation Src__LayoutTestUtils
ocamlopt.opt returned with exit code 2

I think this happens when an interface file is automatically generated for files that don't have actual interface files (and it produces a .cmi artifact which is untracked by the build system). I think the solution may be to have the build system explicitly create the interface file as an artifact for any implementation file that does not already include an interface file. Then the build system knows to compile everything against that interface, although we understand it is automatically generated.

build with Bucklescript compiler errors

I tried adding

  "rebel": {
    "backend": "bucklescript"
  }

and

  "rebel": {
    "backend": "bucklescript",
    "targets": ["Test.re"]
  }

to my package.json.

and after clearing _build and running npm run postinstall I get the following error

*** jenga: [25809] root=/Users/joshstory/projects/RebelExampleProject, sys=Darwin, j=1, f=1 (NO_VERSION_UTIL)
- build . scheme
+ bash -c 'ocamldep -pp refmt -ppx node_modules/bs-platform/bin/bsppx -ml-synonym .re -mli-synonym .rei -modules -one-line -impl src/Test.re 2>&1 ; (exit ${PIPESTATUS[0]})'
sh: node_modules/bs-platform/bin/bsppx: No such file or directory
File "src/Test.re", line 1:
Error: Error while running external preprocessor
Command line: node_modules/bs-platform/bin/bsppx '/var/folders/qh/p_9n0rws5m7b62ntdpc7ymdc0000gn/T/camlppxa93b8e' '/var/folders/qh/p_9n0rws5m7b62ntdpc7ymdc0000gn/T/camlppxe82333'

src/Test.re:
- exit . scheme, 117ms, exited with code 2
*** jenga: 2/4 targets are up to date
*** jenga: failed (#1, 124ms, heap=407.352m, stat=7, digest=0, ls=0, db-save=0)
*** jenga: todo: 0 (2 / 4) !1 ~1 j=0+0 con=4 save=0 act=1, finished
*** jenga: ERROR: (summary) _build/src/index.js: External command failed
      - build . scheme
      + bash -c 'ocamldep -pp refmt -ppx node_modules/bs-platform/bin/bsppx -ml-synonym .re -mli-synonym .rei -modules -one-line -impl src/Test.re 2>&1 ; (exit ${PIPESTATUS[0]})'
      sh: node_modules/bs-platform/bin/bsppx: No such file or directory
      File "src/Test.re", line 1:
      Error: Error while running external preprocessor
      Command line: node_modules/bs-platform/bin/bsppx '/var/folders/qh/p_9n0rws5m7b62ntdpc7ymdc0000gn/T/camlppxa93b8e' '/var/folders/qh/p_9n0rws5m7b62ntdpc7ymdc0000gn/T/camlppxe82333'

      src/Test.re:
      - exit . scheme, 117ms, exited with code 2
*** jenga: build finished; not in polling mode so quitting
*** jenga: Quit; exit_code = 1

Binary not updated after building

If I have this program:

print_endline "Hello!";

I can build it like so:

npm run build

That is the build command from RebelExampleProject, which is eval $(dependencyEnv) && nopam && rebel. Now I can run the app:

% ./_build/default/src/app.native
Hello!

Now, let's make a change:

print_endline "Hello World!";

And I build it again with npm run build. Now let's try running it again:

% ./_build/default/src/app.native
Hello!

It didn't update. I have to remove _build to get it to update:

% rm -r _build 
jlong-16106:~/projects/loot-sync(master)% npm run build 
...
jlong-16106:~/projects/loot-sync(master)% ./_build/default/src/app.native
Hello World!

Here is the output of the build with rebel -show-actions-run-verbose -verbose -show-error-dependency-paths -brief-error-summary -show-buildable-discovery:

% npm run build

> [email protected] build /Users/james/projects/loot-sync
> eval $(dependencyEnv) && nopam && rebel -show-actions-run-verbose -verbose -show-error-dependency-paths -brief-error-summary -show-buildable-discovery

*** jenga: [91854] root=/Users/james/projects/loot-sync, sys=Darwin, j=1, f=1 (NO_VERSION_UTIL)
*** jenga: Action(.): bash -c 'ocamldep -pp refmt  -ml-synonym .re -mli-synonym .rei -modules -one-line -impl src/Index.re 2>&1 | berror; (exit ${PIPESTATUS[0]})' [deps: src/Index.re]
- build . scheme
+ bash -c 'ocamldep -pp refmt  -ml-synonym .re -mli-synonym .rei -modules -one-line -impl src/Index.re 2>&1 | berror; (exit ${PIPESTATUS[0]})'
src/Index.re:
- exit . scheme, 213ms, code 0
*** jenga: Building: _build/default/src/Default_Tar__Index.cmx _build/default/src/Default_Tar__Index.cmi _build/default/src/Default_Tar__Index.cmt [deps: src/Index.re]
- build . Default_Tar__Index.cmx
+ bash -c 'ocamlfind ocamlopt -pp refmt -bin-annot -g -w -30 -w -40 -open Default_Tar -I _build/default/src -thread   -o _build/default/src/Default_Tar__Index -c -impl src/Index.re 2>&1| berror; (exit ${PIPESTATUS[0]})'
- exit . Default_Tar__Index.cmx, 323ms, code 0
*** jenga: 10/10 targets are up to date
*** jenga: done (#1, 578ms, heap=407.352m, stat=32, digest=4, ls=0, db-save=0) -- HURRAH
*** jenga: todo: 0 (10 / 10) j=0+0 con=10 save=0 act=2, finished
*** jenga: build finished; not in polling mode so quitting
*** jenga: Quit; exit_code = 0

Prettier output

Do we have any control over this output?

*** jenga: [18950] root=/Users/jared/clone/rsn/myntax, sys=Darwin, j=1, f=1 (NO_VERSION_UTIL)
*** jenga: 42/42 targets are up to date
*** jenga: done (#1, 1.199s, heap=407.352m, stat=200, digest=53, ls=1, db-save=0) -- HURRAH
*** jenga: todo: 0 (42 / 42) j=0+0 con=42 save=0 act=27, finished
*** jenga: build finished; not in polling mode so quitting
*** jenga: Quit; exit_code = 0

I think ideally users of rebel shouldn't ever see the word jenga. Also this output looks janky anyway

kebab case

Does jengaboot automatically convert kebab case as CommonML does?

If you have a dependency in node_modules/my-dep, is it visible as module MyDep? Can it be?

Properly expose rebel binary.

Right now the postinstall script copies the binary location to ../.bin That won't always work. I suggest doing one of the following:

  • using npm's bin feature. (But linking to individual bin doesn't work well on windows - instead link to a directory of bins.
  • Or adding the following to your package.json which allows people whose projects use dependency-env to have their run-scripts' PATH augmented with the directory containing your binaries:
  "exportedEnvVars": {
    "PATH": {
      "global": true,
      "globalCollisionBehavior": "joinPath",
      "resolveAsRelativePath": true,
      "val": "./_build/src/"
    }
  },

Wipes .merlin

This autogens a .merlin file, wiping out anything that may have been there before. Ideally should be able to merge them, but even a y/n with the ability to paste the necessary info on no would be good.

npm install --save-dev reasonml/rebel fails on macOS Sierra

It is HIGHLY likely this is user error but I don't know ocaml or reason (other than trying to get reason up and running and then trying to install this according to the instructions in the readme)

I followed the reasonml installation instructions here: https://github.com/facebook/reason/blob/master/README.md#install-stable

I was able to validate installation by compiling the Hello.re toy exampale at the end of the installation instructions

I then followed the installation instructions here: https://github.com/reasonml/rebel#for-consumers

Installation fails at inotify. I don't really know anything about ocamlfind but it also was not mentioned in the reason or rebel install instructions so I am assuming I don't have to know about it to get this installed.

Initialized empty Git repository in /Users/joshstory/projects/helloreason/node_modules/inotify/.git/
ocamlfind: Package `lwt' not found
W: Field 'pkg_lwt' is not set: Command ''/Users/joshstory/projects/helloreason/node_modules/ocamlfind/_build/ocamlfind/bin/ocamlfind' query -format %d lwt > '/var/folders/qh/p_9n0rws5m7b62ntdpc7ymdc0000gn/T/oasis-e9a9e8.txt'' terminated with error code 2
ocamlfind: Package `lwt.unix' not found
W: Field 'pkg_lwt_unix' is not set: Command ''/Users/joshstory/projects/helloreason/node_modules/ocamlfind/_build/ocamlfind/bin/ocamlfind' query -format %d lwt.unix > '/var/folders/qh/p_9n0rws5m7b62ntdpc7ymdc0000gn/T/oasis-17888f.txt'' terminated with error code 2
E: Cannot find findlib package lwt
E: Cannot find findlib package lwt.unix
E: Failure("2 configuration errors")
/Users/joshstory/projects/helloreason
├── [email protected]  extraneous (git+https://github.com/reasonml/js_of_ocaml-bin.git#7e7b81c3a472432cbd80c96e3c738a55d83856e0)
├── [email protected]  extraneous
├── [email protected]  extraneous (git+https://github.com/facebook/reason.git#f1e92a3eba0065cf1ac8fe1c897fbd938bf9b88b)
└── [email protected]  extraneous (git+https://github.com/npm-opam/yojson.git#9d1ae17b1dd40ee0daefe0584fbdad67cb083f38)

npm WARN helloreason No description
npm WARN helloreason No repository field.
npm WARN helloreason No license field.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules/react):
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] postinstall: `eval $(dependencyEnv) && nopam && ocaml pkg/git.ml && ocaml pkg/build.ml native=true native-dynlink=true && (opam-installer --prefix=$opam_prefix || true) && injectOpamEnvs`
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: Exit status 1
npm ERR! Darwin 16.0.0
npm ERR! argv "/usr/local/bin/node" "/Users/joshstory/.npm-packages/bin/npm" "install" "--save-dev" "reasonml/rebel"
npm ERR! node v6.6.0
npm ERR! npm  v3.10.8
npm ERR! code ELIFECYCLE

npm ERR! [email protected] postinstall: `eval $(dependencyEnv) && nopam && ocaml setup.ml -configure --${lwt_enable:-disable}-lwt --prefix $opam_prefix && ocaml setup.ml -build && ocaml setup.ml -install && (opam-installer --prefix=$opam_prefix || true) && injectOpamEnvs`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] postinstall script 'eval $(dependencyEnv) && nopam && ocaml setup.ml -configure --${lwt_enable:-disable}-lwt --prefix $opam_prefix && ocaml setup.ml -build && ocaml setup.ml -install && (opam-installer --prefix=$opam_prefix || true) && injectOpamEnvs'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the inotify package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     eval $(dependencyEnv) && nopam && ocaml setup.ml -configure --${lwt_enable:-disable}-lwt --prefix $opam_prefix && ocaml setup.ml -build && ocaml setup.ml -install && (opam-installer --prefix=$opam_prefix || true) && injectOpamEnvs
npm ERR! You can get information on how to open an issue for this project with:
npm ERR!     npm bugs inotify
npm ERR! Or if that isn't available, you can get their info via:
npm ERR!     npm owner ls inotify
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR!     /Users/joshstory/projects/helloreason/npm-debug.log

Thanks,
Josh

Contributor flow - some blocks I ran into

  1. I need magic commented incantation to build extractDeps.out.

ocamlfind ocamlc -pp refmt -linkpkg -package yojson -g -impl extractDeps.re -o extractDeps.out 2>&1 | huh

  1. The built version of berror has some paths hardcoded which causes errors in the build process:
    bash: node_modules/.bin/berror: /Users/chenglou/.opam/4.02.3/bin/ocamlrun: bad interpreter: No such file or directory

echo huh > node_modules/.bin/berror w/ my own copy of better errors installed seems to unblock.

Generate a good npmignore

E.g. ignore the tests directories by default, so that we don't accidentally bloat up npm download size.

Sanitize package.json

https://github.com/facebook/reason/blob/f7ba08b1b3b2e152d7d4f0b6bfe776008f780978/package.json#L49

This caused a duplicate merlin install (which might fail the compilation for npm-opam packages). The problems is that npm-opam/merlin resolves to https://github.com/npm-opam/merlin.git, which we use elsewhere. However, https://github.com/npm-opam/merlin.git and https://github.com/npm-opam/merlin are not the same.

We can warn related issues every time to run rebel (and it'll stay performant! No check done if package.json didn't change. Muahahahah Jenga). In general we can just throw all the package.json validation into Rebel I think.

transitive dependencies on "otherlibs"

I have a local change that adds a new property in the package.json that allows you to link against any of the otherlibs or anything that ocamlfind can find (as it runs ocamlfind query [name] under the hood).
I used to get sexplib to compile.

The problem is that the way I implemented it was by adding the cma file of that dependency in the command that generates the lib.cma, but it doesn't seem to be bundled properly. This means that when compile A which depends on sexplib, I get errors like Reference to undefined global 'Bigarray'. This might mean that the right way to implement this is by making a flat list of all of those dependencies and linking them at the very end when building the executable. This is really annoying as it totally breaks the encapsulation of the lib, and might have some partial-build times impact.

I'm just writing this issue here to keep track of it. Right now I'll just propagate that field up the chain so we can get Core to build.

ps: this is what I'm calling otherlibs

Create a truly portable `jengaboot`.

Here's my proposal:

Create a fork of jenga, but instead of using ocaml_plugin, just compile in jengaroot rules statically. Then we can compile all of jenga + our custom rules into a single portable bytecode file that we can check into npm and onto CI hosts.

(We need to compile in the rules statically instead of using ocaml plugin because ocaml plugin doesn't work when jenga is compiled as byte code).

Bucklescript!

So it sounds like jengaboot's the future, but I really like bucklescript. What's needed to get this going?

Certainly a way to configure it would be cool (see #18), but to hack things together maybe I'll just try messing with the jengaroot.re and see what happens?

Make compilation to js optional + native compilation

It would be great if there was a way to let the user decide if compilation to js should happen or not.
This could be done with a flag in package.json or ./node_modules/.bin/compile --jsoo for example.

While checking the source I found that everything gets compiled to bytecode with ocamlc.
Maybe we should extend the above to also let the user decide if he wants to target native with ocamlopt.

Have an entry point, and only compile the transitive dependencies of that file

I have 3 binary targets, and 2 bucklescript targets in my myntax project, and rebel just wants to bundle everything up as one, which causes a ton of problems.
Currently, source files are discovered just by globbing the src directory, but if an entry is specified in the rebel package.json config, then only that file and its dependencies should be processed.

ocamlfind dependencies.

I'm using the outdated rebel#bin package, but maybe it's still an issue. The docs say that ocamlfindDependencies should be specified just like your npm dependencies, but I think they need to be specified differently - the key needs to be the ocamlfind package name. For example, even if my package.json specified

      "js_of_ocaml-bin": "github:reasonml/js_of_ocaml-bin"

My rebel config should be:

"ocamlfindDependencies": {
      "js_of_ocaml": "github:reasonml/js_of_ocaml-bin"
    }

npm postinstall: OCaml and preprocessor have incompatible versions

As mentioned on IRC:
npm install jengaboot --save-dev

Results in this post-install:

Fatal error: OCaml and preprocessor have incompatible versions
Fatal error: exception Misc.Fatal_error

I think I traced the source of the problem back to refmt, it's like it isn't available in the environment or so, when invoking ocamlc.
Apparently it's possible to do something like
ocamlc somefile.ml in the post-install, however ocamlc -pp refmt -impl somefile.re will fail.
refmt -parse re -print ml somefile.re && ocamlc somefile.ml on the other hand will succeed.

I have no idea if this is specific to my computer.
As a workaround, I'm doing the following:

npm install --ignore-scripts
cd node_modules/jengaboot

// manually invoke in the post-install
ocamlfind ocamlc -pp refmt -linkpkg -package yojson -g -impl buildUtils/extractDeps.re -o buildUtils/extractDeps.out && ocamlfind ocamlc -pp refmt -linkpkg -package yojson -g -impl buildUtils/extractOpamDeps.re -o buildUtils/extractOpamDeps.out

A possible solution could be to change the post install to "refmt -parse re -print ml buildUtils/extractDeps.re > buildUtils/extractDeps.ml && refmt -parse re -print ml buildUtils/extractOcamlfindDeps.re > buildUtils/extractOcamlfindDeps.ml && ocamlfind ocamlc -linkpkg -package yojson -g -impl buildUtils/extractDeps.ml -o buildUtils/extractDeps.out && ocamlfind ocamlc -linkpkg -package yojson -g -impl buildUtils/extractOcamlfindDeps.ml -o buildUtils/extractOcamlfindDeps.out". But it would probably be better to sort the -pp refmt problem out..

Module Alias Top Level files in BuckleScript Backend.

I turned off module alias for top level files while working on mutliple entry points for backend. But it should be turned back on otherwise the file names or subdirectories can clash with npm package names. I somehow how missed it while writing the feature.

watch or auto build option

Should there be something like an auto build option at the level of Jengaboot, or is it up to the user to write a script for this? I'm currently using a simple node script that watches the src folder and rebuilds on change.

Cannot find `bsc`

Seeing this when trying out rebel + BS:

+ bash -c 'bsc -g  -pp refmt -bin-annot -bs-package-name self -bs-package-output commonjs:_build/src   -I _build/src -o _build/src/Application -c -impl src/Application.re 2>&1; (exit ${PIPESTATUS[0]})'
bash: bsc: command not found
- exit . Application.cmi, 4ms, exited with code 127
*** jenga: 2/5 targets are up to date
*** jenga: failed (#1, 7ms, heap=407.352m, stat=12, digest=0, ls=1, db-save=0)
*** jenga: todo: 0 (2 / 5) !1 ~2 j=0+0 con=5 save=0 act=1, finished
*** jenga: ERROR: (summary) _build/src/Application.cmi: External command failed
      - build . Application.cmi
      + bash -c 'bsc -g  -pp refmt -bin-annot -bs-package-name self -bs-package-output commonjs:_build/src   -I _build/src -o _build/src/Application -c -impl src/Application.re 2>&1; (exit ${PIPESTATUS[0]})'
      bash: bsc: command not found
      - exit . Application.cmi, 4ms, exited with code 127
*** jenga: build finished; not in polling mode so quitting
*** jenga: Quit; exit_code = 1

More configuration! (entry points, compilers, public etc)

So we're using the package.json to put config, but what should we put there? There are some issues that I think fall under this:

  • #17 make js compilation optional, native possible
  • #3 specify what things are "exported" to clients
  • #12 ppxFlag support

And other things that I'm looking for:

  • bucklescript
  • specify the path of the built artifact
"rebel": {
  "targets": {
    "./build/my_app.js": {
      "engine": "bucklescript",
      "entry": "./src/js/main.re",
    },
    "./build/my_server.native": {
      // no engine specified, defaults to ocamlc? or sth
      "entry": "./src/server/main.re",
      "extraFlags": " whatever",
    },
  },
},

Rust's cargo is useful to look at

Where did you you go?

As a new user, I've stumbled upon this repository via other reasonml projects. I can't figure out what's replaced this repository though. Is it a different library? Was rebel moved to another GitHub project? Did something in the reason stdlib replace rebel?

Please update your README with a "look here, instead" link.

Failing `npm install` on Windows 10

Currently the build on a Windows build server is failing with:

npm ERR! Windows_NT 10.0.10586
npm ERR! argv "C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "install" "--save-dev" "reasonml/rebel"
npm ERR! node v6.2.0
npm ERR! npm  v3.8.9
npm ERR! code ELIFECYCLE

npm ERR! [email protected] postinstall: `echo $(pwd) && ls && echo $PATH && ./configure -no-cfi -prefix $(pwd) && make -j world.opt && make install`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] postinstall script 'echo $(pwd) && ls && echo $PATH && ./configure -no-cfi -prefix $(pwd) && make -j world.opt && make install'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the ocaml package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     echo $(pwd) && ls && echo $PATH && ./configure -no-cfi -prefix $(pwd) && make -j world.opt && make install

It looks like an npm ocaml package does not support Windows and an alternative needs to be supplied.

Architecture.md

There are a lot of naunces in current source code. We should document them in file that explains everything in detail.

  • Document the orders in which artifacts are generated in both bucklescript and native backends.

[lowpri] separate directories for public vs. private.

We have a src dir, but then we will want a way to whitelist modules that should be publicly exposed as part of the library. Why not just form two separate directories public and private instead of one dir src, in order to distinguish?

OCamlfind integration.

I propose that if your set of packages conform to the jengaboot opinionated conventions, then you get the following benefits:

  • Your package is buildable as a jengaboot package, locally, with symlinks, and with minimal recompiles.
  • But also, you can "export" your package as a findlib package. This allows your package to be used as a findlib package (where people access it via the -pkg flag for example). This helps jengaboot packages play well with other non-jengaboot build systems, and would allow easily publishing to OPAM. When you conform to the spec, your package can operate in both modes.

This is lower pri, but would be nice. It's probably just a matter of generating the META file.

Help text is super long and full of stuff noone but jenga developers care about :D

$ rebel -h
build specified targets

  rebel [DEMAND ...]

By default building the .DEFAULT target.
To see other jenga commands, try jenga help.

=== flags ===

  [--output-postpone]                        Omake compatability; ignored
  [-brief-error-summary]                     Don't repeat stdout/stderr from
                                             failing commands in error summary
  [-buildable-targets-fixpoint-max <iters>]  (default = 5); 0 means no limit
  [-camlp4]                                  Preprocess files listed in
                                             jenga.conf using camlp4 instead of
                                             ppx (deprecated)
  [-f <forkers>]                             forker processes, def: 1
  [-j <jobs>]                                parallel jobs, def: 1
  [-major-heap-increment <Mb>]               (default = 200 Mb)
  [-max-par-digest <digests>]                parallel digests, def: 1
  [-minor-heap-size <Mb>]                    (default = 50 Mb)
  [-no-fs-triggers]                          For testing, only valid without
                                             notifiers. Makes jenga more strict
                                             by failing instead of potentially
                                             recovering when the file system
                                             changes.
  [-no-notifiers]                            Disable filesystem notifiers
                                             (inotify); polling wont work
                                             (alias: -nono)
  [-no-server]                               Don't start jenga server (queries
                                             to the server won't work)
  [-path-to-jenga-conf]                      Specify path to <jenga.conf>; The
                                             repo_root is taken to be CWD.
  [-poll-forever]                            poll filesystem for changes (keep
                                             polling forever)
                                             (alias: -P)
  [-progress]                                Show periodic progress report
                                             (omake style)
                                             (alias: --progress)
  [-report-long-cycle-times <ms>]            (for development) pass to
                                             Scheduler.report_long_cycle_times
                                             (alias: -long)
  [-sandbox-actions]                         Check dependencies are right by
                                             running actions in a part of the
                                             filesystem where only the declared
                                             dependencies are available
  [-show-actions-run-verbose]                Be more verbose about the reason
                                             actions are run
                                             (aliases: -act-verbose,
                                             -rr-verbose)
  [-show-actions-run]                        Show actions being run; and the
                                             reason why
                                             (aliases: -act, -rr)
  [-show-buildable-discovery]                Mainly for debug. Shows discovery
                                             of buildable targets in a directory
                                             (alias: -buildable)
  [-show-checked]                            Show actions which are checked, but
                                             not run
                                             (alias: -nr)
  [-show-considering]                        Mainly for debug. Shows when deps
                                             are considered/re-considered
                                             (rather verbose)
                                             (alias: -con)
  [-show-error-dependency-paths]             show dependency paths from root
                                             goal to each error (like exception
                                             stack traces)
  [-show-memory-allocations]                 Show information about memory
                                             allocation at the end of the build
  [-show-reconsidering]                      Mainly for debug. Show when deps
                                             are re-considered
                                             (alias: -recon)
  [-show-reflecting]                         Mainly for debug. Shows when deps
                                             are being reflected
                                             (alias: -reflect)
  [-space-overhead <percent>]                (default = 100)
  [-stop-on-first-error]                     stop when first error encounterd
                                             (alias: -Q)
  [-time]                                    prefix all messages with the time
  [-trace]                                   switch on some additional trace
                                             messages
  [-verbose]                                 Show full command string, and
                                             stdout/stderr from every command
                                             run
                                             (alias: --verbose)
  [-w]                                       Omake compatability; declare
                                             omake-server is caller
                                             (alias: -omake-server)
  [-build-info]                              print info about this build and
                                             exit
  [-version]                                 print the version of this build and
                                             exit
  [-help]                                    print this help text and exit
                                             (alias: -?)

Generate good (but non-noisy) auto PRs

chenglou/react-motion#366

Our build system is opinionated enough to be able to give you CI support (?), a test infrastructure, and the rest, in such way that when we upgrade something we can send to your github repo an automatic PR (that passes CI and the tests beforehand? So that it's not noisy).

This is inspired by

  • The PR above PR.
  • Facebook codebase's approach of testing master releases of even e.g. React, whose contributors codemod the entire codebase so that no one gets left behind.
  • iOS' auto upgrade codemod when new APIs come out.

Let's be the first language (not library, not platform) to achieve this!

debug mode

@jordwalke

Also, wouldn't it be cool if Jengaboot output a script called ./debug that bootstrapped the time traveling debugger? (Which does have decent value printing out of the box)?

[bug] Polling mode doesn't work on osx

rebel -P, and then I change one of my source files, and it doesn't recompile. Am I missing a step?
I have to kill & re-run rebel for my stuff to be recompiled

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.