cloudfoundry/stratos

View on GitHub
deploy/ci/tasks/dev-releases/create-helm-pr.yml

Summary

Maintainability
Test Coverage
---
platform: linux
inputs:
- name: helm-release
- name: helm-chart-repo
- name: stratos
image_resource:
  type: docker-image
  source:
   # Generated using scripts/Dockerfile.stratos-ci
   repository: ghcr.io/cf-stratos/stratos-ci-concourse
params:
  GIT_USER:
  GIT_EMAIL:
  GITHUB_USER:
  GITHUB_ORG:
  GITHUB_REPO:
  GITHUB_TOKEN:
  GIT_PRIVATE_KEY:
  GITHUB_TOKEN:
  DOCKER_ORG:
  DOCKER_REGISTRY:
  HELM_REPO_PATH:
  HELM_REPO_BRANCH:
  HELM_CHART_REPO_FOLDER:
  RELEASE_DOCKER_REGISTRY:
  RELEASE_DOCKER_ORG:
  HELM_CHART_REPO_NAME:
  HELM_CHART_REPO_BRANCH:
  
run:
  path: bash
  args:
    - -c
    - |
      # Initialize Helm for client-side use
      helm init --client-only
      ROOT_DIR=$PWD
      HELM_RELEASE=${ROOT_DIR}/helm-release
      HELM_CHART_REPO=${ROOT_DIR}/helm-chart-repo

      STRATOS=${ROOT_DIR}/stratos
      source ${STRATOS}/deploy/ci/tasks/dev-releases/create-chart-helper.sh      

      setupGitConfig
      
      ls -al ${HELM_RELEASE}

      pushd ${HELM_RELEASE}
      VERSION=$(cat version)
      CHART=$(ls console-helm-chart-*.tgz)
      popd

      cd ${HELM_CHART_REPO}
      cd ./${HELM_CHART_REPO_FOLDER}/console
      ls -al
      CHART_VERSION=$(cat Chart.yaml | grep "version:" | cut -d " " -f 2)

      echo "New Chart version     : ${VERSION}"
      echo "Existing Chart version: ${CHART_VERSION}"

      if [ "$CHART_VERSION" == "$VERSION" ]; then
        echo "This version has already been processed"
        exit 0
      fi

      echo "Creating PR for Helm Chart"

      # Unpack the Helm Chart, patch it and create the PR

      # Unpack over the existing chart
      cd ..
      tar -xvf ${HELM_RELEASE}/${CHART}

      cd console

      # Need to patch the registry
      echo ${RELEASE_DOCKER_REGISTRY}
      echo ${RELEASE_DOCKER_ORG}

      echo ${DOCKER_ORG}
      echo ${DOCKER_REGISTRY}

      sed -i -e 's/hostname: '"${DOCKER_REGISTRY}"'/hostname: '"${RELEASE_DOCKER_REGISTRY}"'/g' ./values.yaml
      sed -i -e 's/organization: '"${DOCKER_ORG}"'/organization: '"${RELEASE_DOCKER_ORG}"'/g' ./values.yaml

      git status

      export TERM=xterm
      git diff

      GIT_BRANCH=stratos_release_${VERSION}
      echo ${GIT_BRANCH}

      git checkout -b ${GIT_BRANCH}
      git add -A
      git status
      git commit -m "Stratos Release ${VERSION} Helm Chart Changes"
      git push -u origin ${GIT_BRANCH}
      if [ $? -ne 0 ]; then
        echo "Error pushing brnach"
        exit 1
      fi

      # Now create a PR for the changes
      URL=https://api.github.com/repos/${HELM_CHART_REPO_NAME}/pulls
      TITLE="Stratos Release ${VERSION}"

      echo $HELM_CHART_REPO_BRANCH
      echo $GIT_BRANCH
      echo $URL
      
      curl -H "Content-Type: application/json" -H "Authorization: token ${GITHUB_TOKEN}" \
      -d '{"title":"'"${TITLE}"'", "head": "'"${GIT_BRANCH}"'", "base": "'"${HELM_CHART_REPO_BRANCH}"'"}' ${URL}

      if [ $? -ne 0 ]; then
        echo "Error creating PR"
        exit 1
      fi

      echo "Helm Chart PR created"