CI: Add verify/merge jobs for ODL Helm charts
[releng/builder.git] / jjb / packaging / helm.yaml
diff --git a/jjb/packaging/helm.yaml b/jjb/packaging/helm.yaml
new file mode 100644 (file)
index 0000000..bd62aee
--- /dev/null
@@ -0,0 +1,338 @@
+---
+############
+# BUILDERS #
+############
+
+- builder:
+    name: packaging-create-netrc
+    builders:
+      - inject:
+          properties-content: "SERVER_ID={server-id}"
+      - shell: !include-raw-escape: helm-create-netrc.sh
+
+############
+# TRIGGERS #
+############
+- trigger:
+    name: gerrit-trigger-helm-verify
+    triggers:
+      - gerrit:
+          server-name: "{server}"
+          trigger-on:
+            - patchset-created-event:
+                exclude-drafts: "false"
+                exclude-trivial-rebase: "false"
+                exclude-no-code-change: "false"
+            - draft-published-event
+            - comment-added-contains-event:
+                comment-contains-value: '^Patch Set\s+\d+:\s+(recheck|reverify|verify-helm)\s*$'
+          projects:
+            - project-compare-type: "ANT"
+              project-pattern: "{project}"
+              branches:
+                - branch-compare-type: "ANT"
+                  branch-pattern: "**/{branch}"
+              file-paths:
+                - compare-type: "ANT"
+                  pattern: "{files}"
+
+- trigger:
+    name: gerrit-trigger-helm-merge
+    triggers:
+      - gerrit:
+          server-name: "{server}"
+          trigger-on:
+            - change-merged-event
+            - comment-added-contains-event:
+                comment-contains-value: "^remerge-helm$"
+          projects:
+            - project-compare-type: "ANT"
+              project-pattern: "{project}"
+              branches:
+                - branch-compare-type: "ANT"
+                  branch-pattern: "**/{branch}"
+              file-paths:
+                - compare-type: "ANT"
+                  pattern: "{files}"
+
+- trigger:
+    name: gerrit-trigger-release-manually
+    triggers:
+      - gerrit:
+          server-name: "{server}"
+          trigger-on:
+            - comment-added-contains-event:
+                comment-contains-value: '^Patch Set\s+\d+:\s+release-helm\s*$'
+          projects:
+            - project-compare-type: "ANT"
+              project-pattern: "{project}"
+              branches:
+                - branch-compare-type: "ANT"
+                  branch-pattern: "**/{branch}"
+              file-paths:
+                - compare-type: "ANT"
+                  pattern: "**"
+
+###########
+# ANCHORS #
+###########
+- helm_job_boiler_plate: &helm_job_boiler_plate
+    name: helm_job_boiler_plate
+
+    ######################
+    # Default parameters #
+    ######################
+
+    branch: master
+    submodule-recursive: true
+
+    # default params for helm jobs
+    build_script: ""
+    git-url: "$GIT_URL/$PROJECT"
+    post_build_script: ""
+    pre_build_script: ""
+    submodule-disable: false
+    submodule-timeout: 10
+    build-timeout: 240
+
+    #####################
+    # Job Configuration #
+    #####################
+
+    project-type: freestyle
+    node: "{build-node}"
+
+    properties:
+      - lf-infra-properties:
+          build-days-to-keep: "{build-days-to-keep}"
+
+    parameters:
+      - lf-infra-parameters:
+          branch: "{branch}"
+          project: "{project}"
+          stream: "{stream}"
+          lftools-version: "{lftools-version}"
+
+    wrappers:
+      - lf-infra-wrappers:
+          build-timeout: "{build-timeout}"
+          jenkins-ssh-credential: "{jenkins-ssh-credential}"
+
+    publishers:
+      - lf-infra-publish
+
+#################
+# JOB TEMPLATES #
+#################
+- job-template:
+    name: "{project-name}-{stream}-verify-{helm_bin}"
+    # Job template for helm verify jobs
+
+    <<: *helm_job_boiler_plate
+    concurrent: true
+
+    scm:
+      - gerrit-trigger-scm:
+          refspec: "$GERRIT_REFSPEC"
+          choosing-strategy: "gerrit"
+          submodule-recursive: "{submodule-recursive}"
+
+    triggers:
+      - gerrit-trigger-helm-verify:
+          status-context: "{project}-Helm-Verify"
+          server: "{gerrit-server-name}"
+          project: "{project}"
+          branch: "{branch}"
+          helm_bin: "{helm_bin}"
+          files: "{files}"
+
+    builders:
+      - lf-infra-pre-build
+      - shell: |
+          echo "export HELM_BIN={helm_bin}" > helm.prop
+      - shell: "{obj:pre_build_script}"
+      - shell: "{obj:build_script}"
+
+- job-template:
+    name: "{project-name}-{stream}-merge-helm"
+    # Job template for Helm merge jobs
+    <<: *helm_job_boiler_plate
+
+    scm:
+      - gerrit-trigger-scm:
+          refspec: ""
+          choosing-strategy: "default"
+          submodule-recursive: "{submodule-recursive}"
+
+    triggers:
+      - gerrit-trigger-helm-merge:
+          server: "{gerrit-server-name}"
+          project: "{project}"
+          branch: "{branch}"
+          files: "{files}"
+
+    builders:
+      - lf-infra-pre-build
+      - lf-provide-maven-settings:
+          global-settings-file: "{mvn-global-settings}"
+          settings-file: "{mvn-settings}"
+      - shell: |
+          echo "export HELM_BIN=helm3.7" > helm.prop
+      - shell: "{obj:pre_build_script}"
+      - shell: "{obj:build_script}"
+      - packaging-create-netrc:
+          server-id: packaging-helm
+      - inject:
+          properties-content: |
+            BUILD_TYPE=snapshot
+      - shell: "{obj:post_build_script}"
+      - lf-provide-maven-settings-cleanup
+
+- job-template:
+    name: "{project-name}-{stream}-release-helm"
+    # Job template for Helm stage jobs
+    <<: *helm_job_boiler_plate
+    scm:
+      - gerrit-trigger-scm:
+          refspec: ""
+          choosing-strategy: "default"
+          submodule-recursive: "{submodule-recursive}"
+
+    triggers:
+      - gerrit:
+          trigger-on:
+            - comment-added-contains-event:
+                comment-contains-value: '^Patch Set\s+\d+:\s+release-helm\s*$'
+
+    builders:
+      - lf-infra-pre-build
+      - lf-provide-maven-settings:
+          global-settings-file: "{mvn-global-settings}"
+          settings-file: "{mvn-settings}"
+      - shell: |
+          echo "export HELM_BIN=helm3.5" > helm.prop
+      - shell: "{obj:pre_build_script}"
+      - shell: "{obj:build_script}"
+      - lf-infra-create-netrc:
+          server-id: packaing-helm
+      - inject:
+          properties-content: |
+            BUILD_TYPE=release
+      - shell: "{obj:post_build_script}"
+      - lf-provide-maven-settings-cleanup
+
+- job-template:
+    name: "{project-name}-{subproject}-{stream}-verify-helm"
+    # Job template for helm verify jobs
+    <<: *helm_job_boiler_plate
+
+    disabled: true
+    builders:
+      - lf-infra-pre-build
+      - shell: |
+          echo "export HELM_BIN=helm3.7" > helm.prop
+      - shell: "{pre_build_script}"
+      - shell: "{build_script}"
+      - shell: "{post_build_script}"
+
+- job-template:
+    name: "{project-name}-{subproject}-{stream}-merge-helm"
+    # Job template for helm merge jobs
+    <<: *helm_job_boiler_plate
+
+    disabled: true
+    builders:
+      - lf-infra-pre-build
+      - shell: |
+          echo "export HELM_BIN=helm3.5" > helm.prop
+      - shell: "{pre_build_script}"
+      - shell: "{build_script}"
+      - inject:
+          properties-content: |
+            BUILD_TYPE=snapshot
+      - shell: "{post_build_script}"
+
+- job-template:
+    name: "{project-name}-{stream}-update-helm-weekly"
+    <<: *helm_job_boiler_plate
+
+    disabled: true
+    scm:
+      - lf-infra-gerrit-scm:
+          jenkins-ssh-credential: "{jenkins-ssh-credential}"
+          git-url: "$GIT_URL/$PROJECT"
+          refspec: "$GERRIT_REFSPEC"
+          branch: "$GERRIT_BRANCH"
+          submodule-recursive: true
+          submodule-timeout: "{submodule-timeout}"
+          submodule-disable: "{submodule-disable}"
+          choosing-strategy: default
+
+    builders:
+      - lf-infra-pre-build
+      - shell: |
+          echo "export HELM_BIN=helm3.5" > helm.prop
+      - shell: "{pre_build_script}"
+      - shell: "{build_script}"
+      - shell: "{post_build_script}"
+
+    triggers:
+      # 11 AM UTC
+      - timed: "@daily"
+      - gerrit-trigger-release-manually:
+          server: "{gerrit-server-name}"
+          project: "{project}"
+          branch: "{branch}"
+
+- project:
+    name: packaging
+    project-name: packaging
+    project: integration/packaging
+    mvn-settings: packaging-settings
+    mvn-global-settings: global-settings
+    archive-artifacts: ""
+    build-node: ubuntu1804-helm-2c-1g
+    pre_build_script: !include-raw-escape: helm-repo-init.sh
+    helm_build_script: |
+      #!/bin/bash
+      set -x
+      source helm.prop
+      set -e -o pipefail
+      cd helm/opendaylight
+      helm3.7 version
+      helm3.7 lint --strict .
+      helm3.7 package .
+
+    stream:
+      - "master":
+          branch: "sulfur"
+      - phosphorus:
+          branch: stable/phosphorus
+      - silicon:
+          branch: stable/silicon
+
+    helm_bin:
+      - helm3.7
+      - helm3.5
+
+    exclude: []
+    subproject: []
+
+    jobs:
+      - "{project-name}-{stream}-verify-{helm_bin}":
+          build_script: "{helm_build_script}"
+          files: 'helm\/opendaylight\/.*\.yaml'
+          build-timeout: 600
+      - "{project-name}-{stream}-merge-helm":
+          build_script: "{helm_build_script}"
+          post_build_script: !include-raw-escape: publish-helm-charts.sh
+          files: 'helm\/opendaylight\/.*\.yaml'
+          build-timeout: 600
+      - "{project-name}-{stream}-release-helm":
+          build_script: "{helm_build_script}"
+          post_build_script: !include-raw-escape: publish-helm-charts.sh
+          files: 'helm\/opendaylight\/.*\.yaml'
+          build-timeout: 600
+      - "{project-name}-{stream}-update-helm-weekly":
+          build_script: "{helm_build_script}"
+          files: 'helm\/opendaylight\/.*\.yaml'