#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

{% from 'shared_jinja.yml' import pipeline_prefix with context %}
{% from 'shared_jinja.yml' import github_access with context %}
{% from 'shared_jinja.yml' import init_retry with context %}

---

{% macro plan_resource_gets(test) %}
- in_parallel:
  - get: geode-ci
    passed: [PinGeode]
    params:
      depth: 1
  - get: geode
    passed: [PinGeode]
    params:
      depth: 1
  - get: geode-build-version
    passed: [PinGeode]
{% endmacro %}

{%- macro deep_merge(a, b): %}
  {%- if b is defined %}
    {%- for k,v in b.items(): %}
      {%- if v is not defined: %}
        {%- do a.pop(k) %}
      {%- else: %}
        {%- if v is mapping: %}
          {%- if a[k] is not mapping: %}
            {%- do a.update({ k: { } }) %}
          {%- endif %}
          {%- do deep_merge(a[k], v) %}
        {%- else: %}
          {%- do a.update({ k: v }) %}
        {%- endif %}
      {% endif %}
    {%- endfor %}
  {%- endif %}
{%- endmacro %}

{%- do deep_merge(a, b) %}

{% macro common_instance_params(test) -%}
GCP_PROJECT: ((gcp-project))
CPUS: {{ test.CPUS }}
RAM: {{ test.RAM }}
{%- endmacro %}

{% macro common_test_params(test) -%}
  {%- if test.CALL_STACK_TIMEOUT -%}
CALL_STACK_TIMEOUT: {{ test.CALL_STACK_TIMEOUT }}
  {%- endif %}
  {%- if test.GRADLE_TASK_OPTIONS -%}
GRADLE_TASK_OPTIONS: {{ test.GRADLE_TASK_OPTIONS }}
  {%- endif %}
DUNIT_PARALLEL_FORKS: {{ test.DUNIT_PARALLEL_FORKS }}
MAINTENANCE_VERSION: ((geode-build-branch ))
BUILD_BRANCH: ((geode-build-branch))
PARALLEL_DUNIT: {{ test.PARALLEL_DUNIT }}
{% if test.PARALLEL_GRADLE is defined %}
PARALLEL_GRADLE: {{ test.PARALLEL_GRADLE }}
{% else %}
PARALLEL_GRADLE: true
{% endif %}
ARTIFACT_BUCKET: ((artifact-bucket))
SERVICE_ACCOUNT: ((concourse-gcp-account))
GRADLE_GLOBAL_ARGS: ((gradle-global-args))
{%- endmacro %}


resources:
- name: weekly
  type: time
  source:
    interval: 168h
    days: [Friday]
    start: 5PM
    stop: 11PM
    location: America/Los_Angeles
- name: test-finish-time
  type: time
  source:
    interval: 168h

- name: concourse-metadata-resource
  type: concourse-metadata-resource
  source: {}
- name: geode
  type: git
  source:
    branch: ((geode-build-branch))
    ignore_paths:
      - ci/*
      - dev-tools/release/*
      - "*.md"
    {{ github_access() | indent(4) }}
- name: geode-ci
  type: git
  source:
    branch: ((geode-build-branch))
    paths:
    - ci/*
    {{ github_access() | indent(4) }}
- name: geode-build-version
  type: semver
  source:
    bucket: ((artifact-bucket))
    driver: gcs
    initial_version: {{ metadata.initial_version }}
    json_key: ((concourse-gcp-key))
    key: semvers/((pipeline-prefix))((geode-build-branch))/number
- name: alpine-tools-image
  type: docker-image
  source:
    username: ((docker-username))
    password: ((docker-password))
    repository: gcr.io/((gcp-project))/((pipeline-prefix))alpine-tools
    tag: latest
- name: linux-builder-image-family
  type: gci
  source:
    key: ((concourse-gcp-key))
    family_project: ((gcp-project))
    family: ((pipeline-prefix))linux-geode-builder

resource_types:
- name: gci
  type: registry-image
  source:
    repository: smgoller/gci-resource
- name: concourse-metadata-resource
  type: docker-image
  source:
    password: ((docker-password))
    repository: gcr.io/((gcp-project))/((pipeline-prefix))concourse-metadata-resource
    tag: latest
    username: ((docker-username))
- name: gcs-resource
  type: docker-image
  source:
    repository: frodenas/gcs-resource

jobs:
- name: PinGeode
  serial: true
  plan:
  - in_parallel:
    - get: weekly
      trigger: true
    - get: geode
      params:
        depth: 1
    - get: geode-ci
      params:
        depth: 1
    - get: geode-build-version

- name: TriggerMassRun
  serial: true
  plan:
  - in_parallel:
    - get: weekly
      trigger: true
      passed: [PinGeode]
    - get: alpine-tools-image
  - task: run-distributed-test-N-times
    image: alpine-tools-image
    config:
      platform: linux
      params:
        CONCOURSE_URL: ((concourse-url))
        CONCOURSE_TEAM: ((concourse-team))
        PIPELINE_PREFIX: ((pipeline-prefix))
        MASS_RUN_NUMBER: {{metadata.mass_test_run_iterations}}
        CONCOURSE_USERNAME: ((concourse-username))
        CONCOURSE_PASSWORD: ((concourse-password))
      run:
        path: bash
        args:
        - -ec
        - |
          BASE_DIR=$(pwd)
          curl "${CONCOURSE_URL}/api/v1/cli?arch=amd64&platform=linux" --output fly
          chmod +x fly
          TARGET_NAME=concourse
          ./fly -t ${TARGET_NAME} login -c "${CONCOURSE_URL}" -n "${CONCOURSE_TEAM}" -u "${CONCOURSE_USERNAME}" -p "${CONCOURSE_PASSWORD}"
          for t in $(seq ${MASS_RUN_NUMBER}); do
            ./fly -t ${TARGET_NAME} trigger-job -j ${PIPELINE_PREFIX}mass-test-run/DistributedTestOpenJDK8
          done

{%- for test in tests if test.name=="Distributed" %}
  {%- set parameters = {} %}
  {%- do deep_merge(parameters, test) %}
  {%- for java_test_version in (java_test_versions) if java_test_version.name=="OpenJDK8" -%}
    {%- if java_test_version.override is defined and java_test_version.override[test.name] is defined %}
      {%- do deep_merge(parameters, java_test_version.override[test.name]) %}
    {%- endif %}
- name: {{test.name}}Test{{java_test_version.name}}
  max_in_flight: 10
  public: true
  plan:
  - do:
    {{- plan_resource_gets(test) |indent(4) }}
      - put: concourse-metadata-resource
      - get: alpine-tools-image
        passed: [TriggerMassRun]
      - get: {{ test.PLATFORM}}-builder-image-family
    - do:
      {{ init_retry()|indent(6) }}
      - task: create_instance-{{java_test_version.name}}
        image: alpine-tools-image
        config:
          platform: linux
          params:
            {{ common_instance_params(parameters) | indent(12) }}
            GEODE_BRANCH: {{repository.branch}}
            GEODE_FORK: {{repository.fork}}
            JAVA_BUILD_VERSION: {{ java_build_version.version }}
            JAVA_TEST_VERSION: {{ java_test_version.version }}
            IMAGE_FAMILY_NAME: ((pipeline-prefix)){{ test.PLATFORM }}-geode-builder
          run:
            path: geode-ci/ci/scripts/create_instance.sh
          inputs:
          - name: concourse-metadata-resource
          - name: geode-ci
          - name: geode
          - name: attempts-log
            path: old
          - name: {{ test.PLATFORM }}-builder-image-family
            path: builder-image
          outputs:
          - name: instance-data-{{java_test_version.name}}
            path: instance-data
          - name: attempts-log
            path: new
        timeout: 20m
        attempts: 5
      - do:
        - task: rsync_code_up-{{java_test_version.name}}
          image: alpine-tools-image
          config:
            platform: linux
            run:
              path: geode-ci/ci/scripts/rsync_code_up.sh
            inputs:
            - name: geode-ci
            - name: geode
            - name: instance-data-{{java_test_version.name}}
              path: instance-data
          timeout: 15m
          attempts: 5
        - try:
            task: execute_tests-{{java_test_version.name}}
            image: alpine-tools-image
            config:
              platform: linux
              params:
                ARTIFACT_SLUG: {{test.ARTIFACT_SLUG}}-{{java_test_version.name}}
                JAVA_BUILD_VERSION: {{ java_build_version.version }}
                JAVA_TEST_VERSION: {{ java_test_version.version }}
                GRADLE_TASK: {{test.GRADLE_TASK}}
                {{ common_test_params(parameters) | indent(16) }}
              run:
                path: geode-ci/ci/scripts/execute_tests.sh
              inputs:
              - name: geode-ci
              - name: geode
              - name: instance-data-{{java_test_version.name}}
                path: instance-data
            timeout: {{parameters.EXECUTE_TEST_TIMEOUT}}
            ensure:
              do:
              - task: rsync_code_down-{{java_test_version.name}}
                image: alpine-tools-image
                config:
                  platform: linux
                  params:
                    JAVA_BUILD_VERSION: {{ java_build_version.version }}
                    ARTIFACT_SLUG: {{test.ARTIFACT_SLUG}}-{{java_test_version.name}}
                  run:
                    path: geode-ci/ci/scripts/rsync_code_down.sh
                  inputs:
                  - name: geode-ci
                  - name: instance-data-{{java_test_version.name}}
                    path: instance-data
                  outputs:
                  - name: geode-results-{{java_test_version.name}}
                    path: geode-results
                timeout: 15m
                attempts: 5
              ensure:
                do:
                - aggregate:
                  - task: archive_results-{{java_test_version.name}}
                    image: alpine-tools-image
                    config:
                      platform: linux
                      params:
                        ARTIFACT_SLUG: {{test.ARTIFACT_SLUG}}-{{java_test_version.name}}
                        GRADLE_TASK: {{test.GRADLE_TASK}}
                        MAINTENANCE_VERSION: ((geode-build-branch))
                        ARTIFACT_BUCKET: ((artifact-bucket))
                        SERVICE_ACCOUNT: ((concourse-gcp-account))
                      run:
                        path: geode-ci/ci/scripts/archive_results.sh
                      inputs:
                        - name: concourse-metadata-resource
                        - name: geode-ci
                        - name: geode-build-version
                        - name: geode-results-{{java_test_version.name}}
                          path: geode-results
                    timeout: 1h
                  - task: delete_instance-{{java_test_version.name}}
                    image: alpine-tools-image
                    config:
                      platform: linux
                      run:
                        path: geode-ci/ci/scripts/delete_instance.sh
                      inputs:
                      - name: geode-ci
                      - name: instance-data-{{java_test_version.name}}
                        path: instance-data
                    timeout: 1h
  ensure:
    put: test-finish-time

- name: poll-for-test-completion
  public: ((public-pipelines))
  serial: true
  plan:
  - in_parallel:
    - get: geode
      passed: [{{test.name}}Test{{java_test_version.name}}]
    - get: alpine-tools-image
      passed: [TriggerMassRun]
    - get: test-finish-time
      passed: [{{test.name}}Test{{java_test_version.name}}]
      trigger: true
    - put: concourse-metadata-resource
  - task: poll-for-test-run-completion
    image: alpine-tools-image
    config:
      platform: linux
      inputs:
      - name: concourse-metadata-resource
      run:
        path: bash
        args:
        - -ec
        - |
          . concourse-metadata-resource/concourse_metadata
          curl -L -k -o fly "((concourse-url))/api/v1/cli?arch=amd64&platform=linux"
          chmod +x fly
          job="{{test.name}}Test{{java_test_version.name}}"
          ./fly -t cc login \
            --concourse-url=((concourse-url)) \
            --team-name=((concourse-team)) \
            --username=((concourse-username)) \
            --password=((concourse-password))
          latest_job=$(./fly -t cc builds --job="${BUILD_PIPELINE_NAME}/${job}" --json | jq -r '[.[] | select(.status!="aborted")] | max_by(.name | tonumber)')
          count=$(echo "${latest_job}" | jq -r .name)
          if [ $((${count}%{{metadata.mass_test_run_iterations}})) -ne 0 ]; then
            echo "Only generating report every [{{metadata.mass_test_run_iterations}}] jobs. Exiting."
            exit 1
          fi

          status=$(echo "${latest_job}" | jq -r .status)
          case ${status} in
            started | pending)
              echo "Waiting on job ["${count}"] to finish"
              exit 1
              ;;
            succeeded | errored | failed | aborted | *)
              echo "Job [${count}] status is: [${status}]. Processing"
              ;;
          esac
          exit 0

- name: create-mass-test-run-report
  public: ((public-pipelines))
  serial: true
  plan:
  - in_parallel:
    - get: geode
      passed: [poll-for-test-completion]
    - get: geode-ci
      params:
        depth: 1
    - get: alpine-tools-image
      passed: [poll-for-test-completion]
    - put: concourse-metadata-resource
    - get: test-finish-time
      passed: [poll-for-test-completion]
      trigger: true
  - task: create-job-performance-report
    image: alpine-tools-image
    config:
      platform: linux
      inputs:
      - name: geode-ci
      - name: concourse-metadata-resource
      run:
        path: bash
        args:
        - -ec
        - |
          . concourse-metadata-resource/concourse_metadata
          curl -L -k -o fly "((concourse-url))/api/v1/cli?arch=amd64&platform=linux"
          chmod +x fly
          job="{{test.name}}Test{{java_test_version.name}}"
          ./fly -t cc login \
            --concourse-url=((concourse-url)) \
            --team-name=((concourse-team)) \
            --username=((concourse-username)) \
            --password=((concourse-password))

          set -x
          pip3 install -r geode-ci/ci/bin/concourse_job_performance_requirements.txt
          geode-ci/ci/bin/concourse_job_performance.py \
            --threaded \
            --team ((concourse-team)) \
            --number-of-builds {{metadata.mass_test_run_iterations}} \
            ((concourse-url)) \
            ${BUILD_PIPELINE_NAME} \
            {{test.name}}Test{{java_test_version.name}}
{% endfor -%}
{% endfor -%}
