summaryrefslogtreecommitdiff
path: root/.gitlab/ci/cache-repo.gitlab-ci.yml
blob: a091785dec3ba9b456d4e11460b6d82079460450 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# Builds a cached .tar.gz of the master branch with full history and
# uploads it to Google Cloud Storage. This archive is downloaded by a
# script defined by a CI/CD variable named CI_PRE_CLONE_SCRIPT. This has
# two benefits:
#
# 1. It speeds up builds. A 800 MB download only takes seconds.
# 2. It significantly reduces load on the file server. Smaller deltas
#    means less time spent in git pack-objects.
#
# Since the destination directory of the archive depends on the project
# ID, this is only run on GitLab.com.
#
# CI_REPO_CACHE_CREDENTIALS contains the Google Cloud service account
# JSON for uploading to the gitlab-ci-git-repo-cache bucket. These
# credentials are stored in the Production vault.
#
# Note that this bucket should be located in the same continent as the
# runner, or network egress charges will apply:
# https://cloud.google.com/storage/pricing
cache-repo:
  extends: .cache-repo:rules
  image: gcr.io/google.com/cloudsdktool/cloud-sdk:alpine
  stage: sync
  variables:
    GIT_STRATEGY: none
    TAR_FILENAME: /tmp/gitlab-master.tar
  script:
    - cd ..
    - rm -rf $CI_PROJECT_NAME
    - git clone --progress $CI_REPOSITORY_URL $CI_PROJECT_NAME
    - cd $CI_PROJECT_NAME
    - gcloud auth activate-service-account --key-file=$CI_REPO_CACHE_CREDENTIALS
    - git remote rm origin
    - tar cf $TAR_FILENAME .
    - gzip $TAR_FILENAME
    - gsutil cp $TAR_FILENAME.gz gs://gitlab-ci-git-repo-cache/project-$CI_PROJECT_ID/gitlab-master.tar.gz