All Projects → qiwi → multi-semantic-release

qiwi / multi-semantic-release

Licence: other
Proof of concept that wraps semantic-release to work with monorepos.

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to multi-semantic-release

docker-pega-web-ready
Docker project for generating a tomcat docker image for Pega
Stars: ✭ 46 (-19.3%)
Mutual labels:  cicd
infraverse
Infrastructure Platforms and Applications Comparison
Stars: ✭ 77 (+35.09%)
Mutual labels:  cicd
jenkins-blue
Quickly provision jenkins blue ocean on kubernetes with persistent configuration
Stars: ✭ 20 (-64.91%)
Mutual labels:  cicd
azure-iot-cli-extension
Azure IoT extension for Azure CLI
Stars: ✭ 71 (+24.56%)
Mutual labels:  cicd
terraform-external-module-artifact
Terraform module to fetch any kind of artifacts using curl (binary and text okay)
Stars: ✭ 13 (-77.19%)
Mutual labels:  cicd
github-status-updater
Command line utility for updating GitHub commit statuses and enabling required status checks for pull requests
Stars: ✭ 83 (+45.61%)
Mutual labels:  cicd
semver-generator
Semantic version generator using git commit keywords and overrides
Stars: ✭ 26 (-54.39%)
Mutual labels:  cicd
semantic-release-gh-pages-plugin
github-pages publishing plugin for semantic-release
Stars: ✭ 17 (-70.18%)
Mutual labels:  semrel
filestore-server
基于golang实现的一种分布式云存储服务
Stars: ✭ 61 (+7.02%)
Mutual labels:  cicd
httptest
A simple concurrent HTTP testing tool
Stars: ✭ 42 (-26.32%)
Mutual labels:  cicd
web-lib-demand
Efficient and flexible set of JavaScript libraries for building a cab web booking experience with Karhoo.
Stars: ✭ 21 (-63.16%)
Mutual labels:  cicd
devops
let devops for docker, dockerswarm ,k8s easy
Stars: ✭ 282 (+394.74%)
Mutual labels:  cicd
jam-stack-box
Your own self hosted continuous deployment solution for JAM Stack websites.
Stars: ✭ 25 (-56.14%)
Mutual labels:  cicd
zadig
Zadig is a cloud native, distributed, developer-oriented continuous delivery product.
Stars: ✭ 1,615 (+2733.33%)
Mutual labels:  cicd
web-extension-boilerplate
The web extension boilerplate help to set up project quickly using typescript, jest, webpack, githook, prettier and github actions
Stars: ✭ 35 (-38.6%)
Mutual labels:  cicd
deployer-php-action
Deploy PHP projects using Deployer from Github Actions
Stars: ✭ 57 (+0%)
Mutual labels:  cicd
django-template
The ultimate Django template: production ready Django 3.2 with Docker, HTTPS and CI/CD using Github actions ‎️‍🔥
Stars: ✭ 20 (-64.91%)
Mutual labels:  cicd
ansible-github actions runner
Ansible Role to deploy GitHub Actions self-hosted runner
Stars: ✭ 76 (+33.33%)
Mutual labels:  cicd
github-env-vars-action
🚀 GitHub Action for Environment Variables
Stars: ✭ 129 (+126.32%)
Mutual labels:  cicd
cicdstatemgr
Utility for managing CICD state, sending notifications, and mediating Slack interactive messages & slash commands across multiple flows of execution in CICD platforms such as Tekton.
Stars: ✭ 25 (-56.14%)
Mutual labels:  cicd

@qiwi/multi-semantic-release

hacky semantic-release for monorepos

Travis CI semantic-release Maintainability Test Coverage

This fork of dhoub/multi-semantic-release replaces setImmediate loops and execa.sync hooks with event-driven flow and finally makes possible to run the most release operations in parallel.
🎉 🎉 🎉

Install

yarn add @qiwi/multi-semantic-release --dev

Usage

multi-semantic-release

CLI flag options:

  Options
    --dry-run Dry run mode.
    --debug Output debugging information.
    --sequential-init  Avoid hypothetical concurrent initialization collisions.
    --first-parent Apply commit filtering to current branch only.
    --ignore-private Exclude private packages. True by default.
	--ignore-packages  Packages list to be ignored on bumping process (append to the ones that already exist at package.json workspaces)
    --deps.bump Define deps version updating rule. Allowed: override, satisfy, inherit.
    --deps.release Define release type for dependent package if any of its deps changes. Supported values: patch, minor, major, inherit.
    --tag-format Format to use for creating tag names. Should include "name" and "version" vars. Default: "${name}@${version}" generates "[email protected]"
    --help Help info.

  Examples
    $ multi-semantic-release --debug
	$ multi-semantic-release --deps.bump=satisfy --deps.release=patch
	$ multi-semantic-release --ignore-packages=packages/a/**,packages/b/**

Configuration

MSR requires semrel config to be added in any supported format for each package or/and declared in repo root (globalConfig is extremely useful if all the modules have the same strategy of release).
NOTE config resolver joins globalConfig and packageConfig during execution.

// Load the package-specific options.
const { options: pkgOptions } = await getConfig(dir);

// The 'final options' are the global options merged with package-specific options.
// We merge this ourselves because package-specific options can override global options.
const finalOptions = Object.assign({}, globalOptions, pkgOptions);

Make sure to have a workspaces attribute inside your package.json project file. In there, you can set a list of packages that you might want to process in the msr process, as well as ignore others. For example, let's say your project has 4 packages (i.e. a, b, c and d) and you want to process only a and d (ignore b and c). You can set the following structure in your package.json file:

{
	"name": "msr-test-yarn",
	"author": "Dave Houlbrooke <[email protected]",
	"version": "0.0.0-semantically-released",
	"private": true,
	"license": "0BSD",
	"engines": {
		"node": ">=8.3"
	},
	"workspaces": [
      "packages/*",
      "!packages/b/**",
      "!packages/c/**"
	],
	"release": {
		"plugins": [
			"@semantic-release/commit-analyzer",
			"@semantic-release/release-notes-generator"
		],
		"noCi": true
	}
}

You can also ignore it with the CLI:

$ multi-semantic-release --ignore-packages=packages/b/**,packages/c/**

You can also combine the CLI ignore options with the ! operator at each package inside workspaces attribute. Even though you can use the CLI to ignore options, you can't use it to set which packages to be released – i.e. you still need to set the workspaces attribute inside the package.json.

Verified examples

We use this tool to release our JS platform code inhouse (GitHub Enterprise + JB TeamCity) and for our OSS (GitHub + Travis CI). Guaranteed working configurations available in projects.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].