From fb1c94488dfe9609ea42f888cf3ad40d2268146e Mon Sep 17 00:00:00 2001 From: wuhuizuo Date: Wed, 25 Oct 2023 11:17:03 +0800 Subject: [PATCH] feat(apps/prod/tekton/configs): add task and triggers for auto sync OWNERS for hotfix branches (#737) * fix(apps/prod/tekton/configs/triggers/bindings): fix branch and tag bindings - tag creating event - branch creating event - branch pushing event Signed-off-by: wuhuizuo * Update apps/prod/tekton/configs/triggers/bindings/github-branch-create.yaml * feat(apps/prod/tekton/configs): add task and triggers for auto sync OWNERS for hotfix branches Automatically create pull requests when hot fix branch is created. Signed-off-by: wuhuizuo * Update apps/prod/tekton/configs/triggers/templates/branch-create-product-components-hotfix.yaml * Update apps/prod/tekton/configs/triggers/triggers/create-branch-product-components-hotfix.yaml * Update apps/prod/tekton/configs/triggers/triggers/create-branch-product-components-hotfix.yaml --------- Signed-off-by: wuhuizuo --- .../tasks/create-pr-to-sync-owners.yaml | 59 +++++++++++++++++++ .../tekton/configs/tasks/kustomization.yaml | 11 ++-- .../triggers/bindings/github-branch-push.yaml | 6 +- .../triggers/bindings/github-tag-create.yaml | 4 +- ...anch-create-product-components-hotfix.yaml | 38 ++++++++++++ .../triggers/templates/kustomization.yaml | 1 + ...eate-branch-product-components-hotfix.yaml | 39 ++++++++++++ .../triggers/triggers/kustomization.yaml | 1 + 8 files changed, 149 insertions(+), 10 deletions(-) create mode 100644 apps/prod/tekton/configs/tasks/create-pr-to-sync-owners.yaml create mode 100644 apps/prod/tekton/configs/triggers/templates/branch-create-product-components-hotfix.yaml create mode 100644 apps/prod/tekton/configs/triggers/triggers/create-branch-product-components-hotfix.yaml diff --git a/apps/prod/tekton/configs/tasks/create-pr-to-sync-owners.yaml b/apps/prod/tekton/configs/tasks/create-pr-to-sync-owners.yaml new file mode 100644 index 000000000..18c9f63fc --- /dev/null +++ b/apps/prod/tekton/configs/tasks/create-pr-to-sync-owners.yaml @@ -0,0 +1,59 @@ +apiVersion: tekton.dev/v1beta1 +kind: Task +metadata: + name: create-pr-to-sync-owners + labels: + app.kubernetes.io/version: "0.1" + annotations: + tekton.dev/pipelines.minVersion: "0.29.0" + tekton.dev/categories: Deno + tekton.dev/tags: deno + tekton.dev/displayName: "sync owners" + tekton.dev/platforms: "linux/amd64" +spec: + description: >- + Create pull request to sync `OWNERS`` file to github repository branch. + params: + - name: git-url + description: repository clone url + type: string + - name: branch + description: branch name + type: string + steps: + - name: clone-community-repo + image: bitnami/git:latest + workingDir: /workspace + script: | + git clone https://github.com/pingcap/community.git --branch master + - name: create-pull-request + image: denoland/deno:1.37.2 + workingDir: /workspace/community + script: | + owner=$(basename $(dirname $(params.git-url))) + repo=$(basename $(params.git-url) .git) + + echo "url=$(params.git-url)" + echo "branch=$(params.branch)" + echo "owner=${owner}" + echo "repo=${repo}" + + deno run --allow-all https://github.com/PingCAP-QE/ci/raw/main/scripts/pingcap/community/update-prow-owners.ts \ + --force \ + --owner=${owner} \ + --github_private_token=$(cat /etc/github/token) \ + --only_repo.repo=${repo} \ + --only_repo.branch=$(params.branch) \ + --inputs=teams/diagnostic/membership.json \ + --inputs=teams/docs/membership.json \ + --inputs=teams/tiunimanager/membership.json \ + --inputs=teams/tidb/membership.json \ + --inputs=teams/tiflash/membership.json \ + --inputs=teams/tiup/membership.json \ + --inputs=teams/kubernetes/membership.json \ + --inputs=teams/migration/membership.json \ + --inputs=teams/bigdata/membership.json + workspaces: + - name: github + description: Must includes a key `token` + mountPath: /etc/github diff --git a/apps/prod/tekton/configs/tasks/kustomization.yaml b/apps/prod/tekton/configs/tasks/kustomization.yaml index 8b768c803..4fad5cb7a 100644 --- a/apps/prod/tekton/configs/tasks/kustomization.yaml +++ b/apps/prod/tekton/configs/tasks/kustomization.yaml @@ -2,14 +2,15 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization namespace: ee-cd resources: + - create-pr-to-sync-owners.yaml + - echo.yaml - git-clone.yaml - github-set-status.yaml - golang-build.yaml - golang-test.yaml - - kubernetes-actions.yaml - - echo.yaml - - ko-test-infra.yaml - - multi-arch-image-push.yaml # multi-arch-image-push task - - https://raw.githubusercontent.com/tektoncd/catalog/main/task/ko/0.1/ko.yaml # ko task - https://raw.githubusercontent.com/tektoncd/catalog/main/task/kaniko/0.6/kaniko.yaml # kaniko task + - https://raw.githubusercontent.com/tektoncd/catalog/main/task/ko/0.1/ko.yaml # ko task - https://raw.githubusercontent.com/tektoncd/catalog/main/task/tkn/0.4/tkn.yaml + - ko-test-infra.yaml + - kubernetes-actions.yaml + - multi-arch-image-push.yaml # multi-arch-image-push task diff --git a/apps/prod/tekton/configs/triggers/bindings/github-branch-push.yaml b/apps/prod/tekton/configs/triggers/bindings/github-branch-push.yaml index 5050159df..9cc188547 100644 --- a/apps/prod/tekton/configs/triggers/bindings/github-branch-push.yaml +++ b/apps/prod/tekton/configs/triggers/bindings/github-branch-push.yaml @@ -5,8 +5,8 @@ metadata: spec: params: - name: git-url - value: $(body.repository.url) + value: $(body.repository.clone_url) - name: git-revision - value: $(body.head_commit.id) + value: $(body.after) - name: git-ref - value: $(body.ref) + value: $(body.ref.substringAfter('refs/heads/')) # "refs/heads/main" => "main" diff --git a/apps/prod/tekton/configs/triggers/bindings/github-tag-create.yaml b/apps/prod/tekton/configs/triggers/bindings/github-tag-create.yaml index 493d470ea..f818e9276 100644 --- a/apps/prod/tekton/configs/triggers/bindings/github-tag-create.yaml +++ b/apps/prod/tekton/configs/triggers/bindings/github-tag-create.yaml @@ -5,8 +5,8 @@ metadata: spec: params: - name: git-url - value: $(body.repository.url) + value: $(body.repository.clone_url) - name: git-ref value: $(body.ref) - name: git-tag - value: $(body.ref) + value: $(body.ref.substringAfter('refs/tags/')) # "refs/tags/vX.Y.Z" => "vX.Y.Z" diff --git a/apps/prod/tekton/configs/triggers/templates/branch-create-product-components-hotfix.yaml b/apps/prod/tekton/configs/triggers/templates/branch-create-product-components-hotfix.yaml new file mode 100644 index 000000000..73caecae9 --- /dev/null +++ b/apps/prod/tekton/configs/triggers/templates/branch-create-product-components-hotfix.yaml @@ -0,0 +1,38 @@ +apiVersion: triggers.tekton.dev/v1beta1 +kind: TriggerTemplate +metadata: + name: branch-create-product-components-hotfix +spec: + params: + - name: git-url + description: The git repository full url + - name: git-ref + description: The git ref + default: main + resourcetemplates: + - apiVersion: tekton.dev/v1beta1 + kind: TaskRun + metadata: + generateName: branch-create-product-components-hotfix-run- + annotations: + "tekton.dev/git-status": "true" + "tekton.dev/status-target-url": + "https://do.pingcap.net/tekton/#/namespaces/{{ .Namespace }}/pipelineruns/{{ .Name }}" + "tekton.dev/git-repo": $(tt.params.git-url) + "tekton.dev/git-revision": $(tt.params.git-ref) + spec: + params: + - name: git-url + value: $(tt.params.git-url) + - name: branch + value: $(tt.params.git-ref) + taskRef: + kind: Task + name: create-pr-to-sync-owners + podTemplate: + nodeSelector: + kubernetes.io/arch: "amd64" + workspaces: + - name: github + secret: + secretName: github diff --git a/apps/prod/tekton/configs/triggers/templates/kustomization.yaml b/apps/prod/tekton/configs/triggers/templates/kustomization.yaml index a7bb07f00..bad422f92 100644 --- a/apps/prod/tekton/configs/triggers/templates/kustomization.yaml +++ b/apps/prod/tekton/configs/triggers/templates/kustomization.yaml @@ -2,6 +2,7 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - branch-create-pingcap-qe-artifacts.yaml + - branch-create-product-components-hotfix.yaml - pull-pingcap-qe-artifacts.yaml - push-pingcap-qe-artifacts.yaml - tag-create-pingcap-qe-artifacts.yaml diff --git a/apps/prod/tekton/configs/triggers/triggers/create-branch-product-components-hotfix.yaml b/apps/prod/tekton/configs/triggers/triggers/create-branch-product-components-hotfix.yaml new file mode 100644 index 000000000..6110248f8 --- /dev/null +++ b/apps/prod/tekton/configs/triggers/triggers/create-branch-product-components-hotfix.yaml @@ -0,0 +1,39 @@ +apiVersion: triggers.tekton.dev/v1beta1 +kind: Trigger +metadata: + name: branch-create-product-components-hotfix + labels: + type: github-branch-create +spec: + interceptors: + - name: filter on repo owner and name + ref: + name: cel + params: + - name: filter + value: >- + body.repository.owner.login == 'pingcap' && body.repository.name in [ + 'tidb', + 'tiflash', + 'tiflow', + 'tidb-binlog', + 'tidb-dashboard', + 'tidb-tools' + ] + # filter git refs that match regexp: ^release-\d+\.\d+-\d+-v\d+\.\d+\.\d+$ + # example values of `body.ref`: + # release-6.5-20231020-v6.5.5 + # release-6.5-20231020-v6.5.5-1 + # regular use re2: https://github.com/google/re2/wiki/Syntax + - name: filter on branch names + ref: + name: cel + params: + - name: filter + value: >- + body.ref.matches('^release-[0-9]+[.][0-9]+-[0-9]+-v[0-9]+[.][0-9]+[.][0-9]+(-.+)?$') + + bindings: + - ref: github-branch-create + template: + ref: branch-create-product-components-hotfix diff --git a/apps/prod/tekton/configs/triggers/triggers/kustomization.yaml b/apps/prod/tekton/configs/triggers/triggers/kustomization.yaml index d470365bd..b8187a651 100644 --- a/apps/prod/tekton/configs/triggers/triggers/kustomization.yaml +++ b/apps/prod/tekton/configs/triggers/triggers/kustomization.yaml @@ -2,6 +2,7 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - create-branch-pingcap-qe-artifacts.yaml + - create-branch-product-components-hotfix.yaml - create-tag-pingcap-qe-artifacts.yaml - pull-pingcap-qe-artifacts.yaml - push-pingcap-qe-artifacts.yaml