All Projects → jaredly → esyi

jaredly / esyi

Licence: other
No description, website, or topics provided.

Programming Languages

ocaml
1615 projects

Esy Install

But in ocaml this time. With a real solver, so we get good dependencies.

Status: self-hosting! Also can install reason-wall-demo

Completed

  • parsing opam files & mostly converting the dependencies (I bail on the more complex boolean operations, pretending they are "any")
  • parsing package.json files
  • talking to the npm registry
  • looking in a local copy of the opam registry
  • using MCCS (a SAT solver) to find a valid assignment of dependencies!
  • tracking buildDependencies separately
  • sharing resolved buildDependencies when possible
  • generating a lockfile! (it's yojson at the moment, so don't expect anything fancy)
  • fetching all the things, with some opam -> package.json conversion
  • write out override files
  • get the files from opam too tho
  • handle override patches too
  • add a _resolved field
  • opam conversion
    • incorporate esy-opam-overrides
  • get jbuilder building
  • get [the test repository] building!
  • handle opam versions correctly (>= 1.2.0 & < 1.3.0)
  • respect the "available" flag in opam
  • get tsdl building ok
  • get reason-wall-demo building!
  • be able to install its own deps!
  • ~ should resolve before the empty string in opam land
  • make the "fetch" step not depend on having opam-repository around
  • grab & update esy-opam-overrides and opam-repository automatically

After that

  • be able to process normal npm dependencies -- first by trying to do it without conflicts, and then relaxing the requirement and doing an after-pass to remove unneeded duplicates.
  • output a nice "esy.resolved" file that esy b can then read to know where dependencies live.

Needed less urgently

  • use Lwt! So we can parallelize a ton of things
  • actually validate checksums
  • deciding what we want to do with devDependencies (currently they're dumped into build dependences)
  • make the generated lockfile a nicer format (maybe yaml/toml?)
  • parallelize some things, but make sure not to compromise reproducability
  • handle the not-fresh case
    • inflate from lockfile
    • check staleness
    • add/remove/upgrade deps

Needed for cross-platform

  • use Cohttp instead of shelling out to curl
  • maybe use an ocaml git client? instead of shelling out to git
  • use an ocaml decompression library instead of shelling out to tar
  • audit for "/" vs Filename.concat

Later on

  • maybe fetch tarballs from the opam mirror directly
  • maybe use a global cache for fetched things? currently using a project-local cache
  • support multiple architecture targets!
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].