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'