Release Process
esy is released on npm.
Because esy is written in OCaml/Reason and compiled into a native executable we need to acquire a set of prebuilt binaries for each supported platform (Windows, macOS and Linux). We employ CI servers (thanks Azure) to build platform specific releases. For MacOS M1, however, we don't have a CI runner and build the artifact from a M1 machine and add it to the tarball before uploading to NPM.
The release workflow is the following:
-
After making sure the
master
branch is green, we create a release on Github from the release page. This triggers the CI which will eventually produce an NPM tarball (called release.zip) on Azure Pipelines containing pre-built binaries for MacOS (Intel), Linux (statically linked) and Windows. Allx86_64
-
release.zip
is downloaded -
Build on a MacOS M1 machine
a. Fetch all git tags
b. Build the source at the tag being release. This page explains how to build esy from source.
c. Run
esy npm-release
d. Place
_release
inside unzippedrelease.zip
folder as:/platform-darwin-arm64
. The contents of release folder will very likely look like the follow (with the m1 artifacts)
.
|-- LICENSE
|-- README.md
|-- bin
| `-- esy
|-- package.json
|-- platform-darwin
| |-- LICENSE
| |-- README.md
| |-- _export
| | `-- esy-b79b29e0.tar.gz
| |-- bin
| | |-- _storePath
| | `-- esy
| |-- esyInstallRelease.js
| `-- package.json
|-- platform-darwin-arm64
| |-- LICENSE
| |-- README.md
| |-- _export
| | `-- esy-f489fcc4.tar.gz
| |-- bin
| | |-- _storePath
| | `-- esy
| |-- esyInstallRelease.js
| `-- package.json
|-- platform-linux
| |-- _export
| | `-- esy-0c16a771.tar.gz
| |-- bin
| | |-- _storePath
| | `-- esy
| |-- esyInstallRelease.js
| `-- package.json
|-- platform-windows-x64
| |-- LICENSE
| |-- README.md
| |-- _export
| | `-- esy-34889961.tar.gz
| |-- bin
| | |-- _storePath
| | `-- esy.exe
| |-- esyInstallRelease.js
| `-- package.json
`-- postinstall.js
- Publish the folder to NPM