Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Currently, Ignite 3 does not have a ready-made mechanism for delivering the required components to the user. The purpose of this IEP is to work out and create all kinds of options for packaging and distribution distributing the required components of Ignite 3 to the user, taking into account the UX of various user platforms and OS.

...

As ready-made resulting packages, it is planned to make only completely independent parts of Apache Ignite. At the moment only Ignite core part and Ignite CLI can work as standalone applications and these applications should be distributed as OS specific packages for all supported platforms. (Linux, Windows, MacOs). However, we will publish not only compiled packages, there is a need to publish individual parts of Apache Ignite that are not standalone applications, and we need to provide the user with the access to these parts. The prime candidate for this is the ignite-client with all its subparts (JDBC, SQL Api, etc Api). More about this will be described in paragraph Publishing.

Three packages will be provided:

...

  1. Various Gradle plugins that can make the build process easier.   Rpm/Deb, brew, SDKMan, Docker, etc.
  2. Currently, the Apache Ignite project contains many different validation scripts that need to be run manually or in TeamCity's automation scripts. Instead of all this, it can be unified in the gradle build scripts in order to be able to locally fully reproduce the build with CI.
  3. Since we have 3 different packaging targets (ignite3-db, ignite3-cli, ignite3) all packaging logic can be unified in 1 gradle script and just used in target modules.

...

  1. Download RPM/DEB package
  2. Run rpm -i <package> / apt install <path-to-deb> / dpkg -i <package>
  3. After installation the executable is represented as system service (service file) and can be run with system ignite start command. 


Uninstallation:

  1. `rpm -e <package> / dpkg --r <package>`<package>


Upgrade:

  1. `rpm rpm -U <package> / dpkg -i <package>`<package>


NOTE: upgrade process should not remove data files.

...

  1. User add custom repository 
    1. `yum yum install https://yum-rep-address/repo-info.rpm`
    2. `addadd-apt-repository httpshttp://repo-address 
  2. Install required package
    1. yum install ignite3 
    2. apt install ignite3 

...

  1. Run brew uninstall ignite3 


Upgrade:

  1. Run `brew upgrade ignite3` ignite3 

SDKMan

SDKman is a multiplatform package manager with supported platforms: 

...

    sdk upgrade ignite3 

List: 

    `sdk list ignite3`ignite3 

   

Publishing process is described here and it's not much different from other package managers.

...

As you can see https://github.com/jreleaser/jreleaser can help us with publishing setup infrastructure and cover all cases. This is a good reason to try to use it as the only required dependency to unify how different packages are built.

Also https://jreleaser.org/guide/latest/examples/micronaut-cli-app.html provides native support of Micronaut CLI project which is Apache Ignite CLI.

Risks and Assumptions

TDB

// Describe project risks, such as API or binary compatibility issues, major protocol changes, etc.

...