#
# 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 github_access with context %}
{% from 'shared_jinja.yml' import init_retry with context %}

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

{% macro common_test_params(test) -%}
  {%- if test.GRADLE_TASK_OPTIONS -%}
GRADLE_TASK_OPTIONS: {{ test.GRADLE_TASK_OPTIONS }}
  {%- endif %}
MAINTENANCE_VERSION: ((geode-build-branch ))
SERVICE_ACCOUNT: ((!concourse-gcp-account))
{%- endmacro %}

---

resource_types:
- name: maven-resource
  type: docker-image
  source:
    repository: nulldriver/maven-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))

resources:
- name: geode-examples
  type: git
  source:
    uri: https://github.com/{{repository.fork}}/geode-examples.git
    branch: {{ repository.branch }}
    depth: 10
- name: geode-ci
  type: git
  source:
    depth: 1
    uri: https://github.com/{{repository.fork}}/geode.git
    branch: {{ repository.branch }}
    paths:
    - ci/pipelines/geode-build/*
    - ci/scripts/*
- name: concourse-metadata-resource
  type: concourse-metadata-resource
  source: {}
- name: 24h
  type: time
  source: {interval: 24h}
- 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

jobs:
- name: {{examples_test.name}}
  public: true
  serial: true
  plan:
  - aggregate:
    - get: geode-ci
    - get: alpine-tools-image
  - aggregate:
    - get: geode-examples
      trigger: true
    - get: 24h
      trigger: true
    - do:
      - put: concourse-metadata-resource
      {{ init_retry()|indent(6) }}
      - task: create_instance
        image: alpine-tools-image
        config:
          platform: linux
          params:
            {{ common_instance_params(examples_test) | indent(12) }}
            GEODE_BRANCH: {{repository.branch}}
            GEODE_FORK: {{repository.fork}}
          run:
            path: geode-ci/ci/scripts/create_instance.sh
          inputs:
          - name: concourse-metadata-resource
          - name: geode-ci
          - name: attempts-log
            path: old
          outputs:
          - name: instance-data
          - name: attempts-log
            path: new
        timeout: 15m
        attempts: 10
      - 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-examples
            path: geode
          - name: instance-data
        timeout: 5m
      - task: build
        image: alpine-tools-image
        config:
          platform: linux
          params:
            JAVA_BUILD_VERSION: {{ java_build_version.version }}
            GRADLE_TASK: {{ examples_test.GRADLE_TASK }}
            {{ common_test_params(examples_test) | indent(12) }}
          run:
            path: geode-ci/ci/scripts/execute_build_examples.sh
          inputs:
          - name: geode-ci
          - name: geode-examples
            path: geode
          - name: instance-data
          outputs:
          - name: results
    ensure:
      do:
      - task: delete_instance
        image: alpine-tools-image
        config:
          platform: linux
          run:
            path: geode-ci/ci/scripts/delete_instance.sh
          inputs:
          - name: geode-ci
          - name: instance-data
        timeout: 1h
