blob: 836025208373726a04d55039226fb05ad2b18ebc [file] [log] [blame]
#
# 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) %}
- get: geode-ci
passed:
- Build
- aggregate:
- get: geode
trigger: true
passed:
- Build
- get: geode-build-version
trigger: true
passed:
- Build
version: every
{% 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 %}
{% macro all_gating_jobs() %}
{%- for test in (tests) if not test.name=="StressNew" -%}
{%- for java_test_version in (java_test_versions) if ((not test.ONLY_JDK is defined) or test.ONLY_JDK==java_test_version.version) %}
- {{test.name}}Test{{java_test_version.name}}
{%- endfor -%}
{%- endfor -%}
{%- for run_var in (benchmarks.flavors) %}
- Benchmark{{ run_var.title }}
{%- endfor -%}
{% endmacro %}
groups:
- name: main
jobs:
- {{ build_test.name }}
{{- all_gating_jobs() | indent(2) }}
- UpdatePassingTokens
{%- if repository.upstream_fork != "apache" or repository.branch == "develop" or repository.branch.startswith("support/") %}
- PublishArtifacts
{%- endif %}
- name: complete
jobs:
- {{ build_test.name }}
{{- all_gating_jobs() | indent(2) }}
{%- if repository.upstream_fork != "apache" or repository.branch == "develop" or repository.branch.startswith("support/") %}
- PublishArtifacts
{%- endif %}
- UpdatePassingTokens
- name: linux
jobs:
- {{ build_test.name }}
{%- for test in (tests) if test.PLATFORM=="linux" and not test.name=="StressNew" -%}
{% for java_test_version in (java_test_versions) if ((not test.ONLY_JDK is defined) or test.ONLY_JDK==java_test_version.version) %}
- {{test.name}}Test{{java_test_version.name}}
{%- endfor -%}
{%- endfor %}
{%- for flavor in (benchmarks.flavors) %}
- Benchmark{{flavor.title}}
{%- endfor %}
- name: windows
jobs:
- {{ build_test.name }}
{%- for test in (tests) if test.PLATFORM=="windows" -%}
{% for java_test_version in (java_test_versions) if ((not test.ONLY_JDK is defined) or test.ONLY_JDK==java_test_version.version) %}
- {{test.name}}Test{{java_test_version.name}}
{%- endfor -%}
{%- endfor %}
{%- for java_test_version in (java_test_versions) %}
- name: {{java_test_version.name}}
jobs:
- {{ build_test.name }}
{%- for test in (tests) if (not test.name=="StressNew") and ((not test.ONLY_JDK is defined) or test.ONLY_JDK==java_test_version.version) %}
- {{test.name}}Test{{java_test_version.name}}
{%- endfor -%}
{%- endfor %}
- name: Benchmarks
jobs:
{%- for run_var in (benchmarks.flavors) %}
- Benchmark{{ run_var.title }}
{%- endfor %}
- name: Semver Management
jobs:
{%- for semverPiece in ['major', 'minor', 'patch'] %}
- Bump{{ semverPiece.title() }}
{%- endfor %}
resources:
- 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"
- CODEOWNERS
{{ github_access() | indent(4) }}
- name: geode-ci
type: git
source:
branch: ((geode-build-branch))
depth: 1
paths:
- ci/*
{{ github_access() | indent(4) }}
- name: geode-benchmarks
type: git
source:
branch: {{benchmarks.benchmark_branch}}
depth: 1
uri: https://github.com/((geode-fork))/geode-benchmarks.git
- 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: geode-passing-tokens
type: json-gcs-resource
source:
bucket: ((artifact-bucket))
json_key: ((concourse-gcp-key))
versioned_file: semvers/((pipeline-prefix))((geode-build-branch))/passing-build-tokens.json
- 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: 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
- name: json-gcs-resource
type: docker-image
source:
username: ((docker-username))
password: ((docker-password))
repository: gcr.io/((gcp-project))/((pipeline-prefix))gcs-resource-with-json-content
tag: latest
jobs:
{% for semverPiece in ['major', 'minor', 'patch'] -%}
- name: Bump{{ semverPiece.title() }}
serial: true
plan:
- get: geode-build-version
params: { bump: {{ semverPiece }},
pre: ((semver-prerelease-token)),
pre_without_version: true }
- put: geode-build-version
params:
file: geode-build-version/number
{% endfor %}
- name: {{build_test.name}}
public: true
max_in_flight: {{build_test.MAX_IN_FLIGHT}}
plan:
- aggregate:
- get: geode-ci
- get: alpine-tools-image
- get: geode
trigger: true
- get: geode-build-version
params:
pre: ((semver-prerelease-token))
- get: {{ build_test.PLATFORM }}-builder-image-family
- do:
- put: concourse-metadata-resource
{{ init_retry()|indent(4) }}
- task: create_instance
image: alpine-tools-image
config:
platform: linux
params:
{{ common_instance_params(build_test) | indent(10) }}
GEODE_BRANCH: {{repository.branch}}
GEODE_FORK: {{repository.fork}}
JAVA_BUILD_VERSION: {{ java_build_version.version }}
IMAGE_FAMILY_NAME: ((pipeline-prefix)){{ build_test.PLATFORM }}-geode-builder
run:
path: geode-ci/ci/scripts/create_instance.sh
inputs:
- name: attempts-log
path: old
- name: concourse-metadata-resource
- name: geode
- name: geode-ci
- name: {{ build_test.PLATFORM }}-builder-image-family
path: builder-image
outputs:
- name: attempts-log
path: new
- name: instance-data
timeout: 20m
attempts: 5
on_failure:
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
- aggregate:
- put: geode-build-version
params:
file: geode-build-version/number
- 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
on_failure:
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
- task: build
image: alpine-tools-image
config:
platform: linux
params:
JAVA_BUILD_VERSION: {{ java_build_version.version }}
GRADLE_TASK: {{ build_test.GRADLE_TASK }}
{{ common_test_params(build_test) | indent(8) }}
run:
path: geode-ci/ci/scripts/execute_build.sh
inputs:
- name: geode-ci
- name: geode
- name: instance-data
- name: geode-build-version
outputs:
- name: built-geode
- name: results
timeout: {{build_test.EXECUTE_TEST_TIMEOUT}}
ensure:
do:
- task: rsync_code_down
image: alpine-tools-image
config:
platform: linux
params:
JAVA_BUILD_VERSION: {{ java_build_version.version }}
run:
path: geode-ci/ci/scripts/rsync_code_down.sh
inputs:
- name: geode-ci
- name: geode
- name: instance-data
outputs:
- name: geode-results
timeout: 15m
attempts: 5
ensure:
do:
- aggregate:
- task: archive_results
image: alpine-tools-image
config:
platform: linux
params:
ARTIFACT_SLUG: {{build_test.ARTIFACT_SLUG}}-{{java_build_version.name}}
GRADLE_TASK: {{build_test.GRADLE_TASK}}
MAINTENANCE_VERSION: ((geode-build-branch))
ARTIFACT_BUCKET: ((artifact-bucket))
SERVICE_ACCOUNT: ((!concourse-gcp-account))
TAR_GEODE_BUILD_ARTIFACTS: true
run:
path: geode-ci/ci/scripts/archive_results.sh
inputs:
- name: geode
- name: concourse-metadata-resource
- name: geode-ci
- name: geode-build-version
- name: geode-results
timeout: 1h
- 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
- name: UpdatePassingTokens
public: true
serial: true
plan:
- aggregate:
- get: alpine-tools-image
- get: geode
passed: &update-token-passed-anchor
{%- if repository.upstream_fork != "apache" or repository.branch == "develop" or repository.branch.startswith("support/") %}
- PublishArtifacts
{% else %}
{{- all_gating_jobs() | indent(6) }}
{% endif %}
trigger: true
- get: geode-build-version
trigger: true
passed: *update-token-passed-anchor
- task: couple-sha-and-build-id
image: alpine-tools-image
config:
platform: linux
inputs:
- name: geode
- name: geode-build-version
outputs:
- name: geode-passing-tokens
run:
path: bash
args:
- -cx
- |
pushd geode
GEODE_SHA=$(git rev-parse HEAD)
popd
GEODE_SEMVER=$(cat geode-build-version/number)
GS_PATH=gs://((artifact-bucket))/semvers/((pipeline-prefix))((geode-build-branch))/passing-build-tokens.json
CURRENT_PASSING_SHA=$(gsutil cat ${GS_PATH} | jq -r .ref)
set -e
# Check that the incoming GEODE_SHA is a descendent of the currently stored value.
# Keeps us from winding back the repository in the case of an out-of-order pipeline pass
if [ -n "${CURRENT_PASSING_SHA}" ]; then
cd geode
if git merge-base --is-ancestor ${CURRENT_PASSING_SHA} ${GEODE_SHA}; then
cat > ../geode-passing-tokens/passing-build-tokens.json <<JSON
{
"ref": "${GEODE_SHA}",
"semver": "${GEODE_SEMVER}"
}
JSON
fi
fi
- aggregate:
- put: geode-passing-tokens
params:
file: geode-passing-tokens/passing-build-tokens.json
{% for run_var in (benchmarks.flavors) %}
- name: Benchmark{{ run_var.title }}
public: true
max_in_flight: {{ run_var.max_in_flight }}
plan:
- get: geode-ci
passed: &benchmark-inputs
- Build
- get: alpine-tools-image
- aggregate:
- get: geode
passed: *benchmark-inputs
trigger: true
- get: geode-benchmarks
- get: geode-build-version
trigger: true
passed: *benchmark-inputs
version: every
- put: concourse-metadata-resource
- do:
- task: run_benchmarks{{ run_var.title }}
image: alpine-tools-image
config:
platform: linux
params:
AWS_ACCESS_KEY_ID: ((benchmarks-access-key-id))
AWS_SECRET_ACCESS_KEY: ((benchmarks-secret-access-key))
AWS_DEFAULT_REGION: us-west-2
AWS_REGION: us-west-2
ARTIFACT_BUCKET: ((artifact-bucket))
BENCHMARKS_BRANCH: {{benchmarks.benchmark_branch}}
BASELINE_BRANCH: {{benchmarks.baseline_branch}}
BASELINE_VERSION: {{benchmarks.baseline_version}}
FLAGS: {{ run_var.flag }}
TAG_POSTFIX: {{ run_var.title }}
TEST_OPTIONS: {{ run_var.options }}
PURPOSE: ((pipeline-prefix))geode-benchmarks
run:
path: geode-ci/ci/scripts/run_benchmarks.sh
inputs:
- name: geode
- name: geode-ci
- name: geode-benchmarks
- name: concourse-metadata-resource
outputs:
- name: results
timeout: {{ run_var.timeout }}
ensure:
do:
- task: cleanup_benchmarks
image: alpine-tools-image
config:
platform: linux
params:
AWS_ACCESS_KEY_ID: ((benchmarks-access-key-id))
AWS_SECRET_ACCESS_KEY: ((benchmarks-secret-access-key))
AWS_DEFAULT_REGION: us-west-2
AWS_REGION: us-west-2
ARTIFACT_BUCKET: ((artifact-bucket))
BASELINE_BRANCH: {{benchmarks.baseline_branch}}
BASELINE_VERSION: {{benchmarks.baseline_version}}
FLAGS: {{ run_var.flag }}
TAG_POSTFIX: {{ run_var.title }}
TEST_OPTIONS: {{ run_var.options }}
run:
path: geode-ci/ci/scripts/cleanup_benchmarks.sh
inputs:
- name: geode
- name: geode-ci
- name: geode-benchmarks
- name: concourse-metadata-resource
- name: results
{% endfor %}
{% if repository.upstream_fork != "apache" or repository.branch == "develop" or repository.branch.startswith("support/") %}
- name: PublishArtifacts
public: true
plan:
- aggregate:
- get: geode-ci
passed: &publish-passed-inputs
{{- all_gating_jobs() | indent(6) }}
- get: alpine-tools-image
- get: geode
passed: *publish-passed-inputs
trigger: true
- get: linux-builder-image-family
- aggregate:
- get: geode-build-version
trigger: true
passed: *publish-passed-inputs
- put: concourse-metadata-resource
{{ init_retry()|indent(4) }}
- task: create_instance
image: alpine-tools-image
config:
platform: linux
params:
{{ common_instance_params(publish_artifacts) | indent(8) }}
GEODE_BRANCH: {{repository.branch}}
GEODE_FORK: {{repository.fork}}
JAVA_BUILD_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-ci
- name: geode
- name: attempts-log
path: old
- name: linux-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: publish
image: alpine-tools-image
config:
platform: linux
params:
MAINTENANCE_VERSION: ((geode-build-branch))
ARTIFACT_BUCKET: ((artifact-bucket))
SERVICE_ACCOUNT: ((!concourse-gcp-account))
JAVA_BUILD_VERSION: {{ java_build_version.version }}
MAVEN_SNAPSHOT_BUCKET: ((maven-snapshot-bucket))
GRADLE_GLOBAL_ARGS: ((gradle-global-args))
run:
path: geode-ci/ci/scripts/execute_publish.sh
inputs:
- name: instance-data
- name: geode
- name: geode-ci
- name: geode-build-version
ensure:
do:
- 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
{% endif %}
{%- for test in tests if not test.name=="StressNew" %}
{%- set parameters = {} %}
{%- do deep_merge(parameters, test) %}
{%- for java_test_version in (java_test_versions) if ((not test.ONLY_JDK is defined) or test.ONLY_JDK==java_test_version.version) %}
{%- 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: {{parameters.MAX_IN_FLIGHT}}
public: true
plan:
- do:
{{- plan_resource_gets(test) |indent(4) }}
- put: concourse-metadata-resource
- get: alpine-tools-image
- 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
- 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(14) }}
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
- 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: geode
- 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
- name: geode-ci
- name: instance-data-{{java_test_version.name}}
path: instance-data
timeout: 1h
{% endfor -%}
{% endfor -%}