Release & Version Identifier¶
Jina is shipped from two package management systems, PyPi and Docker Hub. This article clarifies the release cycle and version identifier behind each system.
PyPi package versioning¶
We follow the semantic versioning and PEP-440. Jina’s version is identified by x.y.z
(i.e. “major.minor.patch”).
To install the latest final release:
pip install -U jina
To install a particular final release:
pip install jina==x.y.z
The term “final release” is relative to “developmental release” as described below.
Developmental releases versioning¶
One every master-merging event, we create early releases directly from source control which do not conflict with later project releases. The version identifier for development release is x.y.z.devN
, which adds a suffix .dev
, followed by a non-negative integer value N
, which is reset on every release.
To install the latest development release:
pip install --pre jina
Version epochs¶
The following example shows how Jina is released from 0.9 to 0.9.2 according to the schema we defined above.
Event e |
After e , pip install jina |
After e , pip install --pre jina |
After e , master __init__.py |
---|---|---|---|
Release | 0.9.0 | 0.9.0 | 0.9.1.dev0 |
Master merging | 0.9.0 | 0.9.1.dev0 | 0.9.1.dev1 |
Master merging | 0.9.0 | 0.9.1.dev1 | 0.9.1.dev2 |
Master merging | 0.9.0 | 0.9.1.dev2 | 0.9.1.dev3 |
Release | 0.9.1 | 0.9.1 | 0.9.2.dev0 |
Master merging | 0.9.1 | 0.9.2.dev0 | 0.9.2.dev1 |
Docker image versioning¶
Our univeral Docker image is ready-to-use on linux/amd64, linux/armv7+, linux/arm/v6. The Docker image name always starts with jinaai/jina
followed by a tag composed of three parts:
jinaai/jina:{version}{python_version}{extra}
{version}
: The version of Jina. Possible values:latest
: the last release;master
: the master branch ofjina-ai/jina
repository;x.y.z
: the release of a particular version;x.y
: the alias to the lastx.y.z
patch release, i.e.x.y
=x.y.max(z)
;
{python_version}
: The Python version of the image. Possible values:-py37
: Python 3.7;-py38
for Python 3.8;-py39
for Python 3.9;
{extra}
: the extra dependency installed along with Jina. Possible values:pip install jina
;-devel
: Jina is installed inside the image viapip install jina[devel]
;-daemon
: Jina is installed inside the image viapip install jina[dameon]
along withfluentd
; and the entrypoint is set tojinad
.
Examples:
jinaai/jina:0.9.6
: the0.9.6
release with Python 3.7 and the entrypoint ofjina
.jinaai/jina:latest-py38-daemon
: the latest release with Python 3.8 base and the entrypoint of Jina daemon.jinaai/jina:latest
: the latest release with Python 3.7 and the entrypoint ofjina
jinaai/jina:master
: the master with Python 3.7 and the entrypoint ofjina
Do I need -devel
?¶
Use -devel
image, if you want to:
have efficiency improvement on AsyncIO and data compression
enable prettified error printing
build Jina Hub extension
expose REST interface beyond gRPC
enable log-streaming/aggregating via
fluentd
enable mime-type sniffing
Image alias and updates¶
Event | Updated images | Aliases |
---|---|---|
On Master Merge | jinaai/jina:master{python_version}{extra} |
|
On x.y.z release |
jinaai/jina:x.y.z{python_version}{extra} |
jinaai/jina:latest{python_version}{extra} , jinaai/jina:x.y{python_version}{extra} |
Six images are built, i.e. taking the combination of:
{python_version} = ["-py37", "-py38"]
{extra} = ["", "-devel", "-daemon"]
Image size on different tags¶
Image Size |
---|
Manual Release Entrypoint¶
Manual release entrypoint is designed for authroized core developers of Jina.
Trigger weekly release manually¶
One can release a hotfix immediately without waiting for the weekly release. Here are the steps:
Click on “Run Workflow” dropdown button on the right and input the release token and the release reason.
Click on “Run Workflow” green button.
Rebuild all Docker images for certain git tag
manually¶
Click on “Run Workflow” dropdown button on the right and input the release token and the release reason.
Click on “Run Workflow” green button.
Note, the manual rebuild on Docker images will NOT update :latest-*
and :x.y-*
aliases.