tools/cloud_functions/gcs_event_based_ingest/cloudbuild.yaml (137 lines of code) (raw):
# Copyright 2021 Google LLC.
# This software is provided as-is, without warranty or representation
# for any use or purpose.
# Your use of it is subject to your agreement with Google.
# Licensed 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.
---
steps:
- name: 'hadolint/hadolint'
dir: '${_BUILD_DIR}'
entrypoint: '/bin/hadolint'
args:
- '--config'
- '.hadolint.yaml'
- 'Dockerfile.ci'
id: 'lint-ci-docker-image'
- name: 'gcr.io/kaniko-project/executor:latest'
dir: '${_BUILD_DIR}'
waitFor:
- 'lint-ci-docker-image'
args:
- '--dockerfile=Dockerfile.ci'
- '--destination=gcr.io/$PROJECT_ID/gcs_event_based_ingest_ci'
- '--cache=true'
- '--context=dir:///workspace/${_BUILD_DIR}'
id: 'build-ci-image'
- name: 'gcr.io/$PROJECT_ID/gcs_event_based_ingest_ci'
dir: '${_BUILD_DIR}'
entrypoint: 'isort'
waitFor:
- 'build-ci-image'
args:
- '--check-only'
- '.'
id: 'isort'
- name: 'gcr.io/$PROJECT_ID/gcs_event_based_ingest_ci'
dir: '${_BUILD_DIR}'
entrypoint: 'flake8'
waitFor:
- 'build-ci-image'
id: 'flake8'
- name: 'gcr.io/$PROJECT_ID/gcs_event_based_ingest_ci'
dir: '${_BUILD_DIR}'
entrypoint: 'yapf'
waitFor:
- 'build-ci-image'
args:
- '-ir'
- '.'
id: 'yapf'
- name: 'gcr.io/$PROJECT_ID/gcs_event_based_ingest_ci'
dir: '${_BUILD_DIR}'
entrypoint: 'pylint'
waitFor:
- 'build-ci-image'
args:
- 'gcs_ocn_bq_ingest/'
id: 'pylint-main'
- name: 'gcr.io/$PROJECT_ID/gcs_event_based_ingest_ci'
dir: '${_BUILD_DIR}'
entrypoint: 'mypy'
waitFor:
- 'build-ci-image'
args:
- 'gcs_ocn_bq_ingest/'
id: 'mypy-main'
- name: 'gcr.io/$PROJECT_ID/gcs_event_based_ingest_ci'
dir: '${_BUILD_DIR}'
entrypoint: 'mypy'
waitFor:
- 'build-ci-image'
args:
- 'tests/'
id: 'mypy-tests'
- name: 'hashicorp/terraform'
dir: '${_BUILD_DIR}/terraform_module/gcs_ocn_bq_ingest_function'
waitFor:
- '-'
args:
- 'init'
- '--upgrade=true'
id: 'terraform-init'
- name: 'hashicorp/terraform'
dir: '${_BUILD_DIR}/terraform_module/gcs_ocn_bq_ingest_function'
waitFor:
- 'terraform-init'
args:
- 'validate'
id: 'terraform-validate'
- name: 'hashicorp/terraform'
dir: '${_BUILD_DIR}/terraform_module/gcs_ocn_bq_ingest_function'
waitFor:
- 'terraform-validate'
args:
- 'fmt'
- '-check'
id: 'terraform-fmt'
- name: 'gcr.io/$PROJECT_ID/gcs_event_based_ingest_ci'
dir: '${_BUILD_DIR}'
waitFor:
- 'build-ci-image'
- 'isort'
- 'flake8'
- 'pylint-main'
- 'mypy-main'
- 'mypy-tests'
- 'terraform-fmt'
entrypoint: /bin/sh
args:
- '-c'
# pip installing again to get GCB to recognize mocker from pytest-mock
- 'pip install -r requirements-dev.txt && python3 -m pytest tests -m "not IT"'
# GCB sometimes get stuck on this step and is doomed to not recover.
# This is usually remedied by just re-running the build.
# adding this unit-test step level timeout so we can fail sooner and retry.
timeout: 15s
id: 'unit-test'
- name: 'gcr.io/$PROJECT_ID/gcs_event_based_ingest_ci'
dir: '${_BUILD_DIR}'
waitFor:
- 'build-ci-image'
- 'unit-test'
entrypoint: /bin/sh
args:
- '-c'
- 'pip install -r requirements-dev.txt && python3 -m pytest tests -m IT'
id: 'integration-test'
- name: 'gcr.io/$PROJECT_ID/gcs_event_based_ingest_ci'
dir: '${_BUILD_DIR}'
env:
- 'TF_VAR_project_id=$PROJECT_ID'
- 'TF_VAR_region=$_REGION'
- 'TF_VAR_short_sha=$SHORT_SHA'
waitFor:
- 'integration-test'
- 'build-ci-image'
entrypoint: /bin/sh
args:
- '-c'
- 'python3 -m pytest -vvv e2e'
id: 'e2e-test'
timeout: '3600s'
options:
machineType: 'N1_HIGHCPU_32'
substitutions:
'_BUILD_DIR': 'tools/cloud_functions/gcs_event_based_ingest'
'_REGION': 'us-central1'