You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by mm...@apache.org on 2021/10/18 14:19:59 UTC

[geode-native] branch test-v142 created (now 96b46de)

This is an automated email from the ASF dual-hosted git repository.

mmartell pushed a change to branch test-v142
in repository https://gitbox.apache.org/repos/asf/geode-native.git.


      at 96b46de  Save rendered t142 yml

This branch includes the following new commits:

     new 111ef8a  Add v142 to VS 2019 and build with it
     new 96b46de  Save rendered t142 yml

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


[geode-native] 02/02: Save rendered t142 yml

Posted by mm...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

mmartell pushed a commit to branch test-v142
in repository https://gitbox.apache.org/repos/asf/geode-native.git

commit 96b46de8e91cdeac1c5eb2476207135c56c6c7b3
Author: Mike Martell <mm...@pivotal.io>
AuthorDate: Mon Oct 18 07:19:20 2021 -0700

    Save rendered t142 yml
---
 ci/geode-native-t142.yml | 12247 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 12247 insertions(+)

diff --git a/ci/geode-native-t142.yml b/ci/geode-native-t142.yml
new file mode 100644
index 0000000..8982459
--- /dev/null
+++ b/ci/geode-native-t142.yml
@@ -0,0 +1,12247 @@
+groups:
+- jobs:
+  - build-windows-2016-vs-2017-debug
+  - build-windows-2016-vs-2017-release
+  - build-windows-2019-vs-2019-debug
+  - build-windows-2019-vs-2019-release
+  - build-rhel-7-debug
+  - build-rhel-7-release
+  - build-rhel-8-debug
+  - build-rhel-8-release
+  - build-ubuntu-16.04-debug
+  - build-ubuntu-16.04-release
+  - build-ubuntu-18.04-debug
+  - build-ubuntu-18.04-release
+  - build-ubuntu-20.04-debug
+  - build-ubuntu-20.04-release
+  - check-source
+  name: builds
+- jobs:
+  - update-pipeline
+  name: meta
+- jobs:
+  - update-pipeline
+  - build-windows-2016-vs-2017-debug
+  - build-windows-2016-vs-2017-release
+  - build-windows-2019-vs-2019-debug
+  - build-windows-2019-vs-2019-release
+  - build-rhel-7-debug
+  - build-rhel-7-release
+  - build-rhel-8-debug
+  - build-rhel-8-release
+  - build-ubuntu-16.04-debug
+  - build-ubuntu-16.04-release
+  - build-ubuntu-18.04-debug
+  - build-ubuntu-18.04-release
+  - build-ubuntu-20.04-debug
+  - build-ubuntu-20.04-release
+  - check-source
+  - packer-build-windows-2016-vs-2017
+  - packer-build-windows-2019-vs-2019
+  - packer-build-rhel-7
+  - packer-build-rhel-8
+  - packer-build-ubuntu-16-04
+  - packer-build-ubuntu-18-04
+  - packer-build-ubuntu-20-04
+  - docker-task-image
+  - docker-clang-tools-image
+  - version-source
+  - bump-minor-version
+  - github-pre-release
+  - native-passed
+  name: all
+- jobs:
+  - packer-build-windows-2016-vs-2017
+  - packer-build-windows-2019-vs-2019
+  - packer-build-rhel-7
+  - packer-build-rhel-8
+  - packer-build-ubuntu-16-04
+  - packer-build-ubuntu-18-04
+  - packer-build-ubuntu-20-04
+  - docker-task-image
+  - docker-clang-tools-image
+  name: images
+- jobs:
+  - version-source
+  - bump-minor-version
+  name: version
+jobs:
+- name: build-windows-2016-vs-2017-debug
+  plan:
+  - in_parallel:
+      fail_fast: true
+      steps:
+      - get: version
+        passed:
+        - version-source
+        trigger: true
+      - get: source
+        passed:
+        - version-source
+        trigger: true
+      - get: task-image
+  - do:
+    - do:
+      - in_parallel:
+          fail_fast: true
+          steps:
+          - get: gcloud-image
+          - get: geode-native-develop-build-windows-2016-vs-2017-gci
+      - in_parallel:
+          fail_fast: true
+          steps:
+          - config:
+              inputs:
+              - name: geode-native-develop-build-windows-2016-vs-2017-gci
+                path: image
+              outputs:
+              - name: instance
+              platform: linux
+              run:
+                args:
+                - -c
+                - |-
+                  set -ueo pipefail
+                  GOOGLE_PROJECT=apachegeode-ci
+                  GOOGLE_ZONE=us-central1-a
+                  INSTANCE_USER=build
+                  INSTANCE_DIR=$(pwd)/instance
+
+                  if [ ! -d "${INSTANCE_DIR}" ]; then
+                    echo "${INSTANCE_DIR} not found."
+                    exit 1
+                  fi
+                  ssh_key_file=${INSTANCE_DIR}/identity
+                  ssh_pubkey_file=${ssh_key_file}.pub
+                  ssh-keygen -m pem  -t rsa -f ${ssh_key_file} -C "${INSTANCE_USER}" -N '' <<< y
+                  ssh_pubkey=$(cat ${ssh_pubkey_file})
+                  ssh_keys_file=${INSTANCE_DIR}/ssh_keys_file
+                  echo "${INSTANCE_USER}:${ssh_pubkey}" > ${ssh_keys_file}
+                  instance_name=build-$(cat /proc/sys/kernel/random/uuid)
+                  image_name=$(cat image/name)
+                  time_to_live=$(( $(date +%s) + ( 4 * 60 * 60 ) ))
+                  instance_file=${INSTANCE_DIR}/instance.sh
+                  gcloud compute instances create ${instance_name} \
+                      --format='config[export](name,networkInterfaces[0].accessConfigs[0].natIP)' \
+                      --project=${GOOGLE_PROJECT} \
+                      --zone=${GOOGLE_ZONE} \
+                      --subnet=default \
+                      --machine-type=e2-standard-16 \
+                      --boot-disk-size=200GB \
+                      --boot-disk-type=pd-standard \
+                      --boot-disk-device-name=${instance_name} \
+                      --image-project=${GOOGLE_PROJECT} \
+                      --image=${image_name} \
+                      --metadata-from-file ssh-keys=${ssh_keys_file} \
+                      --labels=time-to-live=${time_to_live},pipeline-name=geode-native-develop,build-config=debug \
+                      > ${instance_file}
+                  INSTANCE_USER=build
+                  INSTANCE_DIR=$(pwd)/instance
+
+                  if [ ! -d "${INSTANCE_DIR}" ]; then
+                    echo "${INSTANCE_DIR} not found."
+                    exit 1
+                  fi
+
+                  SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+                  ssh_key_file=${INSTANCE_DIR}/identity
+                  if [ ! -r "${ssh_key_file}" ]; then
+                    echo "${ssh_key_file} not readable."
+                    exit 1
+                  fi
+
+                  instance_file=${INSTANCE_DIR}/instance.sh
+                  if [ ! -r "${instance_file}" ]; then
+                    echo "${instance_file} not readable."
+                    exit 1
+                  fi
+
+                  external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+                  function remote_shell {
+                    ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+                  }
+
+                  function remote_download {
+                    scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+                  }
+
+                  function remote_download_directory {
+                    ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+                  }
+
+                  function remote_upload {
+                    scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+                  }
+                  SSH_OPTIONS="${SSH_OPTIONS} -o ConnectTimeout=10"
+                  echo "Waiting for ssh on ${instance_name} to be ready."
+                  console_file=$(mktemp)
+                  console_next=0
+                  while ! remote_shell echo ready 2>/dev/null ; do
+                    gcloud compute instances get-serial-port-output ${instance_name} \
+                        --start ${console_next} \
+                        --project=${GOOGLE_PROJECT} \
+                        --zone=${GOOGLE_ZONE} \
+                        --format='value[separator="
+                  "](next,contents)' \
+                        > ${console_file}
+                    tmp_next=$(head -n 1 ${console_file})
+                    if (( tmp_next != console_next )); then
+                      console_next=${tmp_next}
+                      sed '1d;s/\x1b\[[0-9;]*[JH]//g' ${console_file}
+                    fi
+                  done
+                path: bash
+            image: gcloud-image
+            task: instance-create
+          - get: geode-latest
+    - in_parallel:
+        fail_fast: true
+        steps:
+        - config:
+            inputs:
+            - name: instance
+            - name: source
+            platform: linux
+            run:
+              args:
+              - -c
+              - |-
+                set -ueo pipefail
+                INSTANCE_USER=build
+                INSTANCE_DIR=$(pwd)/instance
+
+                if [ ! -d "${INSTANCE_DIR}" ]; then
+                  echo "${INSTANCE_DIR} not found."
+                  exit 1
+                fi
+
+                SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+                ssh_key_file=${INSTANCE_DIR}/identity
+                if [ ! -r "${ssh_key_file}" ]; then
+                  echo "${ssh_key_file} not readable."
+                  exit 1
+                fi
+
+                instance_file=${INSTANCE_DIR}/instance.sh
+                if [ ! -r "${instance_file}" ]; then
+                  echo "${instance_file} not readable."
+                  exit 1
+                fi
+
+                external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+                function remote_shell {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+                }
+
+                function remote_download {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+                }
+
+                function remote_download_directory {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+                }
+
+                function remote_upload {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+                }
+                remote_upload source .
+              path: bash
+          image: task-image
+          task: upload-source
+        - config:
+            inputs:
+            - name: instance
+            - name: geode-latest
+            platform: linux
+            run:
+              args:
+              - -c
+              - |-
+                set -ueo pipefail
+                INSTANCE_USER=build
+                INSTANCE_DIR=$(pwd)/instance
+
+                if [ ! -d "${INSTANCE_DIR}" ]; then
+                  echo "${INSTANCE_DIR} not found."
+                  exit 1
+                fi
+
+                SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+                ssh_key_file=${INSTANCE_DIR}/identity
+                if [ ! -r "${ssh_key_file}" ]; then
+                  echo "${ssh_key_file} not readable."
+                  exit 1
+                fi
+
+                instance_file=${INSTANCE_DIR}/instance.sh
+                if [ ! -r "${instance_file}" ]; then
+                  echo "${instance_file} not readable."
+                  exit 1
+                fi
+
+                external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+                function remote_shell {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+                }
+
+                function remote_download {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+                }
+
+                function remote_download_directory {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+                }
+
+                function remote_upload {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+                }
+                geode_version=$(cat geode-latest/version)
+                geode_name="apache-geode-${geode_version}"
+                geode_artifact="${geode_name}.tgz"
+                remote_upload geode-latest/${geode_artifact} .
+                remote_shell cmake -E tar xvf ${geode_artifact}
+                remote_shell cmake -E rename ${geode_name} geode
+              path: bash
+          image: task-image
+          task: upload-geode
+    - config:
+        inputs:
+        - name: instance
+        - name: version
+        - name: source
+        outputs:
+        - name: package
+        params:
+          CMAKE_BUILD_FLAGS: /m
+          CMAKE_CONFIG: Debug
+          CMAKE_CONFIGURE_FLAGS: -A x64 -Tv141,version=14.16,host=x64 -DCMAKE_SYSTEM_VERSION=10.0.16299.0
+          CPACK_GENERATORS: ZIP
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            pushd source
+            git_url=$(git remote get-url origin)
+            git_rev=$(git rev-parse HEAD)
+            popd
+            version=$(cat version/number)
+            builddate=$(date "+%Y-%m-%d")
+            remote_shell cmake -E make_directory build
+            remote_shell cmake -E time cmake -E chdir build cmake ../source ${CMAKE_CONFIGURE_FLAGS} \
+                -DCMAKE_BUILD_TYPE=${CMAKE_CONFIG} \
+                -DGEODE_ROOT=../geode \
+                -DPRODUCT_VERSION=${version} \
+                -DPRODUCT_BUILDDATE=${builddate} \
+                -DPRODUCT_SOURCE_REVISION=${git_rev} \
+                -DPRODUCT_SOURCE_REPOSITORY=${git_url}
+            remote_shell cmake -E time cmake --build build --config ${CMAKE_CONFIG} -- ${CMAKE_BUILD_FLAGS}
+            remote_shell cmake -E time cmake --build build --config ${CMAKE_CONFIG} --target docs -- ${CMAKE_BUILD_FLAGS}
+            remote_shell cmake -E time cmake -E chdir build cpack -C ${CMAKE_CONFIG} -G "${CPACK_GENERATORS}" | tee cpack.out
+            packages=$(awk '/^CPack: - package: / {print $4}' cpack.out)
+            for package in ${packages}; do
+              remote_download ${package} package/
+            done
+            checksums=$(awk '/^CPack: - checksum file: / {print $5}' cpack.out)
+            for checksum in ${checksums}; do
+              remote_download ${checksum} package/
+            done
+          path: bash
+      image: task-image
+      task: build
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: /m
+          CMAKE_CONFIG: Debug
+          CMAKE_CONFIGURE_FLAGS: -A x64 -Tv141,version=14.16,host=x64 -DCMAKE_SYSTEM_VERSION=10.0.16299.0
+          CPACK_GENERATORS: ZIP
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/cppcache/test ctest -C ${CMAKE_CONFIG} -j8 --timeout=300 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: cpp-unit-tests
+      timeout: 30m
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: /m
+          CMAKE_CONFIG: Debug
+          CMAKE_CONFIGURE_FLAGS: -A x64 -Tv141,version=14.16,host=x64 -DCMAKE_SYSTEM_VERSION=10.0.16299.0
+          CPACK_GENERATORS: ZIP
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/cppcache/integration/test ctest -C ${CMAKE_CONFIG} -j4 --timeout=300 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: cpp-integration-tests
+      timeout: 1h
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: /m
+          CMAKE_CONFIG: Debug
+          CMAKE_CONFIGURE_FLAGS: -A x64 -Tv141,version=14.16,host=x64 -DCMAKE_SYSTEM_VERSION=10.0.16299.0
+          CPACK_GENERATORS: ZIP
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/cppcache/integration-test ctest -C ${CMAKE_CONFIG} -j4 --timeout=500 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: cpp-legacy-integration-tests
+      timeout: 2h
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: /m
+          CMAKE_CONFIG: Debug
+          CMAKE_CONFIGURE_FLAGS: -A x64 -Tv141,version=14.16,host=x64 -DCMAKE_SYSTEM_VERSION=10.0.16299.0
+          CPACK_GENERATORS: ZIP
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/clicache/test ctest -C ${CMAKE_CONFIG} -j8 --timeout=300 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: net-unmanaged-unit-tests
+      timeout: 10m
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: /m
+          CMAKE_CONFIG: Debug
+          CMAKE_CONFIGURE_FLAGS: -A x64 -Tv141,version=14.16,host=x64 -DCMAKE_SYSTEM_VERSION=10.0.16299.0
+          CPACK_GENERATORS: ZIP
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/clicache/test2 ctest -C ${CMAKE_CONFIG} -j8 --timeout=300 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: net-unit-tests
+      timeout: 30m
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: /m
+          CMAKE_CONFIG: Debug
+          CMAKE_CONFIGURE_FLAGS: -A x64 -Tv141,version=14.16,host=x64 -DCMAKE_SYSTEM_VERSION=10.0.16299.0
+          CPACK_GENERATORS: ZIP
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/clicache/integration-test2 ctest -C ${CMAKE_CONFIG} -j6 --timeout=300 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: net-integration-tests
+      timeout: 1h
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: /m
+          CMAKE_CONFIG: Debug
+          CMAKE_CONFIGURE_FLAGS: -A x64 -Tv141,version=14.16,host=x64 -DCMAKE_SYSTEM_VERSION=10.0.16299.0
+          CPACK_GENERATORS: ZIP
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/clicache/integration-test ctest -C ${CMAKE_CONFIG} -j4 --timeout=500 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: net-legacy-integration-tests
+      timeout: 2h
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: /m
+          CMAKE_CONFIG: Debug
+          CMAKE_CONFIGURE_FLAGS: -A x64 -Tv141,version=14.16,host=x64 -DCMAKE_SYSTEM_VERSION=10.0.16299.0
+          CPACK_GENERATORS: ZIP
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/netcore/netcore-integration-test ctest -C ${CMAKE_CONFIG} -j1 --timeout=Debug --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: netcore-integration-test
+      timeout: 10m
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: /m
+          CMAKE_CONFIG: Debug
+          CMAKE_CONFIGURE_FLAGS: -A x64 -Tv141,version=14.16,host=x64 -DCMAKE_SYSTEM_VERSION=10.0.16299.0
+          CPACK_GENERATORS: ZIP
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/netcore/netcore-session-integration-test ctest -C ${CMAKE_CONFIG} -j1 --timeout=300 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: netcore-session-integration-test
+      timeout: 10m
+    ensure:
+      in_parallel:
+        steps:
+        - config:
+            inputs:
+            - name: instance
+            platform: linux
+            run:
+              args:
+              - -c
+              - |-
+                set -ueo pipefail
+                GOOGLE_PROJECT=apachegeode-ci
+                GOOGLE_ZONE=us-central1-a
+                INSTANCE_USER=build
+                INSTANCE_DIR=$(pwd)/instance
+
+                if [ ! -d "${INSTANCE_DIR}" ]; then
+                  echo "${INSTANCE_DIR} not found."
+                  exit 1
+                fi
+
+                instance_file=${INSTANCE_DIR}/instance.sh
+                instance_name=$(source ${instance_file} && echo -n ${name})
+
+                gcloud compute instances delete ${instance_name} \
+                    --project=${GOOGLE_PROJECT} \
+                    --zone=${GOOGLE_ZONE} \
+                    --delete-disks=all \
+                    --quiet
+              path: bash
+          image: gcloud-image
+          task: instance-delete
+    on_failure:
+      in_parallel:
+        steps:
+        - config:
+            inputs:
+            - name: instance
+            outputs:
+            - name: build
+            platform: linux
+            run:
+              args:
+              - -c
+              - |-
+                set -ueo pipefail
+                INSTANCE_USER=build
+                INSTANCE_DIR=$(pwd)/instance
+
+                if [ ! -d "${INSTANCE_DIR}" ]; then
+                  echo "${INSTANCE_DIR} not found."
+                  exit 1
+                fi
+
+                SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+                ssh_key_file=${INSTANCE_DIR}/identity
+                if [ ! -r "${ssh_key_file}" ]; then
+                  echo "${ssh_key_file} not readable."
+                  exit 1
+                fi
+
+                instance_file=${INSTANCE_DIR}/instance.sh
+                if [ ! -r "${instance_file}" ]; then
+                  echo "${instance_file} not readable."
+                  exit 1
+                fi
+
+                external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+                function remote_shell {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+                }
+
+                function remote_download {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+                }
+
+                function remote_download_directory {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+                }
+
+                function remote_upload {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+                }
+                remote_download_directory build .
+              path: bash
+          image: task-image
+          task: download-build
+  - in_parallel:
+      fail_fast: true
+      steps:
+      - params:
+          file: package/*-Windows-64bit.zip
+        put: package-windows-2016-vs-2017-debug-archive
+      - params:
+          file: package/*-Windows-64bit.zip.sha512
+        put: package-windows-2016-vs-2017-debug-archive.sha512
+  public: true
+- name: build-windows-2016-vs-2017-release
+  plan:
+  - in_parallel:
+      fail_fast: true
+      steps:
+      - get: version
+        passed:
+        - version-source
+        trigger: true
+      - get: source
+        passed:
+        - version-source
+        trigger: true
+      - get: task-image
+  - do:
+    - do:
+      - in_parallel:
+          fail_fast: true
+          steps:
+          - get: gcloud-image
+          - get: geode-native-develop-build-windows-2016-vs-2017-gci
+      - in_parallel:
+          fail_fast: true
+          steps:
+          - config:
+              inputs:
+              - name: geode-native-develop-build-windows-2016-vs-2017-gci
+                path: image
+              outputs:
+              - name: instance
+              platform: linux
+              run:
+                args:
+                - -c
+                - |-
+                  set -ueo pipefail
+                  GOOGLE_PROJECT=apachegeode-ci
+                  GOOGLE_ZONE=us-central1-a
+                  INSTANCE_USER=build
+                  INSTANCE_DIR=$(pwd)/instance
+
+                  if [ ! -d "${INSTANCE_DIR}" ]; then
+                    echo "${INSTANCE_DIR} not found."
+                    exit 1
+                  fi
+                  ssh_key_file=${INSTANCE_DIR}/identity
+                  ssh_pubkey_file=${ssh_key_file}.pub
+                  ssh-keygen -m pem  -t rsa -f ${ssh_key_file} -C "${INSTANCE_USER}" -N '' <<< y
+                  ssh_pubkey=$(cat ${ssh_pubkey_file})
+                  ssh_keys_file=${INSTANCE_DIR}/ssh_keys_file
+                  echo "${INSTANCE_USER}:${ssh_pubkey}" > ${ssh_keys_file}
+                  instance_name=build-$(cat /proc/sys/kernel/random/uuid)
+                  image_name=$(cat image/name)
+                  time_to_live=$(( $(date +%s) + ( 4 * 60 * 60 ) ))
+                  instance_file=${INSTANCE_DIR}/instance.sh
+                  gcloud compute instances create ${instance_name} \
+                      --format='config[export](name,networkInterfaces[0].accessConfigs[0].natIP)' \
+                      --project=${GOOGLE_PROJECT} \
+                      --zone=${GOOGLE_ZONE} \
+                      --subnet=default \
+                      --machine-type=e2-standard-16 \
+                      --boot-disk-size=200GB \
+                      --boot-disk-type=pd-standard \
+                      --boot-disk-device-name=${instance_name} \
+                      --image-project=${GOOGLE_PROJECT} \
+                      --image=${image_name} \
+                      --metadata-from-file ssh-keys=${ssh_keys_file} \
+                      --labels=time-to-live=${time_to_live},pipeline-name=geode-native-develop,build-config=release \
+                      > ${instance_file}
+                  INSTANCE_USER=build
+                  INSTANCE_DIR=$(pwd)/instance
+
+                  if [ ! -d "${INSTANCE_DIR}" ]; then
+                    echo "${INSTANCE_DIR} not found."
+                    exit 1
+                  fi
+
+                  SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+                  ssh_key_file=${INSTANCE_DIR}/identity
+                  if [ ! -r "${ssh_key_file}" ]; then
+                    echo "${ssh_key_file} not readable."
+                    exit 1
+                  fi
+
+                  instance_file=${INSTANCE_DIR}/instance.sh
+                  if [ ! -r "${instance_file}" ]; then
+                    echo "${instance_file} not readable."
+                    exit 1
+                  fi
+
+                  external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+                  function remote_shell {
+                    ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+                  }
+
+                  function remote_download {
+                    scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+                  }
+
+                  function remote_download_directory {
+                    ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+                  }
+
+                  function remote_upload {
+                    scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+                  }
+                  SSH_OPTIONS="${SSH_OPTIONS} -o ConnectTimeout=10"
+                  echo "Waiting for ssh on ${instance_name} to be ready."
+                  console_file=$(mktemp)
+                  console_next=0
+                  while ! remote_shell echo ready 2>/dev/null ; do
+                    gcloud compute instances get-serial-port-output ${instance_name} \
+                        --start ${console_next} \
+                        --project=${GOOGLE_PROJECT} \
+                        --zone=${GOOGLE_ZONE} \
+                        --format='value[separator="
+                  "](next,contents)' \
+                        > ${console_file}
+                    tmp_next=$(head -n 1 ${console_file})
+                    if (( tmp_next != console_next )); then
+                      console_next=${tmp_next}
+                      sed '1d;s/\x1b\[[0-9;]*[JH]//g' ${console_file}
+                    fi
+                  done
+                path: bash
+            image: gcloud-image
+            task: instance-create
+          - get: geode-latest
+    - in_parallel:
+        fail_fast: true
+        steps:
+        - config:
+            inputs:
+            - name: instance
+            - name: source
+            platform: linux
+            run:
+              args:
+              - -c
+              - |-
+                set -ueo pipefail
+                INSTANCE_USER=build
+                INSTANCE_DIR=$(pwd)/instance
+
+                if [ ! -d "${INSTANCE_DIR}" ]; then
+                  echo "${INSTANCE_DIR} not found."
+                  exit 1
+                fi
+
+                SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+                ssh_key_file=${INSTANCE_DIR}/identity
+                if [ ! -r "${ssh_key_file}" ]; then
+                  echo "${ssh_key_file} not readable."
+                  exit 1
+                fi
+
+                instance_file=${INSTANCE_DIR}/instance.sh
+                if [ ! -r "${instance_file}" ]; then
+                  echo "${instance_file} not readable."
+                  exit 1
+                fi
+
+                external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+                function remote_shell {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+                }
+
+                function remote_download {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+                }
+
+                function remote_download_directory {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+                }
+
+                function remote_upload {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+                }
+                remote_upload source .
+              path: bash
+          image: task-image
+          task: upload-source
+        - config:
+            inputs:
+            - name: instance
+            - name: geode-latest
+            platform: linux
+            run:
+              args:
+              - -c
+              - |-
+                set -ueo pipefail
+                INSTANCE_USER=build
+                INSTANCE_DIR=$(pwd)/instance
+
+                if [ ! -d "${INSTANCE_DIR}" ]; then
+                  echo "${INSTANCE_DIR} not found."
+                  exit 1
+                fi
+
+                SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+                ssh_key_file=${INSTANCE_DIR}/identity
+                if [ ! -r "${ssh_key_file}" ]; then
+                  echo "${ssh_key_file} not readable."
+                  exit 1
+                fi
+
+                instance_file=${INSTANCE_DIR}/instance.sh
+                if [ ! -r "${instance_file}" ]; then
+                  echo "${instance_file} not readable."
+                  exit 1
+                fi
+
+                external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+                function remote_shell {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+                }
+
+                function remote_download {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+                }
+
+                function remote_download_directory {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+                }
+
+                function remote_upload {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+                }
+                geode_version=$(cat geode-latest/version)
+                geode_name="apache-geode-${geode_version}"
+                geode_artifact="${geode_name}.tgz"
+                remote_upload geode-latest/${geode_artifact} .
+                remote_shell cmake -E tar xvf ${geode_artifact}
+                remote_shell cmake -E rename ${geode_name} geode
+              path: bash
+          image: task-image
+          task: upload-geode
+    - config:
+        inputs:
+        - name: instance
+        - name: version
+        - name: source
+        outputs:
+        - name: package
+        params:
+          CMAKE_BUILD_FLAGS: /m
+          CMAKE_CONFIG: RelWithDebInfo
+          CMAKE_CONFIGURE_FLAGS: -A x64 -Tv141,version=14.16,host=x64 -DCMAKE_SYSTEM_VERSION=10.0.16299.0
+          CPACK_GENERATORS: ZIP
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            pushd source
+            git_url=$(git remote get-url origin)
+            git_rev=$(git rev-parse HEAD)
+            popd
+            version=$(cat version/number)
+            builddate=$(date "+%Y-%m-%d")
+            remote_shell cmake -E make_directory build
+            remote_shell cmake -E time cmake -E chdir build cmake ../source ${CMAKE_CONFIGURE_FLAGS} \
+                -DCMAKE_BUILD_TYPE=${CMAKE_CONFIG} \
+                -DGEODE_ROOT=../geode \
+                -DPRODUCT_VERSION=${version} \
+                -DPRODUCT_BUILDDATE=${builddate} \
+                -DPRODUCT_SOURCE_REVISION=${git_rev} \
+                -DPRODUCT_SOURCE_REPOSITORY=${git_url}
+            remote_shell cmake -E time cmake --build build --config ${CMAKE_CONFIG} -- ${CMAKE_BUILD_FLAGS}
+            remote_shell cmake -E time cmake --build build --config ${CMAKE_CONFIG} --target docs -- ${CMAKE_BUILD_FLAGS}
+            remote_shell cmake -E time cmake -E chdir build cpack -C ${CMAKE_CONFIG} -G "${CPACK_GENERATORS}" | tee cpack.out
+            packages=$(awk '/^CPack: - package: / {print $4}' cpack.out)
+            for package in ${packages}; do
+              remote_download ${package} package/
+            done
+            checksums=$(awk '/^CPack: - checksum file: / {print $5}' cpack.out)
+            for checksum in ${checksums}; do
+              remote_download ${checksum} package/
+            done
+          path: bash
+      image: task-image
+      task: build
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: /m
+          CMAKE_CONFIG: RelWithDebInfo
+          CMAKE_CONFIGURE_FLAGS: -A x64 -Tv141,version=14.16,host=x64 -DCMAKE_SYSTEM_VERSION=10.0.16299.0
+          CPACK_GENERATORS: ZIP
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/cppcache/test ctest -C ${CMAKE_CONFIG} -j8 --timeout=300 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: cpp-unit-tests
+      timeout: 30m
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: /m
+          CMAKE_CONFIG: RelWithDebInfo
+          CMAKE_CONFIGURE_FLAGS: -A x64 -Tv141,version=14.16,host=x64 -DCMAKE_SYSTEM_VERSION=10.0.16299.0
+          CPACK_GENERATORS: ZIP
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/cppcache/integration/test ctest -C ${CMAKE_CONFIG} -j4 --timeout=300 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: cpp-integration-tests
+      timeout: 1h
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: /m
+          CMAKE_CONFIG: RelWithDebInfo
+          CMAKE_CONFIGURE_FLAGS: -A x64 -Tv141,version=14.16,host=x64 -DCMAKE_SYSTEM_VERSION=10.0.16299.0
+          CPACK_GENERATORS: ZIP
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/cppcache/integration-test ctest -C ${CMAKE_CONFIG} -j4 --timeout=500 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: cpp-legacy-integration-tests
+      timeout: 2h
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: /m
+          CMAKE_CONFIG: RelWithDebInfo
+          CMAKE_CONFIGURE_FLAGS: -A x64 -Tv141,version=14.16,host=x64 -DCMAKE_SYSTEM_VERSION=10.0.16299.0
+          CPACK_GENERATORS: ZIP
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/clicache/test ctest -C ${CMAKE_CONFIG} -j8 --timeout=300 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: net-unmanaged-unit-tests
+      timeout: 10m
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: /m
+          CMAKE_CONFIG: RelWithDebInfo
+          CMAKE_CONFIGURE_FLAGS: -A x64 -Tv141,version=14.16,host=x64 -DCMAKE_SYSTEM_VERSION=10.0.16299.0
+          CPACK_GENERATORS: ZIP
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/clicache/test2 ctest -C ${CMAKE_CONFIG} -j8 --timeout=300 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: net-unit-tests
+      timeout: 30m
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: /m
+          CMAKE_CONFIG: RelWithDebInfo
+          CMAKE_CONFIGURE_FLAGS: -A x64 -Tv141,version=14.16,host=x64 -DCMAKE_SYSTEM_VERSION=10.0.16299.0
+          CPACK_GENERATORS: ZIP
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/clicache/integration-test2 ctest -C ${CMAKE_CONFIG} -j6 --timeout=300 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: net-integration-tests
+      timeout: 1h
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: /m
+          CMAKE_CONFIG: RelWithDebInfo
+          CMAKE_CONFIGURE_FLAGS: -A x64 -Tv141,version=14.16,host=x64 -DCMAKE_SYSTEM_VERSION=10.0.16299.0
+          CPACK_GENERATORS: ZIP
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/clicache/integration-test ctest -C ${CMAKE_CONFIG} -j4 --timeout=500 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: net-legacy-integration-tests
+      timeout: 2h
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: /m
+          CMAKE_CONFIG: RelWithDebInfo
+          CMAKE_CONFIGURE_FLAGS: -A x64 -Tv141,version=14.16,host=x64 -DCMAKE_SYSTEM_VERSION=10.0.16299.0
+          CPACK_GENERATORS: ZIP
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/netcore/netcore-integration-test ctest -C ${CMAKE_CONFIG} -j1 --timeout=RelWithDebInfo --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: netcore-integration-test
+      timeout: 10m
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: /m
+          CMAKE_CONFIG: RelWithDebInfo
+          CMAKE_CONFIGURE_FLAGS: -A x64 -Tv141,version=14.16,host=x64 -DCMAKE_SYSTEM_VERSION=10.0.16299.0
+          CPACK_GENERATORS: ZIP
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/netcore/netcore-session-integration-test ctest -C ${CMAKE_CONFIG} -j1 --timeout=300 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: netcore-session-integration-test
+      timeout: 10m
+    ensure:
+      in_parallel:
+        steps:
+        - config:
+            inputs:
+            - name: instance
+            platform: linux
+            run:
+              args:
+              - -c
+              - |-
+                set -ueo pipefail
+                GOOGLE_PROJECT=apachegeode-ci
+                GOOGLE_ZONE=us-central1-a
+                INSTANCE_USER=build
+                INSTANCE_DIR=$(pwd)/instance
+
+                if [ ! -d "${INSTANCE_DIR}" ]; then
+                  echo "${INSTANCE_DIR} not found."
+                  exit 1
+                fi
+
+                instance_file=${INSTANCE_DIR}/instance.sh
+                instance_name=$(source ${instance_file} && echo -n ${name})
+
+                gcloud compute instances delete ${instance_name} \
+                    --project=${GOOGLE_PROJECT} \
+                    --zone=${GOOGLE_ZONE} \
+                    --delete-disks=all \
+                    --quiet
+              path: bash
+          image: gcloud-image
+          task: instance-delete
+    on_failure:
+      in_parallel:
+        steps:
+        - config:
+            inputs:
+            - name: instance
+            outputs:
+            - name: build
+            platform: linux
+            run:
+              args:
+              - -c
+              - |-
+                set -ueo pipefail
+                INSTANCE_USER=build
+                INSTANCE_DIR=$(pwd)/instance
+
+                if [ ! -d "${INSTANCE_DIR}" ]; then
+                  echo "${INSTANCE_DIR} not found."
+                  exit 1
+                fi
+
+                SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+                ssh_key_file=${INSTANCE_DIR}/identity
+                if [ ! -r "${ssh_key_file}" ]; then
+                  echo "${ssh_key_file} not readable."
+                  exit 1
+                fi
+
+                instance_file=${INSTANCE_DIR}/instance.sh
+                if [ ! -r "${instance_file}" ]; then
+                  echo "${instance_file} not readable."
+                  exit 1
+                fi
+
+                external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+                function remote_shell {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+                }
+
+                function remote_download {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+                }
+
+                function remote_download_directory {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+                }
+
+                function remote_upload {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+                }
+                remote_download_directory build .
+              path: bash
+          image: task-image
+          task: download-build
+  - in_parallel:
+      fail_fast: true
+      steps:
+      - params:
+          file: package/*-Windows-64bit.zip
+        put: package-windows-2016-vs-2017-release-archive
+      - params:
+          file: package/*-Windows-64bit.zip.sha512
+        put: package-windows-2016-vs-2017-release-archive.sha512
+  public: true
+- name: build-windows-2019-vs-2019-debug
+  plan:
+  - in_parallel:
+      fail_fast: true
+      steps:
+      - get: version
+        passed:
+        - version-source
+        trigger: true
+      - get: source
+        passed:
+        - version-source
+        trigger: true
+      - get: task-image
+  - do:
+    - do:
+      - in_parallel:
+          fail_fast: true
+          steps:
+          - get: gcloud-image
+          - get: geode-native-develop-build-windows-2019-vs-2019-gci
+      - in_parallel:
+          fail_fast: true
+          steps:
+          - config:
+              inputs:
+              - name: geode-native-develop-build-windows-2019-vs-2019-gci
+                path: image
+              outputs:
+              - name: instance
+              platform: linux
+              run:
+                args:
+                - -c
+                - |-
+                  set -ueo pipefail
+                  GOOGLE_PROJECT=apachegeode-ci
+                  GOOGLE_ZONE=us-central1-a
+                  INSTANCE_USER=build
+                  INSTANCE_DIR=$(pwd)/instance
+
+                  if [ ! -d "${INSTANCE_DIR}" ]; then
+                    echo "${INSTANCE_DIR} not found."
+                    exit 1
+                  fi
+                  ssh_key_file=${INSTANCE_DIR}/identity
+                  ssh_pubkey_file=${ssh_key_file}.pub
+                  ssh-keygen -m pem  -t rsa -f ${ssh_key_file} -C "${INSTANCE_USER}" -N '' <<< y
+                  ssh_pubkey=$(cat ${ssh_pubkey_file})
+                  ssh_keys_file=${INSTANCE_DIR}/ssh_keys_file
+                  echo "${INSTANCE_USER}:${ssh_pubkey}" > ${ssh_keys_file}
+                  instance_name=build-$(cat /proc/sys/kernel/random/uuid)
+                  image_name=$(cat image/name)
+                  time_to_live=$(( $(date +%s) + ( 4 * 60 * 60 ) ))
+                  instance_file=${INSTANCE_DIR}/instance.sh
+                  gcloud compute instances create ${instance_name} \
+                      --format='config[export](name,networkInterfaces[0].accessConfigs[0].natIP)' \
+                      --project=${GOOGLE_PROJECT} \
+                      --zone=${GOOGLE_ZONE} \
+                      --subnet=default \
+                      --machine-type=e2-standard-16 \
+                      --boot-disk-size=200GB \
+                      --boot-disk-type=pd-standard \
+                      --boot-disk-device-name=${instance_name} \
+                      --image-project=${GOOGLE_PROJECT} \
+                      --image=${image_name} \
+                      --metadata-from-file ssh-keys=${ssh_keys_file} \
+                      --labels=time-to-live=${time_to_live},pipeline-name=geode-native-develop,build-config=debug \
+                      > ${instance_file}
+                  INSTANCE_USER=build
+                  INSTANCE_DIR=$(pwd)/instance
+
+                  if [ ! -d "${INSTANCE_DIR}" ]; then
+                    echo "${INSTANCE_DIR} not found."
+                    exit 1
+                  fi
+
+                  SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+                  ssh_key_file=${INSTANCE_DIR}/identity
+                  if [ ! -r "${ssh_key_file}" ]; then
+                    echo "${ssh_key_file} not readable."
+                    exit 1
+                  fi
+
+                  instance_file=${INSTANCE_DIR}/instance.sh
+                  if [ ! -r "${instance_file}" ]; then
+                    echo "${instance_file} not readable."
+                    exit 1
+                  fi
+
+                  external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+                  function remote_shell {
+                    ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+                  }
+
+                  function remote_download {
+                    scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+                  }
+
+                  function remote_download_directory {
+                    ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+                  }
+
+                  function remote_upload {
+                    scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+                  }
+                  SSH_OPTIONS="${SSH_OPTIONS} -o ConnectTimeout=10"
+                  echo "Waiting for ssh on ${instance_name} to be ready."
+                  console_file=$(mktemp)
+                  console_next=0
+                  while ! remote_shell echo ready 2>/dev/null ; do
+                    gcloud compute instances get-serial-port-output ${instance_name} \
+                        --start ${console_next} \
+                        --project=${GOOGLE_PROJECT} \
+                        --zone=${GOOGLE_ZONE} \
+                        --format='value[separator="
+                  "](next,contents)' \
+                        > ${console_file}
+                    tmp_next=$(head -n 1 ${console_file})
+                    if (( tmp_next != console_next )); then
+                      console_next=${tmp_next}
+                      sed '1d;s/\x1b\[[0-9;]*[JH]//g' ${console_file}
+                    fi
+                  done
+                path: bash
+            image: gcloud-image
+            task: instance-create
+          - get: geode-latest
+    - in_parallel:
+        fail_fast: true
+        steps:
+        - config:
+            inputs:
+            - name: instance
+            - name: source
+            platform: linux
+            run:
+              args:
+              - -c
+              - |-
+                set -ueo pipefail
+                INSTANCE_USER=build
+                INSTANCE_DIR=$(pwd)/instance
+
+                if [ ! -d "${INSTANCE_DIR}" ]; then
+                  echo "${INSTANCE_DIR} not found."
+                  exit 1
+                fi
+
+                SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+                ssh_key_file=${INSTANCE_DIR}/identity
+                if [ ! -r "${ssh_key_file}" ]; then
+                  echo "${ssh_key_file} not readable."
+                  exit 1
+                fi
+
+                instance_file=${INSTANCE_DIR}/instance.sh
+                if [ ! -r "${instance_file}" ]; then
+                  echo "${instance_file} not readable."
+                  exit 1
+                fi
+
+                external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+                function remote_shell {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+                }
+
+                function remote_download {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+                }
+
+                function remote_download_directory {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+                }
+
+                function remote_upload {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+                }
+                remote_upload source .
+              path: bash
+          image: task-image
+          task: upload-source
+        - config:
+            inputs:
+            - name: instance
+            - name: geode-latest
+            platform: linux
+            run:
+              args:
+              - -c
+              - |-
+                set -ueo pipefail
+                INSTANCE_USER=build
+                INSTANCE_DIR=$(pwd)/instance
+
+                if [ ! -d "${INSTANCE_DIR}" ]; then
+                  echo "${INSTANCE_DIR} not found."
+                  exit 1
+                fi
+
+                SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+                ssh_key_file=${INSTANCE_DIR}/identity
+                if [ ! -r "${ssh_key_file}" ]; then
+                  echo "${ssh_key_file} not readable."
+                  exit 1
+                fi
+
+                instance_file=${INSTANCE_DIR}/instance.sh
+                if [ ! -r "${instance_file}" ]; then
+                  echo "${instance_file} not readable."
+                  exit 1
+                fi
+
+                external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+                function remote_shell {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+                }
+
+                function remote_download {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+                }
+
+                function remote_download_directory {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+                }
+
+                function remote_upload {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+                }
+                geode_version=$(cat geode-latest/version)
+                geode_name="apache-geode-${geode_version}"
+                geode_artifact="${geode_name}.tgz"
+                remote_upload geode-latest/${geode_artifact} .
+                remote_shell cmake -E tar xvf ${geode_artifact}
+                remote_shell cmake -E rename ${geode_name} geode
+              path: bash
+          image: task-image
+          task: upload-geode
+    - config:
+        inputs:
+        - name: instance
+        - name: version
+        - name: source
+        outputs:
+        - name: package
+        params:
+          CMAKE_BUILD_FLAGS: /m
+          CMAKE_CONFIG: Debug
+          CMAKE_CONFIGURE_FLAGS: -A x64 -Tv141,version=14.16,host=x64 -DCMAKE_SYSTEM_VERSION=10.0.16299.0
+          CPACK_GENERATORS: ZIP
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            pushd source
+            git_url=$(git remote get-url origin)
+            git_rev=$(git rev-parse HEAD)
+            popd
+            version=$(cat version/number)
+            builddate=$(date "+%Y-%m-%d")
+            remote_shell cmake -E make_directory build
+            remote_shell cmake -E time cmake -E chdir build cmake ../source ${CMAKE_CONFIGURE_FLAGS} \
+                -DCMAKE_BUILD_TYPE=${CMAKE_CONFIG} \
+                -DGEODE_ROOT=../geode \
+                -DPRODUCT_VERSION=${version} \
+                -DPRODUCT_BUILDDATE=${builddate} \
+                -DPRODUCT_SOURCE_REVISION=${git_rev} \
+                -DPRODUCT_SOURCE_REPOSITORY=${git_url}
+            remote_shell cmake -E time cmake --build build --config ${CMAKE_CONFIG} -- ${CMAKE_BUILD_FLAGS}
+            remote_shell cmake -E time cmake --build build --config ${CMAKE_CONFIG} --target docs -- ${CMAKE_BUILD_FLAGS}
+            remote_shell cmake -E time cmake -E chdir build cpack -C ${CMAKE_CONFIG} -G "${CPACK_GENERATORS}" | tee cpack.out
+            packages=$(awk '/^CPack: - package: / {print $4}' cpack.out)
+            for package in ${packages}; do
+              remote_download ${package} package/
+            done
+            checksums=$(awk '/^CPack: - checksum file: / {print $5}' cpack.out)
+            for checksum in ${checksums}; do
+              remote_download ${checksum} package/
+            done
+          path: bash
+      image: task-image
+      task: build
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: /m
+          CMAKE_CONFIG: Debug
+          CMAKE_CONFIGURE_FLAGS: -A x64 -Tv141,version=14.16,host=x64 -DCMAKE_SYSTEM_VERSION=10.0.16299.0
+          CPACK_GENERATORS: ZIP
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/cppcache/test ctest -C ${CMAKE_CONFIG} -j8 --timeout=300 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: cpp-unit-tests
+      timeout: 30m
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: /m
+          CMAKE_CONFIG: Debug
+          CMAKE_CONFIGURE_FLAGS: -A x64 -Tv141,version=14.16,host=x64 -DCMAKE_SYSTEM_VERSION=10.0.16299.0
+          CPACK_GENERATORS: ZIP
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/cppcache/integration/test ctest -C ${CMAKE_CONFIG} -j4 --timeout=300 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: cpp-integration-tests
+      timeout: 1h
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: /m
+          CMAKE_CONFIG: Debug
+          CMAKE_CONFIGURE_FLAGS: -A x64 -Tv141,version=14.16,host=x64 -DCMAKE_SYSTEM_VERSION=10.0.16299.0
+          CPACK_GENERATORS: ZIP
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/cppcache/integration-test ctest -C ${CMAKE_CONFIG} -j4 --timeout=500 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: cpp-legacy-integration-tests
+      timeout: 2h
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: /m
+          CMAKE_CONFIG: Debug
+          CMAKE_CONFIGURE_FLAGS: -A x64 -Tv141,version=14.16,host=x64 -DCMAKE_SYSTEM_VERSION=10.0.16299.0
+          CPACK_GENERATORS: ZIP
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/clicache/test ctest -C ${CMAKE_CONFIG} -j8 --timeout=300 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: net-unmanaged-unit-tests
+      timeout: 10m
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: /m
+          CMAKE_CONFIG: Debug
+          CMAKE_CONFIGURE_FLAGS: -A x64 -Tv141,version=14.16,host=x64 -DCMAKE_SYSTEM_VERSION=10.0.16299.0
+          CPACK_GENERATORS: ZIP
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/clicache/test2 ctest -C ${CMAKE_CONFIG} -j8 --timeout=300 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: net-unit-tests
+      timeout: 30m
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: /m
+          CMAKE_CONFIG: Debug
+          CMAKE_CONFIGURE_FLAGS: -A x64 -Tv141,version=14.16,host=x64 -DCMAKE_SYSTEM_VERSION=10.0.16299.0
+          CPACK_GENERATORS: ZIP
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/clicache/integration-test2 ctest -C ${CMAKE_CONFIG} -j6 --timeout=300 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: net-integration-tests
+      timeout: 1h
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: /m
+          CMAKE_CONFIG: Debug
+          CMAKE_CONFIGURE_FLAGS: -A x64 -Tv141,version=14.16,host=x64 -DCMAKE_SYSTEM_VERSION=10.0.16299.0
+          CPACK_GENERATORS: ZIP
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/clicache/integration-test ctest -C ${CMAKE_CONFIG} -j4 --timeout=500 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: net-legacy-integration-tests
+      timeout: 2h
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: /m
+          CMAKE_CONFIG: Debug
+          CMAKE_CONFIGURE_FLAGS: -A x64 -Tv141,version=14.16,host=x64 -DCMAKE_SYSTEM_VERSION=10.0.16299.0
+          CPACK_GENERATORS: ZIP
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/netcore/netcore-integration-test ctest -C ${CMAKE_CONFIG} -j1 --timeout=Debug --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: netcore-integration-test
+      timeout: 10m
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: /m
+          CMAKE_CONFIG: Debug
+          CMAKE_CONFIGURE_FLAGS: -A x64 -Tv141,version=14.16,host=x64 -DCMAKE_SYSTEM_VERSION=10.0.16299.0
+          CPACK_GENERATORS: ZIP
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/netcore/netcore-session-integration-test ctest -C ${CMAKE_CONFIG} -j1 --timeout=300 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: netcore-session-integration-test
+      timeout: 10m
+    ensure:
+      in_parallel:
+        steps:
+        - config:
+            inputs:
+            - name: instance
+            platform: linux
+            run:
+              args:
+              - -c
+              - |-
+                set -ueo pipefail
+                GOOGLE_PROJECT=apachegeode-ci
+                GOOGLE_ZONE=us-central1-a
+                INSTANCE_USER=build
+                INSTANCE_DIR=$(pwd)/instance
+
+                if [ ! -d "${INSTANCE_DIR}" ]; then
+                  echo "${INSTANCE_DIR} not found."
+                  exit 1
+                fi
+
+                instance_file=${INSTANCE_DIR}/instance.sh
+                instance_name=$(source ${instance_file} && echo -n ${name})
+
+                gcloud compute instances delete ${instance_name} \
+                    --project=${GOOGLE_PROJECT} \
+                    --zone=${GOOGLE_ZONE} \
+                    --delete-disks=all \
+                    --quiet
+              path: bash
+          image: gcloud-image
+          task: instance-delete
+    on_failure:
+      in_parallel:
+        steps:
+        - config:
+            inputs:
+            - name: instance
+            outputs:
+            - name: build
+            platform: linux
+            run:
+              args:
+              - -c
+              - |-
+                set -ueo pipefail
+                INSTANCE_USER=build
+                INSTANCE_DIR=$(pwd)/instance
+
+                if [ ! -d "${INSTANCE_DIR}" ]; then
+                  echo "${INSTANCE_DIR} not found."
+                  exit 1
+                fi
+
+                SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+                ssh_key_file=${INSTANCE_DIR}/identity
+                if [ ! -r "${ssh_key_file}" ]; then
+                  echo "${ssh_key_file} not readable."
+                  exit 1
+                fi
+
+                instance_file=${INSTANCE_DIR}/instance.sh
+                if [ ! -r "${instance_file}" ]; then
+                  echo "${instance_file} not readable."
+                  exit 1
+                fi
+
+                external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+                function remote_shell {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+                }
+
+                function remote_download {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+                }
+
+                function remote_download_directory {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+                }
+
+                function remote_upload {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+                }
+                remote_download_directory build .
+              path: bash
+          image: task-image
+          task: download-build
+  - in_parallel:
+      fail_fast: true
+      steps:
+      - params:
+          file: package/*-Windows-64bit.zip
+        put: package-windows-2019-vs-2019-debug-archive
+      - params:
+          file: package/*-Windows-64bit.zip.sha512
+        put: package-windows-2019-vs-2019-debug-archive.sha512
+  public: true
+- name: build-windows-2019-vs-2019-release
+  plan:
+  - in_parallel:
+      fail_fast: true
+      steps:
+      - get: version
+        passed:
+        - version-source
+        trigger: true
+      - get: source
+        passed:
+        - version-source
+        trigger: true
+      - get: task-image
+  - do:
+    - do:
+      - in_parallel:
+          fail_fast: true
+          steps:
+          - get: gcloud-image
+          - get: geode-native-develop-build-windows-2019-vs-2019-gci
+      - in_parallel:
+          fail_fast: true
+          steps:
+          - config:
+              inputs:
+              - name: geode-native-develop-build-windows-2019-vs-2019-gci
+                path: image
+              outputs:
+              - name: instance
+              platform: linux
+              run:
+                args:
+                - -c
+                - |-
+                  set -ueo pipefail
+                  GOOGLE_PROJECT=apachegeode-ci
+                  GOOGLE_ZONE=us-central1-a
+                  INSTANCE_USER=build
+                  INSTANCE_DIR=$(pwd)/instance
+
+                  if [ ! -d "${INSTANCE_DIR}" ]; then
+                    echo "${INSTANCE_DIR} not found."
+                    exit 1
+                  fi
+                  ssh_key_file=${INSTANCE_DIR}/identity
+                  ssh_pubkey_file=${ssh_key_file}.pub
+                  ssh-keygen -m pem  -t rsa -f ${ssh_key_file} -C "${INSTANCE_USER}" -N '' <<< y
+                  ssh_pubkey=$(cat ${ssh_pubkey_file})
+                  ssh_keys_file=${INSTANCE_DIR}/ssh_keys_file
+                  echo "${INSTANCE_USER}:${ssh_pubkey}" > ${ssh_keys_file}
+                  instance_name=build-$(cat /proc/sys/kernel/random/uuid)
+                  image_name=$(cat image/name)
+                  time_to_live=$(( $(date +%s) + ( 4 * 60 * 60 ) ))
+                  instance_file=${INSTANCE_DIR}/instance.sh
+                  gcloud compute instances create ${instance_name} \
+                      --format='config[export](name,networkInterfaces[0].accessConfigs[0].natIP)' \
+                      --project=${GOOGLE_PROJECT} \
+                      --zone=${GOOGLE_ZONE} \
+                      --subnet=default \
+                      --machine-type=e2-standard-16 \
+                      --boot-disk-size=200GB \
+                      --boot-disk-type=pd-standard \
+                      --boot-disk-device-name=${instance_name} \
+                      --image-project=${GOOGLE_PROJECT} \
+                      --image=${image_name} \
+                      --metadata-from-file ssh-keys=${ssh_keys_file} \
+                      --labels=time-to-live=${time_to_live},pipeline-name=geode-native-develop,build-config=release \
+                      > ${instance_file}
+                  INSTANCE_USER=build
+                  INSTANCE_DIR=$(pwd)/instance
+
+                  if [ ! -d "${INSTANCE_DIR}" ]; then
+                    echo "${INSTANCE_DIR} not found."
+                    exit 1
+                  fi
+
+                  SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+                  ssh_key_file=${INSTANCE_DIR}/identity
+                  if [ ! -r "${ssh_key_file}" ]; then
+                    echo "${ssh_key_file} not readable."
+                    exit 1
+                  fi
+
+                  instance_file=${INSTANCE_DIR}/instance.sh
+                  if [ ! -r "${instance_file}" ]; then
+                    echo "${instance_file} not readable."
+                    exit 1
+                  fi
+
+                  external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+                  function remote_shell {
+                    ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+                  }
+
+                  function remote_download {
+                    scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+                  }
+
+                  function remote_download_directory {
+                    ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+                  }
+
+                  function remote_upload {
+                    scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+                  }
+                  SSH_OPTIONS="${SSH_OPTIONS} -o ConnectTimeout=10"
+                  echo "Waiting for ssh on ${instance_name} to be ready."
+                  console_file=$(mktemp)
+                  console_next=0
+                  while ! remote_shell echo ready 2>/dev/null ; do
+                    gcloud compute instances get-serial-port-output ${instance_name} \
+                        --start ${console_next} \
+                        --project=${GOOGLE_PROJECT} \
+                        --zone=${GOOGLE_ZONE} \
+                        --format='value[separator="
+                  "](next,contents)' \
+                        > ${console_file}
+                    tmp_next=$(head -n 1 ${console_file})
+                    if (( tmp_next != console_next )); then
+                      console_next=${tmp_next}
+                      sed '1d;s/\x1b\[[0-9;]*[JH]//g' ${console_file}
+                    fi
+                  done
+                path: bash
+            image: gcloud-image
+            task: instance-create
+          - get: geode-latest
+    - in_parallel:
+        fail_fast: true
+        steps:
+        - config:
+            inputs:
+            - name: instance
+            - name: source
+            platform: linux
+            run:
+              args:
+              - -c
+              - |-
+                set -ueo pipefail
+                INSTANCE_USER=build
+                INSTANCE_DIR=$(pwd)/instance
+
+                if [ ! -d "${INSTANCE_DIR}" ]; then
+                  echo "${INSTANCE_DIR} not found."
+                  exit 1
+                fi
+
+                SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+                ssh_key_file=${INSTANCE_DIR}/identity
+                if [ ! -r "${ssh_key_file}" ]; then
+                  echo "${ssh_key_file} not readable."
+                  exit 1
+                fi
+
+                instance_file=${INSTANCE_DIR}/instance.sh
+                if [ ! -r "${instance_file}" ]; then
+                  echo "${instance_file} not readable."
+                  exit 1
+                fi
+
+                external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+                function remote_shell {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+                }
+
+                function remote_download {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+                }
+
+                function remote_download_directory {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+                }
+
+                function remote_upload {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+                }
+                remote_upload source .
+              path: bash
+          image: task-image
+          task: upload-source
+        - config:
+            inputs:
+            - name: instance
+            - name: geode-latest
+            platform: linux
+            run:
+              args:
+              - -c
+              - |-
+                set -ueo pipefail
+                INSTANCE_USER=build
+                INSTANCE_DIR=$(pwd)/instance
+
+                if [ ! -d "${INSTANCE_DIR}" ]; then
+                  echo "${INSTANCE_DIR} not found."
+                  exit 1
+                fi
+
+                SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+                ssh_key_file=${INSTANCE_DIR}/identity
+                if [ ! -r "${ssh_key_file}" ]; then
+                  echo "${ssh_key_file} not readable."
+                  exit 1
+                fi
+
+                instance_file=${INSTANCE_DIR}/instance.sh
+                if [ ! -r "${instance_file}" ]; then
+                  echo "${instance_file} not readable."
+                  exit 1
+                fi
+
+                external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+                function remote_shell {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+                }
+
+                function remote_download {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+                }
+
+                function remote_download_directory {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+                }
+
+                function remote_upload {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+                }
+                geode_version=$(cat geode-latest/version)
+                geode_name="apache-geode-${geode_version}"
+                geode_artifact="${geode_name}.tgz"
+                remote_upload geode-latest/${geode_artifact} .
+                remote_shell cmake -E tar xvf ${geode_artifact}
+                remote_shell cmake -E rename ${geode_name} geode
+              path: bash
+          image: task-image
+          task: upload-geode
+    - config:
+        inputs:
+        - name: instance
+        - name: version
+        - name: source
+        outputs:
+        - name: package
+        params:
+          CMAKE_BUILD_FLAGS: /m
+          CMAKE_CONFIG: RelWithDebInfo
+          CMAKE_CONFIGURE_FLAGS: -A x64 -Tv141,version=14.16,host=x64 -DCMAKE_SYSTEM_VERSION=10.0.16299.0
+          CPACK_GENERATORS: ZIP
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            pushd source
+            git_url=$(git remote get-url origin)
+            git_rev=$(git rev-parse HEAD)
+            popd
+            version=$(cat version/number)
+            builddate=$(date "+%Y-%m-%d")
+            remote_shell cmake -E make_directory build
+            remote_shell cmake -E time cmake -E chdir build cmake ../source ${CMAKE_CONFIGURE_FLAGS} \
+                -DCMAKE_BUILD_TYPE=${CMAKE_CONFIG} \
+                -DGEODE_ROOT=../geode \
+                -DPRODUCT_VERSION=${version} \
+                -DPRODUCT_BUILDDATE=${builddate} \
+                -DPRODUCT_SOURCE_REVISION=${git_rev} \
+                -DPRODUCT_SOURCE_REPOSITORY=${git_url}
+            remote_shell cmake -E time cmake --build build --config ${CMAKE_CONFIG} -- ${CMAKE_BUILD_FLAGS}
+            remote_shell cmake -E time cmake --build build --config ${CMAKE_CONFIG} --target docs -- ${CMAKE_BUILD_FLAGS}
+            remote_shell cmake -E time cmake -E chdir build cpack -C ${CMAKE_CONFIG} -G "${CPACK_GENERATORS}" | tee cpack.out
+            packages=$(awk '/^CPack: - package: / {print $4}' cpack.out)
+            for package in ${packages}; do
+              remote_download ${package} package/
+            done
+            checksums=$(awk '/^CPack: - checksum file: / {print $5}' cpack.out)
+            for checksum in ${checksums}; do
+              remote_download ${checksum} package/
+            done
+          path: bash
+      image: task-image
+      task: build
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: /m
+          CMAKE_CONFIG: RelWithDebInfo
+          CMAKE_CONFIGURE_FLAGS: -A x64 -Tv141,version=14.16,host=x64 -DCMAKE_SYSTEM_VERSION=10.0.16299.0
+          CPACK_GENERATORS: ZIP
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/cppcache/test ctest -C ${CMAKE_CONFIG} -j8 --timeout=300 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: cpp-unit-tests
+      timeout: 30m
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: /m
+          CMAKE_CONFIG: RelWithDebInfo
+          CMAKE_CONFIGURE_FLAGS: -A x64 -Tv141,version=14.16,host=x64 -DCMAKE_SYSTEM_VERSION=10.0.16299.0
+          CPACK_GENERATORS: ZIP
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/cppcache/integration/test ctest -C ${CMAKE_CONFIG} -j4 --timeout=300 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: cpp-integration-tests
+      timeout: 1h
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: /m
+          CMAKE_CONFIG: RelWithDebInfo
+          CMAKE_CONFIGURE_FLAGS: -A x64 -Tv141,version=14.16,host=x64 -DCMAKE_SYSTEM_VERSION=10.0.16299.0
+          CPACK_GENERATORS: ZIP
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/cppcache/integration-test ctest -C ${CMAKE_CONFIG} -j4 --timeout=500 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: cpp-legacy-integration-tests
+      timeout: 2h
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: /m
+          CMAKE_CONFIG: RelWithDebInfo
+          CMAKE_CONFIGURE_FLAGS: -A x64 -Tv141,version=14.16,host=x64 -DCMAKE_SYSTEM_VERSION=10.0.16299.0
+          CPACK_GENERATORS: ZIP
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/clicache/test ctest -C ${CMAKE_CONFIG} -j8 --timeout=300 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: net-unmanaged-unit-tests
+      timeout: 10m
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: /m
+          CMAKE_CONFIG: RelWithDebInfo
+          CMAKE_CONFIGURE_FLAGS: -A x64 -Tv141,version=14.16,host=x64 -DCMAKE_SYSTEM_VERSION=10.0.16299.0
+          CPACK_GENERATORS: ZIP
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/clicache/test2 ctest -C ${CMAKE_CONFIG} -j8 --timeout=300 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: net-unit-tests
+      timeout: 30m
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: /m
+          CMAKE_CONFIG: RelWithDebInfo
+          CMAKE_CONFIGURE_FLAGS: -A x64 -Tv141,version=14.16,host=x64 -DCMAKE_SYSTEM_VERSION=10.0.16299.0
+          CPACK_GENERATORS: ZIP
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/clicache/integration-test2 ctest -C ${CMAKE_CONFIG} -j6 --timeout=300 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: net-integration-tests
+      timeout: 1h
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: /m
+          CMAKE_CONFIG: RelWithDebInfo
+          CMAKE_CONFIGURE_FLAGS: -A x64 -Tv141,version=14.16,host=x64 -DCMAKE_SYSTEM_VERSION=10.0.16299.0
+          CPACK_GENERATORS: ZIP
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/clicache/integration-test ctest -C ${CMAKE_CONFIG} -j4 --timeout=500 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: net-legacy-integration-tests
+      timeout: 2h
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: /m
+          CMAKE_CONFIG: RelWithDebInfo
+          CMAKE_CONFIGURE_FLAGS: -A x64 -Tv141,version=14.16,host=x64 -DCMAKE_SYSTEM_VERSION=10.0.16299.0
+          CPACK_GENERATORS: ZIP
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/netcore/netcore-integration-test ctest -C ${CMAKE_CONFIG} -j1 --timeout=RelWithDebInfo --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: netcore-integration-test
+      timeout: 10m
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: /m
+          CMAKE_CONFIG: RelWithDebInfo
+          CMAKE_CONFIGURE_FLAGS: -A x64 -Tv141,version=14.16,host=x64 -DCMAKE_SYSTEM_VERSION=10.0.16299.0
+          CPACK_GENERATORS: ZIP
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/netcore/netcore-session-integration-test ctest -C ${CMAKE_CONFIG} -j1 --timeout=300 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: netcore-session-integration-test
+      timeout: 10m
+    ensure:
+      in_parallel:
+        steps:
+        - config:
+            inputs:
+            - name: instance
+            platform: linux
+            run:
+              args:
+              - -c
+              - |-
+                set -ueo pipefail
+                GOOGLE_PROJECT=apachegeode-ci
+                GOOGLE_ZONE=us-central1-a
+                INSTANCE_USER=build
+                INSTANCE_DIR=$(pwd)/instance
+
+                if [ ! -d "${INSTANCE_DIR}" ]; then
+                  echo "${INSTANCE_DIR} not found."
+                  exit 1
+                fi
+
+                instance_file=${INSTANCE_DIR}/instance.sh
+                instance_name=$(source ${instance_file} && echo -n ${name})
+
+                gcloud compute instances delete ${instance_name} \
+                    --project=${GOOGLE_PROJECT} \
+                    --zone=${GOOGLE_ZONE} \
+                    --delete-disks=all \
+                    --quiet
+              path: bash
+          image: gcloud-image
+          task: instance-delete
+    on_failure:
+      in_parallel:
+        steps:
+        - config:
+            inputs:
+            - name: instance
+            outputs:
+            - name: build
+            platform: linux
+            run:
+              args:
+              - -c
+              - |-
+                set -ueo pipefail
+                INSTANCE_USER=build
+                INSTANCE_DIR=$(pwd)/instance
+
+                if [ ! -d "${INSTANCE_DIR}" ]; then
+                  echo "${INSTANCE_DIR} not found."
+                  exit 1
+                fi
+
+                SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+                ssh_key_file=${INSTANCE_DIR}/identity
+                if [ ! -r "${ssh_key_file}" ]; then
+                  echo "${ssh_key_file} not readable."
+                  exit 1
+                fi
+
+                instance_file=${INSTANCE_DIR}/instance.sh
+                if [ ! -r "${instance_file}" ]; then
+                  echo "${instance_file} not readable."
+                  exit 1
+                fi
+
+                external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+                function remote_shell {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+                }
+
+                function remote_download {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+                }
+
+                function remote_download_directory {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+                }
+
+                function remote_upload {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+                }
+                remote_download_directory build .
+              path: bash
+          image: task-image
+          task: download-build
+  - in_parallel:
+      fail_fast: true
+      steps:
+      - params:
+          file: package/*-Windows-64bit.zip
+        put: package-windows-2019-vs-2019-release-archive
+      - params:
+          file: package/*-Windows-64bit.zip.sha512
+        put: package-windows-2019-vs-2019-release-archive.sha512
+  public: true
+- name: build-rhel-7-debug
+  plan:
+  - in_parallel:
+      fail_fast: true
+      steps:
+      - get: version
+        passed:
+        - version-source
+        trigger: true
+      - get: source
+        passed:
+        - version-source
+        trigger: true
+      - get: task-image
+  - do:
+    - do:
+      - in_parallel:
+          fail_fast: true
+          steps:
+          - get: gcloud-image
+          - get: geode-native-develop-build-rhel-7-gci
+      - in_parallel:
+          fail_fast: true
+          steps:
+          - config:
+              inputs:
+              - name: geode-native-develop-build-rhel-7-gci
+                path: image
+              outputs:
+              - name: instance
+              platform: linux
+              run:
+                args:
+                - -c
+                - |-
+                  set -ueo pipefail
+                  GOOGLE_PROJECT=apachegeode-ci
+                  GOOGLE_ZONE=us-central1-a
+                  INSTANCE_USER=build
+                  INSTANCE_DIR=$(pwd)/instance
+
+                  if [ ! -d "${INSTANCE_DIR}" ]; then
+                    echo "${INSTANCE_DIR} not found."
+                    exit 1
+                  fi
+                  ssh_key_file=${INSTANCE_DIR}/identity
+                  ssh_pubkey_file=${ssh_key_file}.pub
+                  ssh-keygen -m pem  -t rsa -f ${ssh_key_file} -C "${INSTANCE_USER}" -N '' <<< y
+                  ssh_pubkey=$(cat ${ssh_pubkey_file})
+                  ssh_keys_file=${INSTANCE_DIR}/ssh_keys_file
+                  echo "${INSTANCE_USER}:${ssh_pubkey}" > ${ssh_keys_file}
+                  instance_name=build-$(cat /proc/sys/kernel/random/uuid)
+                  image_name=$(cat image/name)
+                  time_to_live=$(( $(date +%s) + ( 4 * 60 * 60 ) ))
+                  instance_file=${INSTANCE_DIR}/instance.sh
+                  gcloud compute instances create ${instance_name} \
+                      --format='config[export](name,networkInterfaces[0].accessConfigs[0].natIP)' \
+                      --project=${GOOGLE_PROJECT} \
+                      --zone=${GOOGLE_ZONE} \
+                      --subnet=default \
+                      --machine-type=e2-standard-16 \
+                      --boot-disk-size=200GB \
+                      --boot-disk-type=pd-standard \
+                      --boot-disk-device-name=${instance_name} \
+                      --image-project=${GOOGLE_PROJECT} \
+                      --image=${image_name} \
+                      --metadata-from-file ssh-keys=${ssh_keys_file} \
+                      --labels=time-to-live=${time_to_live},pipeline-name=geode-native-develop,build-config=debug \
+                      > ${instance_file}
+                  INSTANCE_USER=build
+                  INSTANCE_DIR=$(pwd)/instance
+
+                  if [ ! -d "${INSTANCE_DIR}" ]; then
+                    echo "${INSTANCE_DIR} not found."
+                    exit 1
+                  fi
+
+                  SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+                  ssh_key_file=${INSTANCE_DIR}/identity
+                  if [ ! -r "${ssh_key_file}" ]; then
+                    echo "${ssh_key_file} not readable."
+                    exit 1
+                  fi
+
+                  instance_file=${INSTANCE_DIR}/instance.sh
+                  if [ ! -r "${instance_file}" ]; then
+                    echo "${instance_file} not readable."
+                    exit 1
+                  fi
+
+                  external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+                  function remote_shell {
+                    ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+                  }
+
+                  function remote_download {
+                    scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+                  }
+
+                  function remote_download_directory {
+                    ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+                  }
+
+                  function remote_upload {
+                    scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+                  }
+                  SSH_OPTIONS="${SSH_OPTIONS} -o ConnectTimeout=10"
+                  echo "Waiting for ssh on ${instance_name} to be ready."
+                  console_file=$(mktemp)
+                  console_next=0
+                  while ! remote_shell echo ready 2>/dev/null ; do
+                    gcloud compute instances get-serial-port-output ${instance_name} \
+                        --start ${console_next} \
+                        --project=${GOOGLE_PROJECT} \
+                        --zone=${GOOGLE_ZONE} \
+                        --format='value[separator="
+                  "](next,contents)' \
+                        > ${console_file}
+                    tmp_next=$(head -n 1 ${console_file})
+                    if (( tmp_next != console_next )); then
+                      console_next=${tmp_next}
+                      sed '1d;s/\x1b\[[0-9;]*[JH]//g' ${console_file}
+                    fi
+                  done
+                path: bash
+            image: gcloud-image
+            task: instance-create
+          - get: geode-latest
+    - in_parallel:
+        fail_fast: true
+        steps:
+        - config:
+            inputs:
+            - name: instance
+            - name: source
+            platform: linux
+            run:
+              args:
+              - -c
+              - |-
+                set -ueo pipefail
+                INSTANCE_USER=build
+                INSTANCE_DIR=$(pwd)/instance
+
+                if [ ! -d "${INSTANCE_DIR}" ]; then
+                  echo "${INSTANCE_DIR} not found."
+                  exit 1
+                fi
+
+                SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+                ssh_key_file=${INSTANCE_DIR}/identity
+                if [ ! -r "${ssh_key_file}" ]; then
+                  echo "${ssh_key_file} not readable."
+                  exit 1
+                fi
+
+                instance_file=${INSTANCE_DIR}/instance.sh
+                if [ ! -r "${instance_file}" ]; then
+                  echo "${instance_file} not readable."
+                  exit 1
+                fi
+
+                external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+                function remote_shell {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+                }
+
+                function remote_download {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+                }
+
+                function remote_download_directory {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+                }
+
+                function remote_upload {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+                }
+                remote_upload source .
+              path: bash
+          image: task-image
+          task: upload-source
+        - config:
+            inputs:
+            - name: instance
+            - name: geode-latest
+            platform: linux
+            run:
+              args:
+              - -c
+              - |-
+                set -ueo pipefail
+                INSTANCE_USER=build
+                INSTANCE_DIR=$(pwd)/instance
+
+                if [ ! -d "${INSTANCE_DIR}" ]; then
+                  echo "${INSTANCE_DIR} not found."
+                  exit 1
+                fi
+
+                SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+                ssh_key_file=${INSTANCE_DIR}/identity
+                if [ ! -r "${ssh_key_file}" ]; then
+                  echo "${ssh_key_file} not readable."
+                  exit 1
+                fi
+
+                instance_file=${INSTANCE_DIR}/instance.sh
+                if [ ! -r "${instance_file}" ]; then
+                  echo "${instance_file} not readable."
+                  exit 1
+                fi
+
+                external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+                function remote_shell {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+                }
+
+                function remote_download {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+                }
+
+                function remote_download_directory {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+                }
+
+                function remote_upload {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+                }
+                geode_version=$(cat geode-latest/version)
+                geode_name="apache-geode-${geode_version}"
+                geode_artifact="${geode_name}.tgz"
+                remote_upload geode-latest/${geode_artifact} .
+                remote_shell cmake -E tar xvf ${geode_artifact}
+                remote_shell cmake -E rename ${geode_name} geode
+              path: bash
+          image: task-image
+          task: upload-geode
+    - config:
+        inputs:
+        - name: instance
+        - name: version
+        - name: source
+        outputs:
+        - name: package
+        params:
+          CMAKE_BUILD_FLAGS: -j16
+          CMAKE_CONFIG: Debug
+          CMAKE_CONFIGURE_FLAGS: ""
+          CPACK_GENERATORS: TGZ
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            pushd source
+            git_url=$(git remote get-url origin)
+            git_rev=$(git rev-parse HEAD)
+            popd
+            version=$(cat version/number)
+            builddate=$(date "+%Y-%m-%d")
+            remote_shell cmake -E make_directory build
+            remote_shell cmake -E time cmake -E chdir build cmake ../source ${CMAKE_CONFIGURE_FLAGS} \
+                -DCMAKE_BUILD_TYPE=${CMAKE_CONFIG} \
+                -DGEODE_ROOT=../geode \
+                -DPRODUCT_VERSION=${version} \
+                -DPRODUCT_BUILDDATE=${builddate} \
+                -DPRODUCT_SOURCE_REVISION=${git_rev} \
+                -DPRODUCT_SOURCE_REPOSITORY=${git_url}
+            remote_shell cmake -E time cmake --build build --config ${CMAKE_CONFIG} -- ${CMAKE_BUILD_FLAGS}
+            remote_shell cmake -E time cmake --build build --config ${CMAKE_CONFIG} --target docs -- ${CMAKE_BUILD_FLAGS}
+            remote_shell cmake -E time cmake -E chdir build cpack -C ${CMAKE_CONFIG} -G "${CPACK_GENERATORS}" | tee cpack.out
+            packages=$(awk '/^CPack: - package: / {print $4}' cpack.out)
+            for package in ${packages}; do
+              remote_download ${package} package/
+            done
+            checksums=$(awk '/^CPack: - checksum file: / {print $5}' cpack.out)
+            for checksum in ${checksums}; do
+              remote_download ${checksum} package/
+            done
+          path: bash
+      image: task-image
+      task: build
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: -j16
+          CMAKE_CONFIG: Debug
+          CMAKE_CONFIGURE_FLAGS: ""
+          CPACK_GENERATORS: TGZ
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/cppcache/test ctest -C ${CMAKE_CONFIG} -j8 --timeout=300 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: cpp-unit-tests
+      timeout: 30m
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: -j16
+          CMAKE_CONFIG: Debug
+          CMAKE_CONFIGURE_FLAGS: ""
+          CPACK_GENERATORS: TGZ
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/cppcache/integration/test ctest -C ${CMAKE_CONFIG} -j4 --timeout=300 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: cpp-integration-tests
+      timeout: 1h
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: -j16
+          CMAKE_CONFIG: Debug
+          CMAKE_CONFIGURE_FLAGS: ""
+          CPACK_GENERATORS: TGZ
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/cppcache/integration-test ctest -C ${CMAKE_CONFIG} -j4 --timeout=500 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: cpp-legacy-integration-tests
+      timeout: 2h
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: -j16
+          CMAKE_CONFIG: Debug
+          CMAKE_CONFIGURE_FLAGS: ""
+          CPACK_GENERATORS: TGZ
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/netcore/netcore-integration-test ctest -C ${CMAKE_CONFIG} -j1 --timeout=Debug --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: netcore-integration-test
+      timeout: 10m
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: -j16
+          CMAKE_CONFIG: Debug
+          CMAKE_CONFIGURE_FLAGS: ""
+          CPACK_GENERATORS: TGZ
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/netcore/netcore-session-integration-test ctest -C ${CMAKE_CONFIG} -j1 --timeout=300 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: netcore-session-integration-test
+      timeout: 10m
+    ensure:
+      in_parallel:
+        steps:
+        - config:
+            inputs:
+            - name: instance
+            platform: linux
+            run:
+              args:
+              - -c
+              - |-
+                set -ueo pipefail
+                GOOGLE_PROJECT=apachegeode-ci
+                GOOGLE_ZONE=us-central1-a
+                INSTANCE_USER=build
+                INSTANCE_DIR=$(pwd)/instance
+
+                if [ ! -d "${INSTANCE_DIR}" ]; then
+                  echo "${INSTANCE_DIR} not found."
+                  exit 1
+                fi
+
+                instance_file=${INSTANCE_DIR}/instance.sh
+                instance_name=$(source ${instance_file} && echo -n ${name})
+
+                gcloud compute instances delete ${instance_name} \
+                    --project=${GOOGLE_PROJECT} \
+                    --zone=${GOOGLE_ZONE} \
+                    --delete-disks=all \
+                    --quiet
+              path: bash
+          image: gcloud-image
+          task: instance-delete
+    on_failure:
+      in_parallel:
+        steps:
+        - config:
+            inputs:
+            - name: instance
+            outputs:
+            - name: build
+            platform: linux
+            run:
+              args:
+              - -c
+              - |-
+                set -ueo pipefail
+                INSTANCE_USER=build
+                INSTANCE_DIR=$(pwd)/instance
+
+                if [ ! -d "${INSTANCE_DIR}" ]; then
+                  echo "${INSTANCE_DIR} not found."
+                  exit 1
+                fi
+
+                SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+                ssh_key_file=${INSTANCE_DIR}/identity
+                if [ ! -r "${ssh_key_file}" ]; then
+                  echo "${ssh_key_file} not readable."
+                  exit 1
+                fi
+
+                instance_file=${INSTANCE_DIR}/instance.sh
+                if [ ! -r "${instance_file}" ]; then
+                  echo "${instance_file} not readable."
+                  exit 1
+                fi
+
+                external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+                function remote_shell {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+                }
+
+                function remote_download {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+                }
+
+                function remote_download_directory {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+                }
+
+                function remote_upload {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+                }
+                remote_download_directory build .
+              path: bash
+          image: task-image
+          task: download-build
+  - in_parallel:
+      fail_fast: true
+      steps:
+      - params:
+          file: package/*-Linux-64bit.tar.gz
+        put: package-rhel-7-debug-archive
+      - params:
+          file: package/*-Linux-64bit.tar.gz.sha512
+        put: package-rhel-7-debug-archive.sha512
+  public: true
+- name: build-rhel-7-release
+  plan:
+  - in_parallel:
+      fail_fast: true
+      steps:
+      - get: version
+        passed:
+        - version-source
+        trigger: true
+      - get: source
+        passed:
+        - version-source
+        trigger: true
+      - get: task-image
+  - do:
+    - do:
+      - in_parallel:
+          fail_fast: true
+          steps:
+          - get: gcloud-image
+          - get: geode-native-develop-build-rhel-7-gci
+      - in_parallel:
+          fail_fast: true
+          steps:
+          - config:
+              inputs:
+              - name: geode-native-develop-build-rhel-7-gci
+                path: image
+              outputs:
+              - name: instance
+              platform: linux
+              run:
+                args:
+                - -c
+                - |-
+                  set -ueo pipefail
+                  GOOGLE_PROJECT=apachegeode-ci
+                  GOOGLE_ZONE=us-central1-a
+                  INSTANCE_USER=build
+                  INSTANCE_DIR=$(pwd)/instance
+
+                  if [ ! -d "${INSTANCE_DIR}" ]; then
+                    echo "${INSTANCE_DIR} not found."
+                    exit 1
+                  fi
+                  ssh_key_file=${INSTANCE_DIR}/identity
+                  ssh_pubkey_file=${ssh_key_file}.pub
+                  ssh-keygen -m pem  -t rsa -f ${ssh_key_file} -C "${INSTANCE_USER}" -N '' <<< y
+                  ssh_pubkey=$(cat ${ssh_pubkey_file})
+                  ssh_keys_file=${INSTANCE_DIR}/ssh_keys_file
+                  echo "${INSTANCE_USER}:${ssh_pubkey}" > ${ssh_keys_file}
+                  instance_name=build-$(cat /proc/sys/kernel/random/uuid)
+                  image_name=$(cat image/name)
+                  time_to_live=$(( $(date +%s) + ( 4 * 60 * 60 ) ))
+                  instance_file=${INSTANCE_DIR}/instance.sh
+                  gcloud compute instances create ${instance_name} \
+                      --format='config[export](name,networkInterfaces[0].accessConfigs[0].natIP)' \
+                      --project=${GOOGLE_PROJECT} \
+                      --zone=${GOOGLE_ZONE} \
+                      --subnet=default \
+                      --machine-type=e2-standard-16 \
+                      --boot-disk-size=200GB \
+                      --boot-disk-type=pd-standard \
+                      --boot-disk-device-name=${instance_name} \
+                      --image-project=${GOOGLE_PROJECT} \
+                      --image=${image_name} \
+                      --metadata-from-file ssh-keys=${ssh_keys_file} \
+                      --labels=time-to-live=${time_to_live},pipeline-name=geode-native-develop,build-config=release \
+                      > ${instance_file}
+                  INSTANCE_USER=build
+                  INSTANCE_DIR=$(pwd)/instance
+
+                  if [ ! -d "${INSTANCE_DIR}" ]; then
+                    echo "${INSTANCE_DIR} not found."
+                    exit 1
+                  fi
+
+                  SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+                  ssh_key_file=${INSTANCE_DIR}/identity
+                  if [ ! -r "${ssh_key_file}" ]; then
+                    echo "${ssh_key_file} not readable."
+                    exit 1
+                  fi
+
+                  instance_file=${INSTANCE_DIR}/instance.sh
+                  if [ ! -r "${instance_file}" ]; then
+                    echo "${instance_file} not readable."
+                    exit 1
+                  fi
+
+                  external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+                  function remote_shell {
+                    ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+                  }
+
+                  function remote_download {
+                    scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+                  }
+
+                  function remote_download_directory {
+                    ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+                  }
+
+                  function remote_upload {
+                    scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+                  }
+                  SSH_OPTIONS="${SSH_OPTIONS} -o ConnectTimeout=10"
+                  echo "Waiting for ssh on ${instance_name} to be ready."
+                  console_file=$(mktemp)
+                  console_next=0
+                  while ! remote_shell echo ready 2>/dev/null ; do
+                    gcloud compute instances get-serial-port-output ${instance_name} \
+                        --start ${console_next} \
+                        --project=${GOOGLE_PROJECT} \
+                        --zone=${GOOGLE_ZONE} \
+                        --format='value[separator="
+                  "](next,contents)' \
+                        > ${console_file}
+                    tmp_next=$(head -n 1 ${console_file})
+                    if (( tmp_next != console_next )); then
+                      console_next=${tmp_next}
+                      sed '1d;s/\x1b\[[0-9;]*[JH]//g' ${console_file}
+                    fi
+                  done
+                path: bash
+            image: gcloud-image
+            task: instance-create
+          - get: geode-latest
+    - in_parallel:
+        fail_fast: true
+        steps:
+        - config:
+            inputs:
+            - name: instance
+            - name: source
+            platform: linux
+            run:
+              args:
+              - -c
+              - |-
+                set -ueo pipefail
+                INSTANCE_USER=build
+                INSTANCE_DIR=$(pwd)/instance
+
+                if [ ! -d "${INSTANCE_DIR}" ]; then
+                  echo "${INSTANCE_DIR} not found."
+                  exit 1
+                fi
+
+                SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+                ssh_key_file=${INSTANCE_DIR}/identity
+                if [ ! -r "${ssh_key_file}" ]; then
+                  echo "${ssh_key_file} not readable."
+                  exit 1
+                fi
+
+                instance_file=${INSTANCE_DIR}/instance.sh
+                if [ ! -r "${instance_file}" ]; then
+                  echo "${instance_file} not readable."
+                  exit 1
+                fi
+
+                external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+                function remote_shell {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+                }
+
+                function remote_download {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+                }
+
+                function remote_download_directory {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+                }
+
+                function remote_upload {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+                }
+                remote_upload source .
+              path: bash
+          image: task-image
+          task: upload-source
+        - config:
+            inputs:
+            - name: instance
+            - name: geode-latest
+            platform: linux
+            run:
+              args:
+              - -c
+              - |-
+                set -ueo pipefail
+                INSTANCE_USER=build
+                INSTANCE_DIR=$(pwd)/instance
+
+                if [ ! -d "${INSTANCE_DIR}" ]; then
+                  echo "${INSTANCE_DIR} not found."
+                  exit 1
+                fi
+
+                SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+                ssh_key_file=${INSTANCE_DIR}/identity
+                if [ ! -r "${ssh_key_file}" ]; then
+                  echo "${ssh_key_file} not readable."
+                  exit 1
+                fi
+
+                instance_file=${INSTANCE_DIR}/instance.sh
+                if [ ! -r "${instance_file}" ]; then
+                  echo "${instance_file} not readable."
+                  exit 1
+                fi
+
+                external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+                function remote_shell {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+                }
+
+                function remote_download {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+                }
+
+                function remote_download_directory {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+                }
+
+                function remote_upload {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+                }
+                geode_version=$(cat geode-latest/version)
+                geode_name="apache-geode-${geode_version}"
+                geode_artifact="${geode_name}.tgz"
+                remote_upload geode-latest/${geode_artifact} .
+                remote_shell cmake -E tar xvf ${geode_artifact}
+                remote_shell cmake -E rename ${geode_name} geode
+              path: bash
+          image: task-image
+          task: upload-geode
+    - config:
+        inputs:
+        - name: instance
+        - name: version
+        - name: source
+        outputs:
+        - name: package
+        params:
+          CMAKE_BUILD_FLAGS: -j16
+          CMAKE_CONFIG: RelWithDebInfo
+          CMAKE_CONFIGURE_FLAGS: ""
+          CPACK_GENERATORS: TGZ
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            pushd source
+            git_url=$(git remote get-url origin)
+            git_rev=$(git rev-parse HEAD)
+            popd
+            version=$(cat version/number)
+            builddate=$(date "+%Y-%m-%d")
+            remote_shell cmake -E make_directory build
+            remote_shell cmake -E time cmake -E chdir build cmake ../source ${CMAKE_CONFIGURE_FLAGS} \
+                -DCMAKE_BUILD_TYPE=${CMAKE_CONFIG} \
+                -DGEODE_ROOT=../geode \
+                -DPRODUCT_VERSION=${version} \
+                -DPRODUCT_BUILDDATE=${builddate} \
+                -DPRODUCT_SOURCE_REVISION=${git_rev} \
+                -DPRODUCT_SOURCE_REPOSITORY=${git_url}
+            remote_shell cmake -E time cmake --build build --config ${CMAKE_CONFIG} -- ${CMAKE_BUILD_FLAGS}
+            remote_shell cmake -E time cmake --build build --config ${CMAKE_CONFIG} --target docs -- ${CMAKE_BUILD_FLAGS}
+            remote_shell cmake -E time cmake -E chdir build cpack -C ${CMAKE_CONFIG} -G "${CPACK_GENERATORS}" | tee cpack.out
+            packages=$(awk '/^CPack: - package: / {print $4}' cpack.out)
+            for package in ${packages}; do
+              remote_download ${package} package/
+            done
+            checksums=$(awk '/^CPack: - checksum file: / {print $5}' cpack.out)
+            for checksum in ${checksums}; do
+              remote_download ${checksum} package/
+            done
+          path: bash
+      image: task-image
+      task: build
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: -j16
+          CMAKE_CONFIG: RelWithDebInfo
+          CMAKE_CONFIGURE_FLAGS: ""
+          CPACK_GENERATORS: TGZ
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/cppcache/test ctest -C ${CMAKE_CONFIG} -j8 --timeout=300 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: cpp-unit-tests
+      timeout: 30m
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: -j16
+          CMAKE_CONFIG: RelWithDebInfo
+          CMAKE_CONFIGURE_FLAGS: ""
+          CPACK_GENERATORS: TGZ
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/cppcache/integration/test ctest -C ${CMAKE_CONFIG} -j4 --timeout=300 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: cpp-integration-tests
+      timeout: 1h
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: -j16
+          CMAKE_CONFIG: RelWithDebInfo
+          CMAKE_CONFIGURE_FLAGS: ""
+          CPACK_GENERATORS: TGZ
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/cppcache/integration-test ctest -C ${CMAKE_CONFIG} -j4 --timeout=500 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: cpp-legacy-integration-tests
+      timeout: 2h
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: -j16
+          CMAKE_CONFIG: RelWithDebInfo
+          CMAKE_CONFIGURE_FLAGS: ""
+          CPACK_GENERATORS: TGZ
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/netcore/netcore-integration-test ctest -C ${CMAKE_CONFIG} -j1 --timeout=RelWithDebInfo --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: netcore-integration-test
+      timeout: 10m
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: -j16
+          CMAKE_CONFIG: RelWithDebInfo
+          CMAKE_CONFIGURE_FLAGS: ""
+          CPACK_GENERATORS: TGZ
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/netcore/netcore-session-integration-test ctest -C ${CMAKE_CONFIG} -j1 --timeout=300 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: netcore-session-integration-test
+      timeout: 10m
+    ensure:
+      in_parallel:
+        steps:
+        - config:
+            inputs:
+            - name: instance
+            platform: linux
+            run:
+              args:
+              - -c
+              - |-
+                set -ueo pipefail
+                GOOGLE_PROJECT=apachegeode-ci
+                GOOGLE_ZONE=us-central1-a
+                INSTANCE_USER=build
+                INSTANCE_DIR=$(pwd)/instance
+
+                if [ ! -d "${INSTANCE_DIR}" ]; then
+                  echo "${INSTANCE_DIR} not found."
+                  exit 1
+                fi
+
+                instance_file=${INSTANCE_DIR}/instance.sh
+                instance_name=$(source ${instance_file} && echo -n ${name})
+
+                gcloud compute instances delete ${instance_name} \
+                    --project=${GOOGLE_PROJECT} \
+                    --zone=${GOOGLE_ZONE} \
+                    --delete-disks=all \
+                    --quiet
+              path: bash
+          image: gcloud-image
+          task: instance-delete
+    on_failure:
+      in_parallel:
+        steps:
+        - config:
+            inputs:
+            - name: instance
+            outputs:
+            - name: build
+            platform: linux
+            run:
+              args:
+              - -c
+              - |-
+                set -ueo pipefail
+                INSTANCE_USER=build
+                INSTANCE_DIR=$(pwd)/instance
+
+                if [ ! -d "${INSTANCE_DIR}" ]; then
+                  echo "${INSTANCE_DIR} not found."
+                  exit 1
+                fi
+
+                SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+                ssh_key_file=${INSTANCE_DIR}/identity
+                if [ ! -r "${ssh_key_file}" ]; then
+                  echo "${ssh_key_file} not readable."
+                  exit 1
+                fi
+
+                instance_file=${INSTANCE_DIR}/instance.sh
+                if [ ! -r "${instance_file}" ]; then
+                  echo "${instance_file} not readable."
+                  exit 1
+                fi
+
+                external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+                function remote_shell {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+                }
+
+                function remote_download {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+                }
+
+                function remote_download_directory {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+                }
+
+                function remote_upload {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+                }
+                remote_download_directory build .
+              path: bash
+          image: task-image
+          task: download-build
+  - in_parallel:
+      fail_fast: true
+      steps:
+      - params:
+          file: package/*-Linux-64bit.tar.gz
+        put: package-rhel-7-release-archive
+      - params:
+          file: package/*-Linux-64bit.tar.gz.sha512
+        put: package-rhel-7-release-archive.sha512
+  public: true
+- name: build-rhel-8-debug
+  plan:
+  - in_parallel:
+      fail_fast: true
+      steps:
+      - get: version
+        passed:
+        - version-source
+        trigger: true
+      - get: source
+        passed:
+        - version-source
+        trigger: true
+      - get: task-image
+  - do:
+    - do:
+      - in_parallel:
+          fail_fast: true
+          steps:
+          - get: gcloud-image
+          - get: geode-native-develop-build-rhel-8-gci
+      - in_parallel:
+          fail_fast: true
+          steps:
+          - config:
+              inputs:
+              - name: geode-native-develop-build-rhel-8-gci
+                path: image
+              outputs:
+              - name: instance
+              platform: linux
+              run:
+                args:
+                - -c
+                - |-
+                  set -ueo pipefail
+                  GOOGLE_PROJECT=apachegeode-ci
+                  GOOGLE_ZONE=us-central1-a
+                  INSTANCE_USER=build
+                  INSTANCE_DIR=$(pwd)/instance
+
+                  if [ ! -d "${INSTANCE_DIR}" ]; then
+                    echo "${INSTANCE_DIR} not found."
+                    exit 1
+                  fi
+                  ssh_key_file=${INSTANCE_DIR}/identity
+                  ssh_pubkey_file=${ssh_key_file}.pub
+                  ssh-keygen -m pem  -t rsa -f ${ssh_key_file} -C "${INSTANCE_USER}" -N '' <<< y
+                  ssh_pubkey=$(cat ${ssh_pubkey_file})
+                  ssh_keys_file=${INSTANCE_DIR}/ssh_keys_file
+                  echo "${INSTANCE_USER}:${ssh_pubkey}" > ${ssh_keys_file}
+                  instance_name=build-$(cat /proc/sys/kernel/random/uuid)
+                  image_name=$(cat image/name)
+                  time_to_live=$(( $(date +%s) + ( 4 * 60 * 60 ) ))
+                  instance_file=${INSTANCE_DIR}/instance.sh
+                  gcloud compute instances create ${instance_name} \
+                      --format='config[export](name,networkInterfaces[0].accessConfigs[0].natIP)' \
+                      --project=${GOOGLE_PROJECT} \
+                      --zone=${GOOGLE_ZONE} \
+                      --subnet=default \
+                      --machine-type=e2-standard-16 \
+                      --boot-disk-size=200GB \
+                      --boot-disk-type=pd-standard \
+                      --boot-disk-device-name=${instance_name} \
+                      --image-project=${GOOGLE_PROJECT} \
+                      --image=${image_name} \
+                      --metadata-from-file ssh-keys=${ssh_keys_file} \
+                      --labels=time-to-live=${time_to_live},pipeline-name=geode-native-develop,build-config=debug \
+                      > ${instance_file}
+                  INSTANCE_USER=build
+                  INSTANCE_DIR=$(pwd)/instance
+
+                  if [ ! -d "${INSTANCE_DIR}" ]; then
+                    echo "${INSTANCE_DIR} not found."
+                    exit 1
+                  fi
+
+                  SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+                  ssh_key_file=${INSTANCE_DIR}/identity
+                  if [ ! -r "${ssh_key_file}" ]; then
+                    echo "${ssh_key_file} not readable."
+                    exit 1
+                  fi
+
+                  instance_file=${INSTANCE_DIR}/instance.sh
+                  if [ ! -r "${instance_file}" ]; then
+                    echo "${instance_file} not readable."
+                    exit 1
+                  fi
+
+                  external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+                  function remote_shell {
+                    ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+                  }
+
+                  function remote_download {
+                    scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+                  }
+
+                  function remote_download_directory {
+                    ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+                  }
+
+                  function remote_upload {
+                    scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+                  }
+                  SSH_OPTIONS="${SSH_OPTIONS} -o ConnectTimeout=10"
+                  echo "Waiting for ssh on ${instance_name} to be ready."
+                  console_file=$(mktemp)
+                  console_next=0
+                  while ! remote_shell echo ready 2>/dev/null ; do
+                    gcloud compute instances get-serial-port-output ${instance_name} \
+                        --start ${console_next} \
+                        --project=${GOOGLE_PROJECT} \
+                        --zone=${GOOGLE_ZONE} \
+                        --format='value[separator="
+                  "](next,contents)' \
+                        > ${console_file}
+                    tmp_next=$(head -n 1 ${console_file})
+                    if (( tmp_next != console_next )); then
+                      console_next=${tmp_next}
+                      sed '1d;s/\x1b\[[0-9;]*[JH]//g' ${console_file}
+                    fi
+                  done
+                path: bash
+            image: gcloud-image
+            task: instance-create
+          - get: geode-latest
+    - in_parallel:
+        fail_fast: true
+        steps:
+        - config:
+            inputs:
+            - name: instance
+            - name: source
+            platform: linux
+            run:
+              args:
+              - -c
+              - |-
+                set -ueo pipefail
+                INSTANCE_USER=build
+                INSTANCE_DIR=$(pwd)/instance
+
+                if [ ! -d "${INSTANCE_DIR}" ]; then
+                  echo "${INSTANCE_DIR} not found."
+                  exit 1
+                fi
+
+                SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+                ssh_key_file=${INSTANCE_DIR}/identity
+                if [ ! -r "${ssh_key_file}" ]; then
+                  echo "${ssh_key_file} not readable."
+                  exit 1
+                fi
+
+                instance_file=${INSTANCE_DIR}/instance.sh
+                if [ ! -r "${instance_file}" ]; then
+                  echo "${instance_file} not readable."
+                  exit 1
+                fi
+
+                external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+                function remote_shell {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+                }
+
+                function remote_download {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+                }
+
+                function remote_download_directory {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+                }
+
+                function remote_upload {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+                }
+                remote_upload source .
+              path: bash
+          image: task-image
+          task: upload-source
+        - config:
+            inputs:
+            - name: instance
+            - name: geode-latest
+            platform: linux
+            run:
+              args:
+              - -c
+              - |-
+                set -ueo pipefail
+                INSTANCE_USER=build
+                INSTANCE_DIR=$(pwd)/instance
+
+                if [ ! -d "${INSTANCE_DIR}" ]; then
+                  echo "${INSTANCE_DIR} not found."
+                  exit 1
+                fi
+
+                SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+                ssh_key_file=${INSTANCE_DIR}/identity
+                if [ ! -r "${ssh_key_file}" ]; then
+                  echo "${ssh_key_file} not readable."
+                  exit 1
+                fi
+
+                instance_file=${INSTANCE_DIR}/instance.sh
+                if [ ! -r "${instance_file}" ]; then
+                  echo "${instance_file} not readable."
+                  exit 1
+                fi
+
+                external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+                function remote_shell {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+                }
+
+                function remote_download {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+                }
+
+                function remote_download_directory {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+                }
+
+                function remote_upload {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+                }
+                geode_version=$(cat geode-latest/version)
+                geode_name="apache-geode-${geode_version}"
+                geode_artifact="${geode_name}.tgz"
+                remote_upload geode-latest/${geode_artifact} .
+                remote_shell cmake -E tar xvf ${geode_artifact}
+                remote_shell cmake -E rename ${geode_name} geode
+              path: bash
+          image: task-image
+          task: upload-geode
+    - config:
+        inputs:
+        - name: instance
+        - name: version
+        - name: source
+        outputs:
+        - name: package
+        params:
+          CMAKE_BUILD_FLAGS: -j16
+          CMAKE_CONFIG: Debug
+          CMAKE_CONFIGURE_FLAGS: -DUSE_IPO=NO
+          CPACK_GENERATORS: TGZ
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            pushd source
+            git_url=$(git remote get-url origin)
+            git_rev=$(git rev-parse HEAD)
+            popd
+            version=$(cat version/number)
+            builddate=$(date "+%Y-%m-%d")
+            remote_shell cmake -E make_directory build
+            remote_shell cmake -E time cmake -E chdir build cmake ../source ${CMAKE_CONFIGURE_FLAGS} \
+                -DCMAKE_BUILD_TYPE=${CMAKE_CONFIG} \
+                -DGEODE_ROOT=../geode \
+                -DPRODUCT_VERSION=${version} \
+                -DPRODUCT_BUILDDATE=${builddate} \
+                -DPRODUCT_SOURCE_REVISION=${git_rev} \
+                -DPRODUCT_SOURCE_REPOSITORY=${git_url}
+            remote_shell cmake -E time cmake --build build --config ${CMAKE_CONFIG} -- ${CMAKE_BUILD_FLAGS}
+            remote_shell cmake -E time cmake --build build --config ${CMAKE_CONFIG} --target docs -- ${CMAKE_BUILD_FLAGS}
+            remote_shell cmake -E time cmake -E chdir build cpack -C ${CMAKE_CONFIG} -G "${CPACK_GENERATORS}" | tee cpack.out
+            packages=$(awk '/^CPack: - package: / {print $4}' cpack.out)
+            for package in ${packages}; do
+              remote_download ${package} package/
+            done
+            checksums=$(awk '/^CPack: - checksum file: / {print $5}' cpack.out)
+            for checksum in ${checksums}; do
+              remote_download ${checksum} package/
+            done
+          path: bash
+      image: task-image
+      task: build
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: -j16
+          CMAKE_CONFIG: Debug
+          CMAKE_CONFIGURE_FLAGS: -DUSE_IPO=NO
+          CPACK_GENERATORS: TGZ
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/cppcache/test ctest -C ${CMAKE_CONFIG} -j8 --timeout=300 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: cpp-unit-tests
+      timeout: 30m
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: -j16
+          CMAKE_CONFIG: Debug
+          CMAKE_CONFIGURE_FLAGS: -DUSE_IPO=NO
+          CPACK_GENERATORS: TGZ
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/cppcache/integration/test ctest -C ${CMAKE_CONFIG} -j4 --timeout=300 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: cpp-integration-tests
+      timeout: 1h
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: -j16
+          CMAKE_CONFIG: Debug
+          CMAKE_CONFIGURE_FLAGS: -DUSE_IPO=NO
+          CPACK_GENERATORS: TGZ
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/cppcache/integration-test ctest -C ${CMAKE_CONFIG} -j4 --timeout=500 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: cpp-legacy-integration-tests
+      timeout: 2h
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: -j16
+          CMAKE_CONFIG: Debug
+          CMAKE_CONFIGURE_FLAGS: -DUSE_IPO=NO
+          CPACK_GENERATORS: TGZ
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/netcore/netcore-integration-test ctest -C ${CMAKE_CONFIG} -j1 --timeout=Debug --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: netcore-integration-test
+      timeout: 10m
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: -j16
+          CMAKE_CONFIG: Debug
+          CMAKE_CONFIGURE_FLAGS: -DUSE_IPO=NO
+          CPACK_GENERATORS: TGZ
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/netcore/netcore-session-integration-test ctest -C ${CMAKE_CONFIG} -j1 --timeout=300 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: netcore-session-integration-test
+      timeout: 10m
+    ensure:
+      in_parallel:
+        steps:
+        - config:
+            inputs:
+            - name: instance
+            platform: linux
+            run:
+              args:
+              - -c
+              - |-
+                set -ueo pipefail
+                GOOGLE_PROJECT=apachegeode-ci
+                GOOGLE_ZONE=us-central1-a
+                INSTANCE_USER=build
+                INSTANCE_DIR=$(pwd)/instance
+
+                if [ ! -d "${INSTANCE_DIR}" ]; then
+                  echo "${INSTANCE_DIR} not found."
+                  exit 1
+                fi
+
+                instance_file=${INSTANCE_DIR}/instance.sh
+                instance_name=$(source ${instance_file} && echo -n ${name})
+
+                gcloud compute instances delete ${instance_name} \
+                    --project=${GOOGLE_PROJECT} \
+                    --zone=${GOOGLE_ZONE} \
+                    --delete-disks=all \
+                    --quiet
+              path: bash
+          image: gcloud-image
+          task: instance-delete
+    on_failure:
+      in_parallel:
+        steps:
+        - config:
+            inputs:
+            - name: instance
+            outputs:
+            - name: build
+            platform: linux
+            run:
+              args:
+              - -c
+              - |-
+                set -ueo pipefail
+                INSTANCE_USER=build
+                INSTANCE_DIR=$(pwd)/instance
+
+                if [ ! -d "${INSTANCE_DIR}" ]; then
+                  echo "${INSTANCE_DIR} not found."
+                  exit 1
+                fi
+
+                SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+                ssh_key_file=${INSTANCE_DIR}/identity
+                if [ ! -r "${ssh_key_file}" ]; then
+                  echo "${ssh_key_file} not readable."
+                  exit 1
+                fi
+
+                instance_file=${INSTANCE_DIR}/instance.sh
+                if [ ! -r "${instance_file}" ]; then
+                  echo "${instance_file} not readable."
+                  exit 1
+                fi
+
+                external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+                function remote_shell {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+                }
+
+                function remote_download {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+                }
+
+                function remote_download_directory {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+                }
+
+                function remote_upload {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+                }
+                remote_download_directory build .
+              path: bash
+          image: task-image
+          task: download-build
+  - in_parallel:
+      fail_fast: true
+      steps:
+      - params:
+          file: package/*-Linux-64bit.tar.gz
+        put: package-rhel-8-debug-archive
+      - params:
+          file: package/*-Linux-64bit.tar.gz.sha512
+        put: package-rhel-8-debug-archive.sha512
+  public: true
+- name: build-rhel-8-release
+  plan:
+  - in_parallel:
+      fail_fast: true
+      steps:
+      - get: version
+        passed:
+        - version-source
+        trigger: true
+      - get: source
+        passed:
+        - version-source
+        trigger: true
+      - get: task-image
+  - do:
+    - do:
+      - in_parallel:
+          fail_fast: true
+          steps:
+          - get: gcloud-image
+          - get: geode-native-develop-build-rhel-8-gci
+      - in_parallel:
+          fail_fast: true
+          steps:
+          - config:
+              inputs:
+              - name: geode-native-develop-build-rhel-8-gci
+                path: image
+              outputs:
+              - name: instance
+              platform: linux
+              run:
+                args:
+                - -c
+                - |-
+                  set -ueo pipefail
+                  GOOGLE_PROJECT=apachegeode-ci
+                  GOOGLE_ZONE=us-central1-a
+                  INSTANCE_USER=build
+                  INSTANCE_DIR=$(pwd)/instance
+
+                  if [ ! -d "${INSTANCE_DIR}" ]; then
+                    echo "${INSTANCE_DIR} not found."
+                    exit 1
+                  fi
+                  ssh_key_file=${INSTANCE_DIR}/identity
+                  ssh_pubkey_file=${ssh_key_file}.pub
+                  ssh-keygen -m pem  -t rsa -f ${ssh_key_file} -C "${INSTANCE_USER}" -N '' <<< y
+                  ssh_pubkey=$(cat ${ssh_pubkey_file})
+                  ssh_keys_file=${INSTANCE_DIR}/ssh_keys_file
+                  echo "${INSTANCE_USER}:${ssh_pubkey}" > ${ssh_keys_file}
+                  instance_name=build-$(cat /proc/sys/kernel/random/uuid)
+                  image_name=$(cat image/name)
+                  time_to_live=$(( $(date +%s) + ( 4 * 60 * 60 ) ))
+                  instance_file=${INSTANCE_DIR}/instance.sh
+                  gcloud compute instances create ${instance_name} \
+                      --format='config[export](name,networkInterfaces[0].accessConfigs[0].natIP)' \
+                      --project=${GOOGLE_PROJECT} \
+                      --zone=${GOOGLE_ZONE} \
+                      --subnet=default \
+                      --machine-type=e2-standard-16 \
+                      --boot-disk-size=200GB \
+                      --boot-disk-type=pd-standard \
+                      --boot-disk-device-name=${instance_name} \
+                      --image-project=${GOOGLE_PROJECT} \
+                      --image=${image_name} \
+                      --metadata-from-file ssh-keys=${ssh_keys_file} \
+                      --labels=time-to-live=${time_to_live},pipeline-name=geode-native-develop,build-config=release \
+                      > ${instance_file}
+                  INSTANCE_USER=build
+                  INSTANCE_DIR=$(pwd)/instance
+
+                  if [ ! -d "${INSTANCE_DIR}" ]; then
+                    echo "${INSTANCE_DIR} not found."
+                    exit 1
+                  fi
+
+                  SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+                  ssh_key_file=${INSTANCE_DIR}/identity
+                  if [ ! -r "${ssh_key_file}" ]; then
+                    echo "${ssh_key_file} not readable."
+                    exit 1
+                  fi
+
+                  instance_file=${INSTANCE_DIR}/instance.sh
+                  if [ ! -r "${instance_file}" ]; then
+                    echo "${instance_file} not readable."
+                    exit 1
+                  fi
+
+                  external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+                  function remote_shell {
+                    ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+                  }
+
+                  function remote_download {
+                    scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+                  }
+
+                  function remote_download_directory {
+                    ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+                  }
+
+                  function remote_upload {
+                    scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+                  }
+                  SSH_OPTIONS="${SSH_OPTIONS} -o ConnectTimeout=10"
+                  echo "Waiting for ssh on ${instance_name} to be ready."
+                  console_file=$(mktemp)
+                  console_next=0
+                  while ! remote_shell echo ready 2>/dev/null ; do
+                    gcloud compute instances get-serial-port-output ${instance_name} \
+                        --start ${console_next} \
+                        --project=${GOOGLE_PROJECT} \
+                        --zone=${GOOGLE_ZONE} \
+                        --format='value[separator="
+                  "](next,contents)' \
+                        > ${console_file}
+                    tmp_next=$(head -n 1 ${console_file})
+                    if (( tmp_next != console_next )); then
+                      console_next=${tmp_next}
+                      sed '1d;s/\x1b\[[0-9;]*[JH]//g' ${console_file}
+                    fi
+                  done
+                path: bash
+            image: gcloud-image
+            task: instance-create
+          - get: geode-latest
+    - in_parallel:
+        fail_fast: true
+        steps:
+        - config:
+            inputs:
+            - name: instance
+            - name: source
+            platform: linux
+            run:
+              args:
+              - -c
+              - |-
+                set -ueo pipefail
+                INSTANCE_USER=build
+                INSTANCE_DIR=$(pwd)/instance
+
+                if [ ! -d "${INSTANCE_DIR}" ]; then
+                  echo "${INSTANCE_DIR} not found."
+                  exit 1
+                fi
+
+                SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+                ssh_key_file=${INSTANCE_DIR}/identity
+                if [ ! -r "${ssh_key_file}" ]; then
+                  echo "${ssh_key_file} not readable."
+                  exit 1
+                fi
+
+                instance_file=${INSTANCE_DIR}/instance.sh
+                if [ ! -r "${instance_file}" ]; then
+                  echo "${instance_file} not readable."
+                  exit 1
+                fi
+
+                external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+                function remote_shell {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+                }
+
+                function remote_download {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+                }
+
+                function remote_download_directory {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+                }
+
+                function remote_upload {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+                }
+                remote_upload source .
+              path: bash
+          image: task-image
+          task: upload-source
+        - config:
+            inputs:
+            - name: instance
+            - name: geode-latest
+            platform: linux
+            run:
+              args:
+              - -c
+              - |-
+                set -ueo pipefail
+                INSTANCE_USER=build
+                INSTANCE_DIR=$(pwd)/instance
+
+                if [ ! -d "${INSTANCE_DIR}" ]; then
+                  echo "${INSTANCE_DIR} not found."
+                  exit 1
+                fi
+
+                SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+                ssh_key_file=${INSTANCE_DIR}/identity
+                if [ ! -r "${ssh_key_file}" ]; then
+                  echo "${ssh_key_file} not readable."
+                  exit 1
+                fi
+
+                instance_file=${INSTANCE_DIR}/instance.sh
+                if [ ! -r "${instance_file}" ]; then
+                  echo "${instance_file} not readable."
+                  exit 1
+                fi
+
+                external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+                function remote_shell {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+                }
+
+                function remote_download {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+                }
+
+                function remote_download_directory {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+                }
+
+                function remote_upload {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+                }
+                geode_version=$(cat geode-latest/version)
+                geode_name="apache-geode-${geode_version}"
+                geode_artifact="${geode_name}.tgz"
+                remote_upload geode-latest/${geode_artifact} .
+                remote_shell cmake -E tar xvf ${geode_artifact}
+                remote_shell cmake -E rename ${geode_name} geode
+              path: bash
+          image: task-image
+          task: upload-geode
+    - config:
+        inputs:
+        - name: instance
+        - name: version
+        - name: source
+        outputs:
+        - name: package
+        params:
+          CMAKE_BUILD_FLAGS: -j16
+          CMAKE_CONFIG: RelWithDebInfo
+          CMAKE_CONFIGURE_FLAGS: -DUSE_IPO=NO
+          CPACK_GENERATORS: TGZ
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            pushd source
+            git_url=$(git remote get-url origin)
+            git_rev=$(git rev-parse HEAD)
+            popd
+            version=$(cat version/number)
+            builddate=$(date "+%Y-%m-%d")
+            remote_shell cmake -E make_directory build
+            remote_shell cmake -E time cmake -E chdir build cmake ../source ${CMAKE_CONFIGURE_FLAGS} \
+                -DCMAKE_BUILD_TYPE=${CMAKE_CONFIG} \
+                -DGEODE_ROOT=../geode \
+                -DPRODUCT_VERSION=${version} \
+                -DPRODUCT_BUILDDATE=${builddate} \
+                -DPRODUCT_SOURCE_REVISION=${git_rev} \
+                -DPRODUCT_SOURCE_REPOSITORY=${git_url}
+            remote_shell cmake -E time cmake --build build --config ${CMAKE_CONFIG} -- ${CMAKE_BUILD_FLAGS}
+            remote_shell cmake -E time cmake --build build --config ${CMAKE_CONFIG} --target docs -- ${CMAKE_BUILD_FLAGS}
+            remote_shell cmake -E time cmake -E chdir build cpack -C ${CMAKE_CONFIG} -G "${CPACK_GENERATORS}" | tee cpack.out
+            packages=$(awk '/^CPack: - package: / {print $4}' cpack.out)
+            for package in ${packages}; do
+              remote_download ${package} package/
+            done
+            checksums=$(awk '/^CPack: - checksum file: / {print $5}' cpack.out)
+            for checksum in ${checksums}; do
+              remote_download ${checksum} package/
+            done
+          path: bash
+      image: task-image
+      task: build
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: -j16
+          CMAKE_CONFIG: RelWithDebInfo
+          CMAKE_CONFIGURE_FLAGS: -DUSE_IPO=NO
+          CPACK_GENERATORS: TGZ
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/cppcache/test ctest -C ${CMAKE_CONFIG} -j8 --timeout=300 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: cpp-unit-tests
+      timeout: 30m
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: -j16
+          CMAKE_CONFIG: RelWithDebInfo
+          CMAKE_CONFIGURE_FLAGS: -DUSE_IPO=NO
+          CPACK_GENERATORS: TGZ
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/cppcache/integration/test ctest -C ${CMAKE_CONFIG} -j4 --timeout=300 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: cpp-integration-tests
+      timeout: 1h
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: -j16
+          CMAKE_CONFIG: RelWithDebInfo
+          CMAKE_CONFIGURE_FLAGS: -DUSE_IPO=NO
+          CPACK_GENERATORS: TGZ
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/cppcache/integration-test ctest -C ${CMAKE_CONFIG} -j4 --timeout=500 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: cpp-legacy-integration-tests
+      timeout: 2h
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: -j16
+          CMAKE_CONFIG: RelWithDebInfo
+          CMAKE_CONFIGURE_FLAGS: -DUSE_IPO=NO
+          CPACK_GENERATORS: TGZ
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/netcore/netcore-integration-test ctest -C ${CMAKE_CONFIG} -j1 --timeout=RelWithDebInfo --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: netcore-integration-test
+      timeout: 10m
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: -j16
+          CMAKE_CONFIG: RelWithDebInfo
+          CMAKE_CONFIGURE_FLAGS: -DUSE_IPO=NO
+          CPACK_GENERATORS: TGZ
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/netcore/netcore-session-integration-test ctest -C ${CMAKE_CONFIG} -j1 --timeout=300 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: netcore-session-integration-test
+      timeout: 10m
+    ensure:
+      in_parallel:
+        steps:
+        - config:
+            inputs:
+            - name: instance
+            platform: linux
+            run:
+              args:
+              - -c
+              - |-
+                set -ueo pipefail
+                GOOGLE_PROJECT=apachegeode-ci
+                GOOGLE_ZONE=us-central1-a
+                INSTANCE_USER=build
+                INSTANCE_DIR=$(pwd)/instance
+
+                if [ ! -d "${INSTANCE_DIR}" ]; then
+                  echo "${INSTANCE_DIR} not found."
+                  exit 1
+                fi
+
+                instance_file=${INSTANCE_DIR}/instance.sh
+                instance_name=$(source ${instance_file} && echo -n ${name})
+
+                gcloud compute instances delete ${instance_name} \
+                    --project=${GOOGLE_PROJECT} \
+                    --zone=${GOOGLE_ZONE} \
+                    --delete-disks=all \
+                    --quiet
+              path: bash
+          image: gcloud-image
+          task: instance-delete
+    on_failure:
+      in_parallel:
+        steps:
+        - config:
+            inputs:
+            - name: instance
+            outputs:
+            - name: build
+            platform: linux
+            run:
+              args:
+              - -c
+              - |-
+                set -ueo pipefail
+                INSTANCE_USER=build
+                INSTANCE_DIR=$(pwd)/instance
+
+                if [ ! -d "${INSTANCE_DIR}" ]; then
+                  echo "${INSTANCE_DIR} not found."
+                  exit 1
+                fi
+
+                SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+                ssh_key_file=${INSTANCE_DIR}/identity
+                if [ ! -r "${ssh_key_file}" ]; then
+                  echo "${ssh_key_file} not readable."
+                  exit 1
+                fi
+
+                instance_file=${INSTANCE_DIR}/instance.sh
+                if [ ! -r "${instance_file}" ]; then
+                  echo "${instance_file} not readable."
+                  exit 1
+                fi
+
+                external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+                function remote_shell {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+                }
+
+                function remote_download {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+                }
+
+                function remote_download_directory {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+                }
+
+                function remote_upload {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+                }
+                remote_download_directory build .
+              path: bash
+          image: task-image
+          task: download-build
+  - in_parallel:
+      fail_fast: true
+      steps:
+      - params:
+          file: package/*-Linux-64bit.tar.gz
+        put: package-rhel-8-release-archive
+      - params:
+          file: package/*-Linux-64bit.tar.gz.sha512
+        put: package-rhel-8-release-archive.sha512
+  public: true
+- name: build-ubuntu-16.04-debug
+  plan:
+  - in_parallel:
+      fail_fast: true
+      steps:
+      - get: version
+        passed:
+        - version-source
+        trigger: true
+      - get: source
+        passed:
+        - version-source
+        trigger: true
+      - get: task-image
+  - do:
+    - do:
+      - in_parallel:
+          fail_fast: true
+          steps:
+          - get: gcloud-image
+          - get: geode-native-develop-build-ubuntu-16-04-gci
+      - in_parallel:
+          fail_fast: true
+          steps:
+          - config:
+              inputs:
+              - name: geode-native-develop-build-ubuntu-16-04-gci
+                path: image
+              outputs:
+              - name: instance
+              platform: linux
+              run:
+                args:
+                - -c
+                - |-
+                  set -ueo pipefail
+                  GOOGLE_PROJECT=apachegeode-ci
+                  GOOGLE_ZONE=us-central1-a
+                  INSTANCE_USER=build
+                  INSTANCE_DIR=$(pwd)/instance
+
+                  if [ ! -d "${INSTANCE_DIR}" ]; then
+                    echo "${INSTANCE_DIR} not found."
+                    exit 1
+                  fi
+                  ssh_key_file=${INSTANCE_DIR}/identity
+                  ssh_pubkey_file=${ssh_key_file}.pub
+                  ssh-keygen -m pem  -t rsa -f ${ssh_key_file} -C "${INSTANCE_USER}" -N '' <<< y
+                  ssh_pubkey=$(cat ${ssh_pubkey_file})
+                  ssh_keys_file=${INSTANCE_DIR}/ssh_keys_file
+                  echo "${INSTANCE_USER}:${ssh_pubkey}" > ${ssh_keys_file}
+                  instance_name=build-$(cat /proc/sys/kernel/random/uuid)
+                  image_name=$(cat image/name)
+                  time_to_live=$(( $(date +%s) + ( 4 * 60 * 60 ) ))
+                  instance_file=${INSTANCE_DIR}/instance.sh
+                  gcloud compute instances create ${instance_name} \
+                      --format='config[export](name,networkInterfaces[0].accessConfigs[0].natIP)' \
+                      --project=${GOOGLE_PROJECT} \
+                      --zone=${GOOGLE_ZONE} \
+                      --subnet=default \
+                      --machine-type=e2-standard-16 \
+                      --boot-disk-size=200GB \
+                      --boot-disk-type=pd-standard \
+                      --boot-disk-device-name=${instance_name} \
+                      --image-project=${GOOGLE_PROJECT} \
+                      --image=${image_name} \
+                      --metadata-from-file ssh-keys=${ssh_keys_file} \
+                      --labels=time-to-live=${time_to_live},pipeline-name=geode-native-develop,build-config=debug \
+                      > ${instance_file}
+                  INSTANCE_USER=build
+                  INSTANCE_DIR=$(pwd)/instance
+
+                  if [ ! -d "${INSTANCE_DIR}" ]; then
+                    echo "${INSTANCE_DIR} not found."
+                    exit 1
+                  fi
+
+                  SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+                  ssh_key_file=${INSTANCE_DIR}/identity
+                  if [ ! -r "${ssh_key_file}" ]; then
+                    echo "${ssh_key_file} not readable."
+                    exit 1
+                  fi
+
+                  instance_file=${INSTANCE_DIR}/instance.sh
+                  if [ ! -r "${instance_file}" ]; then
+                    echo "${instance_file} not readable."
+                    exit 1
+                  fi
+
+                  external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+                  function remote_shell {
+                    ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+                  }
+
+                  function remote_download {
+                    scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+                  }
+
+                  function remote_download_directory {
+                    ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+                  }
+
+                  function remote_upload {
+                    scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+                  }
+                  SSH_OPTIONS="${SSH_OPTIONS} -o ConnectTimeout=10"
+                  echo "Waiting for ssh on ${instance_name} to be ready."
+                  console_file=$(mktemp)
+                  console_next=0
+                  while ! remote_shell echo ready 2>/dev/null ; do
+                    gcloud compute instances get-serial-port-output ${instance_name} \
+                        --start ${console_next} \
+                        --project=${GOOGLE_PROJECT} \
+                        --zone=${GOOGLE_ZONE} \
+                        --format='value[separator="
+                  "](next,contents)' \
+                        > ${console_file}
+                    tmp_next=$(head -n 1 ${console_file})
+                    if (( tmp_next != console_next )); then
+                      console_next=${tmp_next}
+                      sed '1d;s/\x1b\[[0-9;]*[JH]//g' ${console_file}
+                    fi
+                  done
+                path: bash
+            image: gcloud-image
+            task: instance-create
+          - get: geode-latest
+    - in_parallel:
+        fail_fast: true
+        steps:
+        - config:
+            inputs:
+            - name: instance
+            - name: source
+            platform: linux
+            run:
+              args:
+              - -c
+              - |-
+                set -ueo pipefail
+                INSTANCE_USER=build
+                INSTANCE_DIR=$(pwd)/instance
+
+                if [ ! -d "${INSTANCE_DIR}" ]; then
+                  echo "${INSTANCE_DIR} not found."
+                  exit 1
+                fi
+
+                SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+                ssh_key_file=${INSTANCE_DIR}/identity
+                if [ ! -r "${ssh_key_file}" ]; then
+                  echo "${ssh_key_file} not readable."
+                  exit 1
+                fi
+
+                instance_file=${INSTANCE_DIR}/instance.sh
+                if [ ! -r "${instance_file}" ]; then
+                  echo "${instance_file} not readable."
+                  exit 1
+                fi
+
+                external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+                function remote_shell {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+                }
+
+                function remote_download {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+                }
+
+                function remote_download_directory {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+                }
+
+                function remote_upload {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+                }
+                remote_upload source .
+              path: bash
+          image: task-image
+          task: upload-source
+        - config:
+            inputs:
+            - name: instance
+            - name: geode-latest
+            platform: linux
+            run:
+              args:
+              - -c
+              - |-
+                set -ueo pipefail
+                INSTANCE_USER=build
+                INSTANCE_DIR=$(pwd)/instance
+
+                if [ ! -d "${INSTANCE_DIR}" ]; then
+                  echo "${INSTANCE_DIR} not found."
+                  exit 1
+                fi
+
+                SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+                ssh_key_file=${INSTANCE_DIR}/identity
+                if [ ! -r "${ssh_key_file}" ]; then
+                  echo "${ssh_key_file} not readable."
+                  exit 1
+                fi
+
+                instance_file=${INSTANCE_DIR}/instance.sh
+                if [ ! -r "${instance_file}" ]; then
+                  echo "${instance_file} not readable."
+                  exit 1
+                fi
+
+                external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+                function remote_shell {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+                }
+
+                function remote_download {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+                }
+
+                function remote_download_directory {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+                }
+
+                function remote_upload {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+                }
+                geode_version=$(cat geode-latest/version)
+                geode_name="apache-geode-${geode_version}"
+                geode_artifact="${geode_name}.tgz"
+                remote_upload geode-latest/${geode_artifact} .
+                remote_shell cmake -E tar xvf ${geode_artifact}
+                remote_shell cmake -E rename ${geode_name} geode
+              path: bash
+          image: task-image
+          task: upload-geode
+    - config:
+        inputs:
+        - name: instance
+        - name: version
+        - name: source
+        outputs:
+        - name: package
+        params:
+          CMAKE_BUILD_FLAGS: -j16
+          CMAKE_CONFIG: Debug
+          CMAKE_CONFIGURE_FLAGS: ""
+          CPACK_GENERATORS: TGZ
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            pushd source
+            git_url=$(git remote get-url origin)
+            git_rev=$(git rev-parse HEAD)
+            popd
+            version=$(cat version/number)
+            builddate=$(date "+%Y-%m-%d")
+            remote_shell cmake -E make_directory build
+            remote_shell cmake -E time cmake -E chdir build cmake ../source ${CMAKE_CONFIGURE_FLAGS} \
+                -DCMAKE_BUILD_TYPE=${CMAKE_CONFIG} \
+                -DGEODE_ROOT=../geode \
+                -DPRODUCT_VERSION=${version} \
+                -DPRODUCT_BUILDDATE=${builddate} \
+                -DPRODUCT_SOURCE_REVISION=${git_rev} \
+                -DPRODUCT_SOURCE_REPOSITORY=${git_url}
+            remote_shell cmake -E time cmake --build build --config ${CMAKE_CONFIG} -- ${CMAKE_BUILD_FLAGS}
+            remote_shell cmake -E time cmake --build build --config ${CMAKE_CONFIG} --target docs -- ${CMAKE_BUILD_FLAGS}
+            remote_shell cmake -E time cmake -E chdir build cpack -C ${CMAKE_CONFIG} -G "${CPACK_GENERATORS}" | tee cpack.out
+            packages=$(awk '/^CPack: - package: / {print $4}' cpack.out)
+            for package in ${packages}; do
+              remote_download ${package} package/
+            done
+            checksums=$(awk '/^CPack: - checksum file: / {print $5}' cpack.out)
+            for checksum in ${checksums}; do
+              remote_download ${checksum} package/
+            done
+          path: bash
+      image: task-image
+      task: build
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: -j16
+          CMAKE_CONFIG: Debug
+          CMAKE_CONFIGURE_FLAGS: ""
+          CPACK_GENERATORS: TGZ
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/cppcache/test ctest -C ${CMAKE_CONFIG} -j8 --timeout=300 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: cpp-unit-tests
+      timeout: 30m
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: -j16
+          CMAKE_CONFIG: Debug
+          CMAKE_CONFIGURE_FLAGS: ""
+          CPACK_GENERATORS: TGZ
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/cppcache/integration/test ctest -C ${CMAKE_CONFIG} -j4 --timeout=300 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: cpp-integration-tests
+      timeout: 1h
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: -j16
+          CMAKE_CONFIG: Debug
+          CMAKE_CONFIGURE_FLAGS: ""
+          CPACK_GENERATORS: TGZ
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/cppcache/integration-test ctest -C ${CMAKE_CONFIG} -j4 --timeout=500 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: cpp-legacy-integration-tests
+      timeout: 2h
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: -j16
+          CMAKE_CONFIG: Debug
+          CMAKE_CONFIGURE_FLAGS: ""
+          CPACK_GENERATORS: TGZ
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/netcore/netcore-integration-test ctest -C ${CMAKE_CONFIG} -j1 --timeout=Debug --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: netcore-integration-test
+      timeout: 10m
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: -j16
+          CMAKE_CONFIG: Debug
+          CMAKE_CONFIGURE_FLAGS: ""
+          CPACK_GENERATORS: TGZ
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/netcore/netcore-session-integration-test ctest -C ${CMAKE_CONFIG} -j1 --timeout=300 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: netcore-session-integration-test
+      timeout: 10m
+    ensure:
+      in_parallel:
+        steps:
+        - config:
+            inputs:
+            - name: instance
+            platform: linux
+            run:
+              args:
+              - -c
+              - |-
+                set -ueo pipefail
+                GOOGLE_PROJECT=apachegeode-ci
+                GOOGLE_ZONE=us-central1-a
+                INSTANCE_USER=build
+                INSTANCE_DIR=$(pwd)/instance
+
+                if [ ! -d "${INSTANCE_DIR}" ]; then
+                  echo "${INSTANCE_DIR} not found."
+                  exit 1
+                fi
+
+                instance_file=${INSTANCE_DIR}/instance.sh
+                instance_name=$(source ${instance_file} && echo -n ${name})
+
+                gcloud compute instances delete ${instance_name} \
+                    --project=${GOOGLE_PROJECT} \
+                    --zone=${GOOGLE_ZONE} \
+                    --delete-disks=all \
+                    --quiet
+              path: bash
+          image: gcloud-image
+          task: instance-delete
+    on_failure:
+      in_parallel:
+        steps:
+        - config:
+            inputs:
+            - name: instance
+            outputs:
+            - name: build
+            platform: linux
+            run:
+              args:
+              - -c
+              - |-
+                set -ueo pipefail
+                INSTANCE_USER=build
+                INSTANCE_DIR=$(pwd)/instance
+
+                if [ ! -d "${INSTANCE_DIR}" ]; then
+                  echo "${INSTANCE_DIR} not found."
+                  exit 1
+                fi
+
+                SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+                ssh_key_file=${INSTANCE_DIR}/identity
+                if [ ! -r "${ssh_key_file}" ]; then
+                  echo "${ssh_key_file} not readable."
+                  exit 1
+                fi
+
+                instance_file=${INSTANCE_DIR}/instance.sh
+                if [ ! -r "${instance_file}" ]; then
+                  echo "${instance_file} not readable."
+                  exit 1
+                fi
+
+                external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+                function remote_shell {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+                }
+
+                function remote_download {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+                }
+
+                function remote_download_directory {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+                }
+
+                function remote_upload {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+                }
+                remote_download_directory build .
+              path: bash
+          image: task-image
+          task: download-build
+  - in_parallel:
+      fail_fast: true
+      steps:
+      - params:
+          file: package/*-Linux-64bit.tar.gz
+        put: package-ubuntu-16.04-debug-archive
+      - params:
+          file: package/*-Linux-64bit.tar.gz.sha512
+        put: package-ubuntu-16.04-debug-archive.sha512
+  public: true
+- name: build-ubuntu-16.04-release
+  plan:
+  - in_parallel:
+      fail_fast: true
+      steps:
+      - get: version
+        passed:
+        - version-source
+        trigger: true
+      - get: source
+        passed:
+        - version-source
+        trigger: true
+      - get: task-image
+  - do:
+    - do:
+      - in_parallel:
+          fail_fast: true
+          steps:
+          - get: gcloud-image
+          - get: geode-native-develop-build-ubuntu-16-04-gci
+      - in_parallel:
+          fail_fast: true
+          steps:
+          - config:
+              inputs:
+              - name: geode-native-develop-build-ubuntu-16-04-gci
+                path: image
+              outputs:
+              - name: instance
+              platform: linux
+              run:
+                args:
+                - -c
+                - |-
+                  set -ueo pipefail
+                  GOOGLE_PROJECT=apachegeode-ci
+                  GOOGLE_ZONE=us-central1-a
+                  INSTANCE_USER=build
+                  INSTANCE_DIR=$(pwd)/instance
+
+                  if [ ! -d "${INSTANCE_DIR}" ]; then
+                    echo "${INSTANCE_DIR} not found."
+                    exit 1
+                  fi
+                  ssh_key_file=${INSTANCE_DIR}/identity
+                  ssh_pubkey_file=${ssh_key_file}.pub
+                  ssh-keygen -m pem  -t rsa -f ${ssh_key_file} -C "${INSTANCE_USER}" -N '' <<< y
+                  ssh_pubkey=$(cat ${ssh_pubkey_file})
+                  ssh_keys_file=${INSTANCE_DIR}/ssh_keys_file
+                  echo "${INSTANCE_USER}:${ssh_pubkey}" > ${ssh_keys_file}
+                  instance_name=build-$(cat /proc/sys/kernel/random/uuid)
+                  image_name=$(cat image/name)
+                  time_to_live=$(( $(date +%s) + ( 4 * 60 * 60 ) ))
+                  instance_file=${INSTANCE_DIR}/instance.sh
+                  gcloud compute instances create ${instance_name} \
+                      --format='config[export](name,networkInterfaces[0].accessConfigs[0].natIP)' \
+                      --project=${GOOGLE_PROJECT} \
+                      --zone=${GOOGLE_ZONE} \
+                      --subnet=default \
+                      --machine-type=e2-standard-16 \
+                      --boot-disk-size=200GB \
+                      --boot-disk-type=pd-standard \
+                      --boot-disk-device-name=${instance_name} \
+                      --image-project=${GOOGLE_PROJECT} \
+                      --image=${image_name} \
+                      --metadata-from-file ssh-keys=${ssh_keys_file} \
+                      --labels=time-to-live=${time_to_live},pipeline-name=geode-native-develop,build-config=release \
+                      > ${instance_file}
+                  INSTANCE_USER=build
+                  INSTANCE_DIR=$(pwd)/instance
+
+                  if [ ! -d "${INSTANCE_DIR}" ]; then
+                    echo "${INSTANCE_DIR} not found."
+                    exit 1
+                  fi
+
+                  SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+                  ssh_key_file=${INSTANCE_DIR}/identity
+                  if [ ! -r "${ssh_key_file}" ]; then
+                    echo "${ssh_key_file} not readable."
+                    exit 1
+                  fi
+
+                  instance_file=${INSTANCE_DIR}/instance.sh
+                  if [ ! -r "${instance_file}" ]; then
+                    echo "${instance_file} not readable."
+                    exit 1
+                  fi
+
+                  external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+                  function remote_shell {
+                    ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+                  }
+
+                  function remote_download {
+                    scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+                  }
+
+                  function remote_download_directory {
+                    ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+                  }
+
+                  function remote_upload {
+                    scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+                  }
+                  SSH_OPTIONS="${SSH_OPTIONS} -o ConnectTimeout=10"
+                  echo "Waiting for ssh on ${instance_name} to be ready."
+                  console_file=$(mktemp)
+                  console_next=0
+                  while ! remote_shell echo ready 2>/dev/null ; do
+                    gcloud compute instances get-serial-port-output ${instance_name} \
+                        --start ${console_next} \
+                        --project=${GOOGLE_PROJECT} \
+                        --zone=${GOOGLE_ZONE} \
+                        --format='value[separator="
+                  "](next,contents)' \
+                        > ${console_file}
+                    tmp_next=$(head -n 1 ${console_file})
+                    if (( tmp_next != console_next )); then
+                      console_next=${tmp_next}
+                      sed '1d;s/\x1b\[[0-9;]*[JH]//g' ${console_file}
+                    fi
+                  done
+                path: bash
+            image: gcloud-image
+            task: instance-create
+          - get: geode-latest
+    - in_parallel:
+        fail_fast: true
+        steps:
+        - config:
+            inputs:
+            - name: instance
+            - name: source
+            platform: linux
+            run:
+              args:
+              - -c
+              - |-
+                set -ueo pipefail
+                INSTANCE_USER=build
+                INSTANCE_DIR=$(pwd)/instance
+
+                if [ ! -d "${INSTANCE_DIR}" ]; then
+                  echo "${INSTANCE_DIR} not found."
+                  exit 1
+                fi
+
+                SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+                ssh_key_file=${INSTANCE_DIR}/identity
+                if [ ! -r "${ssh_key_file}" ]; then
+                  echo "${ssh_key_file} not readable."
+                  exit 1
+                fi
+
+                instance_file=${INSTANCE_DIR}/instance.sh
+                if [ ! -r "${instance_file}" ]; then
+                  echo "${instance_file} not readable."
+                  exit 1
+                fi
+
+                external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+                function remote_shell {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+                }
+
+                function remote_download {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+                }
+
+                function remote_download_directory {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+                }
+
+                function remote_upload {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+                }
+                remote_upload source .
+              path: bash
+          image: task-image
+          task: upload-source
+        - config:
+            inputs:
+            - name: instance
+            - name: geode-latest
+            platform: linux
+            run:
+              args:
+              - -c
+              - |-
+                set -ueo pipefail
+                INSTANCE_USER=build
+                INSTANCE_DIR=$(pwd)/instance
+
+                if [ ! -d "${INSTANCE_DIR}" ]; then
+                  echo "${INSTANCE_DIR} not found."
+                  exit 1
+                fi
+
+                SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+                ssh_key_file=${INSTANCE_DIR}/identity
+                if [ ! -r "${ssh_key_file}" ]; then
+                  echo "${ssh_key_file} not readable."
+                  exit 1
+                fi
+
+                instance_file=${INSTANCE_DIR}/instance.sh
+                if [ ! -r "${instance_file}" ]; then
+                  echo "${instance_file} not readable."
+                  exit 1
+                fi
+
+                external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+                function remote_shell {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+                }
+
+                function remote_download {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+                }
+
+                function remote_download_directory {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+                }
+
+                function remote_upload {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+                }
+                geode_version=$(cat geode-latest/version)
+                geode_name="apache-geode-${geode_version}"
+                geode_artifact="${geode_name}.tgz"
+                remote_upload geode-latest/${geode_artifact} .
+                remote_shell cmake -E tar xvf ${geode_artifact}
+                remote_shell cmake -E rename ${geode_name} geode
+              path: bash
+          image: task-image
+          task: upload-geode
+    - config:
+        inputs:
+        - name: instance
+        - name: version
+        - name: source
+        outputs:
+        - name: package
+        params:
+          CMAKE_BUILD_FLAGS: -j16
+          CMAKE_CONFIG: RelWithDebInfo
+          CMAKE_CONFIGURE_FLAGS: ""
+          CPACK_GENERATORS: TGZ
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            pushd source
+            git_url=$(git remote get-url origin)
+            git_rev=$(git rev-parse HEAD)
+            popd
+            version=$(cat version/number)
+            builddate=$(date "+%Y-%m-%d")
+            remote_shell cmake -E make_directory build
+            remote_shell cmake -E time cmake -E chdir build cmake ../source ${CMAKE_CONFIGURE_FLAGS} \
+                -DCMAKE_BUILD_TYPE=${CMAKE_CONFIG} \
+                -DGEODE_ROOT=../geode \
+                -DPRODUCT_VERSION=${version} \
+                -DPRODUCT_BUILDDATE=${builddate} \
+                -DPRODUCT_SOURCE_REVISION=${git_rev} \
+                -DPRODUCT_SOURCE_REPOSITORY=${git_url}
+            remote_shell cmake -E time cmake --build build --config ${CMAKE_CONFIG} -- ${CMAKE_BUILD_FLAGS}
+            remote_shell cmake -E time cmake --build build --config ${CMAKE_CONFIG} --target docs -- ${CMAKE_BUILD_FLAGS}
+            remote_shell cmake -E time cmake -E chdir build cpack -C ${CMAKE_CONFIG} -G "${CPACK_GENERATORS}" | tee cpack.out
+            packages=$(awk '/^CPack: - package: / {print $4}' cpack.out)
+            for package in ${packages}; do
+              remote_download ${package} package/
+            done
+            checksums=$(awk '/^CPack: - checksum file: / {print $5}' cpack.out)
+            for checksum in ${checksums}; do
+              remote_download ${checksum} package/
+            done
+          path: bash
+      image: task-image
+      task: build
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: -j16
+          CMAKE_CONFIG: RelWithDebInfo
+          CMAKE_CONFIGURE_FLAGS: ""
+          CPACK_GENERATORS: TGZ
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/cppcache/test ctest -C ${CMAKE_CONFIG} -j8 --timeout=300 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: cpp-unit-tests
+      timeout: 30m
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: -j16
+          CMAKE_CONFIG: RelWithDebInfo
+          CMAKE_CONFIGURE_FLAGS: ""
+          CPACK_GENERATORS: TGZ
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/cppcache/integration/test ctest -C ${CMAKE_CONFIG} -j4 --timeout=300 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: cpp-integration-tests
+      timeout: 1h
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: -j16
+          CMAKE_CONFIG: RelWithDebInfo
+          CMAKE_CONFIGURE_FLAGS: ""
+          CPACK_GENERATORS: TGZ
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/cppcache/integration-test ctest -C ${CMAKE_CONFIG} -j4 --timeout=500 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: cpp-legacy-integration-tests
+      timeout: 2h
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: -j16
+          CMAKE_CONFIG: RelWithDebInfo
+          CMAKE_CONFIGURE_FLAGS: ""
+          CPACK_GENERATORS: TGZ
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/netcore/netcore-integration-test ctest -C ${CMAKE_CONFIG} -j1 --timeout=RelWithDebInfo --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: netcore-integration-test
+      timeout: 10m
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: -j16
+          CMAKE_CONFIG: RelWithDebInfo
+          CMAKE_CONFIGURE_FLAGS: ""
+          CPACK_GENERATORS: TGZ
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/netcore/netcore-session-integration-test ctest -C ${CMAKE_CONFIG} -j1 --timeout=300 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: netcore-session-integration-test
+      timeout: 10m
+    ensure:
+      in_parallel:
+        steps:
+        - config:
+            inputs:
+            - name: instance
+            platform: linux
+            run:
+              args:
+              - -c
+              - |-
+                set -ueo pipefail
+                GOOGLE_PROJECT=apachegeode-ci
+                GOOGLE_ZONE=us-central1-a
+                INSTANCE_USER=build
+                INSTANCE_DIR=$(pwd)/instance
+
+                if [ ! -d "${INSTANCE_DIR}" ]; then
+                  echo "${INSTANCE_DIR} not found."
+                  exit 1
+                fi
+
+                instance_file=${INSTANCE_DIR}/instance.sh
+                instance_name=$(source ${instance_file} && echo -n ${name})
+
+                gcloud compute instances delete ${instance_name} \
+                    --project=${GOOGLE_PROJECT} \
+                    --zone=${GOOGLE_ZONE} \
+                    --delete-disks=all \
+                    --quiet
+              path: bash
+          image: gcloud-image
+          task: instance-delete
+    on_failure:
+      in_parallel:
+        steps:
+        - config:
+            inputs:
+            - name: instance
+            outputs:
+            - name: build
+            platform: linux
+            run:
+              args:
+              - -c
+              - |-
+                set -ueo pipefail
+                INSTANCE_USER=build
+                INSTANCE_DIR=$(pwd)/instance
+
+                if [ ! -d "${INSTANCE_DIR}" ]; then
+                  echo "${INSTANCE_DIR} not found."
+                  exit 1
+                fi
+
+                SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+                ssh_key_file=${INSTANCE_DIR}/identity
+                if [ ! -r "${ssh_key_file}" ]; then
+                  echo "${ssh_key_file} not readable."
+                  exit 1
+                fi
+
+                instance_file=${INSTANCE_DIR}/instance.sh
+                if [ ! -r "${instance_file}" ]; then
+                  echo "${instance_file} not readable."
+                  exit 1
+                fi
+
+                external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+                function remote_shell {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+                }
+
+                function remote_download {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+                }
+
+                function remote_download_directory {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+                }
+
+                function remote_upload {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+                }
+                remote_download_directory build .
+              path: bash
+          image: task-image
+          task: download-build
+  - in_parallel:
+      fail_fast: true
+      steps:
+      - params:
+          file: package/*-Linux-64bit.tar.gz
+        put: package-ubuntu-16.04-release-archive
+      - params:
+          file: package/*-Linux-64bit.tar.gz.sha512
+        put: package-ubuntu-16.04-release-archive.sha512
+  public: true
+- name: build-ubuntu-18.04-debug
+  plan:
+  - in_parallel:
+      fail_fast: true
+      steps:
+      - get: version
+        passed:
+        - version-source
+        trigger: true
+      - get: source
+        passed:
+        - version-source
+        trigger: true
+      - get: task-image
+  - do:
+    - do:
+      - in_parallel:
+          fail_fast: true
+          steps:
+          - get: gcloud-image
+          - get: geode-native-develop-build-ubuntu-18-04-gci
+      - in_parallel:
+          fail_fast: true
+          steps:
+          - config:
+              inputs:
+              - name: geode-native-develop-build-ubuntu-18-04-gci
+                path: image
+              outputs:
+              - name: instance
+              platform: linux
+              run:
+                args:
+                - -c
+                - |-
+                  set -ueo pipefail
+                  GOOGLE_PROJECT=apachegeode-ci
+                  GOOGLE_ZONE=us-central1-a
+                  INSTANCE_USER=build
+                  INSTANCE_DIR=$(pwd)/instance
+
+                  if [ ! -d "${INSTANCE_DIR}" ]; then
+                    echo "${INSTANCE_DIR} not found."
+                    exit 1
+                  fi
+                  ssh_key_file=${INSTANCE_DIR}/identity
+                  ssh_pubkey_file=${ssh_key_file}.pub
+                  ssh-keygen -m pem  -t rsa -f ${ssh_key_file} -C "${INSTANCE_USER}" -N '' <<< y
+                  ssh_pubkey=$(cat ${ssh_pubkey_file})
+                  ssh_keys_file=${INSTANCE_DIR}/ssh_keys_file
+                  echo "${INSTANCE_USER}:${ssh_pubkey}" > ${ssh_keys_file}
+                  instance_name=build-$(cat /proc/sys/kernel/random/uuid)
+                  image_name=$(cat image/name)
+                  time_to_live=$(( $(date +%s) + ( 4 * 60 * 60 ) ))
+                  instance_file=${INSTANCE_DIR}/instance.sh
+                  gcloud compute instances create ${instance_name} \
+                      --format='config[export](name,networkInterfaces[0].accessConfigs[0].natIP)' \
+                      --project=${GOOGLE_PROJECT} \
+                      --zone=${GOOGLE_ZONE} \
+                      --subnet=default \
+                      --machine-type=e2-standard-16 \
+                      --boot-disk-size=200GB \
+                      --boot-disk-type=pd-standard \
+                      --boot-disk-device-name=${instance_name} \
+                      --image-project=${GOOGLE_PROJECT} \
+                      --image=${image_name} \
+                      --metadata-from-file ssh-keys=${ssh_keys_file} \
+                      --labels=time-to-live=${time_to_live},pipeline-name=geode-native-develop,build-config=debug \
+                      > ${instance_file}
+                  INSTANCE_USER=build
+                  INSTANCE_DIR=$(pwd)/instance
+
+                  if [ ! -d "${INSTANCE_DIR}" ]; then
+                    echo "${INSTANCE_DIR} not found."
+                    exit 1
+                  fi
+
+                  SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+                  ssh_key_file=${INSTANCE_DIR}/identity
+                  if [ ! -r "${ssh_key_file}" ]; then
+                    echo "${ssh_key_file} not readable."
+                    exit 1
+                  fi
+
+                  instance_file=${INSTANCE_DIR}/instance.sh
+                  if [ ! -r "${instance_file}" ]; then
+                    echo "${instance_file} not readable."
+                    exit 1
+                  fi
+
+                  external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+                  function remote_shell {
+                    ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+                  }
+
+                  function remote_download {
+                    scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+                  }
+
+                  function remote_download_directory {
+                    ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+                  }
+
+                  function remote_upload {
+                    scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+                  }
+                  SSH_OPTIONS="${SSH_OPTIONS} -o ConnectTimeout=10"
+                  echo "Waiting for ssh on ${instance_name} to be ready."
+                  console_file=$(mktemp)
+                  console_next=0
+                  while ! remote_shell echo ready 2>/dev/null ; do
+                    gcloud compute instances get-serial-port-output ${instance_name} \
+                        --start ${console_next} \
+                        --project=${GOOGLE_PROJECT} \
+                        --zone=${GOOGLE_ZONE} \
+                        --format='value[separator="
+                  "](next,contents)' \
+                        > ${console_file}
+                    tmp_next=$(head -n 1 ${console_file})
+                    if (( tmp_next != console_next )); then
+                      console_next=${tmp_next}
+                      sed '1d;s/\x1b\[[0-9;]*[JH]//g' ${console_file}
+                    fi
+                  done
+                path: bash
+            image: gcloud-image
+            task: instance-create
+          - get: geode-latest
+    - in_parallel:
+        fail_fast: true
+        steps:
+        - config:
+            inputs:
+            - name: instance
+            - name: source
+            platform: linux
+            run:
+              args:
+              - -c
+              - |-
+                set -ueo pipefail
+                INSTANCE_USER=build
+                INSTANCE_DIR=$(pwd)/instance
+
+                if [ ! -d "${INSTANCE_DIR}" ]; then
+                  echo "${INSTANCE_DIR} not found."
+                  exit 1
+                fi
+
+                SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+                ssh_key_file=${INSTANCE_DIR}/identity
+                if [ ! -r "${ssh_key_file}" ]; then
+                  echo "${ssh_key_file} not readable."
+                  exit 1
+                fi
+
+                instance_file=${INSTANCE_DIR}/instance.sh
+                if [ ! -r "${instance_file}" ]; then
+                  echo "${instance_file} not readable."
+                  exit 1
+                fi
+
+                external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+                function remote_shell {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+                }
+
+                function remote_download {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+                }
+
+                function remote_download_directory {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+                }
+
+                function remote_upload {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+                }
+                remote_upload source .
+              path: bash
+          image: task-image
+          task: upload-source
+        - config:
+            inputs:
+            - name: instance
+            - name: geode-latest
+            platform: linux
+            run:
+              args:
+              - -c
+              - |-
+                set -ueo pipefail
+                INSTANCE_USER=build
+                INSTANCE_DIR=$(pwd)/instance
+
+                if [ ! -d "${INSTANCE_DIR}" ]; then
+                  echo "${INSTANCE_DIR} not found."
+                  exit 1
+                fi
+
+                SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+                ssh_key_file=${INSTANCE_DIR}/identity
+                if [ ! -r "${ssh_key_file}" ]; then
+                  echo "${ssh_key_file} not readable."
+                  exit 1
+                fi
+
+                instance_file=${INSTANCE_DIR}/instance.sh
+                if [ ! -r "${instance_file}" ]; then
+                  echo "${instance_file} not readable."
+                  exit 1
+                fi
+
+                external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+                function remote_shell {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+                }
+
+                function remote_download {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+                }
+
+                function remote_download_directory {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+                }
+
+                function remote_upload {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+                }
+                geode_version=$(cat geode-latest/version)
+                geode_name="apache-geode-${geode_version}"
+                geode_artifact="${geode_name}.tgz"
+                remote_upload geode-latest/${geode_artifact} .
+                remote_shell cmake -E tar xvf ${geode_artifact}
+                remote_shell cmake -E rename ${geode_name} geode
+              path: bash
+          image: task-image
+          task: upload-geode
+    - config:
+        inputs:
+        - name: instance
+        - name: version
+        - name: source
+        outputs:
+        - name: package
+        params:
+          CMAKE_BUILD_FLAGS: -j16
+          CMAKE_CONFIG: Debug
+          CMAKE_CONFIGURE_FLAGS: ""
+          CPACK_GENERATORS: TGZ
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            pushd source
+            git_url=$(git remote get-url origin)
+            git_rev=$(git rev-parse HEAD)
+            popd
+            version=$(cat version/number)
+            builddate=$(date "+%Y-%m-%d")
+            remote_shell cmake -E make_directory build
+            remote_shell cmake -E time cmake -E chdir build cmake ../source ${CMAKE_CONFIGURE_FLAGS} \
+                -DCMAKE_BUILD_TYPE=${CMAKE_CONFIG} \
+                -DGEODE_ROOT=../geode \
+                -DPRODUCT_VERSION=${version} \
+                -DPRODUCT_BUILDDATE=${builddate} \
+                -DPRODUCT_SOURCE_REVISION=${git_rev} \
+                -DPRODUCT_SOURCE_REPOSITORY=${git_url}
+            remote_shell cmake -E time cmake --build build --config ${CMAKE_CONFIG} -- ${CMAKE_BUILD_FLAGS}
+            remote_shell cmake -E time cmake --build build --config ${CMAKE_CONFIG} --target docs -- ${CMAKE_BUILD_FLAGS}
+            remote_shell cmake -E time cmake -E chdir build cpack -C ${CMAKE_CONFIG} -G "${CPACK_GENERATORS}" | tee cpack.out
+            packages=$(awk '/^CPack: - package: / {print $4}' cpack.out)
+            for package in ${packages}; do
+              remote_download ${package} package/
+            done
+            checksums=$(awk '/^CPack: - checksum file: / {print $5}' cpack.out)
+            for checksum in ${checksums}; do
+              remote_download ${checksum} package/
+            done
+          path: bash
+      image: task-image
+      task: build
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: -j16
+          CMAKE_CONFIG: Debug
+          CMAKE_CONFIGURE_FLAGS: ""
+          CPACK_GENERATORS: TGZ
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/cppcache/test ctest -C ${CMAKE_CONFIG} -j8 --timeout=300 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: cpp-unit-tests
+      timeout: 30m
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: -j16
+          CMAKE_CONFIG: Debug
+          CMAKE_CONFIGURE_FLAGS: ""
+          CPACK_GENERATORS: TGZ
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/cppcache/integration/test ctest -C ${CMAKE_CONFIG} -j4 --timeout=300 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: cpp-integration-tests
+      timeout: 1h
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: -j16
+          CMAKE_CONFIG: Debug
+          CMAKE_CONFIGURE_FLAGS: ""
+          CPACK_GENERATORS: TGZ
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/cppcache/integration-test ctest -C ${CMAKE_CONFIG} -j4 --timeout=500 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: cpp-legacy-integration-tests
+      timeout: 2h
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: -j16
+          CMAKE_CONFIG: Debug
+          CMAKE_CONFIGURE_FLAGS: ""
+          CPACK_GENERATORS: TGZ
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/netcore/netcore-integration-test ctest -C ${CMAKE_CONFIG} -j1 --timeout=Debug --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: netcore-integration-test
+      timeout: 10m
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: -j16
+          CMAKE_CONFIG: Debug
+          CMAKE_CONFIGURE_FLAGS: ""
+          CPACK_GENERATORS: TGZ
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/netcore/netcore-session-integration-test ctest -C ${CMAKE_CONFIG} -j1 --timeout=300 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: netcore-session-integration-test
+      timeout: 10m
+    ensure:
+      in_parallel:
+        steps:
+        - config:
+            inputs:
+            - name: instance
+            platform: linux
+            run:
+              args:
+              - -c
+              - |-
+                set -ueo pipefail
+                GOOGLE_PROJECT=apachegeode-ci
+                GOOGLE_ZONE=us-central1-a
+                INSTANCE_USER=build
+                INSTANCE_DIR=$(pwd)/instance
+
+                if [ ! -d "${INSTANCE_DIR}" ]; then
+                  echo "${INSTANCE_DIR} not found."
+                  exit 1
+                fi
+
+                instance_file=${INSTANCE_DIR}/instance.sh
+                instance_name=$(source ${instance_file} && echo -n ${name})
+
+                gcloud compute instances delete ${instance_name} \
+                    --project=${GOOGLE_PROJECT} \
+                    --zone=${GOOGLE_ZONE} \
+                    --delete-disks=all \
+                    --quiet
+              path: bash
+          image: gcloud-image
+          task: instance-delete
+    on_failure:
+      in_parallel:
+        steps:
+        - config:
+            inputs:
+            - name: instance
+            outputs:
+            - name: build
+            platform: linux
+            run:
+              args:
+              - -c
+              - |-
+                set -ueo pipefail
+                INSTANCE_USER=build
+                INSTANCE_DIR=$(pwd)/instance
+
+                if [ ! -d "${INSTANCE_DIR}" ]; then
+                  echo "${INSTANCE_DIR} not found."
+                  exit 1
+                fi
+
+                SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+                ssh_key_file=${INSTANCE_DIR}/identity
+                if [ ! -r "${ssh_key_file}" ]; then
+                  echo "${ssh_key_file} not readable."
+                  exit 1
+                fi
+
+                instance_file=${INSTANCE_DIR}/instance.sh
+                if [ ! -r "${instance_file}" ]; then
+                  echo "${instance_file} not readable."
+                  exit 1
+                fi
+
+                external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+                function remote_shell {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+                }
+
+                function remote_download {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+                }
+
+                function remote_download_directory {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+                }
+
+                function remote_upload {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+                }
+                remote_download_directory build .
+              path: bash
+          image: task-image
+          task: download-build
+  - in_parallel:
+      fail_fast: true
+      steps:
+      - params:
+          file: package/*-Linux-64bit.tar.gz
+        put: package-ubuntu-18.04-debug-archive
+      - params:
+          file: package/*-Linux-64bit.tar.gz.sha512
+        put: package-ubuntu-18.04-debug-archive.sha512
+  public: true
+- name: build-ubuntu-18.04-release
+  plan:
+  - in_parallel:
+      fail_fast: true
+      steps:
+      - get: version
+        passed:
+        - version-source
+        trigger: true
+      - get: source
+        passed:
+        - version-source
+        trigger: true
+      - get: task-image
+  - do:
+    - do:
+      - in_parallel:
+          fail_fast: true
+          steps:
+          - get: gcloud-image
+          - get: geode-native-develop-build-ubuntu-18-04-gci
+      - in_parallel:
+          fail_fast: true
+          steps:
+          - config:
+              inputs:
+              - name: geode-native-develop-build-ubuntu-18-04-gci
+                path: image
+              outputs:
+              - name: instance
+              platform: linux
+              run:
+                args:
+                - -c
+                - |-
+                  set -ueo pipefail
+                  GOOGLE_PROJECT=apachegeode-ci
+                  GOOGLE_ZONE=us-central1-a
+                  INSTANCE_USER=build
+                  INSTANCE_DIR=$(pwd)/instance
+
+                  if [ ! -d "${INSTANCE_DIR}" ]; then
+                    echo "${INSTANCE_DIR} not found."
+                    exit 1
+                  fi
+                  ssh_key_file=${INSTANCE_DIR}/identity
+                  ssh_pubkey_file=${ssh_key_file}.pub
+                  ssh-keygen -m pem  -t rsa -f ${ssh_key_file} -C "${INSTANCE_USER}" -N '' <<< y
+                  ssh_pubkey=$(cat ${ssh_pubkey_file})
+                  ssh_keys_file=${INSTANCE_DIR}/ssh_keys_file
+                  echo "${INSTANCE_USER}:${ssh_pubkey}" > ${ssh_keys_file}
+                  instance_name=build-$(cat /proc/sys/kernel/random/uuid)
+                  image_name=$(cat image/name)
+                  time_to_live=$(( $(date +%s) + ( 4 * 60 * 60 ) ))
+                  instance_file=${INSTANCE_DIR}/instance.sh
+                  gcloud compute instances create ${instance_name} \
+                      --format='config[export](name,networkInterfaces[0].accessConfigs[0].natIP)' \
+                      --project=${GOOGLE_PROJECT} \
+                      --zone=${GOOGLE_ZONE} \
+                      --subnet=default \
+                      --machine-type=e2-standard-16 \
+                      --boot-disk-size=200GB \
+                      --boot-disk-type=pd-standard \
+                      --boot-disk-device-name=${instance_name} \
+                      --image-project=${GOOGLE_PROJECT} \
+                      --image=${image_name} \
+                      --metadata-from-file ssh-keys=${ssh_keys_file} \
+                      --labels=time-to-live=${time_to_live},pipeline-name=geode-native-develop,build-config=release \
+                      > ${instance_file}
+                  INSTANCE_USER=build
+                  INSTANCE_DIR=$(pwd)/instance
+
+                  if [ ! -d "${INSTANCE_DIR}" ]; then
+                    echo "${INSTANCE_DIR} not found."
+                    exit 1
+                  fi
+
+                  SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+                  ssh_key_file=${INSTANCE_DIR}/identity
+                  if [ ! -r "${ssh_key_file}" ]; then
+                    echo "${ssh_key_file} not readable."
+                    exit 1
+                  fi
+
+                  instance_file=${INSTANCE_DIR}/instance.sh
+                  if [ ! -r "${instance_file}" ]; then
+                    echo "${instance_file} not readable."
+                    exit 1
+                  fi
+
+                  external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+                  function remote_shell {
+                    ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+                  }
+
+                  function remote_download {
+                    scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+                  }
+
+                  function remote_download_directory {
+                    ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+                  }
+
+                  function remote_upload {
+                    scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+                  }
+                  SSH_OPTIONS="${SSH_OPTIONS} -o ConnectTimeout=10"
+                  echo "Waiting for ssh on ${instance_name} to be ready."
+                  console_file=$(mktemp)
+                  console_next=0
+                  while ! remote_shell echo ready 2>/dev/null ; do
+                    gcloud compute instances get-serial-port-output ${instance_name} \
+                        --start ${console_next} \
+                        --project=${GOOGLE_PROJECT} \
+                        --zone=${GOOGLE_ZONE} \
+                        --format='value[separator="
+                  "](next,contents)' \
+                        > ${console_file}
+                    tmp_next=$(head -n 1 ${console_file})
+                    if (( tmp_next != console_next )); then
+                      console_next=${tmp_next}
+                      sed '1d;s/\x1b\[[0-9;]*[JH]//g' ${console_file}
+                    fi
+                  done
+                path: bash
+            image: gcloud-image
+            task: instance-create
+          - get: geode-latest
+    - in_parallel:
+        fail_fast: true
+        steps:
+        - config:
+            inputs:
+            - name: instance
+            - name: source
+            platform: linux
+            run:
+              args:
+              - -c
+              - |-
+                set -ueo pipefail
+                INSTANCE_USER=build
+                INSTANCE_DIR=$(pwd)/instance
+
+                if [ ! -d "${INSTANCE_DIR}" ]; then
+                  echo "${INSTANCE_DIR} not found."
+                  exit 1
+                fi
+
+                SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+                ssh_key_file=${INSTANCE_DIR}/identity
+                if [ ! -r "${ssh_key_file}" ]; then
+                  echo "${ssh_key_file} not readable."
+                  exit 1
+                fi
+
+                instance_file=${INSTANCE_DIR}/instance.sh
+                if [ ! -r "${instance_file}" ]; then
+                  echo "${instance_file} not readable."
+                  exit 1
+                fi
+
+                external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+                function remote_shell {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+                }
+
+                function remote_download {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+                }
+
+                function remote_download_directory {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+                }
+
+                function remote_upload {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+                }
+                remote_upload source .
+              path: bash
+          image: task-image
+          task: upload-source
+        - config:
+            inputs:
+            - name: instance
+            - name: geode-latest
+            platform: linux
+            run:
+              args:
+              - -c
+              - |-
+                set -ueo pipefail
+                INSTANCE_USER=build
+                INSTANCE_DIR=$(pwd)/instance
+
+                if [ ! -d "${INSTANCE_DIR}" ]; then
+                  echo "${INSTANCE_DIR} not found."
+                  exit 1
+                fi
+
+                SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+                ssh_key_file=${INSTANCE_DIR}/identity
+                if [ ! -r "${ssh_key_file}" ]; then
+                  echo "${ssh_key_file} not readable."
+                  exit 1
+                fi
+
+                instance_file=${INSTANCE_DIR}/instance.sh
+                if [ ! -r "${instance_file}" ]; then
+                  echo "${instance_file} not readable."
+                  exit 1
+                fi
+
+                external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+                function remote_shell {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+                }
+
+                function remote_download {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+                }
+
+                function remote_download_directory {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+                }
+
+                function remote_upload {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+                }
+                geode_version=$(cat geode-latest/version)
+                geode_name="apache-geode-${geode_version}"
+                geode_artifact="${geode_name}.tgz"
+                remote_upload geode-latest/${geode_artifact} .
+                remote_shell cmake -E tar xvf ${geode_artifact}
+                remote_shell cmake -E rename ${geode_name} geode
+              path: bash
+          image: task-image
+          task: upload-geode
+    - config:
+        inputs:
+        - name: instance
+        - name: version
+        - name: source
+        outputs:
+        - name: package
+        params:
+          CMAKE_BUILD_FLAGS: -j16
+          CMAKE_CONFIG: RelWithDebInfo
+          CMAKE_CONFIGURE_FLAGS: ""
+          CPACK_GENERATORS: TGZ
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            pushd source
+            git_url=$(git remote get-url origin)
+            git_rev=$(git rev-parse HEAD)
+            popd
+            version=$(cat version/number)
+            builddate=$(date "+%Y-%m-%d")
+            remote_shell cmake -E make_directory build
+            remote_shell cmake -E time cmake -E chdir build cmake ../source ${CMAKE_CONFIGURE_FLAGS} \
+                -DCMAKE_BUILD_TYPE=${CMAKE_CONFIG} \
+                -DGEODE_ROOT=../geode \
+                -DPRODUCT_VERSION=${version} \
+                -DPRODUCT_BUILDDATE=${builddate} \
+                -DPRODUCT_SOURCE_REVISION=${git_rev} \
+                -DPRODUCT_SOURCE_REPOSITORY=${git_url}
+            remote_shell cmake -E time cmake --build build --config ${CMAKE_CONFIG} -- ${CMAKE_BUILD_FLAGS}
+            remote_shell cmake -E time cmake --build build --config ${CMAKE_CONFIG} --target docs -- ${CMAKE_BUILD_FLAGS}
+            remote_shell cmake -E time cmake -E chdir build cpack -C ${CMAKE_CONFIG} -G "${CPACK_GENERATORS}" | tee cpack.out
+            packages=$(awk '/^CPack: - package: / {print $4}' cpack.out)
+            for package in ${packages}; do
+              remote_download ${package} package/
+            done
+            checksums=$(awk '/^CPack: - checksum file: / {print $5}' cpack.out)
+            for checksum in ${checksums}; do
+              remote_download ${checksum} package/
+            done
+          path: bash
+      image: task-image
+      task: build
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: -j16
+          CMAKE_CONFIG: RelWithDebInfo
+          CMAKE_CONFIGURE_FLAGS: ""
+          CPACK_GENERATORS: TGZ
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/cppcache/test ctest -C ${CMAKE_CONFIG} -j8 --timeout=300 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: cpp-unit-tests
+      timeout: 30m
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: -j16
+          CMAKE_CONFIG: RelWithDebInfo
+          CMAKE_CONFIGURE_FLAGS: ""
+          CPACK_GENERATORS: TGZ
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/cppcache/integration/test ctest -C ${CMAKE_CONFIG} -j4 --timeout=300 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: cpp-integration-tests
+      timeout: 1h
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: -j16
+          CMAKE_CONFIG: RelWithDebInfo
+          CMAKE_CONFIGURE_FLAGS: ""
+          CPACK_GENERATORS: TGZ
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/cppcache/integration-test ctest -C ${CMAKE_CONFIG} -j4 --timeout=500 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: cpp-legacy-integration-tests
+      timeout: 2h
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: -j16
+          CMAKE_CONFIG: RelWithDebInfo
+          CMAKE_CONFIGURE_FLAGS: ""
+          CPACK_GENERATORS: TGZ
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/netcore/netcore-integration-test ctest -C ${CMAKE_CONFIG} -j1 --timeout=RelWithDebInfo --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: netcore-integration-test
+      timeout: 10m
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: -j16
+          CMAKE_CONFIG: RelWithDebInfo
+          CMAKE_CONFIGURE_FLAGS: ""
+          CPACK_GENERATORS: TGZ
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            remote_shell cmake -E chdir build/netcore/netcore-session-integration-test ctest -C ${CMAKE_CONFIG} -j1 --timeout=300 --output-on-failure --repeat until-pass:4 --schedule-random
+          path: bash
+      image: task-image
+      task: netcore-session-integration-test
+      timeout: 10m
+    ensure:
+      in_parallel:
+        steps:
+        - config:
+            inputs:
+            - name: instance
+            platform: linux
+            run:
+              args:
+              - -c
+              - |-
+                set -ueo pipefail
+                GOOGLE_PROJECT=apachegeode-ci
+                GOOGLE_ZONE=us-central1-a
+                INSTANCE_USER=build
+                INSTANCE_DIR=$(pwd)/instance
+
+                if [ ! -d "${INSTANCE_DIR}" ]; then
+                  echo "${INSTANCE_DIR} not found."
+                  exit 1
+                fi
+
+                instance_file=${INSTANCE_DIR}/instance.sh
+                instance_name=$(source ${instance_file} && echo -n ${name})
+
+                gcloud compute instances delete ${instance_name} \
+                    --project=${GOOGLE_PROJECT} \
+                    --zone=${GOOGLE_ZONE} \
+                    --delete-disks=all \
+                    --quiet
+              path: bash
+          image: gcloud-image
+          task: instance-delete
+    on_failure:
+      in_parallel:
+        steps:
+        - config:
+            inputs:
+            - name: instance
+            outputs:
+            - name: build
+            platform: linux
+            run:
+              args:
+              - -c
+              - |-
+                set -ueo pipefail
+                INSTANCE_USER=build
+                INSTANCE_DIR=$(pwd)/instance
+
+                if [ ! -d "${INSTANCE_DIR}" ]; then
+                  echo "${INSTANCE_DIR} not found."
+                  exit 1
+                fi
+
+                SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+                ssh_key_file=${INSTANCE_DIR}/identity
+                if [ ! -r "${ssh_key_file}" ]; then
+                  echo "${ssh_key_file} not readable."
+                  exit 1
+                fi
+
+                instance_file=${INSTANCE_DIR}/instance.sh
+                if [ ! -r "${instance_file}" ]; then
+                  echo "${instance_file} not readable."
+                  exit 1
+                fi
+
+                external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+                function remote_shell {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+                }
+
+                function remote_download {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+                }
+
+                function remote_download_directory {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+                }
+
+                function remote_upload {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+                }
+                remote_download_directory build .
+              path: bash
+          image: task-image
+          task: download-build
+  - in_parallel:
+      fail_fast: true
+      steps:
+      - params:
+          file: package/*-Linux-64bit.tar.gz
+        put: package-ubuntu-18.04-release-archive
+      - params:
+          file: package/*-Linux-64bit.tar.gz.sha512
+        put: package-ubuntu-18.04-release-archive.sha512
+  public: true
+- name: build-ubuntu-20.04-debug
+  plan:
+  - in_parallel:
+      fail_fast: true
+      steps:
+      - get: version
+        passed:
+        - version-source
+        trigger: true
+      - get: source
+        passed:
+        - version-source
+        trigger: true
+      - get: task-image
+  - do:
+    - do:
+      - in_parallel:
+          fail_fast: true
+          steps:
+          - get: gcloud-image
+          - get: geode-native-develop-build-ubuntu-20-04-gci
+      - in_parallel:
+          fail_fast: true
+          steps:
+          - config:
+              inputs:
+              - name: geode-native-develop-build-ubuntu-20-04-gci
+                path: image
+              outputs:
+              - name: instance
+              platform: linux
+              run:
+                args:
+                - -c
+                - |-
+                  set -ueo pipefail
+                  GOOGLE_PROJECT=apachegeode-ci
+                  GOOGLE_ZONE=us-central1-a
+                  INSTANCE_USER=build
+                  INSTANCE_DIR=$(pwd)/instance
+
+                  if [ ! -d "${INSTANCE_DIR}" ]; then
+                    echo "${INSTANCE_DIR} not found."
+                    exit 1
+                  fi
+                  ssh_key_file=${INSTANCE_DIR}/identity
+                  ssh_pubkey_file=${ssh_key_file}.pub
+                  ssh-keygen -m pem  -t rsa -f ${ssh_key_file} -C "${INSTANCE_USER}" -N '' <<< y
+                  ssh_pubkey=$(cat ${ssh_pubkey_file})
+                  ssh_keys_file=${INSTANCE_DIR}/ssh_keys_file
+                  echo "${INSTANCE_USER}:${ssh_pubkey}" > ${ssh_keys_file}
+                  instance_name=build-$(cat /proc/sys/kernel/random/uuid)
+                  image_name=$(cat image/name)
+                  time_to_live=$(( $(date +%s) + ( 4 * 60 * 60 ) ))
+                  instance_file=${INSTANCE_DIR}/instance.sh
+                  gcloud compute instances create ${instance_name} \
+                      --format='config[export](name,networkInterfaces[0].accessConfigs[0].natIP)' \
+                      --project=${GOOGLE_PROJECT} \
+                      --zone=${GOOGLE_ZONE} \
+                      --subnet=default \
+                      --machine-type=e2-standard-16 \
+                      --boot-disk-size=200GB \
+                      --boot-disk-type=pd-standard \
+                      --boot-disk-device-name=${instance_name} \
+                      --image-project=${GOOGLE_PROJECT} \
+                      --image=${image_name} \
+                      --metadata-from-file ssh-keys=${ssh_keys_file} \
+                      --labels=time-to-live=${time_to_live},pipeline-name=geode-native-develop,build-config=debug \
+                      > ${instance_file}
+                  INSTANCE_USER=build
+                  INSTANCE_DIR=$(pwd)/instance
+
+                  if [ ! -d "${INSTANCE_DIR}" ]; then
+                    echo "${INSTANCE_DIR} not found."
+                    exit 1
+                  fi
+
+                  SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+                  ssh_key_file=${INSTANCE_DIR}/identity
+                  if [ ! -r "${ssh_key_file}" ]; then
+                    echo "${ssh_key_file} not readable."
+                    exit 1
+                  fi
+
+                  instance_file=${INSTANCE_DIR}/instance.sh
+                  if [ ! -r "${instance_file}" ]; then
+                    echo "${instance_file} not readable."
+                    exit 1
+                  fi
+
+                  external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+                  function remote_shell {
+                    ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+                  }
+
+                  function remote_download {
+                    scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+                  }
+
+                  function remote_download_directory {
+                    ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+                  }
+
+                  function remote_upload {
+                    scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+                  }
+                  SSH_OPTIONS="${SSH_OPTIONS} -o ConnectTimeout=10"
+                  echo "Waiting for ssh on ${instance_name} to be ready."
+                  console_file=$(mktemp)
+                  console_next=0
+                  while ! remote_shell echo ready 2>/dev/null ; do
+                    gcloud compute instances get-serial-port-output ${instance_name} \
+                        --start ${console_next} \
+                        --project=${GOOGLE_PROJECT} \
+                        --zone=${GOOGLE_ZONE} \
+                        --format='value[separator="
+                  "](next,contents)' \
+                        > ${console_file}
+                    tmp_next=$(head -n 1 ${console_file})
+                    if (( tmp_next != console_next )); then
+                      console_next=${tmp_next}
+                      sed '1d;s/\x1b\[[0-9;]*[JH]//g' ${console_file}
+                    fi
+                  done
+                path: bash
+            image: gcloud-image
+            task: instance-create
+          - get: geode-latest
+    - in_parallel:
+        fail_fast: true
+        steps:
+        - config:
+            inputs:
+            - name: instance
+            - name: source
+            platform: linux
+            run:
+              args:
+              - -c
+              - |-
+                set -ueo pipefail
+                INSTANCE_USER=build
+                INSTANCE_DIR=$(pwd)/instance
+
+                if [ ! -d "${INSTANCE_DIR}" ]; then
+                  echo "${INSTANCE_DIR} not found."
+                  exit 1
+                fi
+
+                SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+                ssh_key_file=${INSTANCE_DIR}/identity
+                if [ ! -r "${ssh_key_file}" ]; then
+                  echo "${ssh_key_file} not readable."
+                  exit 1
+                fi
+
+                instance_file=${INSTANCE_DIR}/instance.sh
+                if [ ! -r "${instance_file}" ]; then
+                  echo "${instance_file} not readable."
+                  exit 1
+                fi
+
+                external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+                function remote_shell {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+                }
+
+                function remote_download {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+                }
+
+                function remote_download_directory {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+                }
+
+                function remote_upload {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+                }
+                remote_upload source .
+              path: bash
+          image: task-image
+          task: upload-source
+        - config:
+            inputs:
+            - name: instance
+            - name: geode-latest
+            platform: linux
+            run:
+              args:
+              - -c
+              - |-
+                set -ueo pipefail
+                INSTANCE_USER=build
+                INSTANCE_DIR=$(pwd)/instance
+
+                if [ ! -d "${INSTANCE_DIR}" ]; then
+                  echo "${INSTANCE_DIR} not found."
+                  exit 1
+                fi
+
+                SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+                ssh_key_file=${INSTANCE_DIR}/identity
+                if [ ! -r "${ssh_key_file}" ]; then
+                  echo "${ssh_key_file} not readable."
+                  exit 1
+                fi
+
+                instance_file=${INSTANCE_DIR}/instance.sh
+                if [ ! -r "${instance_file}" ]; then
+                  echo "${instance_file} not readable."
+                  exit 1
+                fi
+
+                external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+                function remote_shell {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+                }
+
+                function remote_download {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+                }
+
+                function remote_download_directory {
+                  ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+                }
+
+                function remote_upload {
+                  scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+                }
+                geode_version=$(cat geode-latest/version)
+                geode_name="apache-geode-${geode_version}"
+                geode_artifact="${geode_name}.tgz"
+                remote_upload geode-latest/${geode_artifact} .
+                remote_shell cmake -E tar xvf ${geode_artifact}
+                remote_shell cmake -E rename ${geode_name} geode
+              path: bash
+          image: task-image
+          task: upload-geode
+    - config:
+        inputs:
+        - name: instance
+        - name: version
+        - name: source
+        outputs:
+        - name: package
+        params:
+          CMAKE_BUILD_FLAGS: -j16
+          CMAKE_CONFIG: Debug
+          CMAKE_CONFIGURE_FLAGS: ""
+          CPACK_GENERATORS: TGZ
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
+              echo "${instance_file} not readable."
+              exit 1
+            fi
+
+            external_ip=$(source ${instance_file} && echo -n ${networkInterfaces_accessConfigs_natIP})
+
+            function remote_shell {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} "$@"
+            }
+
+            function remote_download {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "${INSTANCE_USER}@${external_ip}:${1}" "$2"
+            }
+
+            function remote_download_directory {
+              ssh ${SSH_OPTIONS} -i ${ssh_key_file} ${INSTANCE_USER}@${external_ip} tar -C $(dirname ${1}) -czf - $(basename ${1}) | tar -C ${2} -zxf -
+            }
+
+            function remote_upload {
+              scp ${SSH_OPTIONS} -i ${ssh_key_file} -q -r "$1" "${INSTANCE_USER}@${external_ip}:${2}"
+            }
+            pushd source
+            git_url=$(git remote get-url origin)
+            git_rev=$(git rev-parse HEAD)
+            popd
+            version=$(cat version/number)
+            builddate=$(date "+%Y-%m-%d")
+            remote_shell cmake -E make_directory build
+            remote_shell cmake -E time cmake -E chdir build cmake ../source ${CMAKE_CONFIGURE_FLAGS} \
+                -DCMAKE_BUILD_TYPE=${CMAKE_CONFIG} \
+                -DGEODE_ROOT=../geode \
+                -DPRODUCT_VERSION=${version} \
+                -DPRODUCT_BUILDDATE=${builddate} \
+                -DPRODUCT_SOURCE_REVISION=${git_rev} \
+                -DPRODUCT_SOURCE_REPOSITORY=${git_url}
+            remote_shell cmake -E time cmake --build build --config ${CMAKE_CONFIG} -- ${CMAKE_BUILD_FLAGS}
+            remote_shell cmake -E time cmake --build build --config ${CMAKE_CONFIG} --target docs -- ${CMAKE_BUILD_FLAGS}
+            remote_shell cmake -E time cmake -E chdir build cpack -C ${CMAKE_CONFIG} -G "${CPACK_GENERATORS}" | tee cpack.out
+            packages=$(awk '/^CPack: - package: / {print $4}' cpack.out)
+            for package in ${packages}; do
+              remote_download ${package} package/
+            done
+            checksums=$(awk '/^CPack: - checksum file: / {print $5}' cpack.out)
+            for checksum in ${checksums}; do
+              remote_download ${checksum} package/
+            done
+          path: bash
+      image: task-image
+      task: build
+    - config:
+        inputs:
+        - name: instance
+        params:
+          CMAKE_BUILD_FLAGS: -j16
+          CMAKE_CONFIG: Debug
+          CMAKE_CONFIGURE_FLAGS: ""
+          CPACK_GENERATORS: TGZ
+        platform: linux
+        run:
+          args:
+          - -c
+          - |-
+            set -ueo pipefail
+            INSTANCE_USER=build
+            INSTANCE_DIR=$(pwd)/instance
+
+            if [ ! -d "${INSTANCE_DIR}" ]; then
+              echo "${INSTANCE_DIR} not found."
+              exit 1
+            fi
+
+            SSH_OPTIONS=${SSH_OPTIONS:-"-o StrictHostKeyChecking=no -o PasswordAuthentication=no"}
+
+            ssh_key_file=${INSTANCE_DIR}/identity
+            if [ ! -r "${ssh_key_file}" ]; then
+              echo "${ssh_key_file} not readable."
+              exit 1
+            fi
+
+            instance_file=${INSTANCE_DIR}/instance.sh
+            if [ ! -r "${instance_file}" ]; then
... 2262 lines suppressed ...

[geode-native] 01/02: Add v142 to VS 2019 and build with it

Posted by mm...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

mmartell pushed a commit to branch test-v142
in repository https://gitbox.apache.org/repos/asf/geode-native.git

commit 111ef8a39e37a358bb1a2754ab770aac14d95ce4
Author: Mike Martell <mm...@pivotal.io>
AuthorDate: Fri Oct 15 06:03:20 2021 -0700

    Add v142 to VS 2019 and build with it
---
 ci/base/base.yml                             |  3 +-
 packer/windows/install-vs-2019-community.ps1 | 79 ++++++++++++++++++++++++++--
 2 files changed, 77 insertions(+), 5 deletions(-)

diff --git a/ci/base/base.yml b/ci/base/base.yml
index c336540..a5397d9 100644
--- a/ci/base/base.yml
+++ b/ci/base/base.yml
@@ -72,7 +72,8 @@ builds:
     with_dot_net: #@ True
     #@yaml/map-key-override
     params:
-      CMAKE_CONFIGURE_FLAGS: "-A x64 -Tv141,version=14.16,host=x64 -DCMAKE_SYSTEM_VERSION=10.0.16299.0"
+      #CMAKE_CONFIGURE_FLAGS: "-A x64 -Tv141,version=14.16,host=x64 -DCMAKE_SYSTEM_VERSION=10.0.16299.0"
+      CMAKE_CONFIGURE_FLAGS: ".."
       CMAKE_BUILD_FLAGS: "/m"
       CPACK_GENERATORS: "ZIP"
 
diff --git a/packer/windows/install-vs-2019-community.ps1 b/packer/windows/install-vs-2019-community.ps1
index 460dfd1..193d39a 100644
--- a/packer/windows/install-vs-2019-community.ps1
+++ b/packer/windows/install-vs-2019-community.ps1
@@ -21,22 +21,93 @@ write-host "Installing Visual Studio 2019 Community..."
 
 $args = @('--add Microsoft.VisualStudio.Component.CoreEditor',
           '--add Microsoft.VisualStudio.Workload.CoreEditor',
+          '--add Microsoft.NetCore.Component.Runtime.5.0',
+          '--add Microsoft.NetCore.Component.Runtime.3.1',
+          '--add Microsoft.NetCore.Component.SDK',
+          '--add Microsoft.VisualStudio.Component.NuGet',
           '--add Microsoft.Net.Component.4.6.1.TargetingPack',
           '--add Microsoft.VisualStudio.Component.Roslyn.Compiler',
+          '--add Microsoft.VisualStudio.Component.Roslyn.LanguageServices',
+          '--add Microsoft.VisualStudio.Component.FSharp',
+          '--add Microsoft.ComponentGroup.ClickOnce.Publish',
+          '--add Microsoft.NetCore.Component.DevelopmentTools',
+          '--add Microsoft.VisualStudio.Component.FSharp.WebTemplates',
+          '--add Microsoft.VisualStudio.ComponentGroup.WebToolsExtensions',
+          '--add Microsoft.VisualStudio.Component.DockerTools',
+          '--add Microsoft.NetCore.Component.Web',
           '--add Microsoft.Net.Component.4.8.SDK',
+          '--add Microsoft.Net.Component.4.7.2.TargetingPack',
+          '--add Microsoft.Net.ComponentGroup.DevelopmentPrerequisites',
+          '--add Microsoft.VisualStudio.Component.TypeScript.4.3',
+          '--add Microsoft.VisualStudio.Component.JavaScript.TypeScript',
+          '--add Microsoft.VisualStudio.Component.JavaScript.Diagnostics',
           '--add Microsoft.Component.MSBuild',
           '--add Microsoft.VisualStudio.Component.TextTemplating',
+          '--add Component.Microsoft.VisualStudio.RazorExtension',
+          '--add Microsoft.VisualStudio.Component.IISExpress',
+          '--add Microsoft.VisualStudio.Component.SQL.ADAL',
+          '--add Microsoft.VisualStudio.Component.SQL.LocalDB.Runtime',
+          '--add Microsoft.VisualStudio.Component.Common.Azure.Tools',
+          '--add Microsoft.VisualStudio.Component.SQL.CLR',
+          '--add Microsoft.VisualStudio.Component.MSODBC.SQL',
+          '--add Microsoft.VisualStudio.Component.MSSQL.CMDLnUtils',
+          '--add Microsoft.VisualStudio.Component.ManagedDesktop.Core',
           '--add Microsoft.Net.Component.4.5.2.TargetingPack',
+          '--add Microsoft.Net.Component.4.5.TargetingPack',
+          '--add Microsoft.VisualStudio.Component.SQL.SSDT',
+          '--add Microsoft.VisualStudio.Component.SQL.DataSources',
+          '--add Component.Microsoft.Web.LibraryManager',
+          '--add Component.Microsoft.WebTools.BrowserLink.WebLivePreview',
+          '--add Microsoft.VisualStudio.ComponentGroup.Web',
+          '--add Microsoft.VisualStudio.Component.Web',
+          '--add Microsoft.VisualStudio.ComponentGroup.Web.Client',
+          '--add Microsoft.Net.Component.4.TargetingPack',
+          '--add Microsoft.Net.Component.4.5.1.TargetingPack',
+          '--add Microsoft.Net.Component.4.6.TargetingPack',
+          '--add Microsoft.Net.ComponentGroup.TargetingPacks.Common',
+          '--add Component.Microsoft.VisualStudio.Web.AzureFunctions',
+          '--add Microsoft.VisualStudio.ComponentGroup.AzureFunctions',
+          '--add Microsoft.VisualStudio.Component.Azure.Compute.Emulator',
+          '--add Microsoft.VisualStudio.Component.Azure.Storage.Emulator',
+          '--add Microsoft.VisualStudio.Component.Azure.ClientLibs',
+          '--add Microsoft.VisualStudio.Component.Azure.AuthoringTools',
+          '--add Microsoft.VisualStudio.Component.CloudExplorer',
+          '--add Microsoft.VisualStudio.ComponentGroup.Web.CloudTools',
+          '--add Microsoft.VisualStudio.Component.DiagnosticTools',
+          '--add Microsoft.VisualStudio.Component.EntityFramework',
+          '--add Microsoft.VisualStudio.Component.AspNet45',
+          '--add Microsoft.VisualStudio.Component.AppInsights.Tools',
+          '--add Microsoft.VisualStudio.Component.WebDeploy',
+          '--add Microsoft.VisualStudio.Component.Debugger.JustInTime',
+          '--add Component.Microsoft.VisualStudio.LiveShare',
+          '--add Microsoft.VisualStudio.Component.WslDebugging',
           '--add Microsoft.VisualStudio.Component.IntelliCode',
+          '--add Microsoft.VisualStudio.Workload.NetWeb',
+          '--add Microsoft.Component.PythonTools',
+          '--add Component.CPython3.x64',
           '--add Microsoft.VisualStudio.Component.VC.CoreIde',
+          '--add Microsoft.VisualStudio.Component.VC.Tools.x86.x64',
+          '--add Microsoft.VisualStudio.Component.Graphics.Tools',
+          '--add Microsoft.VisualStudio.Component.VC.DiagnosticTools',
+          '--add Microsoft.VisualStudio.Component.Windows10SDK.19041',
+          '--add Microsoft.VisualStudio.Workload.Python',
+          '--add Microsoft.VisualStudio.Component.ManagedDesktop.Prerequisites',
+          '--add Microsoft.ComponentGroup.Blend',
+          '--add Microsoft.VisualStudio.Component.DotNetModelBuilder',
+          '--add Microsoft.VisualStudio.Workload.ManagedDesktop',
           '--add Microsoft.VisualStudio.Component.VC.Redist.14.Latest',
           '--add Microsoft.VisualStudio.ComponentGroup.NativeDesktop.Core',
+          '--add Microsoft.VisualStudio.ComponentGroup.WebToolsExtensions.CMake',
+          '--add Microsoft.VisualStudio.Component.VC.CMake.Project',
           '--add Microsoft.VisualStudio.Component.VC.ATL',
-          '--add Microsoft.VisualStudio.Component.Windows10SDK.16299',
-          '--add Microsoft.VisualStudio.Component.VC.v141.x86.x64',
+          '--add Microsoft.VisualStudio.Component.VC.TestAdapterForBoostTest',
+          '--add Microsoft.VisualStudio.Component.VC.TestAdapterForGoogleTest',
+          '--add Microsoft.VisualStudio.Component.VC.CLI.Support',
+          '--add Microsoft.VisualStudio.Component.VC.ASAN',
+          '--add Microsoft.VisualStudio.Component.VC.Llvm.ClangToolset',
+          '--add Microsoft.VisualStudio.Component.VC.Llvm.Clang',
           '--add Microsoft.VisualStudio.Workload.NativeDesktop',
-          '--add Microsoft.VisualStudio.Component.VC.v141.CLI.Support',
-          '--add Microsoft.Net.Component.4.6.1.SDK',
+          '--add Microsoft.VisualStudio.Workload.NetCoreTools',
 		  '--quiet')
 
 choco install visualstudio2019community -confirm --package-parameters "$args"