@corva/fe-fix-cli

0.1.20 • Public • Published

@corva/fe-fix-cli

This is a CLI that automates fixes creation process

Process that it automates

You need to make a hot-fix, which means you need to do a bunch of PRs to all environment branches you have & bump the version & create PRs. This CLI automates that by auto-creation of your fix branches, cherry-picking your fix & creating a PR.

So, the idea is very simple, you create your main fix branch, e.g.: hot-fix/dc-777 for your production branch and the script automatically generates fixes for your downsteam environments, doing exactly the next:

  • bumps the version of your hot-fix/dc-7777 branch and creates a PR for production branch
  • creates fix branch beta-fix/dc-77777 for beta, bumps the version, makes a PR
  • creates fix branch release-fix/dc-77777 for release, bumps the version, makes a PR
  • creates fix branch fix/dc-77777 for development, bumps the version, makes a PR

You never interact directly with those other envs fix branches, scripts just applies your changes on your main fix branch to those other environments

Important

This is a concept of such CLI, it mostly handles the ideal case where you don't have any merge conflicts when the script cherry-picks your fix to the other branches. So, simply speaking, if the script fails - you will need to create those PRs manually.

Requirements

  • Install GitHub CLI. gh command should be available in the terminal
  • login to GitHub CLI by running gh auth login
  • add fe-fix-cli-config.js to the root of your project (see details in config section)
  • run corva-fe-fix-cli apply-fix

Usage

  • create fix branch, e.g.: hot-fix/dc-777
  • commit your fix to your fix branch - hot-fix/dc-777 in this case. IMPORTANT: IT SHOULD BE A SINGLE COMMIT ON TOP OF YOUR BRANCH (as the script will be cherry-picking this single fix commit to the other branches). So if you want to add some additional changes later to your fix, you need to commit using git commit --amend to apply your changes to the previous commit
  • run corva-fe-fix-cli apply-fix
  • the script will create a PR for your fix + PRs for all downstream environments

Use cases

Basic use case

You have 4 environments - prod, beta, release, develop. You're doing a hot-fix, so you do checkout from the prod branch, and create hot-fix/dc-77777 branch, you commit your fix as a SINGLE COMMIT, you test the changes on your fix branch, looks like everything works as it should, it's time to merge the changes. Now, standing on your fix branch, run the next command

  corva-fe-fix-cli apply-fix

This will do exactly the next things

$ corva-fe-fix-cli apply-fix

bumping the version of your fix branch: hot-fix/dc-77777-test
✔ bumping version in package.json from 2.113.18 to 2.113.19
✔ committing package.json
trying to push your fix branch: hot-fix/dc-77777-test
pushed fix branch: hot-fix/dc-77777-test
creating a PR for main fix branch: hot-fix/dc-77777-test
created a PR from branch: hot-fix/dc-77777-test: https://github.com/corva-ai/corva-web-frontend/pull/4803

checkout to BETA environment branch
Pulling the updates before applying the fix
Creating a new fix branch beta-fix/dc-77777
cherry-picking the fix
bumping the version of beta-fix/dc-77777 branch
✔ bumping version in package.json from 2.114.6 to 2.114.7
✔ committing package.json
creating a PR for branch: beta-fix/dc-77777
created a PR from branch: beta-fix/dc-77777: https://github.com/corva-ai/corva-web-frontend/pull/4804

checkout to RELEASE environment branch
? Type release branch name release/2.114
you selected the release branch: release/2.114
Pulling the updates before applying the fix
Creating a new fix branch release-fix/dc-77777
cherry-picking the fix
bumping the version of release-fix/dc-77777 branch
✔ bumping version in package.json from 2.114.6 to 2.114.7
✔ committing package.json
creating a PR for branch: release-fix/dc-77777
created a PR from branch: release-fix/dc-77777: https://github.com/corva-ai/corva-web-frontend/pull/4805

checkout to DEV environment branch
Pulling the updates before applying the fix
Creating a new fix branch fix/dc-77777
cherry-picking the fix
creating a PR for branch: fix/dc-77777
created a PR from branch: fix/dc-77777: https://github.com/corva-ai/corva-web-frontend/pull/4806

Returning to the original fix branch: hot-fix/dc-77777-test
CREATED PRs:
PROD : https://github.com/corva-ai/corva-web-frontend/pull/4803
BETA : https://github.com/corva-ai/corva-web-frontend/pull/4804
RELEASE : https://github.com/corva-ai/corva-web-frontend/pull/4805
DEV : https://github.com/corva-ai/corva-web-frontend/pull/4806

✨  Done in 67.36s.

So, as you see we automatically created 4 pull requests for 4 envs.

Existing fix use case. You generated 4 PRs via the script, but it now appears that you need to modify the fix

  • Remove the bump commit from you main fix branch by running git reset --hard head~1. This will remove the last commit - which is a version bump commit.
  • do your changes and update your existing fix commit via git commit --amend. As it's important to have a single commit with your fix as the last commit on your branch
  • And just run corva-fe-fix-cli apply-fix It'll ask you to remove your old fix branches, and will create new ones

Required: Provide environments config

You need to add fe-fix-cli-config.js file to the root of your project. This config describes the environments you have and info needed by the CLI. See the code for more details:

const ENVS_NAMES = {
  DEV: 'DEV',
  RELEASE: 'RELEASE',
  BETA: 'BETA',
  PROD: 'PROD',
};

const standardVersionBumpConfig = {
  noVerify: true,
  releaseAs: 'patch',
  skip: {
    tag: true,
    changelog: true,
  },
};

module.exports = [
  {
    // Name of the environment
    name: ENVS_NAMES.DEV,
    // Main branch of the environment
    branch: 'main',
    // Function that returns fix branch name for the requirement
    getFixBranchNameForTicketId: ticketId => `fix/${ticketId}`,
    // Function that returns ticket id from the envronment branch
    getTicketIdFromFixBranch: fixBranchName => fixBranchName.match(/^fix\/(\w+-\d+).*/)?.[1],
    // When you do the fix for this environment, it should also be applied to those environment
    applyFixForEnvs: [],
    // If config exists, the CLI will bump the version running standard-version library: https://www.npmjs.com/package/standard-version
    standardVersionBumpConfig: null,
  },
  {
    name: ENVS_NAMES.RELEASE,
    branch: 'PROMPT',
    getFixBranchNameForTicketId: ticketId => `release-fix/${ticketId}`,
    getTicketIdFromFixBranch: fixBranchName =>
      fixBranchName.match(/^release-fix\/(\w+-\d+).*/)?.[1],
    applyFixForEnvs: [ENVS_NAMES.DEV],
    standardVersionBumpConfig,
  },
  {
    name: ENVS_NAMES.BETA,
    branch: 'beta',
    getFixBranchNameForTicketId: ticketId => `beta-fix/${ticketId}`,
    getTicketIdFromFixBranch: fixBranchName => fixBranchName.match(/^beta-fix\/(\w+-\d+).*/)?.[1],
    applyFixForEnvs: [ENVS_NAMES.RELEASE, ENVS_NAMES.DEV],
    standardVersionBumpConfig,
  },
  {
    name: ENVS_NAMES.PROD,
    branch: 'production',
    getFixBranchNameForTicketId: ticketId => `hot-fix/${ticketId}`,
    getTicketIdFromFixBranch: fixBranchName => fixBranchName.match(/^hot-fix\/(\w+-\d+).*/)?.[1],
    applyFixForEnvs: [ENVS_NAMES.BETA, ENVS_NAMES.RELEASE, ENVS_NAMES.DEV],
    standardVersionBumpConfig,
  },
];

Development Information

Instalation steps

Clone this repository and run yarn inside the directory. On postinstall git hooks would be configured for this repository.

Development flow

To develop new feature or implement fix one need to create new branch from main one and name it properly: branch-type/JIRA_ID-jira_ticket_description i.e.

  • feature/DC-1234-add-Table-component
  • fix/DR-9999-fix-broken-page

When changes are ready please create commit with meaningful description using Conventional Commits specification. Commit message should have form commit-type(JIRA_ID): commit message. All types of commits could be found here

Please note that feat and fix commits messages will be used during automatic changelog creation while chore, docs and others will not.

Do not create 2 commits with same name and consider amending previous commit instead with git commit --amend --no-edit.


In case commit introduces breaking changes incompatible with existing API special commit message have to be used. Just type git commit and commit template will be opened to edit. The main difference with regular commit messages - such commit MUST have footer(s) BREAKING CHANGES


On merging the PR to main branch an automatic release flow will be triggered. New package version will be determined based on changes introduced by commit. fix corresponds to patch, feat to minor and breaking changes to major version release.

More details on semantic versioning could be found in official SemVer specification.

Note: untill first major version is released the package is considered as under development and breaking changes will correspond to minor release.

Readme

Keywords

none

Package Sidebar

Install

npm i @corva/fe-fix-cli

Weekly Downloads

23

Version

0.1.20

License

MIT

Unpacked Size

31.9 kB

Total Files

22

Last publish

Collaborators

  • aj8k
  • leonid.khomenko
  • suchov
  • vasyl.skalozub
  • andrii.koval
  • yuliiahryhorchuk
  • mgdskr_corva
  • ruslan.shukiurov
  • maksymozymok
  • kostia.khozhay
  • ryandawson
  • bestfit
  • oleksandr_krupko
  • villeti
  • jordanambra
  • dumavit1
  • antonpyrlyk
  • corva-devops-automation