---
# CORD helm chart publishing tasks

- project:
    name: helm-repo

    # add repos that have documentation to the project list in both jobs
    jobs:
      - 'publish-helm-repo':
          project-regexp: '{helm-charts-projects-regexp}'
          branch-regexp: '{supported-branches-regexp}'

- job-template:
    id: publish-helm-repo
    name: 'publish-helm-repo'
    description: |
      Created by publish-helm-repo job-template from ci-management/jjb/helm.yaml

    triggers:
      - cord-infra-gerrit-trigger-merge:
          gerrit-server-name: '{gerrit-server-name}'
          project-regexp: '{project-regexp}'
          branch-regexp: '{branch-regexp}'
          file-include-regexp: '{all-files-regexp}'
          dependency-jobs: '{dependency-jobs}'

    properties:
      - cord-infra-properties:
          build-days-to-keep: '{build-days-to-keep}'
          artifact-num-to-keep: '{artifact-num-to-keep}'

    wrappers:
      - lf-infra-wrappers:
          build-timeout: '{build-timeout}'
          jenkins-ssh-credential: '{jenkins-ssh-credential}'

    scm:
      - lf-infra-gerrit-scm:
          git-url: '$GIT_URL/$GERRIT_PROJECT'
          refspec: ''
          branch: '$GERRIT_BRANCH'
          submodule-recursive: 'false'
          choosing-strategy: 'gerrit'
          jenkins-ssh-credential: '{jenkins-ssh-credential}'

    node: '{build-node}'
    project-type: freestyle
    concurrent: false

    builders:
      - shell: |
          #!/usr/bin/env bash
          set -eu -o pipefail

          echo "git version: $(git --version)"

          # Configure git
          git config --global user.email "do-not-reply@opencord.org"
          git config --global user.name "Jenkins"

          # Checkout 'cord-charts-repo' repo that contains updated charts
          git clone ssh://jenkins@gerrit.opencord.org:29418/cord-charts-repo.git

          # Clone the `helm-repo-tools` which contains scripts
          git clone ssh://jenkins@gerrit.opencord.org:29418/helm-repo-tools.git

          # Setup and build the helm repo
          helm init --client-only
          helm repo add incubator http://storage.googleapis.com/kubernetes-charts-incubator
          helm repo add cord https://charts.opencord.org
          helm repo add rook-beta https://charts.rook.io/beta

          # Update the repo
          ./helm-repo-tools/helmrepo.sh

          # Tag and push to git the charts repo
          pushd cord-charts-repo

            # only update if charts are changed
            set +e
            if git diff --exit-code index.yaml > /dev/null; then
              echo "No changes to charts in patchset $GERRIT_CHANGE_NUMBER on project: $GERRIT_PROJECT, exiting."
              exit 0
            fi
            set -e

            # version tag is the current date in RFC3339 format
            NEW_VERSION=$(date -u +%Y%m%dT%H%M%SZ)

            # Add changes and create commit
            git add -A
            git commit -m "Changed by CORD Jenkins publish-helm-repo job: $BUILD_NUMBER, for project: $GERRIT_PROJECT, patchset: $GERRIT_CHANGE_NUMBER"

            # create tag on new commit
            git tag "$NEW_VERSION"

            echo "Tags including new tag:"
            git tag -n

            # push new commit and tag back into repo
            git push origin
            git push origin "$NEW_VERSION"
          popd

          # Set up the ssh host keys for the docs host
          mkdir -p ~/.ssh
          echo '{docs-ssh-host-key}' >> ~/.ssh/known_hosts

          # Copy updated repo to host
          rsync -rvzh --delete-after --exclude=.git cord-charts-repo/ {docs-ssh-host}:/var/www/charts

    publishers:
      - email:
          recipients: 'andy@opennetworking.org kailash@opennetworking.org luca@opennetworking.org teo@opennetworking.org saurav@opennetworking.org zdw@opennetworking.org'

