From 1efd7b1d73b5eb0d9a999e4f4666cda521aa0720 Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Sat, 28 Sep 2024 23:59:32 -0400 Subject: [PATCH] Add a semver job to assign an automatically-incrementing version tag to commits to main. This automatically increments the patch (3rd) digit, so to update the major or minor version, manually push a tag. --- .webhook_bridge/pipeline-semver.yaml | 189 +++++++++++++++++++++++++++ .webhook_bridge/webhook_bridge.toml | 6 + 2 files changed, 195 insertions(+) create mode 100644 .webhook_bridge/pipeline-semver.yaml diff --git a/.webhook_bridge/pipeline-semver.yaml b/.webhook_bridge/pipeline-semver.yaml new file mode 100644 index 0000000..19897ec --- /dev/null +++ b/.webhook_bridge/pipeline-semver.yaml @@ -0,0 +1,189 @@ +apiVersion: tekton.dev/v1 +kind: PipelineRun +metadata: + name: semver +spec: + timeouts: + pipeline: "2h0m0s" + tasks: "1h0m0s" + finally: "0h30m0s" + taskRunTemplate: + serviceAccountName: build-bot + pipelineSpec: + params: + - name: REPO_OWNER + description: Owner of the repo on gitea + type: string + - name: REPO_NAME + description: Name of the repo on gitea + type: string + - name: PULL_BASE_SHA + description: The commit sha + type: string + - name: JOB_NAME + description: The name of the job to report to gitea + type: string + tasks: + - name: calculate-tag + runAfter: + - report-pending + workspaces: + - name: source + workspace: git-source + taskSpec: + metadata: {} + stepTemplate: + image: alpine:3.19 + computeResources: + requests: + cpu: 10m + memory: 600Mi + workingDir: /workspace/source + results: + - name: tag + description: The tag to use for the docker container + steps: + - image: alpine/git:2.43.0 + name: calculate-tag + script: | + #!/usr/bin/env sh + set -euo pipefail + git config --global --add safe.directory $(workspaces.source.path) + git fetch --tags + current_tag=$(git tag --points-at HEAD --list 'v*.*.*') + if [ -z "$current_tag" ]; then + prev_tag=$(git tag --list 'v*.*.*' | sort -V -r | head -n 1) + if [ -n "$prev_tag" ]; then + last_bit=$(echo "$prev_tag" | cut -d '.' -f 3) + incremented=$((last_bit + 1)) + prefix=$(echo "$prev_tag" | grep -oE 'v[0-9]*\.[0-9]*\.') + final_tag="${prefix}${incremented}" + else + final_tag="v0.0.1" + fi + echo -n "${final_tag}" | tee $(results.tag.path) + git tag "${final_tag}" + git push origin "${final_tag}" + else + echo -n "${current_tag}" | tee $(results.tag.path) + fi + - name: report-pending + taskRef: + resolver: git + params: + - name: url + value: https://github.com/tektoncd/catalog.git + - name: revision + value: df36b3853a5657fd883015cdbf07ad6466918acf + - name: pathInRepo + value: task/gitea-set-status/0.1/gitea-set-status.yaml + runAfter: + - fetch-repository + params: + - name: CONTEXT + value: "$(params.JOB_NAME)" + - name: REPO_FULL_NAME + value: "$(params.REPO_OWNER)/$(params.REPO_NAME)" + - name: GITEA_HOST_URL + value: code.fizz.buzz + - name: SHA + value: "$(tasks.fetch-repository.results.commit)" + - name: DESCRIPTION + value: "Build $(params.JOB_NAME) has started" + - name: STATE + value: pending + - name: TARGET_URL + value: "https://tekton.fizz.buzz/#/namespaces/$(context.pipelineRun.namespace)/pipelineruns/$(context.pipelineRun.name)" + - name: fetch-repository + taskRef: + resolver: git + params: + - name: url + value: https://github.com/tektoncd/catalog.git + - name: revision + value: df36b3853a5657fd883015cdbf07ad6466918acf + - name: pathInRepo + value: task/git-clone/0.9/git-clone.yaml + workspaces: + - name: output + workspace: git-source + params: + - name: url + value: $(params.REPO_URL) + - name: revision + value: $(params.PULL_BASE_SHA) + - name: deleteExisting + value: "true" + finally: + - name: report-success + when: + - input: "$(tasks.status)" + operator: in + values: ["Succeeded", "Completed"] + taskRef: + resolver: git + params: + - name: url + value: https://github.com/tektoncd/catalog.git + - name: revision + value: df36b3853a5657fd883015cdbf07ad6466918acf + - name: pathInRepo + value: task/gitea-set-status/0.1/gitea-set-status.yaml + params: + - name: CONTEXT + value: "$(params.JOB_NAME)" + - name: REPO_FULL_NAME + value: "$(params.REPO_OWNER)/$(params.REPO_NAME)" + - name: GITEA_HOST_URL + value: code.fizz.buzz + - name: SHA + value: "$(tasks.fetch-repository.results.commit)" + - name: DESCRIPTION + value: "Build $(params.JOB_NAME) has succeeded" + - name: STATE + value: success + - name: TARGET_URL + value: "https://tekton.fizz.buzz/#/namespaces/$(context.pipelineRun.namespace)/pipelineruns/$(context.pipelineRun.name)" + - name: report-failure + when: + - input: "$(tasks.status)" + operator: in + values: ["Failed"] + taskRef: + resolver: git + params: + - name: url + value: https://github.com/tektoncd/catalog.git + - name: revision + value: df36b3853a5657fd883015cdbf07ad6466918acf + - name: pathInRepo + value: task/gitea-set-status/0.1/gitea-set-status.yaml + params: + - name: CONTEXT + value: "$(params.JOB_NAME)" + - name: REPO_FULL_NAME + value: "$(params.REPO_OWNER)/$(params.REPO_NAME)" + - name: GITEA_HOST_URL + value: code.fizz.buzz + - name: SHA + value: "$(tasks.fetch-repository.results.commit)" + - name: DESCRIPTION + value: "Build $(params.JOB_NAME) has failed" + - name: STATE + value: failure + - name: TARGET_URL + value: "https://tekton.fizz.buzz/#/namespaces/$(context.pipelineRun.namespace)/pipelineruns/$(context.pipelineRun.name)" + workspaces: + - name: git-source + workspaces: + - name: git-source + volumeClaimTemplate: + spec: + storageClassName: "nfs-client" + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 10Gi + subPath: source + params: [] diff --git a/.webhook_bridge/webhook_bridge.toml b/.webhook_bridge/webhook_bridge.toml index 6b1aac5..b3f3c8d 100644 --- a/.webhook_bridge/webhook_bridge.toml +++ b/.webhook_bridge/webhook_bridge.toml @@ -17,3 +17,9 @@ name = "format" source = "pipeline-format.yaml" clone_uri = "git@code.fizz.buzz:talexander/webhook_bridge.git" skip_branches = [ "^v[0-9]+\\.[0-9]+\\.[0-9]+$" ] + +[[push]] +name = "semver" +source = "pipeline-semver.yaml" +clone_uri = "git@code.fizz.buzz:talexander/webhook_bridge.git" +branches = [ "^main$", "^master$" ]