Keep a "Quickstart Guide" in the README, add separate detailed sections for development (CONTRIBUTING) and release/deployment (RELEASE).
3.0 KiB
Release & Deployment Process
Please read the Working Process/Quickstart Guide in README.md and the Development guidelines in CONTRIBUTING.md.
The release process of a new version of the extension shall be performed by the designated Release Manager.
Note that we expect to gradually automate more of this process.
Having checked PR to be released it shall be
merged back into the master
branch to prepare the new release.
The version number in pg/cranckshaft.control
must first be updated.
To do so Semantic Versioning 2.0 is in order.
Thew NEWS.md
will be updated.
We now will explain the process for the case of backwards-compatible releases (updating the minor or patch version numbers).
TODO: document the complex case of major releases.
The next command must be executed to produce the main installation
script for the new release, release/cranckshaft--X.Y.Z.sql
and
also to copy the python package to release/python/X.Y.Z/crankshaft
.
make release
Then, the release manager shall produce upgrade and downgrade scripts
to migrate to/from the previous release. In the case of minor/patch
releases this simply consist in extracting the functions that have changed
and placing them in the proper release/cranckshaft--X.Y.Z--A.B.C.sql
file.
The new release can be deployed for staging/smoke tests with this command:
sudo make deploy
This will copy the current 'X.Y.Z' released version of the extension to
PostgreSQL. The corresponding Python extension will be installed in a
virtual environment in envs/X.Y.Z
.
It can be activated with:
source envs/X.Y.Z/bin/activate
But note that this is needed only for using the package directly; the 'X.Y.Z' version of the extension will automatically use the python package from this virtual environment.
The sudo make deploy
operation can be also used for installing
the new version after it has been released.
To install a specific version 'X.Y.Z' different from the current one
(which must be present in releases/
) you can:
sudo make deploy RELEASE_VERSION=X.Y.Z
TODO: testing procedure for the new release.
TODO: procedure for staging deployment.
TODO: procedure for merging to master, tagging and deploying in production.
Relevant release & deployment tasks available in the Makefile
* `make help` show a short description of the available targets
* `make release` will generate a new release (version number defined in
`src/pg/crankshaft.control`) into `release/`.
Intended for use by the release manager.
* `sudo make deploy` will install the current release X.Y.Z from the
`release/` files into PostgreSQL and a Python virtual environment
`envs/X.Y.Z`.
Intended for use by the release manager and deployment jobs.
* `sudo make deploy RELEASE_VERSION=X.Y.Z` will install specified version
previously generated in `release/`
into PostgreSQL and a Python virtual environment `envs/X.Y.Z`.
Intended for use by the release manager and deployment jobs.