feat(conventional_commits): Added conventional commit job

Migrated conventional commits from:
    url: https://gitlab.com/nofusscomputing/infrastructure/ansible-roles
    commit: 037774e1e44f8e1e065718f805688b8b2f64735f

updated logic so that it works on it's home repo and remote repo including private repositories.

Changes to be committed:
        new file:   conventional_commits/.gitlab-ci.yml
        new file:   conventional_commits/README.md
        new file:   conventional_commits/requirements.txt
        new file:   conventional_commits/scripts/commit.py
        new file:   conventional_commits/scripts/cz_junit.sh

issue #1
This commit is contained in:
2021-08-03 13:26:05 +09:30
parent bd08adf93f
commit 392a200fd4
5 changed files with 328 additions and 0 deletions

View File

@ -0,0 +1,100 @@
#!/usr/bin/env python3
#-*- coding: utf-8 -*-
#import gitlab
import os
import sys
import getopt
import json
import requests
get_first_commit = False
get_mr_title = False
get_target_branch = False
project_id = ''
try:
opts, args = getopt.getopt(sys.argv[1:],"hic:t:ti:p:b:o",["commit","token=", "title", "project=", "branch=", "target-branch"])
except getopt.GetoptError:
print('test.py [-c | --commit] [-t | --token {token}]')
sys.exit(2)
for opt, arg in opts:
#print('[DEBUG] {0} {1}'.format(opt, arg))
if opt == '-h':
print('[commit.py] -i <inputfile> -o <outputfile>')
sys.exit()
elif opt in ("-c", "--commit"):
get_first_commit = True
elif opt in ("-t", "--token"):
ci_job_token = arg
elif opt in ("-ti", "--title"):
get_mr_title = True
elif opt in ("-p", "--project"):
project_id = str(arg)
elif opt in ("-b", "--branch"):
git_branch = arg
elif opt in ("-o", "--target-branch"):
get_target_branch = True
# private token or personal token authentication
#gl = gitlab.Gitlab('https://gitlab.com', private_token=ci_job_token)
url = 'https://gitlab.com/api/v4/projects/' + project_id + '/merge_requests'
headers = {'PRIVATE-TOKEN': ci_job_token}
try:
if os.environ['CI_JOB_TOKEN'] == ci_job_token:
headers = {'JOB_TOKEN': os.environ['CI_JOB_TOKEN']}
except:
pass
#print('[DEBUG] headers[{0}]'.format(headers))
merge_requests = requests.get(url, headers=headers, data='')
merge_requests = merge_requests.json()
#print('\n\nmerge_requests=[-{0}-][]\n\n\n\n\n'.format(merge_requests))
#project_mrs = project.mergerequests.list()
#mrs = gl.mergerequests.list()
mr_title = ''
mr_first_commit = ''
target_branch = ''
for mr in merge_requests:
# print('\n\nMR=[-{0}-]'.format(mr))
if mr['source_branch'] == git_branch and str(mr['target_project_id']) == str(project_id) and str(mr['state']) == 'opened':
mr_title = mr['title']
mr_first_commit = mr['sha']
target_branch = mr['target_branch']
if get_target_branch:
print('{0}'.format(target_branch))
if get_first_commit:
print('{0}'.format(mr_first_commit))
if get_mr_title:
print('{0}'.format(mr_title))

View File

@ -0,0 +1,58 @@
#!/bin/bash
# to use ensure cz_exit=0 is set prior to the cz command so that if the command is successfull, this script works
# this script must be run with '. {script-name}' so that vars set in cli are available
cz_command=$(cat "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/cz_output.log")
if [ "f${cz_exit}" == "f" ]; then
echo "[DEBUG] environmental variable cz_exit must be set"
exit 255
fi
if [ "${cz_exit}" == "0" ]; then
error_count=0
system_err=''
cat <<EOF
<testsuite errors="0" name="Conventional Commits Messages Check" tests="0">
<testcase classname="Conventional Commits" file="CI/commitizen/README.md" name="Using Conventional Commits Message Format"/>
</testsuite>
EOF
else
error_count=1
system_err="ERROR: $cz_command"
cat <<EOF
<testsuites id="Conventional Commits Messages Check" name="CI Validation test" tests="1" errors="$error_count" time="0">
<testsuite id="conventional commit" name="testing" tests="1" failures="$error_count" time="0">
<testcase classname="Conventional Commits" file="CI/commitizen/README.md" line="0" name="Using Conventional Commits Message Format" time="0" timestamp="$(date '+%Y-%m-%d %H:%M:%S')">
<failure message="Conventional commits not used" type="validation">$cz_command
</failure>
<system-out>
<![CDATA[ $cz_command ]]>
</system-out>
<system-err>
<![CDATA[ $system_err ]]>
</system-err>
</testcase>
</testsuite>
</testsuites>
EOF
fi
#echo boo;
#echo "output:[$cz_command]"
#echo "[DEBUG] cz_exit[$cz_exit]"
exit $cz_exit