-
Notifications
You must be signed in to change notification settings - Fork 45
Run e2e tests on each PR. #584
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
f19f26c
abfb1b6
2b283fd
919adcf
937d480
38c126f
9e62357
c59ba03
88a298c
4eaf0fa
dd9a830
1c6a7e3
cff5b21
e73e4fe
547c054
03cc647
988f280
b47528b
fb4d6d8
6356961
30e7960
ed3cd64
5b8d616
ed82d35
5acf912
bdd8a39
6707673
11ebe29
e914d4c
353ad17
7676cc9
bd8f4d9
0ae5a4f
b159dcf
0c3f604
7255a2b
d158eb0
afda470
b2b1ba5
92607f2
a0c1a76
6924947
dfdc510
20a2b56
75357ef
57056ba
6b9af41
e78f44e
cb0bdee
59bee4c
648de9a
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,8 +1,11 @@ | ||
{{- $e2e_region := "us-west-2" -}} | ||
|
||
stages: | ||
- build | ||
- test | ||
- sign | ||
- publish | ||
- e2e | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
|
||
.python-before-script: &python-before-script | ||
- pip install virtualenv | ||
|
@@ -56,11 +59,11 @@ check-layer-size ({{ $runtime.name }}-{{ $runtime.arch }}): | |
stage: test | ||
tags: ["arch:amd64"] | ||
image: registry.ddbuild.io/images/docker:20.10 | ||
needs: | ||
needs: | ||
- build-layer ({{ $runtime.name }}-{{ $runtime.arch }}) | ||
dependencies: | ||
- build-layer ({{ $runtime.name }}-{{ $runtime.arch }}) | ||
script: | ||
script: | ||
- PYTHON_VERSION={{ $runtime.python_version }} ARCH={{ $runtime.arch }} ./scripts/check_layer_size.sh | ||
|
||
lint python: | ||
|
@@ -69,7 +72,7 @@ lint python: | |
image: registry.ddbuild.io/images/mirror/python:{{ $runtime.image }} | ||
cache: &{{ $runtime.name }}-{{ $runtime.arch }}-cache | ||
before_script: *python-before-script | ||
script: | ||
script: | ||
- source venv/bin/activate | ||
- ./scripts/check_format.sh | ||
|
||
|
@@ -79,15 +82,15 @@ unit-test ({{ $runtime.name }}-{{ $runtime.arch }}): | |
image: registry.ddbuild.io/images/mirror/python:{{ $runtime.image }} | ||
cache: &{{ $runtime.name }}-{{ $runtime.arch }}-cache | ||
before_script: *python-before-script | ||
script: | ||
script: | ||
- source venv/bin/activate | ||
- pytest -vv | ||
|
||
integration-test ({{ $runtime.name }}-{{ $runtime.arch }}): | ||
stage: test | ||
tags: ["arch:amd64"] | ||
image: registry.ddbuild.io/images/docker:20.10-py3 | ||
needs: | ||
needs: | ||
- build-layer ({{ $runtime.name }}-{{ $runtime.arch }}) | ||
dependencies: | ||
- build-layer ({{ $runtime.name }}-{{ $runtime.arch }}) | ||
|
@@ -132,16 +135,22 @@ sign-layer ({{ $runtime.name }}-{{ $runtime.arch }}): | |
- LAYER_FILE=datadog_lambda_py-{{ $runtime.arch}}-{{ $runtime.python_version }}.zip ./scripts/sign_layers.sh prod | ||
|
||
{{ range $environment_name, $environment := (ds "environments").environments }} | ||
{{ $dotenv := print $runtime.name "_" $runtime.arch "_" $environment_name ".env" }} | ||
|
||
publish-layer-{{ $environment_name }} ({{ $runtime.name }}-{{ $runtime.arch }}): | ||
stage: publish | ||
tags: ["arch:amd64"] | ||
image: registry.ddbuild.io/images/docker:20.10-py3 | ||
rules: | ||
- if: '"{{ $environment_name }}" == "sandbox" && $REGION == "{{ $e2e_region }}" && "{{ $runtime.arch }}" == "amd64"' | ||
when: on_success | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Always be sure to publish to the sandbox account in us-west-2 for e2e testing. |
||
- if: '"{{ $environment_name }}" == "sandbox"' | ||
when: manual | ||
allow_failure: true | ||
- if: '$CI_COMMIT_TAG =~ /^v.*/' | ||
artifacts: | ||
reports: | ||
dotenv: {{ $dotenv }} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. When saved as a dotenv report, this file will get sourced for its env vars in every downstream job. |
||
needs: | ||
{{ if or (eq $environment_name "prod") }} | ||
- sign-layer ({{ $runtime.name }}-{{ $runtime.arch}}) | ||
|
@@ -166,7 +175,7 @@ publish-layer-{{ $environment_name }} ({{ $runtime.name }}-{{ $runtime.arch }}): | |
before_script: | ||
- EXTERNAL_ID_NAME={{ $environment.external_id }} ROLE_TO_ASSUME={{ $environment.role_to_assume }} AWS_ACCOUNT={{ $environment.account }} source ./ci/get_secrets.sh | ||
script: | ||
- STAGE={{ $environment_name }} PYTHON_VERSION={{ $runtime.python_version }} ARCH={{ $runtime.arch }} ./ci/publish_layers.sh | ||
- STAGE={{ $environment_name }} PYTHON_VERSION={{ $runtime.python_version }} ARCH={{ $runtime.arch }} DOTENV={{ $dotenv }} ./ci/publish_layers.sh | ||
|
||
{{- end }} | ||
|
||
|
@@ -232,3 +241,32 @@ signed layer bundle: | |
- rm -rf datadog_lambda_py-signed-bundle-${CI_JOB_ID} | ||
- mkdir -p datadog_lambda_py-signed-bundle-${CI_JOB_ID} | ||
- cp .layers/datadog_lambda_py-*.zip datadog_lambda_py-signed-bundle-${CI_JOB_ID} | ||
|
||
e2e-test: | ||
stage: e2e | ||
trigger: | ||
project: DataDog/serverless-e2e-tests | ||
strategy: depend | ||
variables: | ||
LANGUAGES_SUBSET: python | ||
# These env vars are inherited from the dotenv reports of the publish-layer jobs | ||
{{- range (ds "runtimes").runtimes }} | ||
{{- if eq .arch "amd64" }} | ||
{{- $version := print (.name | strings.Trim "python") }} | ||
PYTHON_{{ $version }}_VERSION: $PYTHON_{{ $version }}_VERSION | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Explicitly pass environment variables from the sourced publish job dotenv file to the downstream job. These env vars are not passed downstream otherwise. |
||
{{- end }} | ||
{{- end }} | ||
needs: {{ range (ds "runtimes").runtimes }} | ||
{{- if eq .arch "amd64" }} | ||
- "publish-layer-sandbox ({{ .name }}-{{ .arch }}): [{{ $e2e_region }}]" | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Run after all the publish jobs have completed. |
||
{{- end }} | ||
{{- end }} | ||
|
||
e2e-test-status: | ||
stage: test | ||
image: registry.ddbuild.io/images/docker:20.10-py3 | ||
tags: ["arch:amd64"] | ||
script: | ||
- git clone -b rey.abolofia/status-check --single-branch https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.ddbuild.io/DataDog/serverless-e2e-tests | ||
- cd ./serverless-e2e-tests | ||
- ./scripts/check_e2e_status.sh |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -199,6 +199,8 @@ fi | |
while [ $latest_version -lt $VERSION ]; do | ||
latest_version=$(publish_layer $REGION $layer $aws_cli_python_version_key $layer_path) | ||
printf "[$REGION] Published version $latest_version for layer $layer in region $REGION\n" | ||
latest_arn=$(aws lambda get-layer-version --layer-name $layer --version-number $latest_version --region $REGION --query 'LayerVersionArn' --output text) | ||
printf "[$REGION] Published arn $latest_arn\n" | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Be sur to always print the arn to stdout when publishing layers. The publish gitlab jobs will do a regex search on this stdout to determine the arn for a newly published layer. |
||
|
||
# This shouldn't happen unless someone manually deleted the latest version, say 28, and | ||
# then tries to republish 28 again. The published version would actually be 29, because | ||
|
@@ -209,4 +211,10 @@ while [ $latest_version -lt $VERSION ]; do | |
fi | ||
done | ||
|
||
if [ -n "$DOTENV" ]; then | ||
printf "[$REGION] Exporting layer version to $DOTENV file...\n" | ||
echo "PYTHON_${PYTHON_VERSION/./}_VERSION=$latest_arn" >> "$DOTENV" | ||
cat "$DOTENV" | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Here is where we write the arn to the given dotenv file. This dotenv file will be saved as an artifact on the job. |
||
fi | ||
|
||
printf "[$REGION] Finished publishing layers...\n\n" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is this a variable declaration? If so, why not use an environment variable?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, it is just a variable declaration. I hadn't thought of just using an environment variable. I was thinking that this way, the value is just built into the final yaml file, instead of being resolved later, at ci execution time. What are your thoughts on that?
Ah, okay, so one of the places this variable is used is in a
needs
block. According to gitlab docs, variables are not available inneeds
blocks.