From 976bc8b1db1f925a32a022a67389d57451868e20 Mon Sep 17 00:00:00 2001 From: "Randal S. Harisch" Date: Sat, 7 Oct 2023 18:51:05 -0600 Subject: [PATCH] chore: refactored for helm management of pipeline objects --- charts/conversion-engine/.helmignore | 23 + charts/conversion-engine/Chart.lock | 6 + charts/conversion-engine/Chart.yaml | 28 ++ .../conversion-engine/charts/common-0.1.0.tgz | Bin 0 -> 12773 bytes .../templates/eventlistener.yaml | 1 + .../conversion-engine/templates/pipeline.yaml | 1 + .../templates/task-copy-shared-utilities.yaml | 2 + .../templates/task-git-clone.yaml | 1 + .../templates/task-git-semver.yaml | 2 + .../templates/task-gitea-set-status.yaml | 1 + .../templates/task-golangci-lint.yaml | 1 + .../task-helm-upgrade-from-source.yaml | 1 + .../templates/task-openshift-client.yaml | 1 + .../templates/task-promote.yaml | 1 + .../templates/task-s2i-go.yaml | 1 + .../templates/triggerbinding.yaml | 1 + .../templates/triggertemplate.yaml | 1 + charts/conversion-engine/values.yaml | 25 + charts/notification/Chart.yaml | 1 - charts/notification/charts/common-0.1.0.tgz | Bin 10346 -> 12776 bytes .../templates/task-git-clone.yaml | 1 + charts/notification/values.yaml | 4 + charts/upload-to-nextcloud/.helmignore | 23 + charts/upload-to-nextcloud/Chart.lock | 6 + charts/upload-to-nextcloud/Chart.yaml | 28 ++ .../charts/common-0.1.0.tgz | Bin 0 -> 12775 bytes .../templates/eventlistener.yaml | 1 + .../templates/pipeline.yaml | 1 + .../templates/task-copy-shared-utilities.yaml | 2 + .../templates/task-git-clone.yaml | 1 + .../templates/task-git-semver.yaml | 2 + .../templates/task-gitea-set-status.yaml | 1 + .../templates/task-golangci-lint.yaml | 1 + .../task-helm-upgrade-from-source.yaml | 1 + .../templates/task-openshift-client.yaml | 1 + .../templates/task-promote.yaml | 1 + .../templates/task-s2i-go.yaml | 1 + .../templates/triggerbinding.yaml | 1 + .../templates/triggertemplate.yaml | 1 + charts/upload-to-nextcloud/values.yaml | 25 + .../_task-copy-shared-utilities.yaml | 2 +- .../templates/_task-git-clone.yaml | 20 +- common/templates/_task-golangci-lint.yaml | 2 +- .../_task-helm-upgrade-from-source.yaml | 2 +- common/templates/_triggertemplate.yaml | 88 ++-- .../conversionengine-webhook-listener.yaml | 34 -- eventlistener/e2e-test-webhook-listener.yaml | 34 -- .../notification-webhook-listener-orig.yaml | 34 -- .../notification-webhook-listener-push.yaml | 34 -- eventlistener/notification-webhook.yaml | 34 -- .../upload-to-nextcloud-webhook-listener.yaml | 34 -- pipeline/cd-notification.yaml | 437 ------------------ pipeline/conversion-engine.yaml | 430 ----------------- pipeline/e2e-test.yaml | 225 --------- pipeline/notification-pr.yaml | 437 ------------------ pipeline/notification.yaml | 393 ---------------- pipeline/upload-to-nextcloud.yaml | 430 ----------------- tasks/copy-shared-utilities.yaml | 17 - tasks/generate-image-tag-task.yaml | 29 -- tasks/git-semver.yaml | 36 -- tasks/gitea-create-release.yaml | 125 ----- tasks/gitea-merge-pr.yaml | 132 ------ tasks/gitea-set-status.yaml | 76 --- tasks/golangci-lint.yaml | 81 ---- tasks/helm-upgrade-from-source.yaml | 60 --- .../openshift-ephemeral-namespace-client.yaml | 48 -- tasks/promote-version.yaml | 234 ---------- tasks/s2i-go-debug.yaml | 107 ----- triggerbinding/gitea-oriig-binding.yaml | 19 - triggerbinding/gitea-pr-webhook.yaml | 25 - .../conversionengine-template.yaml | 88 ---- triggertemplate/e2e-test.yaml | 88 ---- .../notification-featurebranch.yaml | 103 ----- triggertemplate/notification.yaml | 88 ---- triggertemplate/upload-to-nextcloud.yaml | 88 ---- 75 files changed, 270 insertions(+), 4044 deletions(-) create mode 100644 charts/conversion-engine/.helmignore create mode 100644 charts/conversion-engine/Chart.lock create mode 100644 charts/conversion-engine/Chart.yaml create mode 100644 charts/conversion-engine/charts/common-0.1.0.tgz create mode 100644 charts/conversion-engine/templates/eventlistener.yaml create mode 100644 charts/conversion-engine/templates/pipeline.yaml create mode 100644 charts/conversion-engine/templates/task-copy-shared-utilities.yaml create mode 100644 charts/conversion-engine/templates/task-git-clone.yaml create mode 100644 charts/conversion-engine/templates/task-git-semver.yaml create mode 100644 charts/conversion-engine/templates/task-gitea-set-status.yaml create mode 100644 charts/conversion-engine/templates/task-golangci-lint.yaml create mode 100644 charts/conversion-engine/templates/task-helm-upgrade-from-source.yaml create mode 100644 charts/conversion-engine/templates/task-openshift-client.yaml create mode 100644 charts/conversion-engine/templates/task-promote.yaml create mode 100644 charts/conversion-engine/templates/task-s2i-go.yaml create mode 100644 charts/conversion-engine/templates/triggerbinding.yaml create mode 100644 charts/conversion-engine/templates/triggertemplate.yaml create mode 100644 charts/conversion-engine/values.yaml create mode 100644 charts/notification/templates/task-git-clone.yaml create mode 100644 charts/upload-to-nextcloud/.helmignore create mode 100644 charts/upload-to-nextcloud/Chart.lock create mode 100644 charts/upload-to-nextcloud/Chart.yaml create mode 100644 charts/upload-to-nextcloud/charts/common-0.1.0.tgz create mode 100644 charts/upload-to-nextcloud/templates/eventlistener.yaml create mode 100644 charts/upload-to-nextcloud/templates/pipeline.yaml create mode 100644 charts/upload-to-nextcloud/templates/task-copy-shared-utilities.yaml create mode 100644 charts/upload-to-nextcloud/templates/task-git-clone.yaml create mode 100644 charts/upload-to-nextcloud/templates/task-git-semver.yaml create mode 100644 charts/upload-to-nextcloud/templates/task-gitea-set-status.yaml create mode 100644 charts/upload-to-nextcloud/templates/task-golangci-lint.yaml create mode 100644 charts/upload-to-nextcloud/templates/task-helm-upgrade-from-source.yaml create mode 100644 charts/upload-to-nextcloud/templates/task-openshift-client.yaml create mode 100644 charts/upload-to-nextcloud/templates/task-promote.yaml create mode 100644 charts/upload-to-nextcloud/templates/task-s2i-go.yaml create mode 100644 charts/upload-to-nextcloud/templates/triggerbinding.yaml create mode 100644 charts/upload-to-nextcloud/templates/triggertemplate.yaml create mode 100644 charts/upload-to-nextcloud/values.yaml rename tasks/git-clone.yaml => common/templates/_task-git-clone.yaml (95%) delete mode 100644 eventlistener/conversionengine-webhook-listener.yaml delete mode 100644 eventlistener/e2e-test-webhook-listener.yaml delete mode 100644 eventlistener/notification-webhook-listener-orig.yaml delete mode 100644 eventlistener/notification-webhook-listener-push.yaml delete mode 100644 eventlistener/notification-webhook.yaml delete mode 100644 eventlistener/upload-to-nextcloud-webhook-listener.yaml delete mode 100644 pipeline/cd-notification.yaml delete mode 100644 pipeline/conversion-engine.yaml delete mode 100644 pipeline/e2e-test.yaml delete mode 100644 pipeline/notification-pr.yaml delete mode 100644 pipeline/notification.yaml delete mode 100644 pipeline/upload-to-nextcloud.yaml delete mode 100644 tasks/copy-shared-utilities.yaml delete mode 100644 tasks/generate-image-tag-task.yaml delete mode 100644 tasks/git-semver.yaml delete mode 100644 tasks/gitea-create-release.yaml delete mode 100644 tasks/gitea-merge-pr.yaml delete mode 100644 tasks/gitea-set-status.yaml delete mode 100644 tasks/golangci-lint.yaml delete mode 100644 tasks/helm-upgrade-from-source.yaml delete mode 100644 tasks/openshift-ephemeral-namespace-client.yaml delete mode 100644 tasks/promote-version.yaml delete mode 100644 tasks/s2i-go-debug.yaml delete mode 100644 triggerbinding/gitea-oriig-binding.yaml delete mode 100644 triggerbinding/gitea-pr-webhook.yaml delete mode 100644 triggertemplate/conversionengine-template.yaml delete mode 100644 triggertemplate/e2e-test.yaml delete mode 100644 triggertemplate/notification-featurebranch.yaml delete mode 100644 triggertemplate/notification.yaml delete mode 100644 triggertemplate/upload-to-nextcloud.yaml diff --git a/charts/conversion-engine/.helmignore b/charts/conversion-engine/.helmignore new file mode 100644 index 0000000..0e8a0eb --- /dev/null +++ b/charts/conversion-engine/.helmignore @@ -0,0 +1,23 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*.orig +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ diff --git a/charts/conversion-engine/Chart.lock b/charts/conversion-engine/Chart.lock new file mode 100644 index 0000000..ee0f31d --- /dev/null +++ b/charts/conversion-engine/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: common + repository: file://../../common + version: 0.1.0 +digest: sha256:dd0c1a55ae9ff1f26b9173be4e954796ab5aafd5aed0828b443dc68684e8d592 +generated: "2023-10-06T22:08:04.524035034-06:00" diff --git a/charts/conversion-engine/Chart.yaml b/charts/conversion-engine/Chart.yaml new file mode 100644 index 0000000..ccec52f --- /dev/null +++ b/charts/conversion-engine/Chart.yaml @@ -0,0 +1,28 @@ +apiVersion: v2 +name: conversion-engine +description: A Helm chart for Kubernetes + +# A chart can be either an 'application' or a 'library' chart. +# +# Application charts are a collection of templates that can be packaged into versioned archives +# to be deployed. +# +# Library charts provide useful utilities or functions for the chart developer. They're included as +# a dependency of application charts to inject those utilities and functions into the rendering +# pipeline. Library charts do not define any templates and therefore cannot be deployed. +type: application + +# This is the chart version. This version number should be incremented each time you make changes +# to the chart and its templates, including the app version. +# Versions are expected to follow Semantic Versioning (https://semver.org/) +version: 0.1.0 + +# This is the version number of the application being deployed. This version number should be +# incremented each time you make changes to the application. Versions are not expected to +# follow Semantic Versioning. They should reflect the version the application is using. +# It is recommended to use it with quotes. +appVersion: "1.16.0" +dependencies: + - name: common + version: 0.1.0 + repository: file://../../common diff --git a/charts/conversion-engine/charts/common-0.1.0.tgz b/charts/conversion-engine/charts/common-0.1.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..482fa4da7b65b236d28d19caa6b9422174864bea GIT binary patch literal 12773 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 literal 10346 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 IPXOcq07(BePyhe` diff --git a/charts/notification/templates/task-git-clone.yaml b/charts/notification/templates/task-git-clone.yaml new file mode 100644 index 0000000..1c67590 --- /dev/null +++ b/charts/notification/templates/task-git-clone.yaml @@ -0,0 +1 @@ +{{- template "common.task-git-clone" . -}} diff --git a/charts/notification/values.yaml b/charts/notification/values.yaml index fd54163..5d603b7 100644 --- a/charts/notification/values.yaml +++ b/charts/notification/values.yaml @@ -6,7 +6,11 @@ nameOverride: "" fullnameOverride: "" serviceAccount: pipeline +storageClassName: nfs-client +gitHostname: git.endofday.com quayHostname: quay01.ipa.endofday.com +organizationName: goghvideo +helmRepoUrl: https://git.endofday.com/goghvideo/helm.git eventlistener: triggerBinding: gitea interceptors: diff --git a/charts/upload-to-nextcloud/.helmignore b/charts/upload-to-nextcloud/.helmignore new file mode 100644 index 0000000..0e8a0eb --- /dev/null +++ b/charts/upload-to-nextcloud/.helmignore @@ -0,0 +1,23 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*.orig +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ diff --git a/charts/upload-to-nextcloud/Chart.lock b/charts/upload-to-nextcloud/Chart.lock new file mode 100644 index 0000000..ee0f31d --- /dev/null +++ b/charts/upload-to-nextcloud/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: common + repository: file://../../common + version: 0.1.0 +digest: sha256:dd0c1a55ae9ff1f26b9173be4e954796ab5aafd5aed0828b443dc68684e8d592 +generated: "2023-10-06T22:08:04.524035034-06:00" diff --git a/charts/upload-to-nextcloud/Chart.yaml b/charts/upload-to-nextcloud/Chart.yaml new file mode 100644 index 0000000..fef24d2 --- /dev/null +++ b/charts/upload-to-nextcloud/Chart.yaml @@ -0,0 +1,28 @@ +apiVersion: v2 +name: upload-to-nextcloud +description: A Helm chart for Kubernetes + +# A chart can be either an 'application' or a 'library' chart. +# +# Application charts are a collection of templates that can be packaged into versioned archives +# to be deployed. +# +# Library charts provide useful utilities or functions for the chart developer. They're included as +# a dependency of application charts to inject those utilities and functions into the rendering +# pipeline. Library charts do not define any templates and therefore cannot be deployed. +type: application + +# This is the chart version. This version number should be incremented each time you make changes +# to the chart and its templates, including the app version. +# Versions are expected to follow Semantic Versioning (https://semver.org/) +version: 0.1.0 + +# This is the version number of the application being deployed. This version number should be +# incremented each time you make changes to the application. Versions are not expected to +# follow Semantic Versioning. They should reflect the version the application is using. +# It is recommended to use it with quotes. +appVersion: "1.16.0" +dependencies: + - name: common + version: 0.1.0 + repository: file://../../common diff --git a/charts/upload-to-nextcloud/charts/common-0.1.0.tgz b/charts/upload-to-nextcloud/charts/common-0.1.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..f45fa3b9352cbe229d754e27deab6c34a3e7780a GIT binary patch literal 12775 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 t1vo;mrK>agb}g9kkVdHWr#Ju}eh - body.action in ['opened', 'synchronized'] - bindings: - - ref: gitea-binding - template: - ref: conversionengine-template diff --git a/eventlistener/e2e-test-webhook-listener.yaml b/eventlistener/e2e-test-webhook-listener.yaml deleted file mode 100644 index 2ad537e..0000000 --- a/eventlistener/e2e-test-webhook-listener.yaml +++ /dev/null @@ -1,34 +0,0 @@ -apiVersion: triggers.tekton.dev/v1beta1 -kind: EventListener -metadata: - name: e2e-test-webhook-listener - namespace: goghvideo-cicd-pipeline -spec: - serviceAccountName: pipeline - triggers: - - name: e2etest-greeter-webhook - interceptors: - - name: gitea - ref: - name: gitea - kind: ClusterInterceptor - apiVersion: triggers.tekton.dev - params: - - name: secretRef - value: - secretName: webhook-secret - secretKey: sharedSecret - - name: eventTypes - value: ["pull_request", "pull_request_sync"] - - name: allow-create-and-update-only - ref: - name: cel - kind: ClusterInterceptor - params: - - name: filter - value: > - body.action in ['opened', 'synchronized'] - bindings: - - ref: gitea-binding - template: - ref: e2etest-template diff --git a/eventlistener/notification-webhook-listener-orig.yaml b/eventlistener/notification-webhook-listener-orig.yaml deleted file mode 100644 index 46f5a6d..0000000 --- a/eventlistener/notification-webhook-listener-orig.yaml +++ /dev/null @@ -1,34 +0,0 @@ -apiVersion: triggers.tekton.dev/v1beta1 -kind: EventListener -metadata: - name: notification-webhook-listener - namespace: goghvideo-cicd-pipeline -spec: - serviceAccountName: pipeline - triggers: - - name: notification-greeter-webhook - interceptors: - - name: gitea - ref: - name: gitea - kind: ClusterInterceptor - apiVersion: triggers.tekton.dev - params: - - name: secretRef - value: - secretName: webhook-secret - secretKey: sharedSecret - - name: eventTypes - value: ["pull_request", "pull_request_sync"] - - name: allow-create-and-update-only - ref: - name: cel - kind: ClusterInterceptor - params: - - name: filter - value: > - body.action in ['opened', 'synchronized'] - bindings: - - ref: gitea-binding - template: - ref: notification-template diff --git a/eventlistener/notification-webhook-listener-push.yaml b/eventlistener/notification-webhook-listener-push.yaml deleted file mode 100644 index f139058..0000000 --- a/eventlistener/notification-webhook-listener-push.yaml +++ /dev/null @@ -1,34 +0,0 @@ -apiVersion: triggers.tekton.dev/v1beta1 -kind: EventListener -metadata: - name: notification - namespace: goghvideo-cicd-pipeline -spec: - serviceAccountName: pipeline - triggers: - - name: notification-push-webhook - interceptors: - - name: gitea - ref: - name: gitea - kind: ClusterInterceptor - apiVersion: triggers.tekton.dev - params: - - name: secretRef - value: - secretName: webhook-secret - secretKey: sharedSecret - - name: eventTypes - value: ["push"] -# - name: allow-create-and-update-only -# ref: -# name: cel -# kind: ClusterInterceptor -# params: -# - name: filter -# value: > -# body.ref in ["feature"] - bindings: - - ref: gitea-push-binding - template: - ref: notification-trigger-template diff --git a/eventlistener/notification-webhook.yaml b/eventlistener/notification-webhook.yaml deleted file mode 100644 index 43ce877..0000000 --- a/eventlistener/notification-webhook.yaml +++ /dev/null @@ -1,34 +0,0 @@ -apiVersion: triggers.tekton.dev/v1beta1 -kind: EventListener -metadata: - name: notification - namespace: goghvideo-cicd-pipeline -spec: - serviceAccountName: pipeline - triggers: - - name: notification-pullrequest-webhook - interceptors: - - name: gitea - ref: - name: gitea - kind: ClusterInterceptor - apiVersion: triggers.tekton.dev - params: - - name: secretRef - value: - secretName: webhook-secret - secretKey: sharedSecret - - name: eventTypes - value: ["pull_request"] - - name: run-if-new-pr - ref: - name: cel - kind: ClusterInterceptor - params: - - name: filter - value: > - body.action in ["opened"] - bindings: - - ref: gitea-pullrequest-binding - template: - ref: notification-trigger-template diff --git a/eventlistener/upload-to-nextcloud-webhook-listener.yaml b/eventlistener/upload-to-nextcloud-webhook-listener.yaml deleted file mode 100644 index 7e00e4c..0000000 --- a/eventlistener/upload-to-nextcloud-webhook-listener.yaml +++ /dev/null @@ -1,34 +0,0 @@ -apiVersion: triggers.tekton.dev/v1beta1 -kind: EventListener -metadata: - name: upload-to-nextcloud-webhook-listener - namespace: goghvideo-cicd-pipeline -spec: - serviceAccountName: pipeline - triggers: - - name: upload2nc-greeter-webhook - interceptors: - - name: gitea - ref: - name: gitea - kind: ClusterInterceptor - apiVersion: triggers.tekton.dev - params: - - name: secretRef - value: - secretName: webhook-secret - secretKey: sharedSecret - - name: eventTypes - value: ["pull_request", "pull_request_sync"] - - name: allow-create-and-update-only - ref: - name: cel - kind: ClusterInterceptor - params: - - name: filter - value: > - body.action in ['opened', 'synchronized'] - bindings: - - ref: gitea-binding - template: - ref: upload2nc-template diff --git a/pipeline/cd-notification.yaml b/pipeline/cd-notification.yaml deleted file mode 100644 index ac7a058..0000000 --- a/pipeline/cd-notification.yaml +++ /dev/null @@ -1,437 +0,0 @@ -apiVersion: tekton.dev/v1beta1 -kind: Pipeline -metadata: - name: notification-deploy - namespace: goghvideo-cicd-pipeline -spec: - workspaces: - - name: source - - name: gitauth - - name: dockerconfig - - name: helm - - name: gitsshauth - params: - - name: git-repo-full-name - type: string - - name: git-token-secret-name - type: string - - name: git-token-secret-key - type: string - - name: git-commit-sha - type: string - - name: git-repo-url - type: string - description: Git URL to retrieve - - name: git-branch - type: string - description: branch to checkout - - name: git-pr-index - description: PR number to merge - - name: git-merge-type - description: What type of merge to do - - name: git-merge-delete-branch - description: delete the branch after merge - - name: verbose - type: string - default: "false" - - name: lint-package - type: string - - name: lint-context - type: string - description: Path to where the modules are stored - - name: lint-version - type: string - default: latest - - name: image - type: string - - name: s2i-builder-image - type: string - - name: git-helm-url - type: string - tasks: - - name: set-check-pending - taskRef: - name: gitea-set-status - params: - - name: SHA - value: $(params.git-commit-sha) - - name: GITEA_HOST_URL - value: git.endofday.com - - name: REPO_FULL_NAME - value: $(params.git-repo-full-name) - - name: GITEA_TOKEN_SECRET_NAME - value: $(params.git-token-secret-name) - - name: GITEA_TOKEN_SECRET_KEY - value: $(params.git-token-secret-key) - - name: DESCRIPTION - value: Build started - - name: STATE - value: pending - - name: TARGET_URL - value: https://console-openshift-console.apps.ocp.endofday.com/pipelines/all-namespaces - - name: git-semver - runAfter: - - set-check-pending - taskRef: - name: git-semver - params: - - name: gitrepositoryurl - value: $(params.git-repo-url) - - name: gitbranch - value: $(params.git-branch) - workspaces: - - name: repo - workspace: source - - name: gitauth - workspace: gitauth - - name: golangci-lint - runAfter: - - git-semver - taskRef: - name: golangci-lint - params: - - name: package - value: $(params.lint-package) - - name: context - value: $(params.lint-context) - - name: version - value: $(params.lint-version) - workspaces: - - name: source - workspace: source - - name: generate-imagetag - runAfter: - - golangci-lint - taskRef: - name: generate-image-tag - params: - - name: version - value: $(tasks.git-semver.results.version) - - name: image - value: $(params.image) - - name: s2i-build - runAfter: - - generate-imagetag - taskRef: - name: s2i-go-debug - params: - - name: TLSVERIFY - value: false - - name: BUILDER_IMAGE - value: $(params.s2i-builder-image) - - name: PATH_CONTEXT - value: $(params.lint-context) - - name: verbose - value: true - - name: IMAGE - value: $(tasks.generate-imagetag.results.imagetag) - - name: ENV_VARS - value: - - semver=$(tasks.git-semver.results.version) - workspaces: - - name: source - workspace: source - - name: dockerconfig - workspace: dockerconfig - - name: ephemeral-ns - runAfter: - - s2i-build - taskref: - name: openshift-ephemeral-namespace-client - kind: Task - params: - - name: VERSION - value: 4.11 - - name: SCRIPT - value: | - echo "${SHELL}" - RANDOMID=$(openssl rand -hex 4) - oc new-project goghvideo-test-${RANDOMID} >/dev/null - oc label namespace goghvideo-test-${RANDOMID} app=goghvideo-test - - x=0; until [[ -n $(oc -n goghvideo-test-${RANDOMID} get secret/goghvideo-openshift-builder-pull-secret 2>/dev/null) || $x -eq 10 ]]; do echo "Waiting for secret replication" && sleep 10 && ((x++)); done - if [[ "${x}" -eq 10 ]]; then exit 1; fi - - oc -n goghvideo-test-${RANDOMID} secrets link default goghvideo-openshift-builder-pull-secret --for=pull - - oc apply -f - </dev/null ) || $x -eq 10 ]]; do echo "Waiting for operator to deploy rabbit" && sleep 5 && ((x++)); done - if [[ "${x}" -eq 10 ]]; then exit 1; fi - - oc -n goghvideo-test-${RANDOMID} adm policy add-scc-to-user anyuid -z rabbitmq-server - - x=0; until [[ $(oc -n goghvideo-test-${RANDOMID} get sts rabbitmq-server -o jsonpath="{.status.readyReplicas}") -gt 0 || $x -eq 20 ]]; do echo "Waiting for Rabbit MQ to startup" && sleep 15 && ((x++)); done - if [[ "${x}" -eq 20 ]]; then exit 1; fi - oc -n goghvideo-test-${RANDOMID} create route edge --service=rabbitmq --port=15672 - - oc -n goghvideo-test-${RANDOMID} get pods - - RABBITHOST=$(oc -n goghvideo-test-${RANDOMID} get secret/rabbitmq-default-user -o template='{{ .data.host | base64decode }}') - RABBITUSER=$(oc -n goghvideo-test-${RANDOMID} get secret/rabbitmq-default-user -o template='{{ .data.username | base64decode }}') - RABBITPASS=$(oc -n goghvideo-test-${RANDOMID} get secret/rabbitmq-default-user -o template='{{ .data.password | base64decode }}') - oc -n goghvideo-test-${RANDOMID} create secret generic amqp --from-literal=url=amqp://${RABBITUSER}:${RABBITPASS}@${RABBITHOST}/ - - curl -O http://${RABBITHOST}:15672/cli/rabbitmqadmin - chmod +x rabbitmqadmin - - ./rabbitmqadmin -H ${RABBITHOST} -u ${RABBITUSER} -p ${RABBITPASS} declare exchange name=conversion type=topic - ./rabbitmqadmin -H ${RABBITHOST} -u ${RABBITUSER} -p ${RABBITPASS} declare queue name=transcode durable=true queue_type=quorum - ./rabbitmqadmin -H ${RABBITHOST} -u ${RABBITUSER} -p ${RABBITPASS} declare queue name=notification durable=true queue_type=quorum - ./rabbitmqadmin -H ${RABBITHOST} -u ${RABBITUSER} -p ${RABBITPASS} declare queue name=upload-nextcloud durable=true queue_type=quorum - ./rabbitmqadmin -H ${RABBITHOST} -u ${RABBITUSER} -p ${RABBITPASS} declare queue name=complete durable=true queue_type=quorum - - ./rabbitmqadmin -H ${RABBITHOST} -u ${RABBITUSER} -p ${RABBITPASS} declare binding source="conversion" destination_type="queue" destination="transcode" routing_key="transcode" - ./rabbitmqadmin -H ${RABBITHOST} -u ${RABBITUSER} -p ${RABBITPASS} declare binding source="conversion" destination_type="queue" destination="notification" routing_key="notification" - ./rabbitmqadmin -H ${RABBITHOST} -u ${RABBITUSER} -p ${RABBITPASS} declare binding source="conversion" destination_type="queue" destination="upload-nextcloud" routing_key="upload-nextcloud" - ./rabbitmqadmin -H ${RABBITHOST} -u ${RABBITUSER} -p ${RABBITPASS} declare binding source="conversion" destination_type="queue" destination="complete" routing_key="complete" - - echo -n "goghvideo-test-${RANDOMID}" > $(results.namespace.path) - workspaces: - - name: kubeconfig-dir - workspace: dockerconfig - - name: clone-helm-charts - runAfter: ["ephemeral-ns"] - taskRef: - name: git-clone - params: - - name: url - value: $(params.git-helm-url) - workspaces: - - name: output - workspace: helm - - name: ssh-directory - workspace: gitsshauth - - name: deploy-notification - runAfter: ["clone-helm-charts"] - taskRef: - name: helm-upgrade-from-source - params: - - name: charts_dir - value: notification - - name: release_namespace - value: $(tasks.ephemeral-ns.results.namespace) - - name: release_name - value: notification - - name: overwrite_values - value: "image.tag=v$(tasks.git-semver.results.version)" - workspaces: - - name: source - workspace: helm - - name: deploy-upload-to-nextcloud - runAfter: ["clone-helm-charts"] - taskRef: - name: helm-upgrade-from-source - params: - - name: charts_dir - value: upload-to-nextcloud - - name: release_namespace - value: $(tasks.ephemeral-ns.results.namespace) - - name: release_name - value: upload-to-nextcloud - workspaces: - - name: source - workspace: helm - - name: deploy-conversion-engine - runAfter: ["clone-helm-charts"] - taskRef: - name: helm-upgrade-from-source - params: - - name: charts_dir - value: conversion-engine - - name: release_namespace - value: $(tasks.ephemeral-ns.results.namespace) - - name: release_name - value: conversion-engine - workspaces: - - name: source - workspace: helm - - name: get-filedrop-name - runAfter: ["deploy-conversion-engine", "deploy-upload-to-nextcloud", "deploy-notification"] - taskref: - name: openshift-ephemeral-namespace-client - kind: Task - params: - - name: VERSION - value: 4.11 - - name: SCRIPT - value: | - #!/usr/bin/env bash - wget "https://github.com/jqlang/jq/releases/download/jq-1.7/jq-linux-amd64" -O /usr/local/bin/jq - chmod +x /usr/local/bin/jq - INPUTSRC=$(oc -n $(tasks.ephemeral-ns.results.namespace) get scaledjob/conversion-engine -o json | /usr/local/bin/jq -r '.spec.jobTargetRef.template.spec.initContainers[0].env[] | select(.name == "sourcefile").value') - if [[ -z "${INPUTSRC}" ]]; then exit 1; fi - echo -n "${INPUTSRC}" > $(results.filedrop.path) - workspaces: - - name: kubeconfig-dir - workspace: dockerconfig - - name: perform-e2e-test - runAfter: ["get-filedrop-name"] - taskref: - name: openshift-ephemeral-namespace-client - kind: Task - params: - - name: VERSION - value: 4.11 - - name: SCRIPT - value: | - #!/usr/bin/env bash - oc create -f - </dev/null - oc label namespace goghvideo-test-${RANDOMID} app=goghvideo-test - - x=0; until [[ -n $(oc -n goghvideo-test-${RANDOMID} get secret/goghvideo-openshift-builder-pull-secret 2>/dev/null) || $x -eq 10 ]]; do echo "Waiting for secret replication" && sleep 10 && ((x++)); done - if [[ "${x}" -eq 10 ]]; then exit 1; fi - - oc -n goghvideo-test-${RANDOMID} secrets link default goghvideo-openshift-builder-pull-secret --for=pull - - oc apply -f - </dev/null ) || $x -eq 10 ]]; do echo "Waiting for operator to deploy rabbit" && sleep 5 && ((x++)); done - if [[ "${x}" -eq 10 ]]; then exit 1; fi - - oc -n goghvideo-test-${RANDOMID} adm policy add-scc-to-user anyuid -z rabbitmq-server - - x=0; until [[ $(oc -n goghvideo-test-${RANDOMID} get sts rabbitmq-server -o jsonpath="{.status.readyReplicas}") -gt 0 || $x -eq 20 ]]; do echo "Waiting for Rabbit MQ to startup" && sleep 15 && ((x++)); done - if [[ "${x}" -eq 20 ]]; then exit 1; fi - oc -n goghvideo-test-${RANDOMID} create route edge --service=rabbitmq --port=15672 - - oc -n goghvideo-test-${RANDOMID} get pods - - RABBITHOST=$(oc -n goghvideo-test-${RANDOMID} get secret/rabbitmq-default-user -o template='{{ .data.host | base64decode }}') - RABBITUSER=$(oc -n goghvideo-test-${RANDOMID} get secret/rabbitmq-default-user -o template='{{ .data.username | base64decode }}') - RABBITPASS=$(oc -n goghvideo-test-${RANDOMID} get secret/rabbitmq-default-user -o template='{{ .data.password | base64decode }}') - oc -n goghvideo-test-${RANDOMID} create secret generic amqp --from-literal=url=amqp://${RABBITUSER}:${RABBITPASS}@${RABBITHOST}/ - - curl -O http://${RABBITHOST}:15672/cli/rabbitmqadmin - chmod +x rabbitmqadmin - - ./rabbitmqadmin -H ${RABBITHOST} -u ${RABBITUSER} -p ${RABBITPASS} declare exchange name=conversion type=topic - ./rabbitmqadmin -H ${RABBITHOST} -u ${RABBITUSER} -p ${RABBITPASS} declare queue name=transcode durable=true queue_type=quorum - ./rabbitmqadmin -H ${RABBITHOST} -u ${RABBITUSER} -p ${RABBITPASS} declare queue name=notification durable=true queue_type=quorum - ./rabbitmqadmin -H ${RABBITHOST} -u ${RABBITUSER} -p ${RABBITPASS} declare queue name=upload-nextcloud durable=true queue_type=quorum - ./rabbitmqadmin -H ${RABBITHOST} -u ${RABBITUSER} -p ${RABBITPASS} declare queue name=complete durable=true queue_type=quorum - - ./rabbitmqadmin -H ${RABBITHOST} -u ${RABBITUSER} -p ${RABBITPASS} declare binding source="conversion" destination_type="queue" destination="transcode" routing_key="transcode" - ./rabbitmqadmin -H ${RABBITHOST} -u ${RABBITUSER} -p ${RABBITPASS} declare binding source="conversion" destination_type="queue" destination="notification" routing_key="notification" - ./rabbitmqadmin -H ${RABBITHOST} -u ${RABBITUSER} -p ${RABBITPASS} declare binding source="conversion" destination_type="queue" destination="upload-nextcloud" routing_key="upload-nextcloud" - ./rabbitmqadmin -H ${RABBITHOST} -u ${RABBITUSER} -p ${RABBITPASS} declare binding source="conversion" destination_type="queue" destination="complete" routing_key="complete" - - echo -n "goghvideo-test-${RANDOMID}" > $(results.namespace.path) - workspaces: - - name: kubeconfig-dir - workspace: dockerconfig - - name: clone-helm-charts - runAfter: ["ephemeral-ns"] - taskRef: - name: git-clone - params: - - name: url - value: $(params.git-helm-url) - workspaces: - - name: output - workspace: helm - - name: ssh-directory - workspace: gitsshauth - - name: deploy-ce-testver - runAfter: ["clone-helm-charts"] - taskRef: - name: helm-upgrade-from-source - params: - - name: charts_dir - value: conversion-engine - - name: release_namespace - value: $(tasks.ephemeral-ns.results.namespace) - - name: release_name - value: conversion-engine - - name: overwrite_values - value: "image.tag=v$(tasks.git-semver.results.version)" - workspaces: - - name: source - workspace: helm - - name: deploy-upload-to-nextcloud - runAfter: ["clone-helm-charts"] - taskRef: - name: helm-upgrade-from-source - params: - - name: charts_dir - value: upload-to-nextcloud - - name: release_namespace - value: $(tasks.ephemeral-ns.results.namespace) - - name: release_name - value: upload-to-nextcloud - workspaces: - - name: source - workspace: helm - - name: deploy-notification - runAfter: ["clone-helm-charts"] - taskRef: - name: helm-upgrade-from-source - params: - - name: charts_dir - value: notification - - name: release_namespace - value: $(tasks.ephemeral-ns.results.namespace) - - name: release_name - value: notification - workspaces: - - name: source - workspace: helm - - name: get-filedrop-name - runAfter: ["deploy-ce-testver", "deploy-upload-to-nextcloud", "deploy-notification"] - taskref: - name: openshift-ephemeral-namespace-client - kind: Task - params: - - name: VERSION - value: 4.11 - - name: SCRIPT - value: | - #!/usr/bin/env bash - wget "https://github.com/jqlang/jq/releases/download/jq-1.7/jq-linux-amd64" -O /usr/local/bin/jq - chmod +x /usr/local/bin/jq - INPUTSRC=$(oc -n $(tasks.ephemeral-ns.results.namespace) get scaledjob/conversion-engine -o json | /usr/local/bin/jq -r '.spec.jobTargetRef.template.spec.initContainers[0].env[] | select(.name == "sourcefile").value') - if [[ -z "${INPUTSRC}" ]]; then exit 1; fi - echo -n "${INPUTSRC}" > $(results.filedrop.path) - workspaces: - - name: kubeconfig-dir - workspace: dockerconfig - - name: perform-e2e-test - runAfter: ["get-filedrop-name"] - taskref: - name: openshift-ephemeral-namespace-client - kind: Task - params: - - name: VERSION - value: 4.11 - - name: SCRIPT - value: | - #!/usr/bin/env bash - oc create -f - </dev/null - oc label namespace goghvideo-test-${RANDOMID} app=goghvideo-test - - x=0; until [[ -n $(oc -n goghvideo-test-${RANDOMID} get secret/goghvideo-openshift-builder-pull-secret 2>/dev/null) || $x -eq 10 ]]; do echo "Waiting for secret replication" && sleep 10 && ((x++)); done - if [[ "${x}" -eq 10 ]]; then exit 1; fi - - oc -n goghvideo-test-${RANDOMID} secrets link default goghvideo-openshift-builder-pull-secret --for=pull - - oc apply -f - </dev/null ) || $x -eq 10 ]]; do echo "Waiting for operator to deploy rabbit" && sleep 5 && ((x++)); done - if [[ "${x}" -eq 10 ]]; then exit 1; fi - - oc -n goghvideo-test-${RANDOMID} adm policy add-scc-to-user anyuid -z rabbitmq-server - - x=0; until [[ $(oc -n goghvideo-test-${RANDOMID} get sts rabbitmq-server -o jsonpath="{.status.readyReplicas}") -gt 0 || $x -eq 20 ]]; do echo "Waiting for Rabbit MQ to startup" && sleep 15 && ((x++)); done - if [[ "${x}" -eq 20 ]]; then exit 1; fi - oc -n goghvideo-test-${RANDOMID} create route edge --service=rabbitmq --port=15672 - - oc -n goghvideo-test-${RANDOMID} get pods - - RABBITHOST=$(oc -n goghvideo-test-${RANDOMID} get secret/rabbitmq-default-user -o template='{{ .data.host | base64decode }}') - RABBITUSER=$(oc -n goghvideo-test-${RANDOMID} get secret/rabbitmq-default-user -o template='{{ .data.username | base64decode }}') - RABBITPASS=$(oc -n goghvideo-test-${RANDOMID} get secret/rabbitmq-default-user -o template='{{ .data.password | base64decode }}') - oc -n goghvideo-test-${RANDOMID} create secret generic amqp --from-literal=url=amqp://${RABBITUSER}:${RABBITPASS}@${RABBITHOST}/ - - curl -O http://${RABBITHOST}:15672/cli/rabbitmqadmin - chmod +x rabbitmqadmin - - ./rabbitmqadmin -H ${RABBITHOST} -u ${RABBITUSER} -p ${RABBITPASS} declare exchange name=conversion type=topic - ./rabbitmqadmin -H ${RABBITHOST} -u ${RABBITUSER} -p ${RABBITPASS} declare queue name=transcode durable=true queue_type=quorum - ./rabbitmqadmin -H ${RABBITHOST} -u ${RABBITUSER} -p ${RABBITPASS} declare queue name=notification durable=true queue_type=quorum - ./rabbitmqadmin -H ${RABBITHOST} -u ${RABBITUSER} -p ${RABBITPASS} declare queue name=upload-nextcloud durable=true queue_type=quorum - ./rabbitmqadmin -H ${RABBITHOST} -u ${RABBITUSER} -p ${RABBITPASS} declare queue name=complete durable=true queue_type=quorum - - ./rabbitmqadmin -H ${RABBITHOST} -u ${RABBITUSER} -p ${RABBITPASS} declare binding source="conversion" destination_type="queue" destination="transcode" routing_key="transcode" - ./rabbitmqadmin -H ${RABBITHOST} -u ${RABBITUSER} -p ${RABBITPASS} declare binding source="conversion" destination_type="queue" destination="notification" routing_key="notification" - ./rabbitmqadmin -H ${RABBITHOST} -u ${RABBITUSER} -p ${RABBITPASS} declare binding source="conversion" destination_type="queue" destination="upload-nextcloud" routing_key="upload-nextcloud" - ./rabbitmqadmin -H ${RABBITHOST} -u ${RABBITUSER} -p ${RABBITPASS} declare binding source="conversion" destination_type="queue" destination="complete" routing_key="complete" - - echo -n "goghvideo-test-${RANDOMID}" > $(results.namespace.path) - workspaces: - - name: kubeconfig-dir - workspace: dockerconfig - - name: clone-helm-charts - runAfter: ["ephemeral-ns"] - taskRef: - name: git-clone - params: - - name: url - value: $(params.git-helm-url) - workspaces: - - name: output - workspace: helm - - name: ssh-directory - workspace: gitsshauth - - name: deploy-notification - runAfter: ["clone-helm-charts"] - taskRef: - name: helm-upgrade-from-source - params: - - name: charts_dir - value: notification - - name: release_namespace - value: $(tasks.ephemeral-ns.results.namespace) - - name: release_name - value: notification - - name: overwrite_values - value: "image.tag=v$(tasks.git-semver.results.version)" - workspaces: - - name: source - workspace: helm - - name: deploy-upload-to-nextcloud - runAfter: ["clone-helm-charts"] - taskRef: - name: helm-upgrade-from-source - params: - - name: charts_dir - value: upload-to-nextcloud - - name: release_namespace - value: $(tasks.ephemeral-ns.results.namespace) - - name: release_name - value: upload-to-nextcloud - workspaces: - - name: source - workspace: helm - - name: deploy-conversion-engine - runAfter: ["clone-helm-charts"] - taskRef: - name: helm-upgrade-from-source - params: - - name: charts_dir - value: conversion-engine - - name: release_namespace - value: $(tasks.ephemeral-ns.results.namespace) - - name: release_name - value: conversion-engine - workspaces: - - name: source - workspace: helm - - name: get-filedrop-name - runAfter: ["deploy-conversion-engine", "deploy-upload-to-nextcloud", "deploy-notification"] - taskref: - name: openshift-ephemeral-namespace-client - kind: Task - params: - - name: VERSION - value: 4.11 - - name: SCRIPT - value: | - #!/usr/bin/env bash - wget "https://github.com/jqlang/jq/releases/download/jq-1.7/jq-linux-amd64" -O /usr/local/bin/jq - chmod +x /usr/local/bin/jq - INPUTSRC=$(oc -n $(tasks.ephemeral-ns.results.namespace) get scaledjob/conversion-engine -o json | /usr/local/bin/jq -r '.spec.jobTargetRef.template.spec.initContainers[0].env[] | select(.name == "sourcefile").value') - if [[ -z "${INPUTSRC}" ]]; then exit 1; fi - echo -n "${INPUTSRC}" > $(results.filedrop.path) - workspaces: - - name: kubeconfig-dir - workspace: dockerconfig - - name: perform-e2e-test - runAfter: ["get-filedrop-name"] - taskref: - name: openshift-ephemeral-namespace-client - kind: Task - params: - - name: VERSION - value: 4.11 - - name: SCRIPT - value: | - #!/usr/bin/env bash - oc create -f - </dev/null - oc label namespace goghvideo-test-${RANDOMID} app=goghvideo-test - - x=0; until [[ -n $(oc -n goghvideo-test-${RANDOMID} get secret/goghvideo-openshift-builder-pull-secret 2>/dev/null) || $x -eq 10 ]]; do echo "Waiting for secret replication" && sleep 10 && ((x++)); done - if [[ "${x}" -eq 10 ]]; then exit 1; fi - - oc -n goghvideo-test-${RANDOMID} secrets link default goghvideo-openshift-builder-pull-secret --for=pull - - oc apply -f - </dev/null ) || $x -eq 10 ]]; do echo "Waiting for operator to deploy rabbit" && sleep 5 && ((x++)); done - if [[ "${x}" -eq 10 ]]; then exit 1; fi - - oc -n goghvideo-test-${RANDOMID} adm policy add-scc-to-user anyuid -z rabbitmq-server - - x=0; until [[ $(oc -n goghvideo-test-${RANDOMID} get sts rabbitmq-server -o jsonpath="{.status.readyReplicas}") -gt 0 || $x -eq 20 ]]; do echo "Waiting for Rabbit MQ to startup" && sleep 15 && ((x++)); done - if [[ "${x}" -eq 20 ]]; then exit 1; fi - oc -n goghvideo-test-${RANDOMID} create route edge --service=rabbitmq --port=15672 - - oc -n goghvideo-test-${RANDOMID} get pods - - RABBITHOST=$(oc -n goghvideo-test-${RANDOMID} get secret/rabbitmq-default-user -o template='{{ .data.host | base64decode }}') - RABBITUSER=$(oc -n goghvideo-test-${RANDOMID} get secret/rabbitmq-default-user -o template='{{ .data.username | base64decode }}') - RABBITPASS=$(oc -n goghvideo-test-${RANDOMID} get secret/rabbitmq-default-user -o template='{{ .data.password | base64decode }}') - oc -n goghvideo-test-${RANDOMID} create secret generic amqp --from-literal=url=amqp://${RABBITUSER}:${RABBITPASS}@${RABBITHOST}/ - - curl -O http://${RABBITHOST}:15672/cli/rabbitmqadmin - chmod +x rabbitmqadmin - - ./rabbitmqadmin -H ${RABBITHOST} -u ${RABBITUSER} -p ${RABBITPASS} declare exchange name=conversion type=topic - ./rabbitmqadmin -H ${RABBITHOST} -u ${RABBITUSER} -p ${RABBITPASS} declare queue name=transcode durable=true queue_type=quorum - ./rabbitmqadmin -H ${RABBITHOST} -u ${RABBITUSER} -p ${RABBITPASS} declare queue name=notification durable=true queue_type=quorum - ./rabbitmqadmin -H ${RABBITHOST} -u ${RABBITUSER} -p ${RABBITPASS} declare queue name=upload-nextcloud durable=true queue_type=quorum - ./rabbitmqadmin -H ${RABBITHOST} -u ${RABBITUSER} -p ${RABBITPASS} declare queue name=complete durable=true queue_type=quorum - - ./rabbitmqadmin -H ${RABBITHOST} -u ${RABBITUSER} -p ${RABBITPASS} declare binding source="conversion" destination_type="queue" destination="transcode" routing_key="transcode" - ./rabbitmqadmin -H ${RABBITHOST} -u ${RABBITUSER} -p ${RABBITPASS} declare binding source="conversion" destination_type="queue" destination="notification" routing_key="notification" - ./rabbitmqadmin -H ${RABBITHOST} -u ${RABBITUSER} -p ${RABBITPASS} declare binding source="conversion" destination_type="queue" destination="upload-nextcloud" routing_key="upload-nextcloud" - ./rabbitmqadmin -H ${RABBITHOST} -u ${RABBITUSER} -p ${RABBITPASS} declare binding source="conversion" destination_type="queue" destination="complete" routing_key="complete" - - echo -n "goghvideo-test-${RANDOMID}" > $(results.namespace.path) - workspaces: - - name: kubeconfig-dir - workspace: dockerconfig - - name: prepare-helm-charts - runAfter: ["ephemeral-namespace"] - taskRef: - name: git-clone - params: - - name: url - value: $(params.git-helm-url) - workspaces: - - name: output - workspace: helm - - name: basic-auth - workspace: gitauth - - name: deploy-notification-app - runAfter: ["prepare-helm-charts"] - taskRef: - name: helm-upgrade-from-source - params: - - name: charts_dir - value: notification - - name: release_namespace - value: $(tasks.ephemeral-namespace.results.namespace) - - name: release_name - value: notification - - name: overwrite_values - value: "image.tag=$(params.revision)" - workspaces: - - name: source - workspace: helm - - name: deploy-upload-to-nextcloud-app - runAfter: ["prepare-helm-charts"] - taskRef: - name: helm-upgrade-from-source - params: - - name: charts_dir - value: upload-to-nextcloud - - name: release_namespace - value: $(tasks.ephemeral-namespace.results.namespace) - - name: release_name - value: upload-to-nextcloud - workspaces: - - name: source - workspace: helm - - name: deploy-conversion-engine-job - runAfter: ["prepare-helm-charts"] - taskRef: - name: helm-upgrade-from-source - params: - - name: charts_dir - value: conversion-engine - - name: release_namespace - value: $(tasks.ephemeral-namespace.results.namespace) - - name: release_name - value: conversion-engine - workspaces: - - name: source - workspace: helm - - name: get-filedrop-name - runAfter: ["deploy-conversion-engine-job", "deploy-upload-to-nextcloud-app", "deploy-notification-app"] - taskref: - name: openshift-ephemeral-namespace-client - kind: Task - params: - - name: VERSION - value: 4.11 - - name: SCRIPT - value: | - #!/usr/bin/env bash - wget "https://github.com/jqlang/jq/releases/download/jq-1.7/jq-linux-amd64" -O /usr/local/bin/jq - chmod +x /usr/local/bin/jq - INPUTSRC=$(oc -n $(tasks.ephemeral-namespace.results.namespace) get scaledjob/conversion-engine -o json | /usr/local/bin/jq -r '.spec.jobTargetRef.template.spec.initContainers[0].env[] | select(.name == "sourcefile").value') - if [[ -z "${INPUTSRC}" ]]; then exit 1; fi - echo -n "${INPUTSRC}" > $(results.filedrop.path) - workspaces: - - name: kubeconfig-dir - workspace: dockerconfig - - name: perform-e2e-test - runAfter: ["get-filedrop-name"] - taskref: - name: openshift-ephemeral-namespace-client - kind: Task - params: - - name: VERSION - value: 4.11 - - name: SCRIPT - value: | - #!/usr/bin/env bash - oc create -f - </dev/null - oc label namespace goghvideo-test-${RANDOMID} app=goghvideo-test - - x=0; until [[ -n $(oc -n goghvideo-test-${RANDOMID} get secret/goghvideo-openshift-builder-pull-secret 2>/dev/null) || $x -eq 10 ]]; do echo "Waiting for secret replication" && sleep 10 && ((x++)); done - if [[ "${x}" -eq 10 ]]; then exit 1; fi - - oc -n goghvideo-test-${RANDOMID} secrets link default goghvideo-openshift-builder-pull-secret --for=pull - - oc apply -f - </dev/null ) || $x -eq 10 ]]; do echo "Waiting for operator to deploy rabbit" && sleep 5 && ((x++)); done - if [[ "${x}" -eq 10 ]]; then exit 1; fi - - oc -n goghvideo-test-${RANDOMID} adm policy add-scc-to-user anyuid -z rabbitmq-server - - x=0; until [[ $(oc -n goghvideo-test-${RANDOMID} get sts rabbitmq-server -o jsonpath="{.status.readyReplicas}") -gt 0 || $x -eq 20 ]]; do echo "Waiting for Rabbit MQ to startup" && sleep 15 && ((x++)); done - if [[ "${x}" -eq 20 ]]; then exit 1; fi - oc -n goghvideo-test-${RANDOMID} create route edge --service=rabbitmq --port=15672 - - oc -n goghvideo-test-${RANDOMID} get pods - - RABBITHOST=$(oc -n goghvideo-test-${RANDOMID} get secret/rabbitmq-default-user -o template='{{ .data.host | base64decode }}') - RABBITUSER=$(oc -n goghvideo-test-${RANDOMID} get secret/rabbitmq-default-user -o template='{{ .data.username | base64decode }}') - RABBITPASS=$(oc -n goghvideo-test-${RANDOMID} get secret/rabbitmq-default-user -o template='{{ .data.password | base64decode }}') - oc -n goghvideo-test-${RANDOMID} create secret generic amqp --from-literal=url=amqp://${RABBITUSER}:${RABBITPASS}@${RABBITHOST}/ - - curl -O http://${RABBITHOST}:15672/cli/rabbitmqadmin - chmod +x rabbitmqadmin - - ./rabbitmqadmin -H ${RABBITHOST} -u ${RABBITUSER} -p ${RABBITPASS} declare exchange name=conversion type=topic - ./rabbitmqadmin -H ${RABBITHOST} -u ${RABBITUSER} -p ${RABBITPASS} declare queue name=transcode durable=true queue_type=quorum - ./rabbitmqadmin -H ${RABBITHOST} -u ${RABBITUSER} -p ${RABBITPASS} declare queue name=notification durable=true queue_type=quorum - ./rabbitmqadmin -H ${RABBITHOST} -u ${RABBITUSER} -p ${RABBITPASS} declare queue name=upload-nextcloud durable=true queue_type=quorum - ./rabbitmqadmin -H ${RABBITHOST} -u ${RABBITUSER} -p ${RABBITPASS} declare queue name=complete durable=true queue_type=quorum - - ./rabbitmqadmin -H ${RABBITHOST} -u ${RABBITUSER} -p ${RABBITPASS} declare binding source="conversion" destination_type="queue" destination="transcode" routing_key="transcode" - ./rabbitmqadmin -H ${RABBITHOST} -u ${RABBITUSER} -p ${RABBITPASS} declare binding source="conversion" destination_type="queue" destination="notification" routing_key="notification" - ./rabbitmqadmin -H ${RABBITHOST} -u ${RABBITUSER} -p ${RABBITPASS} declare binding source="conversion" destination_type="queue" destination="upload-nextcloud" routing_key="upload-nextcloud" - ./rabbitmqadmin -H ${RABBITHOST} -u ${RABBITUSER} -p ${RABBITPASS} declare binding source="conversion" destination_type="queue" destination="complete" routing_key="complete" - - echo -n "goghvideo-test-${RANDOMID}" > $(results.namespace.path) - workspaces: - - name: kubeconfig-dir - workspace: dockerconfig - - name: clone-helm-charts - runAfter: ["ephemeral-ns"] - taskRef: - name: git-clone - params: - - name: url - value: $(params.git-helm-url) - workspaces: - - name: output - workspace: helm - - name: ssh-directory - workspace: gitsshauth - - name: deploy-upload-to-nextcloud-testver - runAfter: ["clone-helm-charts"] - taskRef: - name: helm-upgrade-from-source - params: - - name: charts_dir - value: upload-to-nextcloud - - name: release_namespace - value: $(tasks.ephemeral-ns.results.namespace) - - name: release_name - value: upload-to-nextcloud - - name: overwrite_values - value: "image.tag=v$(tasks.git-semver.results.version)" - workspaces: - - name: source - workspace: helm - - name: deploy-notification - runAfter: ["clone-helm-charts"] - taskRef: - name: helm-upgrade-from-source - params: - - name: charts_dir - value: notification - - name: release_namespace - value: $(tasks.ephemeral-ns.results.namespace) - - name: release_name - value: notification - workspaces: - - name: source - workspace: helm - - name: deploy-conversion-engine - runAfter: ["clone-helm-charts"] - taskRef: - name: helm-upgrade-from-source - params: - - name: charts_dir - value: conversion-engine - - name: release_namespace - value: $(tasks.ephemeral-ns.results.namespace) - - name: release_name - value: conversion-engine - workspaces: - - name: source - workspace: helm - - name: get-filedrop-name - runAfter: ["deploy-upload-to-nextcloud-testver", "deploy-conversion-engine", "deploy-notification"] - taskref: - name: openshift-ephemeral-namespace-client - kind: Task - params: - - name: VERSION - value: 4.11 - - name: SCRIPT - value: | - #!/usr/bin/env bash - wget "https://github.com/jqlang/jq/releases/download/jq-1.7/jq-linux-amd64" -O /usr/local/bin/jq - chmod +x /usr/local/bin/jq - INPUTSRC=$(oc -n $(tasks.ephemeral-ns.results.namespace) get scaledjob/conversion-engine -o json | /usr/local/bin/jq -r '.spec.jobTargetRef.template.spec.initContainers[0].env[] | select(.name == "sourcefile").value') - if [[ -z "${INPUTSRC}" ]]; then exit 1; fi - echo -n "${INPUTSRC}" > $(results.filedrop.path) - workspaces: - - name: kubeconfig-dir - workspace: dockerconfig - - name: perform-e2e-test - runAfter: ["get-filedrop-name"] - taskref: - name: openshift-ephemeral-namespace-client - kind: Task - params: - - name: VERSION - value: 4.11 - - name: SCRIPT - value: | - #!/usr/bin/env bash - oc create -f - < "$(results.imagetag.path)" diff --git a/tasks/git-semver.yaml b/tasks/git-semver.yaml deleted file mode 100644 index 3ae2304..0000000 --- a/tasks/git-semver.yaml +++ /dev/null @@ -1,36 +0,0 @@ -apiVersion: tekton.dev/v1beta1 -kind: Task -metadata: - name: git-semver - namespace: goghvideo-cicd-pipeline -spec: - params: - - name: gitrepositoryurl - type: string - - name: gitbranch - type: string - default: master - results: - - name: version - type: string - steps: - - name: clone-and-calculate-semver - image: quay01.ipa.endofday.com/goghvideo/gitversion:latest - env: - - name: PARAM_REPO - value: $(params.gitrepositoryurl) - - name: PARAM_BRANCH - value: $(params.gitbranch) - script: | - #!/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 /overrideconfig commit-message-incrementing=MergeMessageOnly /showvariable MajorMinorPatch /verbosity quiet) - echo -n ${SEMVER} > $(results.version.path) - exit 0 - securityContext: - runAsNonRoot: true - runAsUser: 65532 - workspaces: - - name: repo - - name: gitauth diff --git a/tasks/gitea-create-release.yaml b/tasks/gitea-create-release.yaml deleted file mode 100644 index 1d8f659..0000000 --- a/tasks/gitea-create-release.yaml +++ /dev/null @@ -1,125 +0,0 @@ -apiVersion: tekton.dev/v1 -kind: Task -metadata: - name: gitea-create-release - namespace: goghvideo-cicd-pipeline -spec: - description: |- - This task will merge a PR and delete the branch. - params: - - - name: GITEA_HOST_URL - description: | - The Gitea host, e.g: git.yourcompany.com. Can include port. - type: string - - - name: GITEA_HTTPS_OR_HTTP - default: https - description: | - If we should connect with HTTP or HTTPS. Use "http" or "https" here. - type: string - - - name: API_PATH_PREFIX - default: /api/v1 - description: | - The API path prefix of Gitea, default: /api/v1 - type: string - - - name: REPO_FULL_NAME - description: | - The Gitea repository full name, e.g.: tektoncd/catalog - type: string - - - name: GITEA_TOKEN_SECRET_NAME - default: gitea - description: | - The name of the kubernetes secret that contains the Gitea token, default: gitea - type: string - - - name: GITEA_TOKEN_SECRET_KEY - default: token - description: | - The key within the kubernetes secret that contains the Gitea token, default: token - type: string - - - name: IMAGE - default: python:3.10.1-alpine3.15@sha256:affe0faa14e7553fc570beec3864e74b5e36f8c19b2bb49ae8ba79c0e9e7236e - description: | - Image providing the python binary which this task uses. - type: string - - - name: TITLE - description: Main title of release - type: string - - - name: TAG - description: Version tag - type: string - - - name: SHEBANG - default: /usr/bin/env python - description: | - Python path. Depends on the image. - type: string - - - name: SHA - description: | - The SHA of the merge commit - type: string - - steps: - - image: $(params.IMAGE) - name: create-git-release - script: | - #!$(params.SHEBANG) - - """This script will create a git release tag""" - - import json - import sys - import http.client - - gitea_token = open("/etc/gitea-set-status/$(params.GITEA_TOKEN_SECRET_KEY)", "r").read() - - merge_url = "$(params.API_PATH_PREFIX)" + "/repos/$(params.REPO_FULL_NAME)/" + \ - "releases" - - data = { - "name": "$(params.TITLE)", - "tag_name": "$(params.TAG)", - "target_commitish": "$(params.SHA)" - } - print("Sending this data to Gitea: ") - print(data) - - authHeader = "token " + gitea_token - - if "$(params.GITEA_HTTPS_OR_HTTP)" == "https": - conn = http.client.HTTPSConnection("$(params.GITEA_HOST_URL)") - else: - conn = http.client.HTTPConnection("$(params.GITEA_HOST_URL)") - - conn.request( - "POST", - merge_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("Create release completed on $(params.REPO_FULL_NAME)") - volumeMounts: - - mountPath: /etc/gitea-set-status - name: giteatoken - volumes: - - name: giteatoken - secret: - secretName: $(params.GITEA_TOKEN_SECRET_NAME) diff --git a/tasks/gitea-merge-pr.yaml b/tasks/gitea-merge-pr.yaml deleted file mode 100644 index 0e72c9e..0000000 --- a/tasks/gitea-merge-pr.yaml +++ /dev/null @@ -1,132 +0,0 @@ -apiVersion: tekton.dev/v1 -kind: Task -metadata: - name: gitea-merge-pr - namespace: goghvideo-cicd-pipeline -spec: - description: |- - This task will merge a PR and delete the branch. - params: - - description: | - The Gitea host, e.g: git.yourcompany.com. Can include port. - name: GITEA_HOST_URL - type: string - - default: https - description: | - If we should connect with HTTP or HTTPS. Use "http" or "https" here. - name: GITEA_HTTPS_OR_HTTP - type: string - - default: /api/v1 - description: | - The API path prefix of Gitea, default: /api/v1 - name: API_PATH_PREFIX - type: string - - description: | - The Gitea repository full name, e.g.: tektoncd/catalog - name: REPO_FULL_NAME - type: string - - default: gitea - description: | - The name of the kubernetes secret that contains the Gitea token, default: gitea - name: GITEA_TOKEN_SECRET_NAME - type: string - - default: token - description: | - The key within the kubernetes secret that contains the Gitea token, default: token - name: GITEA_TOKEN_SECRET_KEY - type: string - - description: | - Merge Index Number - name: INDEX - type: string - - description: | - The target URL to associate with this status. This URL will be linked - from the Gitea UI to allow users to easily see the source of the - status. - name: TARGET_URL - type: string - - description: | - A short description of the status. - name: DESCRIPTION - type: string - - default: continuous-integration/tekton - description: | - The Gitea context, A string label to differentiate this status from - the status of other systems. ie: "continuous-integration/tekton" - name: CONTEXT - type: string - - description: | - The merge message field - name: MERGETYPE - type: string - - default: python:3.10.1-alpine3.15@sha256:affe0faa14e7553fc570beec3864e74b5e36f8c19b2bb49ae8ba79c0e9e7236e - description: | - Image providing the python binary which this task uses. - name: IMAGE - type: string - - default: true - description: | - Delete the branch after merge - name: DELETEBRANCH - type: string - - default: /usr/bin/env python - description: | - Python path. Depends on the image. - name: SHEBANG - type: string - steps: - - image: $(params.IMAGE) - name: merge-pull-request - script: | - #!$(params.SHEBANG) - - """This script will set the CI status on a Gitea commit""" - - import json - import sys - import http.client - - gitea_token = open("/etc/gitea-set-status/$(params.GITEA_TOKEN_SECRET_KEY)", "r").read() - - merge_url = "$(params.API_PATH_PREFIX)" + "/repos/$(params.REPO_FULL_NAME)/" + \ - "pulls/$(params.INDEX)/merge" - - data = { - "Do": "$(params.MERGETYPE)", - "MergeMessageField": "$(params.DESCRIPTION)", - "MergeTitleField": "$(params.CONTEXT)" - } - print("Sending this data to Gitea: ") - print(data) - - authHeader = "token " + gitea_token - - if "$(params.GITEA_HTTPS_OR_HTTP)" == "https": - conn = http.client.HTTPSConnection("$(params.GITEA_HOST_URL)") - else: - conn = http.client.HTTPConnection("$(params.GITEA_HOST_URL)") - - conn.request( - "POST", - merge_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 merge completed on $(params.REPO_FULL_NAME)") - volumeMounts: - - mountPath: /etc/gitea-set-status - name: giteatoken - volumes: - - name: giteatoken - secret: - secretName: $(params.GITEA_TOKEN_SECRET_NAME) diff --git a/tasks/gitea-set-status.yaml b/tasks/gitea-set-status.yaml deleted file mode 100644 index 4754aea..0000000 --- a/tasks/gitea-set-status.yaml +++ /dev/null @@ -1,76 +0,0 @@ -apiVersion: tekton.dev/v1 -kind: Task -metadata: - name: gitea-set-status - namespace: goghvideo-cicd-pipeline -spec: - description: |- - 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 - steps: - - 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""" - - import json - import sys - import http.client - - gitea_token = open("$(workspaces.gitauth.path)/password", "r").read() - - 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) - - authHeader = "token " + gitea_token - - 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") - workspaces: - - name: gitauth - diff --git a/tasks/golangci-lint.yaml b/tasks/golangci-lint.yaml deleted file mode 100644 index 735a027..0000000 --- a/tasks/golangci-lint.yaml +++ /dev/null @@ -1,81 +0,0 @@ -apiVersion: tekton.dev/v1 -kind: Task -metadata: - annotations: - tekton.dev/categories: Code Quality - tekton.dev/displayName: golangci lint - tekton.dev/pipelines.minVersion: 0.12.1 - tekton.dev/platforms: linux/amd64 - tekton.dev/tags: lint - labels: - app.kubernetes.io/version: "0.2" - name: golangci-lint - namespace: goghvideo-cicd-pipeline -spec: - description: This Task is Golang task to validate Go projects. - params: - - description: base package (and its children) under validation - name: package - type: string - - default: . - description: path to the directory to use as context. - name: context - type: string - - default: --verbose - description: flags to use for the test command - name: flags - type: string - - default: v1.39 - description: golangci-lint version to use - name: version - type: string - - default: linux - description: running operating system target - name: GOOS - type: string - - default: amd64 - description: running architecture target - name: GOARCH - type: string - - default: auto - description: value of module support - name: GO111MODULE - type: string - - default: "" - description: Go caching directory path - name: GOCACHE - type: string - - default: "" - description: Go mod caching directory path - name: GOMODCACHE - type: string - - default: "" - description: golangci-lint cache path - name: GOLANGCI_LINT_CACHE - type: string - steps: - - env: - - name: GOPATH - value: /workspace - - name: GOOS - value: $(params.GOOS) - - name: GOARCH - value: $(params.GOARCH) - - name: GO111MODULE - value: $(params.GO111MODULE) - - name: GOCACHE - value: $(params.GOCACHE) - - name: GOMODCACHE - value: $(params.GOMODCACHE) - - name: GOLANGCI_LINT_CACHE - value: $(params.GOLANGCI_LINT_CACHE) - image: quay01.ipa.endofday.com/goghvideo/golang-lint:$(params.version) - name: lint - script: | - golangci-lint run $(params.flags) - workingDir: $(workspaces.source.path)/$(params.context) - workspaces: -# - mountPath: /workspace/src/$(params.package) -# name: source - - name: source - diff --git a/tasks/helm-upgrade-from-source.yaml b/tasks/helm-upgrade-from-source.yaml deleted file mode 100644 index 7ad5ddf..0000000 --- a/tasks/helm-upgrade-from-source.yaml +++ /dev/null @@ -1,60 +0,0 @@ -apiVersion: tekton.dev/v1 -kind: Task -metadata: - annotations: - tekton.dev/categories: Deployment - tekton.dev/pipelines.minVersion: 0.12.1 - tekton.dev/platforms: linux/amd64,linux/s390x,linux/ppc64le,linux/arm64 - tekton.dev/tags: helm - labels: - app.kubernetes.io/version: "0.3" - hub.tekton.dev/catalog: tekton - name: helm-upgrade-from-source - namespace: goghvideo-cicd-pipeline -spec: - description: These tasks will install / upgrade a helm chart into your Kubernetes - / OpenShift Cluster using Helm - params: - - description: The directory in source that contains the helm chart - name: charts_dir - type: string - - default: v1.0.0 - description: The helm release version in semantic versioning format - name: release_version - type: string - - default: helm-release - description: The helm release name - name: release_name - type: string - - default: "" - description: The helm release namespace - name: release_namespace - type: string - - default: "" - description: 'Specify the values you want to overwrite, comma separated: autoscaling.enabled=true,replicas=1' - name: overwrite_values - type: string - - default: values.yaml - description: The values file to be used - name: values_file - type: string - - default: docker.io/lachlanevenson/k8s-helm@sha256:5c792f29950b388de24e7448d378881f68b3df73a7b30769a6aa861061fd08ae - description: helm image to be used - name: helm_image - type: string - - default: "" - description: Extra parameters passed for the helm upgrade command - name: upgrade_extra_params - type: string - steps: - - image: $(params.helm_image) - name: upgrade - script: | - echo current installed helm releases - helm list --namespace "$(params.release_namespace)" - - echo installing helm chart... - helm upgrade --install --wait --values "$(params.charts_dir)/$(params.values_file)" --namespace "$(params.release_namespace)" --version "$(params.release_version)" "$(params.release_name)" "$(params.charts_dir)" --debug --set "$(params.overwrite_values)" $(params.upgrade_extra_params) - workingDir: /workspace/source - workspaces: - - name: source diff --git a/tasks/openshift-ephemeral-namespace-client.yaml b/tasks/openshift-ephemeral-namespace-client.yaml deleted file mode 100644 index 28b142b..0000000 --- a/tasks/openshift-ephemeral-namespace-client.yaml +++ /dev/null @@ -1,48 +0,0 @@ -apiVersion: tekton.dev/v1 -kind: Task -metadata: - name: openshift-ephemeral-namespace-client - namespace: goghvideo-cicd-pipeline -spec: - description: |- - This task runs commands against the cluster provided by user and if not provided then where the Task is being executed. - OpenShift is a Kubernetes distribution from Red Hat which provides oc, the OpenShift CLI that complements kubectl for simplifying deployment and configuration applications on OpenShift. - params: - - default: oc help - description: The OpenShift CLI arguments to run - name: SCRIPT - type: string - - default: "4.7" - description: The OpenShift Version to use - name: VERSION - type: string - results: - - name: namespace - type: string - description: The namespace which was created - - name: filedrop - type: string - description: The name of the filedrop for testing - steps: - - image: quay.io/openshift/origin-cli:$(params.VERSION) - name: oc - script: | - #!/usr/bin/env bash - - [[ "$(workspaces.manifest-dir.bound)" == "true" ]] && \ - cd $(workspaces.manifest-dir.path) - - [[ "$(workspaces.kubeconfig-dir.bound)" == "true" ]] && \ - [[ -f $(workspaces.kubeconfig-dir.path)/kubeconfig ]] && \ - export KUBECONFIG=$(workspaces.kubeconfig-dir.path)/kubeconfig - - $(params.SCRIPT) - workspaces: - - description: The workspace which contains kubernetes manifests which we want to - apply on the cluster. - name: manifest-dir - optional: true - - description: The workspace which contains the the kubeconfig file if in case we - want to run the oc command on another cluster. - name: kubeconfig-dir - optional: true diff --git a/tasks/promote-version.yaml b/tasks/promote-version.yaml deleted file mode 100644 index ea11148..0000000 --- a/tasks/promote-version.yaml +++ /dev/null @@ -1,234 +0,0 @@ -apiVersion: tekton.dev/v1beta1 -kind: Task -metadata: - name: promote - namespace: goghvideo-cicd-pipeline -spec: - params: - - name: ref - description: The git branch reference - type: string - - name: repofullname - type: string - - name: revision - description: git unique head commit id - type: string - - name: semver - description: Symantic version number - type: string - - name: author - type: string - - name: email - type: string - - name: appname - type: string - - name: index - type: string - - name: githost - type: string - - 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") - print("URL: %s" % (existing_tag)) - - 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 information 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)" - print("URL: %s" % (tag_url)) - print("Manifest SHA: %s" % (manifest_digest)) - - 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) - script: | - #!/bin/sh - export USERNAME=$(cat $(workspaces.gitauth.path)/username) - export PASSWORD=$(cat $(workspaces.gitauth.path)/password) - - git config --global --add safe.directory $(workspaces.source.path)/$(params.appname) - git config --global user.name "$(params.author)" - git config --global user.email "$(params.email)" - - HOSTPATH=$(git remote get-url origin | sed 's_https://__') - git remote set-url origin https://${USERNAME}:${PASSWORD}@${HOSTPATH} - - git fetch --all --tags >/dev/null 2>&1 - #git log main..$(params.ref) --oneline --no-merges --decorate > release-v$(params.semver).md 2>/dev/null - #git add release-v$(params.semver).md - #git commit -m "Including release notes" - git tag -a v$(params.semver) -m "Upgrade to v$(params.semver)" - git push origin $(params.ref) --tags - - name: get-tag-data - image: $(params.quayhost)/goghvideo/python:3-alpine - script: | - #!/usr/bin/env python - - """This script will get the Gitea tag status""" - - import json - import sys - import http.client - - gitea_token = open("$(workspaces.gitauth.path)/password", "r").read() - - merge_url = "https://$(params.githost)/api/v1" + "/repos/$(params.repofullname)/" + \ - "commits/v$(params.semver)/status" - - authHeader = "token " + gitea_token - - conn = http.client.HTTPSConnection("$(params.githost)") - - conn.request( - "GET", - merge_url, - 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 tag verification completed on $(params.githost)") - - - name: merge-pull-request - image: $(params.quayhost)/goghvideo/python:3-alpine - script: | - #!/usr/bin/env python - - """This script will set the CI status on a Gitea commit""" - - import json - import sys - import http.client - - gitea_token = open("$(workspaces.gitauth.path)/password", "r").read() - - merge_url = "https://$(params.githost)/api/v1" + "/repos/$(params.repofullname)/" + \ - "pulls/$(params.index)/merge" - - data = { - "Do": "merge" - } - print("Sending this data to Gitea: ") - print(data) - - authHeader = "token " + gitea_token - - conn = http.client.HTTPSConnection("$(params.githost)") - - conn.request( - "POST", - merge_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 merge completed on $(params.githost)") - - name: update-helm-chart - image: $(params.quayhost)/goghvideo/bitnami-git:latest - workingDir: $(workspaces.helm.path) - script: | - #!/bin/sh - export USERNAME=$(cat $(workspaces.gitauth.path)/username) - export PASSWORD=$(cat $(workspaces.gitauth.path)/password) - - git config --global --add safe.directory $(workspaces.helm.path) - git config --global user.name "$(params.author)" - git config --global user.email "$(params.email)" - - HOSTPATH=$(git remote get-url origin | sed 's_https://__') - git remote set-url origin https://${USERNAME}:${PASSWORD}@${HOSTPATH} - git fetch - git checkout main && git pull - - $(workspaces.utilities.path)/yq -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 - workspaces: - - name: source - - name: gitauth - - name: quayauth - - name: utilities - - name: helm diff --git a/tasks/s2i-go-debug.yaml b/tasks/s2i-go-debug.yaml deleted file mode 100644 index 61ed1b8..0000000 --- a/tasks/s2i-go-debug.yaml +++ /dev/null @@ -1,107 +0,0 @@ -apiVersion: tekton.dev/v1beta1 -kind: Task -metadata: - name: s2i-go-debug - namespace: goghvideo-cicd-pipeline -spec: - description: s2i-go task clones a Git repository and builds and pushes a container - image using S2I and a Go builder image. - params: - - default: latest - description: The tag of go imagestream for go version - name: VERSION - type: string - - default: . - description: The location of the path to run s2i from. - name: PATH_CONTEXT - type: string - - default: "true" - description: Verify the TLS on the registry endpoint (for push/pull to a non-TLS - registry) - name: TLSVERIFY - type: string - - description: Location of the repo where image has to be pushed - name: IMAGE - type: string - - default: registry.redhat.io/rhel8/buildah@sha256:00795fafdab9bbaa22cd29d1faa1a01e604e4884a2c935c1bf8e3d1f0ad1c084 - description: The location of the buildah builder image. - name: BUILDER_IMAGE - type: string - - default: "false" - description: Skip pushing the built image - name: SKIP_PUSH - type: string - - description: Environment variables to set during _build-time_. - name: ENV_VARS - type: array - results: - - description: Digest of the image just built. - name: IMAGE_DIGEST - type: string - steps: - - args: - - $(params.ENV_VARS[*]) - env: - - name: HOME - value: /tekton/home - image: registry.redhat.io/ocp-tools-4-tech-preview/source-to-image-rhel8@sha256:98d8cb3a255641ca6a1bce854e5e2460c20de9fb9b28e3cc67eb459f122873dd - name: generate - script: | - echo "Processing Build Environment Variables" - echo "" > /env-vars/env-file - for var in "$@" - do - echo "$var" >> /env-vars/env-file - done - - echo "Outputting Generated /env-vars/env-file" - cat /env-vars/env-file - - s2i build $(params.PATH_CONTEXT) image-registry.openshift-image-registry.svc:5000/openshift/golang:$(params.VERSION) \ - --as-dockerfile /gen-source/Dockerfile.gen --environment-file /env-vars/env-file - - echo "Outputting Generated /gen-source/Dockerfile.gen file" - cat /gen-source/Dockerfile.gen - volumeMounts: - - mountPath: /gen-source - name: gen-source - - mountPath: /env-vars - name: env-vars - workingDir: $(workspaces.source.path) - - image: $(params.BUILDER_IMAGE) - name: build-and-push - script: | - find . -type f -ls - - buildah --log-level=info bud --storage-driver=vfs --tls-verify=$(params.TLSVERIFY) \ - --layers -f /gen-source/Dockerfile.gen -t $(params.IMAGE) . - - [[ "$(params.SKIP_PUSH)" == "true" ]] && echo "Push skipped" && exit 0 - [[ "$(workspaces.dockerconfig.bound)" == "true" ]] && export DOCKER_CONFIG="$(workspaces.dockerconfig.path)" - buildah push --storage-driver=vfs --tls-verify=$(params.TLSVERIFY) \ - --digestfile $(workspaces.source.path)/image-digest $(params.IMAGE) \ - docker://$(params.IMAGE) - - cat $(workspaces.source.path)/image-digest | tee /tekton/results/IMAGE_DIGEST - securityContext: - capabilities: - add: - - SETFCAP - volumeMounts: - - mountPath: /var/lib/containers - name: varlibcontainers - - mountPath: /gen-source - name: gen-source - workingDir: /gen-source - volumes: - - name: varlibcontainers - - name: gen-source - - name: env-vars - workspaces: - - mountPath: /workspace/source - name: source - - description: An optional workspace that allows providing a .docker/config.json - file for Buildah to access the container registry. The file should be placed - at the root of the Workspace with name config.json. - name: dockerconfig - optional: true diff --git a/triggerbinding/gitea-oriig-binding.yaml b/triggerbinding/gitea-oriig-binding.yaml deleted file mode 100644 index cec9b3f..0000000 --- a/triggerbinding/gitea-oriig-binding.yaml +++ /dev/null @@ -1,19 +0,0 @@ -apiVersion: triggers.tekton.dev/v1beta1 -kind: TriggerBinding -metadata: - name: gitea-binding - namespace: goghvideo-cicd-pipeline -spec: - params: - - name: gitrepositoryurl - value: $(body.repository.clone_url) - - name: gitcommitsha - value: $(body.pull_request.head.sha) - - name: gitfullreponame - value: $(body.pull_request.base.repo.full_name) - - name: gitbranch - value: $(body.pull_request.head.ref) - - name: gitreponame - value: $(body.pull_request.base.repo.name) - - name: gitprindex - value: $(body.pull_request.number) diff --git a/triggerbinding/gitea-pr-webhook.yaml b/triggerbinding/gitea-pr-webhook.yaml deleted file mode 100644 index b8d796b..0000000 --- a/triggerbinding/gitea-pr-webhook.yaml +++ /dev/null @@ -1,25 +0,0 @@ -apiVersion: triggers.tekton.dev/v1beta1 -kind: TriggerBinding -metadata: - name: gitea-pullrequest-binding - namespace: goghvideo-cicd-pipeline -spec: - params: - - name: ref - value: $(body.pull_request.head.ref) - - name: revision - value: $(body.pull_request.head.sha) - - name: repourl - value: $(body.pull_request.head.repo.clone_url) - - name: reponame - value: $(body.pull_request.head.repo.name) - - name: repofullname - value: $(body.pull_request.head.repo.full_name) - - name: message - value: $(body.pull_request.title) - - name: author - value: $(body.pull_request.user.login) - - name: email - value: $(body.pull_request.user.email) - - name: index - value: $(body.pull_request.number) diff --git a/triggertemplate/conversionengine-template.yaml b/triggertemplate/conversionengine-template.yaml deleted file mode 100644 index fcacdf4..0000000 --- a/triggertemplate/conversionengine-template.yaml +++ /dev/null @@ -1,88 +0,0 @@ -apiVersion: triggers.tekton.dev/v1beta1 -kind: TriggerTemplate -metadata: - name: conversionengine-template - namespace: goghvideo-cicd-pipeline -spec: - params: - - name: gitrepositoryurl - description: The git repository url - - name: gitfullreponame - description: The org and repo name - - name: gitreponame - description: The name of the repo - - name: gitbranch - description: Branch to act on - - name: gitcommitsha - description: The SHA head - - name: gitprindex - description: The pull request reference - resourcetemplates: - - apiVersion: tekton.dev/v1beta1 - kind: PipelineRun - metadata: - generateName: goghvideo-conversionengine- - spec: - pipelineRef: - name: ce-buildtest - serviceAccountName: pipeline - params: - - name: git-repo-url - value: $(tt.params.gitrepositoryurl) - - name: git-repo-full-name - value: $(tt.params.gitfullreponame) - - name: git-branch - value: $(tt.params.gitbranch) - - name: git-commit-sha - value: $(tt.params.gitcommitsha) - - name: git-pr-index - value: $(tt.params.gitprindex) - - name: verbose - value: true - - name: lint-package - value: git.endofday.com/goghvideo/conversion-engine - - name: lint-context - value: $(tt.params.gitreponame)/src - - name: image - value: quay01.ipa.endofday.com/goghvideo/conversion-engine - - name: s2i-builder-image - value: quay01.ipa.endofday.com/goghvideo/golang-s2i-buildah:v1 - - name: git-token-secret-name - value: git-http-credentials - - name: git-token-secret-key - value: password - - name: git-merge-type - value: merge - - name: git-merge-delete-branch - value: True - - name: git-helm-url - value: git@git-ssh.ipa.endofday.com:goghvideo/helm.git - workspaces: - - name: source - volumeClaimTemplate: - spec: - accessModes: - - ReadWriteMany - resources: - requests: - storage: 1Gi - storageClassName: nfs-client - - name: gitauth - secret: - secretName: git-http-credentials - - name: gitsshauth - secret: - secretName: git-credentials - - name: dockerconfig - secret: - secretName: goghvideo-container-registry-push - - name: helm - volumeClaimTemplate: - spec: - accessModes: - - ReadWriteMany - resources: - requests: - storage: 1Gi - storageClassName: nfs-client - diff --git a/triggertemplate/e2e-test.yaml b/triggertemplate/e2e-test.yaml deleted file mode 100644 index 8cadcdf..0000000 --- a/triggertemplate/e2e-test.yaml +++ /dev/null @@ -1,88 +0,0 @@ -apiVersion: triggers.tekton.dev/v1beta1 -kind: TriggerTemplate -metadata: - name: e2etest-template - namespace: goghvideo-cicd-pipeline -spec: - params: - - name: gitrepositoryurl - description: The git repository url - - name: gitfullreponame - description: The org and repo name - - name: gitreponame - description: The name of the repo - - name: gitbranch - description: Branch to act on - - name: gitcommitsha - description: The SHA head - - name: gitprindex - description: The pull request reference - resourcetemplates: - - apiVersion: tekton.dev/v1beta1 - kind: PipelineRun - metadata: - generateName: goghvideo-e2etest- - spec: - pipelineRef: - name: e2etest-buildtest - serviceAccountName: pipeline - params: - - name: git-repo-url - value: $(tt.params.gitrepositoryurl) - - name: git-repo-full-name - value: $(tt.params.gitfullreponame) - - name: git-branch - value: $(tt.params.gitbranch) - - name: git-commit-sha - value: $(tt.params.gitcommitsha) - - name: git-pr-index - value: $(tt.params.gitprindex) - - name: verbose - value: true - - name: lint-package - value: git.endofday.com/goghvideo/e2e-test - - name: lint-context - value: $(tt.params.gitreponame)/src - - name: image - value: quay01.ipa.endofday.com/goghvideo/e2e-test - - name: s2i-builder-image - value: quay01.ipa.endofday.com/goghvideo/golang-s2i-buildah:v1 - - name: git-token-secret-name - value: git-http-credentials - - name: git-token-secret-key - value: password - - name: git-merge-type - value: merge - - name: git-merge-delete-branch - value: True - - name: git-helm-url - value: git@git-ssh.ipa.endofday.com:goghvideo/helm.git - workspaces: - - name: source - volumeClaimTemplate: - spec: - accessModes: - - ReadWriteMany - resources: - requests: - storage: 1Gi - storageClassName: nfs-client - - name: gitauth - secret: - secretName: git-http-credentials - - name: gitsshauth - secret: - secretName: git-credentials - - name: dockerconfig - secret: - secretName: goghvideo-container-registry-push - - name: helm - volumeClaimTemplate: - spec: - accessModes: - - ReadWriteMany - resources: - requests: - storage: 1Gi - storageClassName: nfs-client - diff --git a/triggertemplate/notification-featurebranch.yaml b/triggertemplate/notification-featurebranch.yaml deleted file mode 100644 index 8bb91a4..0000000 --- a/triggertemplate/notification-featurebranch.yaml +++ /dev/null @@ -1,103 +0,0 @@ -apiVersion: triggers.tekton.dev/v1beta1 -kind: TriggerTemplate -metadata: - name: notification-trigger-template - namespace: goghvideo-cicd-pipeline -spec: - params: - - name: ref - description: git reference or branch name - - name: revision - description: The revision of your git repository - - name: repourl - description: The url of your git repository - - name: reponame - description: the name if your git repository - - name: repofullname - description: The full name of your git repository - - name: message - description: commit message - - name: author - description: commit author username - - name: email - description: commit author email - - name: index - description: pull request index number - resourcetemplates: - - apiVersion: tekton.dev/v1beta1 - kind: PipelineRun - metadata: - generateName: $(tt.params.reponame)-$(tt.params.author)- - namespace: goghvideo-cicd-pipeline - labels: - webhooks.tekton.dev/repo: $(tt.params.reponame) - webhooks.tekton.dev/author: $(tt.params.author) -# annotations: -# argocd.argoproj.io/compare-options: IgnoreExtraneous - spec: - serviceAccountName: pipeline - workspaces: - - name: source - volumeClaimTemplate: - spec: - accessModes: - - ReadWriteMany - resources: - requests: - storage: 1Gi - storageClassName: nfs-client - - name: gitauth - secret: - secretName: git-http-credentials - - name: gitsshauth - secret: - secretName: git-credentials - - name: dockerconfig - secret: - secretName: goghvideo-container-registry-push - - name: quayauth - secret: - secretName: quay-credentials - - name: helm - volumeClaimTemplate: - spec: - accessModes: - - ReadWriteMany - resources: - 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) - - name: revision - value: $(tt.params.revision) - - name: author - value: $(tt.params.author) - - name: email - value: $(tt.params.email) - - name: message - value: $(tt.params.message) - - name: repourl - value: $(tt.params.repourl) - - name: repofullname - value: $(tt.params.repofullname) - - name: git-helm-url - value: https://git.endofday.com/goghvideo/helm.git - - name: index - value: $(tt.params.index) - - name: githost - value: "git.endofday.com" - - name: quayhost - value: "quay01.ipa.endofday.com" - pipelineRef: - name: notification diff --git a/triggertemplate/notification.yaml b/triggertemplate/notification.yaml deleted file mode 100644 index c482f6d..0000000 --- a/triggertemplate/notification.yaml +++ /dev/null @@ -1,88 +0,0 @@ -apiVersion: triggers.tekton.dev/v1beta1 -kind: TriggerTemplate -metadata: - name: notification-template - namespace: goghvideo-cicd-pipeline -spec: - params: - - name: gitrepositoryurl - description: The git repository url - - name: gitfullreponame - description: The org and repo name - - name: gitreponame - description: The name of the repo - - name: gitbranch - description: Branch to act on - - name: gitcommitsha - description: The SHA head - - name: gitprindex - description: The pull request reference - resourcetemplates: - - apiVersion: tekton.dev/v1beta1 - kind: PipelineRun - metadata: - generateName: goghvideo-notification- - spec: - pipelineRef: - name: notification-buildtest - serviceAccountName: pipeline - params: - - name: git-repo-url - value: $(tt.params.gitrepositoryurl) - - name: git-repo-full-name - value: $(tt.params.gitfullreponame) - - name: git-branch - value: $(tt.params.gitbranch) - - name: git-commit-sha - value: $(tt.params.gitcommitsha) - - name: git-pr-index - value: $(tt.params.gitprindex) - - name: verbose - value: true - - name: lint-package - value: git.endofday.com/goghvideo/notification - - name: lint-context - value: $(tt.params.gitreponame)/src - - name: image - value: quay01.ipa.endofday.com/goghvideo/notification - - name: s2i-builder-image - value: quay01.ipa.endofday.com/goghvideo/golang-s2i-buildah:v1 - - name: git-token-secret-name - value: git-http-credentials - - name: git-token-secret-key - value: password - - name: git-merge-type - value: merge - - name: git-merge-delete-branch - value: True - - name: git-helm-url - value: https://git.endofday.com/goghvideo/helm.git - workspaces: - - name: source - volumeClaimTemplate: - spec: - accessModes: - - ReadWriteMany - resources: - requests: - storage: 1Gi - storageClassName: nfs-client - - name: gitauth - secret: - secretName: git-http-credentials - - name: gitsshauth - secret: - secretName: git-credentials - - name: dockerconfig - secret: - secretName: goghvideo-container-registry-push - - name: helm - volumeClaimTemplate: - spec: - accessModes: - - ReadWriteMany - resources: - requests: - storage: 1Gi - storageClassName: nfs-client - diff --git a/triggertemplate/upload-to-nextcloud.yaml b/triggertemplate/upload-to-nextcloud.yaml deleted file mode 100644 index 1d4d486..0000000 --- a/triggertemplate/upload-to-nextcloud.yaml +++ /dev/null @@ -1,88 +0,0 @@ -apiVersion: triggers.tekton.dev/v1beta1 -kind: TriggerTemplate -metadata: - name: upload2nc-template - namespace: goghvideo-cicd-pipeline -spec: - params: - - name: gitrepositoryurl - description: The git repository url - - name: gitfullreponame - description: The org and repo name - - name: gitreponame - description: The name of the repo - - name: gitbranch - description: Branch to act on - - name: gitcommitsha - description: The SHA head - - name: gitprindex - description: The pull request reference - resourcetemplates: - - apiVersion: tekton.dev/v1beta1 - kind: PipelineRun - metadata: - generateName: goghvideo-upload2nc- - spec: - pipelineRef: - name: upload2nc-buildtest - serviceAccountName: pipeline - params: - - name: git-repo-url - value: $(tt.params.gitrepositoryurl) - - name: git-repo-full-name - value: $(tt.params.gitfullreponame) - - name: git-branch - value: $(tt.params.gitbranch) - - name: git-commit-sha - value: $(tt.params.gitcommitsha) - - name: git-pr-index - value: $(tt.params.gitprindex) - - name: verbose - value: true - - name: lint-package - value: git.endofday.com/goghvideo/upload-to-nextcloud - - name: lint-context - value: $(tt.params.gitreponame)/src - - name: image - value: quay01.ipa.endofday.com/goghvideo/upload-to-nextcloud - - name: s2i-builder-image - value: quay01.ipa.endofday.com/goghvideo/golang-s2i-buildah:v1 - - name: git-token-secret-name - value: git-http-credentials - - name: git-token-secret-key - value: password - - name: git-merge-type - value: merge - - name: git-merge-delete-branch - value: True - - name: git-helm-url - value: git@git-ssh.ipa.endofday.com:goghvideo/helm.git - workspaces: - - name: source - volumeClaimTemplate: - spec: - accessModes: - - ReadWriteMany - resources: - requests: - storage: 1Gi - storageClassName: nfs-client - - name: gitauth - secret: - secretName: git-http-credentials - - name: gitsshauth - secret: - secretName: git-credentials - - name: dockerconfig - secret: - secretName: goghvideo-container-registry-push - - name: helm - volumeClaimTemplate: - spec: - accessModes: - - ReadWriteMany - resources: - requests: - storage: 1Gi - storageClassName: nfs-client -