googleauth 0.17.0 → 0.17.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +11 -0
  3. data/CHANGELOG.md +6 -0
  4. data/lib/googleauth/version.rb +1 -1
  5. metadata +14 -88
  6. data/.github/CODEOWNERS +0 -7
  7. data/.github/CONTRIBUTING.md +0 -74
  8. data/.github/ISSUE_TEMPLATE/bug_report.md +0 -36
  9. data/.github/ISSUE_TEMPLATE/feature_request.md +0 -21
  10. data/.github/ISSUE_TEMPLATE/support_request.md +0 -7
  11. data/.github/renovate.json +0 -6
  12. data/.github/sync-repo-settings.yaml +0 -18
  13. data/.github/workflows/ci.yml +0 -55
  14. data/.github/workflows/release-please.yml +0 -39
  15. data/.gitignore +0 -39
  16. data/.kokoro/populate-secrets.sh +0 -76
  17. data/.kokoro/release.cfg +0 -52
  18. data/.kokoro/release.sh +0 -18
  19. data/.kokoro/trampoline_v2.sh +0 -489
  20. data/.repo-metadata.json +0 -5
  21. data/.rspec +0 -2
  22. data/.rubocop.yml +0 -17
  23. data/.toys/.toys.rb +0 -45
  24. data/.toys/ci.rb +0 -43
  25. data/.toys/kokoro/.toys.rb +0 -66
  26. data/.toys/kokoro/publish-docs.rb +0 -67
  27. data/.toys/kokoro/publish-gem.rb +0 -53
  28. data/.toys/linkinator.rb +0 -43
  29. data/.trampolinerc +0 -48
  30. data/Gemfile +0 -25
  31. data/googleauth.gemspec +0 -39
  32. data/integration/helper.rb +0 -31
  33. data/integration/id_tokens/key_source_test.rb +0 -74
  34. data/spec/googleauth/apply_auth_examples.rb +0 -171
  35. data/spec/googleauth/client_id_spec.rb +0 -160
  36. data/spec/googleauth/compute_engine_spec.rb +0 -178
  37. data/spec/googleauth/credentials_spec.rb +0 -600
  38. data/spec/googleauth/get_application_default_spec.rb +0 -286
  39. data/spec/googleauth/iam_spec.rb +0 -80
  40. data/spec/googleauth/scope_util_spec.rb +0 -77
  41. data/spec/googleauth/service_account_spec.rb +0 -511
  42. data/spec/googleauth/signet_spec.rb +0 -142
  43. data/spec/googleauth/stores/file_token_store_spec.rb +0 -57
  44. data/spec/googleauth/stores/redis_token_store_spec.rb +0 -50
  45. data/spec/googleauth/stores/store_examples.rb +0 -58
  46. data/spec/googleauth/user_authorizer_spec.rb +0 -343
  47. data/spec/googleauth/user_refresh_spec.rb +0 -359
  48. data/spec/googleauth/web_user_authorizer_spec.rb +0 -172
  49. data/spec/spec_helper.rb +0 -92
  50. data/test/helper.rb +0 -33
  51. data/test/id_tokens/key_sources_test.rb +0 -240
  52. data/test/id_tokens/verifier_test.rb +0 -269
data/.gitignore DELETED
@@ -1,39 +0,0 @@
1
- *~
2
- Gemfile.lock
3
- *.gem
4
- *.rbc
5
- /.config
6
- /coverage/
7
- /InstalledFiles
8
- /pkg/
9
- /spec/reports/
10
- /test/tmp/
11
- /test/version_tmp/
12
- /tmp/
13
-
14
- ## Specific to RubyMotion:
15
- .dat*
16
- .repl_history
17
- build/
18
-
19
- ## Documentation cache and generated files:
20
- /.yardoc/
21
- /_yardoc/
22
- /doc/
23
- /rdoc/
24
-
25
- ## Environment normalisation:
26
- /.bundle/
27
- /lib/bundler/man/
28
-
29
- # for a library or gem, you might want to ignore these files since the code is
30
- # intended to run in multiple environments; otherwise, check them in:
31
- # Gemfile.lock
32
- # .ruby-version
33
- # .ruby-gemset
34
-
35
- # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
36
- .rvmrc
37
-
38
- /node_modules
39
- /package-lock.json
@@ -1,76 +0,0 @@
1
- #!/bin/bash
2
- # Copyright 2020 Google LLC.
3
- #
4
- # Licensed under the Apache License, Version 2.0 (the "License");
5
- # you may not use this file except in compliance with the License.
6
- # You may obtain a copy of the License at
7
- #
8
- # http://www.apache.org/licenses/LICENSE-2.0
9
- #
10
- # Unless required by applicable law or agreed to in writing, software
11
- # distributed under the License is distributed on an "AS IS" BASIS,
12
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- # See the License for the specific language governing permissions and
14
- # limitations under the License.
15
-
16
- # This file is called in the early stage of `trampoline_v2.sh` to
17
- # populate secrets needed for the CI builds.
18
-
19
- set -eo pipefail
20
-
21
- function now { date +"%Y-%m-%d %H:%M:%S" | tr -d '\n' ;}
22
- function msg { println "$*" >&2 ;}
23
- function println { printf '%s\n' "$(now) $*" ;}
24
-
25
- # Populates requested secrets set in SECRET_MANAGER_KEYS
26
-
27
- # In Kokoro CI builds, we use the service account attached to the
28
- # Kokoro VM. This means we need to setup auth on other CI systems.
29
- # For local run, we just use the gcloud command for retrieving the
30
- # secrets.
31
-
32
- if [[ "${RUNNING_IN_CI:-}" == "true" ]]; then
33
- GCLOUD_COMMANDS=(
34
- "docker"
35
- "run"
36
- "--entrypoint=gcloud"
37
- "--volume=${KOKORO_GFILE_DIR}:${KOKORO_GFILE_DIR}"
38
- "gcr.io/google.com/cloudsdktool/cloud-sdk"
39
- )
40
- if [[ "${TRAMPOLINE_CI:-}" == "kokoro" ]]; then
41
- SECRET_LOCATION="${KOKORO_GFILE_DIR}/secret_manager"
42
- else
43
- echo "Authentication for this CI system is not implemented yet."
44
- exit 2
45
- # TODO: Determine appropriate SECRET_LOCATION and the GCLOUD_COMMANDS.
46
- fi
47
- else
48
- # For local run, use /dev/shm or temporary directory for
49
- # KOKORO_GFILE_DIR.
50
- if [[ -d "/dev/shm" ]]; then
51
- export KOKORO_GFILE_DIR=/dev/shm
52
- else
53
- export KOKORO_GFILE_DIR=$(mktemp -d -t ci-XXXXXXXX)
54
- fi
55
- SECRET_LOCATION="${KOKORO_GFILE_DIR}/secret_manager"
56
- GCLOUD_COMMANDS=("gcloud")
57
- fi
58
-
59
- msg "Creating folder on disk for secrets: ${SECRET_LOCATION}"
60
- mkdir -p ${SECRET_LOCATION}
61
-
62
- for key in $(echo ${SECRET_MANAGER_KEYS} | sed "s/,/ /g")
63
- do
64
- msg "Retrieving secret ${key}"
65
- "${GCLOUD_COMMANDS[@]}" \
66
- secrets versions access latest \
67
- --project cloud-devrel-kokoro-resources \
68
- --secret $key > \
69
- "$SECRET_LOCATION/$key"
70
- if [[ $? == 0 ]]; then
71
- msg "Secret written to ${SECRET_LOCATION}/${key}"
72
- else
73
- msg "Error retrieving secret ${key}"
74
- exit 2
75
- fi
76
- done
data/.kokoro/release.cfg DELETED
@@ -1,52 +0,0 @@
1
- # Format: //devtools/kokoro/config/proto/build.proto
2
-
3
- # Build logs will be here
4
- action {
5
- define_artifacts {
6
- regex: "**/*sponge_log.xml"
7
- }
8
- }
9
-
10
- # Fetch the token needed for reporting release status to GitHub
11
- before_action {
12
- fetch_keystore {
13
- keystore_resource {
14
- keystore_config_id: 73713
15
- keyname: "yoshi-automation-github-key"
16
- }
17
- }
18
- }
19
-
20
- before_action {
21
- fetch_keystore {
22
- keystore_resource {
23
- keystore_config_id: 73713
24
- keyname: "docuploader_service_account"
25
- }
26
- }
27
- }
28
-
29
- # Download resources for system tests (service account key, etc.)
30
- gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/google-cloud-ruby"
31
-
32
- # Download trampoline resources.
33
- gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline"
34
-
35
- # Use the trampoline script to run in docker.
36
- build_file: "google-auth-library-ruby/.kokoro/trampoline_v2.sh"
37
-
38
- # Configure the docker image for kokoro-trampoline.
39
- env_vars: {
40
- key: "TRAMPOLINE_IMAGE"
41
- value: "gcr.io/cloud-devrel-kokoro-resources/yoshi-ruby/release"
42
- }
43
-
44
- env_vars: {
45
- key: "TRAMPOLINE_BUILD_FILE"
46
- value: ".kokoro/release.sh"
47
- }
48
-
49
- env_vars: {
50
- key: "SECRET_MANAGER_KEYS"
51
- value: "releasetool-publish-reporter-app,releasetool-publish-reporter-googleapis-installation,releasetool-publish-reporter-pem"
52
- }
data/.kokoro/release.sh DELETED
@@ -1,18 +0,0 @@
1
- #!/bin/bash
2
-
3
- set -eo pipefail
4
-
5
- # Install gems in the user directory because the default install directory
6
- # is in a read-only location.
7
- export GEM_HOME=$HOME/.gem
8
- export PATH=$GEM_HOME/bin:$PATH
9
-
10
- python3 -m pip install git+https://github.com/googleapis/releasetool
11
- python3 -m pip install gcp-docuploader
12
- gem install --no-document toys
13
- bundle install
14
-
15
- python3 -m releasetool publish-reporter-script > /tmp/publisher-script; source /tmp/publisher-script
16
-
17
- toys kokoro publish-gem < /dev/null
18
- toys kokoro publish-docs < /dev/null
@@ -1,489 +0,0 @@
1
- #!/usr/bin/env bash
2
- # Copyright 2020 Google LLC
3
- #
4
- # Licensed under the Apache License, Version 2.0 (the "License");
5
- # you may not use this file except in compliance with the License.
6
- # You may obtain a copy of the License at
7
- #
8
- # http://www.apache.org/licenses/LICENSE-2.0
9
- #
10
- # Unless required by applicable law or agreed to in writing, software
11
- # distributed under the License is distributed on an "AS IS" BASIS,
12
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- # See the License for the specific language governing permissions and
14
- # limitations under the License.
15
-
16
- # trampoline_v2.sh
17
- #
18
- # If you want to make a change to this file, consider doing so at:
19
- # https://github.com/googlecloudplatform/docker-ci-helper
20
- #
21
- # This script is for running CI builds. For Kokoro builds, we
22
- # set this script to `build_file` field in the Kokoro configuration.
23
-
24
- # This script does 3 things.
25
- #
26
- # 1. Prepare the Docker image for the test
27
- # 2. Run the Docker with appropriate flags to run the test
28
- # 3. Upload the newly built Docker image
29
- #
30
- # in a way that is somewhat compatible with trampoline_v1.
31
- #
32
- # These environment variables are required:
33
- # TRAMPOLINE_IMAGE: The docker image to use.
34
- # TRAMPOLINE_DOCKERFILE: The location of the Dockerfile.
35
- #
36
- # You can optionally change these environment variables:
37
- # TRAMPOLINE_IMAGE_UPLOAD:
38
- # (true|false): Whether to upload the Docker image after the
39
- # successful builds.
40
- # TRAMPOLINE_BUILD_FILE: The script to run in the docker container.
41
- # TRAMPOLINE_WORKSPACE: The workspace path in the docker container.
42
- # Defaults to /workspace.
43
- # Potentially there are some repo specific envvars in .trampolinerc in
44
- # the project root.
45
- #
46
- # Here is an example for running this script.
47
- # TRAMPOLINE_IMAGE=gcr.io/cloud-devrel-kokoro-resources/node:10-user \
48
- # TRAMPOLINE_BUILD_FILE=.kokoro/system-test.sh \
49
- # .kokoro/trampoline_v2.sh
50
-
51
- set -euo pipefail
52
-
53
- TRAMPOLINE_VERSION="2.0.10"
54
-
55
- if command -v tput >/dev/null && [[ -n "${TERM:-}" ]]; then
56
- readonly IO_COLOR_RED="$(tput setaf 1)"
57
- readonly IO_COLOR_GREEN="$(tput setaf 2)"
58
- readonly IO_COLOR_YELLOW="$(tput setaf 3)"
59
- readonly IO_COLOR_RESET="$(tput sgr0)"
60
- else
61
- readonly IO_COLOR_RED=""
62
- readonly IO_COLOR_GREEN=""
63
- readonly IO_COLOR_YELLOW=""
64
- readonly IO_COLOR_RESET=""
65
- fi
66
-
67
- function function_exists {
68
- [ $(LC_ALL=C type -t $1)"" == "function" ]
69
- }
70
-
71
- # Logs a message using the given color. The first argument must be one
72
- # of the IO_COLOR_* variables defined above, such as
73
- # "${IO_COLOR_YELLOW}". The remaining arguments will be logged in the
74
- # given color. The log message will also have an RFC-3339 timestamp
75
- # prepended (in UTC). You can disable the color output by setting
76
- # TERM=vt100.
77
- function log_impl() {
78
- local color="$1"
79
- shift
80
- local timestamp="$(date -u "+%Y-%m-%dT%H:%M:%SZ")"
81
- echo "================================================================"
82
- echo "${color}${timestamp}:" "$@" "${IO_COLOR_RESET}"
83
- echo "================================================================"
84
- }
85
-
86
- # Logs the given message with normal coloring and a timestamp.
87
- function log() {
88
- log_impl "${IO_COLOR_RESET}" "$@"
89
- }
90
-
91
- # Logs the given message in green with a timestamp.
92
- function log_green() {
93
- log_impl "${IO_COLOR_GREEN}" "$@"
94
- }
95
-
96
- # Logs the given message in yellow with a timestamp.
97
- function log_yellow() {
98
- log_impl "${IO_COLOR_YELLOW}" "$@"
99
- }
100
-
101
- # Logs the given message in red with a timestamp.
102
- function log_red() {
103
- log_impl "${IO_COLOR_RED}" "$@"
104
- }
105
-
106
- readonly tmpdir=$(mktemp -d -t ci-XXXXXXXX)
107
- readonly tmphome="${tmpdir}/h"
108
- mkdir -p "${tmphome}"
109
-
110
- function cleanup() {
111
- rm -rf "${tmpdir}"
112
- }
113
- trap cleanup EXIT
114
-
115
- RUNNING_IN_CI="${RUNNING_IN_CI:-false}"
116
-
117
- # The workspace in the container, defaults to /workspace.
118
- TRAMPOLINE_WORKSPACE="${TRAMPOLINE_WORKSPACE:-/workspace}"
119
-
120
- pass_down_envvars=(
121
- # TRAMPOLINE_V2 variables.
122
- # Tells scripts whether they are running as part of CI or not.
123
- "RUNNING_IN_CI"
124
- # Indicates which CI system we're in.
125
- "TRAMPOLINE_CI"
126
- # Indicates the version of the script.
127
- "TRAMPOLINE_VERSION"
128
- )
129
-
130
- log_yellow "Building with Trampoline ${TRAMPOLINE_VERSION}"
131
-
132
- # Detect which CI systems we're in. If we're in any of the CI systems
133
- # we support, `RUNNING_IN_CI` will be true and `TRAMPOLINE_CI` will be
134
- # the name of the CI system. Both envvars will be passing down to the
135
- # container for telling which CI system we're in.
136
- if [[ -n "${KOKORO_BUILD_ID:-}" ]]; then
137
- # descriptive env var for indicating it's on CI.
138
- RUNNING_IN_CI="true"
139
- TRAMPOLINE_CI="kokoro"
140
- if [[ "${TRAMPOLINE_USE_LEGACY_SERVICE_ACCOUNT:-}" == "true" ]]; then
141
- if [[ ! -f "${KOKORO_GFILE_DIR}/kokoro-trampoline.service-account.json" ]]; then
142
- log_red "${KOKORO_GFILE_DIR}/kokoro-trampoline.service-account.json does not exist. Did you forget to mount cloud-devrel-kokoro-resources/trampoline? Aborting."
143
- exit 1
144
- fi
145
- # This service account will be activated later.
146
- TRAMPOLINE_SERVICE_ACCOUNT="${KOKORO_GFILE_DIR}/kokoro-trampoline.service-account.json"
147
- else
148
- if [[ "${TRAMPOLINE_VERBOSE:-}" == "true" ]]; then
149
- gcloud auth list
150
- fi
151
- log_yellow "Configuring Container Registry access"
152
- gcloud auth configure-docker --quiet
153
- fi
154
- pass_down_envvars+=(
155
- # KOKORO dynamic variables.
156
- "KOKORO_BUILD_NUMBER"
157
- "KOKORO_BUILD_ID"
158
- "KOKORO_JOB_NAME"
159
- "KOKORO_GIT_COMMIT"
160
- "KOKORO_GITHUB_COMMIT"
161
- "KOKORO_GITHUB_PULL_REQUEST_NUMBER"
162
- "KOKORO_GITHUB_PULL_REQUEST_COMMIT"
163
- # For Flaky Bot
164
- "KOKORO_GITHUB_COMMIT_URL"
165
- "KOKORO_GITHUB_PULL_REQUEST_URL"
166
- "KOKORO_BUILD_ARTIFACTS_SUBDIR"
167
- )
168
- elif [[ "${TRAVIS:-}" == "true" ]]; then
169
- RUNNING_IN_CI="true"
170
- TRAMPOLINE_CI="travis"
171
- pass_down_envvars+=(
172
- "TRAVIS_BRANCH"
173
- "TRAVIS_BUILD_ID"
174
- "TRAVIS_BUILD_NUMBER"
175
- "TRAVIS_BUILD_WEB_URL"
176
- "TRAVIS_COMMIT"
177
- "TRAVIS_COMMIT_MESSAGE"
178
- "TRAVIS_COMMIT_RANGE"
179
- "TRAVIS_JOB_NAME"
180
- "TRAVIS_JOB_NUMBER"
181
- "TRAVIS_JOB_WEB_URL"
182
- "TRAVIS_PULL_REQUEST"
183
- "TRAVIS_PULL_REQUEST_BRANCH"
184
- "TRAVIS_PULL_REQUEST_SHA"
185
- "TRAVIS_PULL_REQUEST_SLUG"
186
- "TRAVIS_REPO_SLUG"
187
- "TRAVIS_SECURE_ENV_VARS"
188
- "TRAVIS_TAG"
189
- )
190
- elif [[ -n "${GITHUB_RUN_ID:-}" ]]; then
191
- RUNNING_IN_CI="true"
192
- TRAMPOLINE_CI="github-workflow"
193
- pass_down_envvars+=(
194
- "GITHUB_WORKFLOW"
195
- "GITHUB_RUN_ID"
196
- "GITHUB_RUN_NUMBER"
197
- "GITHUB_ACTION"
198
- "GITHUB_ACTIONS"
199
- "GITHUB_ACTOR"
200
- "GITHUB_REPOSITORY"
201
- "GITHUB_EVENT_NAME"
202
- "GITHUB_EVENT_PATH"
203
- "GITHUB_SHA"
204
- "GITHUB_REF"
205
- "GITHUB_HEAD_REF"
206
- "GITHUB_BASE_REF"
207
- )
208
- elif [[ "${CIRCLECI:-}" == "true" ]]; then
209
- RUNNING_IN_CI="true"
210
- TRAMPOLINE_CI="circleci"
211
- pass_down_envvars+=(
212
- "CIRCLE_BRANCH"
213
- "CIRCLE_BUILD_NUM"
214
- "CIRCLE_BUILD_URL"
215
- "CIRCLE_COMPARE_URL"
216
- "CIRCLE_JOB"
217
- "CIRCLE_NODE_INDEX"
218
- "CIRCLE_NODE_TOTAL"
219
- "CIRCLE_PREVIOUS_BUILD_NUM"
220
- "CIRCLE_PROJECT_REPONAME"
221
- "CIRCLE_PROJECT_USERNAME"
222
- "CIRCLE_REPOSITORY_URL"
223
- "CIRCLE_SHA1"
224
- "CIRCLE_STAGE"
225
- "CIRCLE_USERNAME"
226
- "CIRCLE_WORKFLOW_ID"
227
- "CIRCLE_WORKFLOW_JOB_ID"
228
- "CIRCLE_WORKFLOW_UPSTREAM_JOB_IDS"
229
- "CIRCLE_WORKFLOW_WORKSPACE_ID"
230
- )
231
- fi
232
-
233
- # Configure the service account for pulling the docker image.
234
- function repo_root() {
235
- local dir="$1"
236
- while [[ ! -d "${dir}/.git" ]]; do
237
- dir="$(dirname "$dir")"
238
- done
239
- echo "${dir}"
240
- }
241
-
242
- # Detect the project root. In CI builds, we assume the script is in
243
- # the git tree and traverse from there, otherwise, traverse from `pwd`
244
- # to find `.git` directory.
245
- if [[ "${RUNNING_IN_CI:-}" == "true" ]]; then
246
- PROGRAM_PATH="$(realpath "$0")"
247
- PROGRAM_DIR="$(dirname "${PROGRAM_PATH}")"
248
- PROJECT_ROOT="$(repo_root "${PROGRAM_DIR}")"
249
- else
250
- PROJECT_ROOT="$(repo_root $(pwd))"
251
- fi
252
-
253
- log_yellow "Changing to the project root: ${PROJECT_ROOT}."
254
- cd "${PROJECT_ROOT}"
255
-
256
- # To support relative path for `TRAMPOLINE_SERVICE_ACCOUNT`, we need
257
- # to use this environment variable in `PROJECT_ROOT`.
258
- if [[ -n "${TRAMPOLINE_SERVICE_ACCOUNT:-}" ]]; then
259
-
260
- mkdir -p "${tmpdir}/gcloud"
261
- gcloud_config_dir="${tmpdir}/gcloud"
262
-
263
- log_yellow "Using isolated gcloud config: ${gcloud_config_dir}."
264
- export CLOUDSDK_CONFIG="${gcloud_config_dir}"
265
-
266
- log_yellow "Using ${TRAMPOLINE_SERVICE_ACCOUNT} for authentication."
267
- gcloud auth activate-service-account \
268
- --key-file "${TRAMPOLINE_SERVICE_ACCOUNT}"
269
- log_yellow "Configuring Container Registry access"
270
- gcloud auth configure-docker --quiet
271
- fi
272
-
273
- required_envvars=(
274
- # The basic trampoline configurations.
275
- "TRAMPOLINE_IMAGE"
276
- "TRAMPOLINE_BUILD_FILE"
277
- )
278
-
279
- if [[ -f "${PROJECT_ROOT}/.trampolinerc" ]]; then
280
- source "${PROJECT_ROOT}/.trampolinerc"
281
- fi
282
-
283
- log_yellow "Checking environment variables."
284
- for e in "${required_envvars[@]}"
285
- do
286
- if [[ -z "${!e:-}" ]]; then
287
- log "Missing ${e} env var. Aborting."
288
- exit 1
289
- fi
290
- done
291
-
292
- # We want to support legacy style TRAMPOLINE_BUILD_FILE used with V1
293
- # script: e.g. "github/repo-name/.kokoro/run_tests.sh"
294
- TRAMPOLINE_BUILD_FILE="${TRAMPOLINE_BUILD_FILE#github/*/}"
295
- log_yellow "Using TRAMPOLINE_BUILD_FILE: ${TRAMPOLINE_BUILD_FILE}"
296
-
297
- # ignore error on docker operations and test execution
298
- set +e
299
-
300
- log_yellow "Preparing Docker image."
301
- # We only download the docker image in CI builds.
302
- if [[ "${RUNNING_IN_CI:-}" == "true" ]]; then
303
- # Download the docker image specified by `TRAMPOLINE_IMAGE`
304
-
305
- # We may want to add --max-concurrent-downloads flag.
306
-
307
- log_yellow "Start pulling the Docker image: ${TRAMPOLINE_IMAGE}."
308
- if docker pull "${TRAMPOLINE_IMAGE}"; then
309
- log_green "Finished pulling the Docker image: ${TRAMPOLINE_IMAGE}."
310
- has_image="true"
311
- else
312
- log_red "Failed pulling the Docker image: ${TRAMPOLINE_IMAGE}."
313
- has_image="false"
314
- fi
315
- else
316
- # For local run, check if we have the image.
317
- if docker images "${TRAMPOLINE_IMAGE}" | grep "${TRAMPOLINE_IMAGE%:*}"; then
318
- has_image="true"
319
- else
320
- has_image="false"
321
- fi
322
- fi
323
-
324
-
325
- # The default user for a Docker container has uid 0 (root). To avoid
326
- # creating root-owned files in the build directory we tell docker to
327
- # use the current user ID.
328
- user_uid="$(id -u)"
329
- user_gid="$(id -g)"
330
- user_name="$(id -un)"
331
-
332
- # To allow docker in docker, we add the user to the docker group in
333
- # the host os.
334
- docker_gid=$(cut -d: -f3 < <(getent group docker))
335
-
336
- update_cache="false"
337
- if [[ "${TRAMPOLINE_DOCKERFILE:-none}" != "none" ]]; then
338
- # Build the Docker image from the source.
339
- context_dir=$(dirname "${TRAMPOLINE_DOCKERFILE}")
340
- docker_build_flags=(
341
- "-f" "${TRAMPOLINE_DOCKERFILE}"
342
- "-t" "${TRAMPOLINE_IMAGE}"
343
- "--build-arg" "UID=${user_uid}"
344
- "--build-arg" "USERNAME=${user_name}"
345
- )
346
- if [[ "${has_image}" == "true" ]]; then
347
- docker_build_flags+=("--cache-from" "${TRAMPOLINE_IMAGE}")
348
- fi
349
-
350
- log_yellow "Start building the docker image."
351
- if [[ "${TRAMPOLINE_VERBOSE:-false}" == "true" ]]; then
352
- echo "docker build" "${docker_build_flags[@]}" "${context_dir}"
353
- fi
354
-
355
- # ON CI systems, we want to suppress docker build logs, only
356
- # output the logs when it fails.
357
- if [[ "${RUNNING_IN_CI:-}" == "true" ]]; then
358
- if docker build "${docker_build_flags[@]}" "${context_dir}" \
359
- > "${tmpdir}/docker_build.log" 2>&1; then
360
- if [[ "${TRAMPOLINE_VERBOSE:-}" == "true" ]]; then
361
- cat "${tmpdir}/docker_build.log"
362
- fi
363
-
364
- log_green "Finished building the docker image."
365
- update_cache="true"
366
- else
367
- log_red "Failed to build the Docker image, aborting."
368
- log_yellow "Dumping the build logs:"
369
- cat "${tmpdir}/docker_build.log"
370
- exit 1
371
- fi
372
- else
373
- if docker build "${docker_build_flags[@]}" "${context_dir}"; then
374
- log_green "Finished building the docker image."
375
- update_cache="true"
376
- else
377
- log_red "Failed to build the Docker image, aborting."
378
- exit 1
379
- fi
380
- fi
381
- else
382
- if [[ "${has_image}" != "true" ]]; then
383
- log_red "We do not have ${TRAMPOLINE_IMAGE} locally, aborting."
384
- exit 1
385
- fi
386
- fi
387
-
388
- # We use an array for the flags so they are easier to document.
389
- docker_flags=(
390
- # Remove the container after it exists.
391
- "--rm"
392
-
393
- # Use the host network.
394
- "--network=host"
395
-
396
- # Run in priviledged mode. We are not using docker for sandboxing or
397
- # isolation, just for packaging our dev tools.
398
- "--privileged"
399
-
400
- # Run the docker script with the user id. Because the docker image gets to
401
- # write in ${PWD} you typically want this to be your user id.
402
- # To allow docker in docker, we need to use docker gid on the host.
403
- "--user" "${user_uid}:${docker_gid}"
404
-
405
- # Pass down the USER.
406
- "--env" "USER=${user_name}"
407
-
408
- # Mount the project directory inside the Docker container.
409
- "--volume" "${PROJECT_ROOT}:${TRAMPOLINE_WORKSPACE}"
410
- "--workdir" "${TRAMPOLINE_WORKSPACE}"
411
- "--env" "PROJECT_ROOT=${TRAMPOLINE_WORKSPACE}"
412
-
413
- # Mount the temporary home directory.
414
- "--volume" "${tmphome}:/h"
415
- "--env" "HOME=/h"
416
-
417
- # Allow docker in docker.
418
- "--volume" "/var/run/docker.sock:/var/run/docker.sock"
419
-
420
- # Mount the /tmp so that docker in docker can mount the files
421
- # there correctly.
422
- "--volume" "/tmp:/tmp"
423
- # Pass down the KOKORO_GFILE_DIR and KOKORO_KEYSTORE_DIR
424
- # TODO(tmatsuo): This part is not portable.
425
- "--env" "TRAMPOLINE_SECRET_DIR=/secrets"
426
- "--volume" "${KOKORO_GFILE_DIR:-/dev/shm}:/secrets/gfile"
427
- "--env" "KOKORO_GFILE_DIR=/secrets/gfile"
428
- "--volume" "${KOKORO_KEYSTORE_DIR:-/dev/shm}:/secrets/keystore"
429
- "--env" "KOKORO_KEYSTORE_DIR=/secrets/keystore"
430
- )
431
-
432
- # Add an option for nicer output if the build gets a tty.
433
- if [[ -t 0 ]]; then
434
- docker_flags+=("-it")
435
- fi
436
-
437
- # Passing down env vars
438
- for e in "${pass_down_envvars[@]}"
439
- do
440
- if [[ -n "${!e:-}" ]]; then
441
- docker_flags+=("--env" "${e}=${!e}")
442
- fi
443
- done
444
-
445
- # If arguments are given, all arguments will become the commands run
446
- # in the container, otherwise run TRAMPOLINE_BUILD_FILE.
447
- if [[ $# -ge 1 ]]; then
448
- log_yellow "Running the given commands '" "${@:1}" "' in the container."
449
- readonly commands=("${@:1}")
450
- if [[ "${TRAMPOLINE_VERBOSE:-}" == "true" ]]; then
451
- echo docker run "${docker_flags[@]}" "${TRAMPOLINE_IMAGE}" "${commands[@]}"
452
- fi
453
- docker run "${docker_flags[@]}" "${TRAMPOLINE_IMAGE}" "${commands[@]}"
454
- else
455
- log_yellow "Running the tests in a Docker container."
456
- docker_flags+=("--entrypoint=${TRAMPOLINE_BUILD_FILE}")
457
- if [[ "${TRAMPOLINE_VERBOSE:-}" == "true" ]]; then
458
- echo docker run "${docker_flags[@]}" "${TRAMPOLINE_IMAGE}"
459
- fi
460
- docker run "${docker_flags[@]}" "${TRAMPOLINE_IMAGE}"
461
- fi
462
-
463
-
464
- test_retval=$?
465
-
466
- if [[ ${test_retval} -eq 0 ]]; then
467
- log_green "Build finished with ${test_retval}"
468
- else
469
- log_red "Build finished with ${test_retval}"
470
- fi
471
-
472
- # Only upload it when the test passes.
473
- if [[ "${update_cache}" == "true" ]] && \
474
- [[ $test_retval == 0 ]] && \
475
- [[ "${TRAMPOLINE_IMAGE_UPLOAD:-false}" == "true" ]]; then
476
- log_yellow "Uploading the Docker image."
477
- if docker push "${TRAMPOLINE_IMAGE}"; then
478
- log_green "Finished uploading the Docker image."
479
- else
480
- log_red "Failed uploading the Docker image."
481
- fi
482
- # Call trampoline_after_upload_hook if it's defined.
483
- if function_exists trampoline_after_upload_hook; then
484
- trampoline_after_upload_hook
485
- fi
486
-
487
- fi
488
-
489
- exit "${test_retval}"