nextflow-io / nextflow

A DSL for data-driven computational pipelines
http://nextflow.io
Apache License 2.0
2.64k stars 609 forks source link

Improve packaging and distribution system #2951

Open pditommaso opened 2 years ago

pditommaso commented 2 years ago

Summary

Nextflow application is a packaged as a set of JAR files (Java archives) that are uploaded to Maven central repository with the exception of the launcher app that's stored in http://nextflow.io/releases/

The nextflow "binary" is a mere Bash script that checks if the launcher app is stored locally. If it cannot be found it download it from the http://nextflow.io/releases URL and run it.

Then the launcher app, uses the Capsule package manager to download the main application JARs from Maven along with all required dependencies files.

This system worked quite nicely for many years, however there are some serious open issues:

Goals

Non-goals

ewels commented 1 month ago

It would be great to use this as an opportunity to move the installation files away from http://nextflow.io/releases/ if possible. It terrifies me having it on the same domain as the website, which is being changed on a regular basis. It would be pretty easy to accidentally break installations by creating the wrong web page URLs there, for example.

It would be better to use a dedicated subdomain that only serves the installation assets, so that it's kept entirely separate from the website hosting. For example, we could use https://download.nextflow.io

We could leave the existing assets at http://nextflow.io/releases/ or potentially set up redirects to the new download link.

ewels commented 1 month ago

Another thing to consider whilst we're here: it would be great to be able to easily install snapshots of Nextflow that are more fine-grained than edge releases, without needing to build locally.

We already build Nextflow on every push to master as part of the GitHub CI automation. Hopefully we could simply save those files as GitHub Actions artefacts and then hook them up to the installer script so that this kind of syntax would work:

NXF_VER=0a8a484 curl -s https://get.nextflow.io/ | bash

GitHub artefacts are deleted after 90 days, so we may want to mirror them to storage somewhere else if that's not too difficult. Doing so may also make it easier for the installer script to work.

ewels commented 1 month ago

It would be trivial to take this same approach ☝🏻 and do it with a cron GitHub Actions trigger instead, to have nightly builds if that is preferred.

Note that we could also set up some redirects to have shortcut versions such as latest or nightly etc which point to the latest bleeding edge version for convenience.