charts/pipelines-library/templates/tasks/commit-validate.yaml (59 lines of code) (raw):
{{ if .Values.pipelines.deployableResources.tasks }}
apiVersion: tekton.dev/v1
kind: Task
metadata:
annotations:
tekton.dev/displayName: Commit-Validate
tekton.dev/platforms: linux/amd64
name: commit-validate
labels:
{{- include "edp-tekton.labels" . | nindent 4 }}
spec:
description: >-
This task validates a commit message against a specified regex pattern and checks that each line does not exceed a maximum length.
params:
- name: COMMIT_MESSAGE
description: "Commit message"
- name: COMMIT_MESSAGE_PATTERN
description: "Pattern to validate a commit message"
- name: BASE_IMAGE
description: "The base image for the task."
default: "{{ include "edp-tekton.registry" . }}/python:3.10.8-alpine3.16"
- name: MAX_LINE_LENGTH
description: "Maximum length of each line in the commit message."
default: "80"
steps:
- image: $(params.BASE_IMAGE)
name: commit-validate
env:
- name: COMMIT_MESSAGE_PATTERN
value: $(params.COMMIT_MESSAGE_PATTERN)
- name: COMMIT_MESSAGE
value: $(params.COMMIT_MESSAGE)
- name: MAX_LINE_LENGTH
value: $(params.MAX_LINE_LENGTH)
script: |
#!/usr/bin/env python
import os
import sys
import re
commit_message_pattern = os.getenv("COMMIT_MESSAGE_PATTERN")
if not commit_message_pattern:
print("[TEKTON] Pattern to validate commit message is empty")
sys.exit(1)
commit_message = os.getenv("COMMIT_MESSAGE")
print("[TEKTON] Pattern to validate commit message: " +
commit_message_pattern)
print("[TEKTON] Commit message to validate has been fetched:\n" +
commit_message)
# Extract the first line of the commit message
first_line = commit_message.split('\n', 1)[0]
# Apply regex validation to the first line only
result = re.match(commit_message_pattern, first_line)
if result is None:
print("[TEKTON] Commit message is invalid. The required pattern is " + commit_message_pattern)
sys.exit(1)
max_line_length = int(os.getenv("MAX_LINE_LENGTH"))
lines = commit_message.split('\n')
for line in lines:
if len(line) > max_line_length:
print(f"[TEKTON] A line in the commit message is too long. Each line should be no longer than {max_line_length} characters.")
sys.exit(1)
{{ end }}