apiVersion: tekton.dev/v1beta1 kind: Pipeline metadata: name: notification-buildtest 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 - <