feat(git_release): Migrated from ansible-roles
Mibrated from
commit: 295fe5b1db
After migration, updated for gitlab-ci.
Changes to be committed:
new file: gitlab_release/.gitlab-ci.yml
new file: gitlab_release/README.md
new file: gitlab_release/python-module/cz_nfc/cz_nfc.py
new file: gitlab_release/python-module/cz_nfc/setup.py
new file: gitlab_release/requirements.txt
issue #1
This commit is contained in:
49
gitlab_release/.gitlab-ci.yml
Normal file
49
gitlab_release/.gitlab-ci.yml
Normal file
@ -0,0 +1,49 @@
|
||||
.gitlab_release:
|
||||
stage: release
|
||||
image: registry.gitlab.com/gitlab-org/release-cli:latest
|
||||
before_script:
|
||||
- if [ "0$JOB_ROOT_DIR" == "0" ]; then ROOT_DIR=gitlab-ci; else ROOT_DIR=$JOB_ROOT_DIR ; fi
|
||||
- echo "[DEBUG] ROOT_DIR[$ROOT_DIR]"
|
||||
- mkdir -p "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME"
|
||||
- mkdir -p "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/tests"
|
||||
- apk update
|
||||
- apk add git
|
||||
- apk add --update --no-cache python3 && ln -sf python3 /usr/bin/python
|
||||
- python -m ensurepip && ln -sf pip3 /usr/bin/pip
|
||||
- pip install --upgrade pip
|
||||
- pip install -r $ROOT_DIR/gitlab_release/requirements.txt
|
||||
- pip install $ROOT_DIR/gitlab_release/python-module/cz_nfc/.
|
||||
- 'CLONE_URL="https://gitlab-ci-token:$API_RO_GIT_WR@gitlab.com/$CI_PROJECT_PATH.git"'
|
||||
- echo "[DEBUG] CLONE_URL[$CLONE_URL]"
|
||||
- git clone -b $CI_COMMIT_BRANCH $CLONE_URL repo
|
||||
- cd repo
|
||||
- git branch
|
||||
- git config --global user.email "CI@nfc-gitlab"
|
||||
- git config --global user.name "NFC CI"
|
||||
- git push --set-upstream origin $CI_COMMIT_BRANCH
|
||||
- RELEASE_VERSION_CURRENT=$(cz -n cz_nfc version --project)
|
||||
script:
|
||||
- echo "your script here"
|
||||
after_script:
|
||||
- RELEASE_CHANGELOG=$(cz -n cz_nfc bump --changelog --changelog-to-stdout)
|
||||
- RELEASE_VERSION_NEW=$(cz -n cz_nfc version --project)
|
||||
- RELEASE_TAG=v$RELEASE_VERSION_NEW
|
||||
- git tag -d $RELEASE_TAG
|
||||
- echo "[DEBUG] RELEASE_VERSION_CURRENT[$RELEASE_VERSION_CURRENT]"
|
||||
- echo "[DEBUG] RELEASE_CHANGELOG[$RELEASE_CHANGELOG]"
|
||||
- echo "[DEBUG] RELEASE_VERSION_NEW[$RELEASE_VERSION_NEW]"
|
||||
- echo "[DEBUG] RELEASE_TAG[$RELEASE_TAG]"
|
||||
- RELEASE_TAG_SHA1=$(git rev-parse $CI_COMMIT_BRANCH)
|
||||
- echo "[DEBUG] RELEASE_TAG_SHA1[$RELEASE_TAG_SHA1]"
|
||||
- git push
|
||||
- release-cli create --name "Release $RELEASE_TAG" --tag-name "$RELEASE_TAG" --ref "$RELEASE_TAG_SHA1" --description "$RELEASE_CHANGELOG"
|
||||
- rm -Rf repo
|
||||
rules:
|
||||
- if: "$CI_COMMIT_AUTHOR =='NFC CI <CI@nfc-gitlab>'"
|
||||
when: never
|
||||
- if: '$CI_COMMIT_BRANCH == "development"'
|
||||
- if: '$TRIGGER_RELEASE == "True" && $CI_COMMIT_BRANCH == "development"'
|
||||
when: on_success
|
||||
allow_failure: false
|
||||
- when: never
|
||||
|
65
gitlab_release/README.md
Normal file
65
gitlab_release/README.md
Normal file
@ -0,0 +1,65 @@
|
||||
# Gitlab Release
|
||||
This job bumps the version, updates the changelog, creates a git tag and creates a gitlab release. The git tag and release title use [semantic versioning](https://semver.org/). for this job to function correctly a `.cz.yaml` is required in the root of the repository. this file contains the [commitizen](https://github.com/commitizen-tools/commitizen) config and the version details. This job runs on successful completion of previous jobs and only on `development` and `master` branches.
|
||||
|
||||
|
||||
This job provides the following badge:
|
||||
|
||||
- None
|
||||
|
||||
## Dependencies
|
||||
|
||||
- None
|
||||
|
||||
## your .gitlab-ci.yml changes
|
||||
To use this job add the following to your `.gitlab-ci.yml` file
|
||||
|
||||
``` yaml
|
||||
stages:
|
||||
- release
|
||||
|
||||
include:
|
||||
- remote: https://gitlab.com/nofusscomputing/projects/gitlab-ci/-/raw/development/gitlab_release/.gitlab-ci.yml
|
||||
|
||||
Gitlab Release:
|
||||
extends:
|
||||
- .gitlab_release
|
||||
```
|
||||
> if you wish to run any commands you can safely override `script` with your own commands. if these commands create any output that is not excluded in `.gitignore` they will be commited to the repository.
|
||||
|
||||
## CI/CD Variables required
|
||||
|
||||
| var name | Description |
|
||||
|:----:|:----|
|
||||
| API_RO_GIT_WR | *this must be a personal token that has write access to the repository* |
|
||||
|
||||
|
||||
## Job Workflow
|
||||
|
||||
This CI job's workflow is:
|
||||
|
||||
1. updates the changelog from the commits
|
||||
1. commit the changelog to git
|
||||
1. adds a `git tag` to the changelog commit.
|
||||
1. pushes the change back to the repo
|
||||
1. creates a git release from the `git tag`
|
||||
|
||||
|
||||
## Artifacts
|
||||
|
||||
- None
|
||||
|
||||
## License
|
||||
To view the license for this folder and any sub-folders, refer [here](https://gitlab.com/nofusscomputing/projects/gitlab-ci)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
40
gitlab_release/python-module/cz_nfc/cz_nfc.py
Executable file
40
gitlab_release/python-module/cz_nfc/cz_nfc.py
Executable file
@ -0,0 +1,40 @@
|
||||
#!/usr/bin/env python3
|
||||
#-*- coding: utf-8 -*-
|
||||
|
||||
from commitizen import git
|
||||
from commitizen.cz.base import BaseCommitizen
|
||||
|
||||
|
||||
class nfc_cz(BaseCommitizen):
|
||||
bump_pattern = r"^(break|new|fix|hotfix|ci|docs)"
|
||||
bump_map = {"break": "MAJOR", "new": "MINOR", "fix": "PATCH", "hotfix": "PATCH", "ci": "PATCH", "docs": "PATCH"}
|
||||
|
||||
changelog_pattern = "^(break|new|fix|hotfix|ci|docs)"
|
||||
change_type_order = ["BREAKING CHANGE", "feat", "fix", "refactor", "perf", "docs", "ci"]
|
||||
change_type_map = {
|
||||
"feat": "Features",
|
||||
"fix": "Bug Fixes",
|
||||
"refactor": "Code Refactor",
|
||||
"perf": "Performance improvements",
|
||||
"docs": "Documentaton / Guides",
|
||||
"ci": "Continious Integration"
|
||||
}
|
||||
|
||||
commit_parser = r"^(?P<change_type>feat|fix|refactor|perf|BREAKING CHANGE|ci|docs)(?:\((?P<scope>[^()\r\n]*)\)|\()?(?P<breaking>!)?:\s(?P<message>.*)?"
|
||||
|
||||
|
||||
def changelog_message_builder_hook(self, parsed_message: dict, commit: git.GitCommit) -> dict:
|
||||
rev = commit.rev
|
||||
m = parsed_message["message"]
|
||||
parsed_message["message"] = f"{rev} - {m}"
|
||||
return parsed_message
|
||||
|
||||
|
||||
def questions(self) -> list:
|
||||
raise NotImplementedError("Not Implemented yet")
|
||||
|
||||
def message(self, answers: dict) -> str:
|
||||
raise NotImplementedError("Not Implemented yet")
|
||||
|
||||
|
||||
discover_this = nfc_cz
|
10
gitlab_release/python-module/cz_nfc/setup.py
Normal file
10
gitlab_release/python-module/cz_nfc/setup.py
Normal file
@ -0,0 +1,10 @@
|
||||
from setuptools import setup
|
||||
|
||||
setup(
|
||||
name='NFC commitizen Custom Bump Map and changelog',
|
||||
version='0.1.0',
|
||||
py_modules=['cz_nfc'],
|
||||
license='MIT',
|
||||
long_description='this is a long description',
|
||||
install_requires=['commitizen']
|
||||
)
|
1
gitlab_release/requirements.txt
Normal file
1
gitlab_release/requirements.txt
Normal file
@ -0,0 +1 @@
|
||||
commitizen
|
Reference in New Issue
Block a user