-
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?
Conversation
f302bd5
to
6889e0f
Compare
6ab7639
to
33568a6
Compare
33568a6
to
abfb1b6
Compare
49efd46
to
252675f
Compare
ci/input_files/build.yaml.tpl
Outdated
image: registry.ddbuild.io/images/mirror/alpine:latest | ||
tags: ["arch:amd64"] | ||
needs: | ||
- e2e-test |
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.
This job will run once the e2e-test
job completes.
@@ -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 comment
The 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.
1b774ac
to
dfdc510
Compare
4ce0906
to
20a2b56
Compare
cf6e21c
to
75357ef
Compare
bfe7f03
to
57056ba
Compare
@@ -1,8 +1,11 @@ | |||
{{- $e2e_region := "us-west-2" -}} |
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 in needs
blocks.
ci/input_files/build.yaml.tpl
Outdated
# Extract the arn from the publish log to be used as envvar in e2e tests | ||
layer_arn="$(grep 'Published arn' publish.log | grep -oE 'arn:aws:lambda:.*')" | ||
if [ -z "$layer_arn" ]; then | ||
echo "Error: Layer ARN not found in publish log" | ||
exit 1 | ||
else | ||
echo "Found layer arn, $layer_arn" | ||
fi | ||
echo "PYTHON_{{ $runtime.name | strings.Trim "python" }}_VERSION=$layer_arn" > {{ $dotenv }} | ||
cat {{ $dotenv }} |
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.
It would be ideal to not have scripts in the template definition, whereas we just call bash scripts
ci/input_files/build.yaml.tpl
Outdated
|
||
e2e-status: | ||
stage: e2e | ||
image: registry.ddbuild.io/images/mirror/alpine:latest |
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.
why do you need an alpine image here?
ci/input_files/build.yaml.tpl
Outdated
{{- end }} | ||
{{- end }} | ||
- | | ||
if [ "$CI_JOB_STATUS" = "success" ]; then |
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.
According to the docs, this is for the current executing job.
I'd suggest looking at how we check another's job status using the GitLab API
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 comment
The 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.
892c106
to
648de9a
Compare
What does this PR do?
Run the serverless-e2e-tests on PR, skipping anything that isn't a python test. First publishes the layer build to sandbox account region us-west-2. Then, after gathering the arn for the new layer, pass that to the e2e tests for testing.
Motivation
Better to get alerted right away to potential e2e bugs.
Testing Guidelines
Additional Notes
Because this job is triggering job in a different repo, it is quite tough to access the results of that downstream job. As designed right now, a
e2e-status
job will be created in addition to thee2e-test
job. This status job runs only after thee2e-test
job completes. The reason this status job is necessary is so that we can post the results back to github.The problem with this is the
e2e-status
job can take hours to fully complete. That's because not only do all the other tests in this repo need to run (integration, unit, layer size, etc), it also needs to run the e2e tests, and it must also wait for the full teardown of aws resources. The latter is what can take so long because these teardown jobs are set to run after a 2 hour delay. So, we technically aren't able to get results posted back to github until all of that completes.The work around, which was too hard to implement with the time I had, is to use the gitlab api to poll the status of the
e2e-test
job. This might involve creating a Project Token which is more work that I think it's worth.An alternative solution is to set the
e2e-status
test as required by github. There are some major problems with this though. There are times in which we would expect that the e2e tests would fail. For example, if I'm implementing a new feature which will turn an e2e test from not working to working, then the e2e tests themselves will always fail in that case, which is what we want. To get around that, we could remove the xfail strict requirement on the e2e tests downstream. But this would mean we aren't able to keep our feature parity doc in lock step with reality.At this point, I think the best thing to do is to mark the
e2e-status
job as required. We are always able to override these failures in the UI, which shouldn't mean we're moving any slower.Types of Changes
Check all that apply
https://datadoghq.atlassian.net/browse/APMSVLS-20