[Semantic releasing automation] zx scripts for semver automation #zx #semver #maven #nodejs #javascript

January 18, 2022 ยท View on GitHub

Based on zx-semrel concept, followed scripts are examples to automate full releasing process with zx scripts.

Purpose

zx-semrel concept proposes an implementation of semantic release for node projects using zx.

In our case, we try to generalize this idea to:

  • provide a script agnostic to build technology (npm, maven ,gulp, ...): release.mjs
  • provide a script using maven for build engine: release_maven.mjs
  • provide modularity architecture to factorize code and to cover more use case: release_util_update.mjs
  • support semantic release and taks to apply after releasing process : see below for explanation

Built project structure

Every project to release will provide a release.mjs file to define semantic release to apply.

example:

// maven implementation will be applied
import {release} from 'file://D:/Developpement/archi/all-modules/common-stuffs/scripts/release/release_maven.mjs'

(async () => {
   release();
})()

and a post-release.mjs to define post release tasks to apply after releasing process like:

  • propagate new version number in a target project using this dependency (maven project, docker-compose file, kubernetes descriptor, ..) see release_util_postRelease.mjs
  • launch optionnaly releasing process project
  • ...

Example of post-release.mjs file:

// Update dependency version in pom.xml
import {postReleaseMaven} from 'file://D:/Developpement/archi/all-modules/common-stuffs/scripts/release/release_util.mjs'

(async () => {
    const nextVersion = process.argv[3]
    const nextReleaseType=process.argv[4]
    const project='example-api'
    const tag='example-deps.version'
    postReleaseMaven(nextVersion,nextReleaseType,project,tag)
})()

Warnings

Please rename file extensions from .js to .mjs bacause of with mjs extension, syntax color is not working.