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.
This commit is contained in:
		
							parent
							
								
									b122e6ee99
								
							
						
					
					
						commit
						1efd7b1d73
					
				
							
								
								
									
										189
									
								
								.webhook_bridge/pipeline-semver.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										189
									
								
								.webhook_bridge/pipeline-semver.yaml
									
									
									
									
									
										Normal file
									
								
							| @ -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: [] | ||||
| @ -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$" ] | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Tom Alexander
						Tom Alexander