diff --git a/pipeline/notification.yaml b/pipeline/notification.yaml index 21126e4..a776d36 100644 --- a/pipeline/notification.yaml +++ b/pipeline/notification.yaml @@ -13,6 +13,7 @@ spec: - name: helm - name: gitsshauth - name: quayauth + - name: utilities params: - name: ref description: Ref of the application @@ -58,6 +59,12 @@ spec: workspaces: - name: gitauth workspace: gitauth + - name: copy-shared-utilities + runAfter: ["set-pending-status"] + taskRef: + name: copy-utilities-to-workspace + workspaces: + - name: utilities - name: prepare runAfter: ["set-pending-status"] taskRef: diff --git a/tasks/git-semver.yaml b/tasks/git-semver.yaml index d28a064..3ae2304 100644 --- a/tasks/git-semver.yaml +++ b/tasks/git-semver.yaml @@ -25,7 +25,7 @@ spec: #!/usr/bin/env bash USERNAME=$(cat /workspace/gitauth/username) PASSWORD=$(cat /workspace/gitauth/password) - SEMVER=$(/tools/dotnet-gitversion /url ${PARAM_REPO} /b ${PARAM_BRANCH} /u ${USERNAME} /p ${PASSWORD} /dynamicRepoLocation /workspace/repo /overrideconfig mode=Mainline /showvariable MajorMinorPatch /verbosity quiet) + SEMVER=$(/tools/dotnet-gitversion /url ${PARAM_REPO} /b ${PARAM_BRANCH} /u ${USERNAME} /p ${PASSWORD} /dynamicRepoLocation /workspace/repo /overrideconfig mode=Mainline /overrideconfig commit-message-incrementing=MergeMessageOnly /showvariable MajorMinorPatch /verbosity quiet) echo -n ${SEMVER} > $(results.version.path) exit 0 securityContext: diff --git a/tasks/gitea-set-status.yaml b/tasks/gitea-set-status.yaml index 85d6100..4754aea 100644 --- a/tasks/gitea-set-status.yaml +++ b/tasks/gitea-set-status.yaml @@ -8,69 +8,69 @@ spec: This task will set the status of the CI job to the specified value along with a link to the specified target URL where developers can follow the progress of the CI job. The `gitea-set-status` task allows external services to mark Gitea commits with an `error`, `failure`, `pending`, or `success` state, which is then reflected in pull requests involving those commits. Statuses include as well a `description` and a `target_url`, to give the user informations about the CI statuses or a direct link to the full log. params: - - name: githost - type: string - - name: quayhost - type: string - - name: repofullname - type: string - - name: revision - type: string - - name: statusurl - type: string - - name: description - type: string - - name: context - type: string - default: continuous-integration/tekton - - name: state - type: string + - name: githost + type: string + - name: quayhost + type: string + - name: repofullname + type: string + - name: revision + type: string + - name: statusurl + type: string + - name: description + type: string + - name: context + type: string + default: continuous-integration/tekton + - name: state + type: string steps: - - image: $(params.quayhost)/goghvideo/python:3-alpine - name: set-status - script: | - #!/usr/bin/env python + - image: $(params.quayhost)/goghvideo/python:3-alpine + name: set-status + script: | + #!/usr/bin/env python - """This script will set the CI status on a Gitea commit""" + """This script will set the CI status on a Gitea commit""" - import json - import sys - import http.client + import json + import sys + import http.client - gitea_token = open("$(workspaces.gitauth.path)/password", "r").read() + gitea_token = open("$(workspaces.gitauth.path)/password", "r").read() - status_url = "/api/v1/repos/$(params.repofullname)/statuses/$(params.revision)" + status_url = "/api/v1/repos/$(params.repofullname)/statuses/$(params.revision)" - data = { - "state": "$(params.state)", - "target_url": "$(params.statusurl)", - "description": "$(params.description)", - "context": "$(params.context)" - } - print("Sending this data to Gitea: ") - print(data) + data = { + "state": "$(params.state)", + "target_url": "$(params.statusurl)", + "description": "$(params.description)", + "context": "$(params.context)" + } + print("Sending this data to Gitea: ") + print(data) - authHeader = "token " + gitea_token + authHeader = "token " + gitea_token - conn = http.client.HTTPSConnection("$(params.githost)") + conn = http.client.HTTPSConnection("$(params.githost)") - conn.request( - "POST", - status_url, - body=json.dumps(data), - headers={ - "User-Agent": "TektonCD, the peaceful cat", - "Authorization": authHeader, - "Accept": "application/json", - "Content-Type": "application/json", - }) - resp = conn.getresponse() - if not str(resp.status).startswith("2"): - print("Error: %d" % (resp.status)) - print(resp.read()) - sys.exit(1) - else: - print("Gitea status has been set") + conn.request( + "POST", + status_url, + body=json.dumps(data), + headers={ + "User-Agent": "TektonCD, the peaceful cat", + "Authorization": authHeader, + "Accept": "application/json", + "Content-Type": "application/json", + }) + resp = conn.getresponse() + if not str(resp.status).startswith("2"): + print("Error: %d" % (resp.status)) + print(resp.read()) + sys.exit(1) + else: + print("Gitea status has been set") workspaces: - name: gitauth diff --git a/tasks/promote-version.yaml b/tasks/promote-version.yaml index 4ec77be..5f03030 100644 --- a/tasks/promote-version.yaml +++ b/tasks/promote-version.yaml @@ -29,6 +29,76 @@ spec: - name: quayhost type: string steps: + - name: tag-image-with-release-ver + image: $(params.quayhost)/goghvideo/python:3-alpine + script: | + #!/usr/bin/env python + + """This script will set tag the image with the release version""" + + import json + import sys + import http.client + import ssl + + quay_token = open("$(workspaces.quayauth.path)/apikey", "r").read() + authHeader = "Bearer " + quay_token + + conn = http.client.HTTPSConnection( + "$(params.quayhost)", + context = ssl._create_unverified_context() + ) + + existing_tag = "/api/v1/repository/$(params.repofullname)/tag/?specificTag=$(params.revision)" + + print("Getting existing tag information from Quay") + + conn.request( + "GET", + existing_tag, + headers={ + "User-Agent": "TektonCD, the peaceful cat", + "Authorization": authHeader, + "Accept": "application/json", + "Content-Type": "application/json", + } + ) + resp = conn.getresponse() + if not str(resp.status).startswith("2"): + print("Error: %d" % (resp.status)) + print(resp.read()) + sys.exit(1) + else: + print("Successfully Retrieved quay infor for tag") + tag_info = json.loads(resp.read().decode('utf-8')) + for item in tag_info['tags']: + manifest_digest = item['manifest_digest'] + + print("Tagging image with semver") + tag_url = "/api/v1/repository/$(params.repofullname)/tag/v$(params.semver)" + + data = { + "manifest_digest": manifest_digest + } + + conn.request( + "PUT", + tag_url, + body=json.dumps(data), + headers={ + "User-Agent": "TektonCD, the peaceful cat", + "Authorization": authHeader, + "Accept": "application/json", + "Content-Type": "application/json", + } + ) + resp = conn.getresponse() + if not str(resp.status).startswith("2"): + print("Error: %d" % (resp.status)) + print(resp.read()) + sys.exit(1) + else: + print("Successfully tagged image") - name: release-notes image: $(params.quayhost)/goghvideo/bitnami-git:latest workingDir: $(workspaces.source.path)/$(params.appname) @@ -130,77 +200,30 @@ spec: sys.exit(1) else: print("Gitea merge completed on $(params.githost)") - - name: tag-image-with-release-ver - image: $(params.quayhost)/goghvideo/python:3-alpine + - name: update-helm-chart + image: $(params.quayhost)/goghvideo/bitnami-git:latest + workingDir: $(workspaces.helm.path) script: | - #!/usr/bin/env python - - """This script will set tag the image with the release version""" - - import json - import sys - import http.client - import ssl - - quay_token = open("$(workspaces.quayauth.path)/apikey", "r").read() - authHeader = "Bearer " + quay_token - - conn = http.client.HTTPSConnection( - "$(params.quayhost)", - context = ssl._create_unverified_context() - ) - - existing_tag = "/api/v1/repository/$(params.repofullname)/tag/?specificTag=$(params.revision)" - - print("Getting existing tag information from Quay") - - conn.request( - "GET", - existing_tag, - headers={ - "User-Agent": "TektonCD, the peaceful cat", - "Authorization": authHeader, - "Accept": "application/json", - "Content-Type": "application/json", - } - ) - resp = conn.getresponse() - if not str(resp.status).startswith("2"): - print("Error: %d" % (resp.status)) - print(resp.read()) - sys.exit(1) - else: - print("Successfully Retrieved quay infor for tag") - tag_info = json.loads(resp.read().decode('utf-8')) - for item in tag_info['tags']: - manifest_digest = item['manifest_digest'] + #!/bin/sh + export USERNAME=$(cat $(workspaces.gitauth.path)/username) + export PASSWORD=$(cat $(workspaces.gitauth.path)/password) - print("Tagging image with semver") - tag_url = "/api/v1/repository/$(params.repofullname)/tag/v$(params.semver)" + git config --global --add safe.directory $(workspaces.helm.path)/ + git config --global user.name "$(params.author)" + git config --global user.email "$(params.email)" - data = { - "manifest_digest": manifest_digest - } + HOSTPATH=$(git remote get-url origin | sed 's_https://__') + git remote set-url origin https://${USERNAME}:${PASSWORD}@${HOSTPATH} - conn.request( - "PUT", - tag_url, - body=json.dumps(data), - headers={ - "User-Agent": "TektonCD, the peaceful cat", - "Authorization": authHeader, - "Accept": "application/json", - "Content-Type": "application/json", - } - ) - resp = conn.getresponse() - if not str(resp.status).startswith("2"): - print("Error: %d" % (resp.status)) - print(resp.read()) - sys.exit(1) - else: - print("Successfully tagged image") + $(workspaces.utilities.path)/yqi -i '.version |= (split(".") | .[-1] |= ((. tag = "!!int") + 1) | join("."))' $(params.appname)/Chart.yaml + $(workspaces.utilities.path)/yq -i '.appVersion=v$(params.semver)' $(params.appname)/Chart.yaml + + git add $(params.appname)/Chart.yaml + git commit -m "Updating chart version" + git push origin main workspaces: - name: source - name: gitauth - name: quayauth + - name: utilties + - name: helm diff --git a/triggertemplate/notification-featurebranch.yaml b/triggertemplate/notification-featurebranch.yaml index 13b443e..badce76 100644 --- a/triggertemplate/notification-featurebranch.yaml +++ b/triggertemplate/notification-featurebranch.yaml @@ -67,6 +67,15 @@ spec: requests: storage: 1Gi storageClassName: nfs-client + - name: utilities + volumeClaimTemplate: + spec: + accessModes: + - ReadWriteMany + resources: + requests: + storage: 1Gi + storageClassName: nfs-client params: - name: ref value: $(tt.params.ref)