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:
		
							
								
								
									
										100
									
								
								conventional_commits/scripts/commit.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										100
									
								
								conventional_commits/scripts/commit.py
									
									
									
									
									
										Executable 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)) | ||||
|  | ||||
							
								
								
									
										58
									
								
								conventional_commits/scripts/cz_junit.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										58
									
								
								conventional_commits/scripts/cz_junit.sh
									
									
									
									
									
										Executable 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 | ||||
		Reference in New Issue
	
	Block a user