@andreypopp/esy v0.0.6
esy
Easy Sandboxes For Compiled Languages
Rough sketch start of implementation for
PackageJsonForCompilers
concept. (Here, the name is esy instead of pjc).
esy seeks to support an "eject" feature, which makes
PackageJsonForCompilers easy to deploy/build on hosts that don't even have
node installed - they would only need make. Just copy the entire sandbox over
to the host and run the makefile.
The esy command (without anything following the esy word), prints the
environment for one package, taking into account variables exported by
dependencies. The final goal of the esy build command is to walk the entire
dependency graph, running their build commands, and running each dependency's
build command in an environment computed from the esy command, for that
one package.
The environments computed by esy are with respect to (sandbox root, cur
package), where the sandbox root is the top level package we're building
everything for, and cur package is one of the transitive dependencies.
Running esy in a directory is like printing the environment as if pwd was
both the sandbox root and the "currently building package".
The esy build command would walk the tree with sandbox root = topmost package,
and at each node set cur package = <THIS_DEPENDENCY>, and run the build command
in an environment computed based on that combination.
We'd want to generate a makefile that encodes the graph of packages, and can build everything with maximum parallelism.
Test
Built In Commands
| Command | Meaning | Implemented |
|---|---|---|
esy | Print the environment variables for current directory as sandbox root and cur root. | Started |
esy build | Implements pjc build command from PackageJsonForCompilers proposal. Should generate Makefile | Yes |
esy any command here | Executes any command here but in the sandbox that would be printed via esy | No |
Test
Run the test. The output shows the environment computed for a single package
PackageA. Some errors are logged into the comments of the output.
cd tests/TestOne/PackageA
./test.shThe output isn't actually verified yet. We should create many more similar tests, even if they don't work correctly yet.
Next
- Populate all of the variables in
pjcproposal. - Should generate a build for all packages in makefile form.
- Implement "scope" concept as described in
esy.jscomments. - Take
buildTimeOnlyDependenciesin order to "cut off" scope of environment variables. - Automatically set up
_buildand_installdirectories, populate variables accordingly.
Try it out on a sample project
https://github.com/andreypopp/esy-ocaml-project
Origins
This is a fork of dependency-env which is more stable.