[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.