You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
cartodb/script/ci/cloudbuild-rails-tests-pr.yml

181 lines
5.7 KiB

steps:
# Cancel previous job on the same branch
- name: gcr.io/cloud-builders/gcloud-slim
entrypoint: /bin/bash
args:
- '-c'
- 'gcloud builds list --ongoing --filter="buildTriggerId=e6e94e19-02f9-4661-8819-bf8846f5c707 AND substitutions.BRANCH_NAME=${BRANCH_NAME} AND id!=${BUILD_ID}" --format="get(ID)" > jobs_to_cancel'
- name: gcr.io/cloud-builders/gcloud-slim
entrypoint: /bin/bash
args:
- '-c'
- 'gcloud builds cancel $(cat jobs_to_cancel | xargs) || true'
# Decrypt github key
- name: gcr.io/cloud-builders/gcloud-slim
args:
- kms
- decrypt
- --ciphertext-file=script/ci/.id_github_cartofante.enc
- --plaintext-file=/root/.ssh/id_rsa
- --location=global
- --keyring=keyring-github-ci
- --key=github-key
volumes:
- name: 'ssh'
path: /root/.ssh
# Set up git with key and domain
- name: 'gcr.io/cloud-builders/git'
entrypoint: 'bash'
args:
- '-c'
- |
chmod 600 /root/.ssh/id_rsa
cat <<EOF >/root/.ssh/config
Hostname github.com
IdentityFile /root/.ssh/id_rsa
EOF
mv script/ci/known_hosts /root/.ssh/known_hosts
volumes:
- name: 'ssh'
path: /root/.ssh
# Clean working directory
- name: alpine
args: ['sh', '-c', 'rm -rf .* | true && rm -rf *']
# Checkout repo with submodules
- name: 'gcr.io/cloud-builders/git'
entrypoint: 'sh'
args: ['-c', 'git clone git@github.com:CartoDB/${_REPO} -b "${BRANCH_NAME}" --depth 1 --recursive .']
volumes:
- name: 'ssh'
path: /root/.ssh
# Checkout db-connectors
- name: 'gcr.io/cloud-builders/git'
entrypoint: 'sh'
args: ['-c', 'git clone git@github.com:CartoDB/db-connectors --depth 1 private_gears/db-connectors']
volumes:
- name: 'ssh'
path: /root/.ssh
# Copy files to the right directories to run the tests
- name: ubuntu
entrypoint: /bin/bash
args:
- -c
- |
cp private/script/ci/* .
cp private/Dockerfile .
cp script/ci/* .
cp config/app_config.yml.sample config/app_config.yml
cp config/database.yml.sample config/database.yml
cp lib/assets/javascripts/cdb/secrets.example.json lib/assets/javascripts/cdb/secrets.json
# Build image
- name: gcr.io/cloud-builders/docker
entrypoint: /bin/bash
args:
- -cx
- |
docker pull ${_DOCKER_IMAGE_NAME}:${_BRANCH_TAG}
if [ $? -ne 0 ]
then
docker pull ${_DOCKER_IMAGE_NAME}:latest
fi
set -e
docker build --build-arg COMPILE_ASSETS=false --build-arg BUNDLE_JOBS=4 -t ${_DOCKER_IMAGE_NAME}:current -t ${_DOCKER_IMAGE_NAME}:${_BRANCH_TAG} -t ${_DOCKER_IMAGE_NAME}:${SHORT_SHA} -t ${_DOCKER_IMAGE_NAME}:${_BRANCH_TAG}--${SHORT_SHA} --cache-from ${_DOCKER_IMAGE_NAME}:${_BRANCH_TAG} --cache-from ${_DOCKER_IMAGE_NAME}:latest .
# Start necessary services (redis, postgres) in background
- name: 'docker/compose:1.28.0'
args: ['--verbose', '-f', 'docker-compose-pg12.yml', 'up', '--build', '-d']
env:
- COMPOSE_HTTP_TIMEOUT=120
timeout: 900s
# Download latest runtime stats from GCS
- name: gcr.io/cloud-builders/gsutil
entrypoint: /bin/bash
args:
- -cx
- |
if gsutil -q stat gs://cartodb-ci-tmp-logs/parallel_runtime_rspec.log ; then
gsutil cp gs://cartodb-ci-tmp-logs/parallel_runtime_rspec.log /workspace/parallel_runtime_rspec.log
else
echo 'Unable to download previous runtime stats'
fi
# Copy latest runtime stats to container
- name: docker/compose:1.28.0
entrypoint: /bin/sh
args:
- -c
- |
if [ -f '/workspace/parallel_runtime_rspec.log' ] ; then
chmod 777 /workspace/parallel_runtime_rspec.log
docker exec -i builder_1 bash -c 'mkdir /cartodb/tmp'
docker exec -i builder_1 bash -c 'chmod 777 /cartodb/tmp'
docker cp /workspace/parallel_runtime_rspec.log builder_1:/cartodb/tmp/parallel_runtime_rspec.log
else
echo 'Unable to copy previous runtime stats'
fi
# Run tests, first in parallel, then give a second try in serial if some tests fail
- name: gcr.io/cloud-builders/docker
entrypoint: /bin/bash
args:
- -cx
- |
docker exec -i builder_1 bash -c /cartodb/run_tests.sh || true
timeout: 1800s
# Copy tests results and logs from the container
- name: 'docker/compose:1.28.0'
entrypoint: /bin/sh
args:
- -c
- |
mkdir parallel_test_logs_${BUILD_ID}
docker-compose -f docker-compose-pg12.yml logs --no-color > parallel_test_logs_${BUILD_ID}/parallel_docker_compose_logs
docker cp builder_1:/cartodb/tmp/spec_summary.log parallel_test_logs_${BUILD_ID}/parallel_spec_summary.log
docker cp builder_1:/cartodb/tmp/parallel_runtime_rspec.log parallel_test_logs_${BUILD_ID}/parallel_runtime_rspec.log
docker cp builder_1:/cartodb/log/test.log parallel_test_logs_${BUILD_ID}/parallel_test.log
docker cp builder_1:/cartodb/tmp/tests_exit_code tests_exit_code
echo "Logs will be available during 14 days at gs://cartodb-ci-tmp-logs/${BUILD_ID}/"
# Upload logs to gcs
- name: gcr.io/cloud-builders/gsutil
args: [ '-m', 'cp', '-r', 'parallel_test_logs_${BUILD_ID}', 'gs://cartodb-ci-tmp-logs/' ]
# Upload runtime stats to GCS
- name: gcr.io/cloud-builders/gsutil
entrypoint: /bin/bash
args:
- -cx
- |
if [ "${BRANCH_NAME}" = 'master' ]; then
gsutil cp parallel_test_logs_${BUILD_ID}/parallel_runtime_rspec.log gs://cartodb-ci-tmp-logs/
fi
# Check tests return value and exit accordingly
- name: gcr.io/cloud-builders/docker
entrypoint: /bin/bash
args:
- -c
- |
echo "Detailed logs are at https://console.cloud.google.com/storage/browser/cartodb-ci-tmp-logs/parallel_test_logs_${BUILD_ID}"
exit $(cat tests_exit_code)
timeout: 2400s
substitutions:
_BRANCH_TAG: ${BRANCH_NAME//\//-}
_DOCKER_IMAGE_NAME: gcr.io/cartodb-on-gcp-main-artifacts/builder
_REPO: cartodb
options:
machineType: 'E2_HIGHCPU_32'