Skip to content

How to release

To create a new MapStore release, you need to:

  • Create an issue of type Mapstore Release on GitHub by clicking here with the title of the release.
  • Follow the checklist in the issue created.

Here below some details about changelog generation and naming conventions.

Naming conventions

release and tag

  • vYYYY.XX.mm name of the release and tag. (e.g. v2022.01.01)
  • YYYY is the year,
  • XX is the incremental number of the release for the current year (starting from 01)
  • mm is an incremental value (starting from 00) to increment for minor releases

stable branch

  • YYYY.XX.xx name of stable branch (e.g. 2022.01.xx )
  • YYYY is the year
  • XX is the incremental number of the release for the current year (starting from 01)
  • xx is the fixed text xx

Release procedure details

Github actions

The github actions are configured to automate the release process.

In particular the process is composed by 4 steps:

  • Cut Release Branch creates a new branch from master with the name of the stable branch
  • Prepare Release updates the version of the packages and creates the changelog
  • Create Release creates the github draft release
  • Post Release restores the snapshots

In this process the user has to manually finalize the release by adding the release description and the binaries to the release. Everything is listed in the checklist of the issue created at the beginning.

Here a flow chart that describes the process:

Request error [url:https://kroki.io/mermaid/png]: HTTPSConnectionPool(host='kroki.io', port=443): Read timed out. (read timeout=10)

flowchart TD
    Issue[Create MapStore Release Issue] --> X[...]
    X --> Cut
    Cut[[GH Action: Cut Release Branch]] -->|
    create branch
    PR to master with packages versions update
    | Update[[GH Action: Update dependencies versions]] -->|
        fix package versions for geostore, http-proxy, print lib
        excluding snapshots
    | Fixes
    Fixes[Fixes...] --> Tests[Tests...]
    Tests --> start(((start release)))
    start --> PrepareRelease
    PrepareRelease[[GH Action: Prepare Release]] --> |
    Fix versions
    Changelog
    Tag
    PR to master with changelog updates
    | CreateRelease
    CreateRelease[[GH Action: Create Release]] --> |
        Create github Release
        generate binaries to attach to the release
    |release
    release((release
    created)) -->PostRelease[[Post Release]]
    PostRelease[[GH Action: Post Release]]  --> |
        restores snapshots
    | finish(((end)))
    release --> FinalizeRelease[Finalize release manually]
    FinalizeRelease -->|
        refine release description with features
        docker
        jenkins
        communication...
    | Publish
    finish -- next minor release --> Fixes

Git graph structure

The procedure produces the following git graph structure:

Request error [url:https://kroki.io/mermaid/png]: HTTPSConnectionPool(host='kroki.io', port=443): Read timed out. (read timeout=10)

gitGraph TB:
    commit
    branch 2023.01.xx
    checkout 2023.01.xx
    commit id: "2023.01 initial commit"
    checkout main
    commit id: "feature-1"
    commit id: "fix-1"
    checkout 2023.01.xx
    cherry-pick id:"fix-1"
    commit id: "fix-versions-1+changelog"
    commit id: "2023.01.00-release" tag: "v2023.02.00"
    commit id: "restore-snaphots-1"
    checkout main
    commit id: "Changelog for version v2023.01.00"
    commit id: "fix-2"
    commit id: "feature-2"
    commit id: "feature-3"
    checkout 2023.01.xx
    cherry-pick id:"fix-2"
    commit id: "fix-versions-2+changelog"
    commit id: "2023.01.01-release" tag: "v2023.02.01"
    commit id: "restore-snaphots-2"
    checkout main
    commit id: "Changelog for version v2023.02.01"
    commit
    commit
    branch 2023.02.xx
    checkout 2023.02.xx
    commit id: "2023.02 initial commit"
    checkout main
    commit id: "fix-3"
    checkout 2023.02.xx
    cherry-pick id:"fix-3"

Changelog generation

The changelog generation is now automated. Anyway it is possible to generate the changelog manually by running the following command:

npm run generate:changelog <oldReleaseNumber>  <newReleaseNumber>

# usage
# e.g. npm run generate:changelog 2022.01.00 2022.02.00

This produces some text that can be used to update the changelog file.

Handling errors

If in a certain point we notice some errors, the separation of the tasks allows to restart the process from the point where the error occurred.

For instance if after tag creation we notice some problem or we have some failures, we can fix the problem, delete and recreate the tag manually and recreate the release by running the Create Release action.

Testing and fixing release procedure

For testing and fixing the release procedure it is possible to run the release procedure on your fork. anyway "Create, Prepare and Post Release" actions are configured to run only on the main repository. This is done to avoid that the release procedure is triggered automatically by forks in some cases. So on your fork you will need to manually edit the workflow files to enable the actions to run on your fork.

In particular you will need to edit some lines like this:

if:  ${{ github.event_name == 'push' && github.repository == 'geosolutions-it/MapStore2' }}

Removing the condition or changing the repository name.