#
# 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 init_retry with context %}

groups:
- name: main
  jobs:
  - {{ build_test.name }}
{%- for test in tests %}
  {%- for java_test_version in (java_test_versions) if not java_test_version.name.endswith("JDK8") or test.name == "Unit" %}
  - {{test.name}}Test{{java_test_version.name}}
  {%- endfor %}
{%- endfor %}
resources:
- name: geode
  type: pull-request
  source:
    access_token: ((github-apachegeode-ci-read-only-token))
    repository: {{repository.fork}}/geode
    disable_ci_skip: false
    skip_ssl_verification: false
- name: geode-windows
  type: pull-request
  source:
    access_token: ((github-apachegeode-ci-read-only-token))
    repository: {{repository.fork}}/geode
    disable_ci_skip: false
    skip_ssl_verification: false
    labels: [windows]
- name: geode-status
  type: pull-request
  source:
    access_token: ((github-pr-access-token))
    repository: {{repository.fork}}/geode
    disable_ci_skip: false
    skip_ssl_verification: false
- name: geode-ci
  type: git
  source:
    branch: {{repository.branch}}
    depth: 1
    paths:
    - ci/*
    uri: https://github.com/{{repository.upstream_fork}}/geode.git
- name: concourse-metadata-resource
  type: concourse-metadata-resource
  source: {}
- 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: windows-builder-image-family
  type: gci
  source:
    key: ((concourse-gcp-key))
    family_project: ((gcp-project))
    family: ((pipeline-prefix))windows-geode-builder

- 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: gcs-resource
  type: docker-image
  source:
    repository: frodenas/gcs-resource
- name: pull-request
  type: docker-image
  source:
    username: ((docker-username))
    password: ((docker-password))
    repository: gcr.io/((gcp-project))/((pipeline-prefix))github-pr-resource
    tag: latest
- 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))
jobs:
- name: {{build_test.name}}
  public: true
  plan:
  - do:
    - aggregate:
      - get: alpine-tools-image
      - get: geode
        trigger: true
        version: every
        attempts: 2
        params:
          integration_tool: rebase
      - get: geode-ci
        attempts: 2
      - get: {{ build_test.PLATFORM }}-builder-image-family
    - aggregate:
      - do:
        - put: pull-request-job-pending
          resource: geode-status
          params:
            context: {{ build_test.name }}
            path: geode
            status: pending
          get_params: {skip_download: true}
      - do:
        - put: concourse-metadata-resource
        {{ init_retry()|indent(8) }}
        - task: create_instance
          image: alpine-tools-image
          config:
            platform: linux
            params:
              CPUS: {{build_test.CPUS}}
              RAM: {{build_test.RAM}}
              GCP_PROJECT: ((gcp-project))
              GEODE_BRANCH: {{repository.branch}}
              GEODE_FORK: {{repository.fork}}
              JAVA_BUILD_VERSION: {{ java_build_version.version }}
              JAVA_TEST_VERSION: {{ java_build_version.version }}
              IMAGE_FAMILY_NAME: ((pipeline-prefix))linux-geode-builder
            run:
              path: geode-ci/ci/scripts/create_instance.sh
            inputs:
            - name: concourse-metadata-resource
            - name: geode
            - name: geode-ci
            - name: attempts-log
              path: old
            - name: {{ test.PLATFORM}}-builder-image-family
              path: builder-image
            outputs:
            - name: instance-data
            - name: attempts-log
              path: new
          timeout: 20m
          attempts: 5
    - task: rsync_code_up
      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
      timeout: 15m
      attempts: 5
    - task: build
      image: alpine-tools-image
      config:
        platform: linux
        params:
          JAVA_BUILD_VERSION: {{ java_build_version.version }}
          GRADLE_TASK: {{ build_test.GRADLE_TASK }}
          ARTIFACT_SLUG: {{build_test.ARTIFACT_SLUG}}
          JAVA_TEST_VERSION: {{ java_build_version.version }}
          CALL_STACK_TIMEOUT: {{build_test.CALL_STACK_TIMEOUT}}
          DUNIT_PARALLEL_FORKS: {{build_test.DUNIT_PARALLEL_FORKS}}
          GRADLE_TASK_OPTIONS: ""
          MAINTENANCE_VERSION: {{repository.branch}}
          PARALLEL_DUNIT: {{build_test.PARALLEL_DUNIT}}
          PARALLEL_GRADLE: {{build_test.PARALLEL_GRADLE}}
          ARTIFACT_BUCKET: ((artifact-bucket))
          SERVICE_ACCOUNT: ((concourse-gcp-account))
          GRADLE_GLOBAL_ARGS: ((gradle-global-args))
        run:
          path: geode-ci/ci/scripts/execute_build.sh
        inputs:
        - name: geode-ci
        - name: geode
        - name: instance-data
      timeout: {{build_test.EXECUTE_TEST_TIMEOUT}}
    on_failure:
      do:
      - put: pull-request-job-failure
        resource: geode-status
        params:
          context: {{ build_test.name }}
          path: geode
          status: failure
        get_params: {skip_download: true}
    ensure:
      do:
      - task: rsync_code_down
        image: alpine-tools-image
        config:
          platform: linux
          params:
            JAVA_BUILD_VERSION: {{ java_build_version.version }}
            ARTIFACT_SLUG: {{build_test.ARTIFACT_SLUG}}
          run:
            path: geode-ci/ci/scripts/rsync_code_down.sh
          inputs:
          - name: geode
          - name: geode-ci
          - name: instance-data
          outputs:
          - name: geode-results
        timeout: 15m
        attempts: 5
      ensure:
        aggregate:
        - task: archive_results
          image: alpine-tools-image
          config:
            platform: linux
            params:
              ARTIFACT_SLUG: {{build_test.ARTIFACT_SLUG}}
              GRADLE_TASK: {{build_test.GRADLE_TASK}}
              MAINTENANCE_VERSION: {{repository.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
            - name: geode-ci
            - name: geode-results
        - task: delete_instance
          image: alpine-tools-image
          config:
            platform: linux
            run:
              path: geode-ci/ci/scripts/delete_instance.sh
            inputs:
            - name: geode
            - name: geode-ci
            - name: instance-data
          timeout: 1h
    on_success:
      do:
      - put: pull-request-job-success
        resource: geode-status
        params:
          context: {{ build_test.name }}
          path: geode
          status: success
        get_params: {skip_download: true}


{% for test in tests %}
  {%- for java_test_version in (java_test_versions) if not java_test_version.name.endswith("JDK8") or test.name == "Unit" %}
- name: {{test.name}}Test{{java_test_version.name}}
  public: true
  plan:
  - do:
    - aggregate:
      - get: alpine-tools-image
{%- if test.PLATFORM=="linux" %}
      - get: geode
{%- else %}
      - get: geode
        resource: geode-windows
{%- endif %}
        trigger: true
        version: every
        attempts: 2
        params:
          integration_tool: rebase
      - get: geode-ci
        attempts: 2
      - get: {{ test.PLATFORM }}-builder-image-family
    - aggregate:
      - do:
        - put: pull-request-job-pending
          resource: geode-status
          params:
            context: {{test.name}}Test{{java_test_version.name}}
            path: geode
            status: pending
          get_params: {skip_download: true}
      - do:
        - put: concourse-metadata-resource
        {{ init_retry()|indent(8) }}
        - task: create_instance-{{java_test_version.name}}
          image: alpine-tools-image
          config:
            platform: linux
            params:
              CPUS: {{test.CPUS}}
              GEODE_BRANCH: {{repository.branch}}
              GEODE_FORK: {{repository.fork}}
              GCP_PROJECT: ((gcp-project))
              RAM: {{test.RAM}}
              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
            - name: geode-ci
            - name: attempts-log
              path: old
            - name: {{ test.PLATFORM}}-builder-image-family
              path: builder-image
            outputs:
            - name: instance-data
            - name: attempts-log
              path: new
          timeout: 20m
          attempts: 5
    - 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
        - name: geode-ci
        - name: instance-data
      timeout: 15m
      attempts: 5
    - task: execute_tests-{{java_test_version.name}}
      image: alpine-tools-image
      config:
        platform: linux
        params:
          ARTIFACT_SLUG: {{test.ARTIFACT_SLUG}}
          JAVA_BUILD_VERSION: {{ java_build_version.version }}
          JAVA_TEST_VERSION: {{ java_test_version.version }}
        {%- if test.CALL_STACK_TIMEOUT %}
          CALL_STACK_TIMEOUT: {{test.CALL_STACK_TIMEOUT}}
        {%- endif %}
          DUNIT_PARALLEL_FORKS: {{test.DUNIT_PARALLEL_FORKS}}
          GRADLE_TASK: {{test.GRADLE_TASK}}
        {%- if test.GRADLE_TASK_OPTIONS %}
          GRADLE_TASK_OPTIONS: {{test.GRADLE_TASK_OPTIONS}}
        {%- else %}
          GRADLE_TASK_OPTIONS: ""
        {%- endif %}
          MAINTENANCE_VERSION: {{repository.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))
        run:
          {%- if test.name=="StressNew" %}
          path: geode-ci/ci/scripts/repeat-new-tests.sh
          {%- else %}
          path: geode-ci/ci/scripts/execute_tests.sh
          {%- endif %}
        inputs:
        - name: geode
        - name: geode-ci
        - name: instance-data
      timeout: {{test.EXECUTE_TEST_TIMEOUT}}
    on_failure:
      do:
      - put: pull-request-job-failure
        resource: geode-status
        params:
          context: {{test.name}}Test{{java_test_version.name}}
          path: geode
          status: failure
        get_params: {skip_download: true}
    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}}
          run:
            path: geode-ci/ci/scripts/rsync_code_down.sh
          inputs:
          - name: geode
          - name: geode-ci
          - name: instance-data
          outputs:
          - name: geode-results
        timeout: 15m
        attempts: 5
      ensure:
        aggregate:
        - task: archive-results-{{java_test_version.name}}
          image: alpine-tools-image
          config:
            platform: linux
            params:
              ARTIFACT_SLUG: {{test.ARTIFACT_SLUG}}
              GRADLE_TASK: {{test.GRADLE_TASK}}
              MAINTENANCE_VERSION: {{repository.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
            - name: geode-ci
            - name: geode-results
        - 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
            - name: geode-ci
            - name: instance-data
          timeout: 1h
    on_success:
      do:
      - put: pull-request-job-success
        resource: geode-status
        params:
          context: {{test.name}}Test{{java_test_version.name}}
          path: geode
          status: success
        get_params: {skip_download: true}
{% endfor %}
{% endfor %}
