-
Notifications
You must be signed in to change notification settings - Fork 130
Create pre-production stage for CI pipeline #2282
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
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## main #2282 +/- ##
==========================================
- Coverage 79.02% 78.75% -0.27%
==========================================
Files 614 620 +6
Lines 106934 107954 +1020
Branches 15145 15335 +190
==========================================
+ Hits 84504 85023 +519
- Misses 21777 22277 +500
- Partials 653 654 +1 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
267feb5
to
b100ece
Compare
3f82970
to
edbd376
Compare
if env.account == PRE_PROD_ACCOUNT: | ||
github_repo_owner = STAGING_GITHUB_REPO_OWNER | ||
github_repo_name = STAGING_GITHUB_REPO_NAME |
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.
How does this work for deploying to your own personal account if you want to go through setting up the pipeline and all that?
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.
I guess these are correctly set to the values from the pipeline cdk_env
in AwsLcCiPipeline
?
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 that's right, whenever you deploy the pipeline (using run-cdk.sh
or manually with cdk deploy
), the environment variables from your local terminal will passed to and retained in AwsLcCiPipeline
through cdk_env
### CI Commands | ||
Use these commands if you wish to deploy individual stacks instead of the entire pipeline. | ||
|
||
These commands are run from `aws-lc/tests/ci/cdk`. | ||
|
||
If not done previously, bootstrap cdk before running the commands below. Make sure that AWS_ACCOUNT_ID is the AWS account you wish to deploy the CI stacks to. |
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 there any reason to keep this support and documented?
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 is helpful if we want to deploy 1 stack at a time. Say, if I only want to deploy aws-lc-ci-integration
and don't want to deal with anything else, these commands will come in handy.
from aws_cdk import ( | ||
Duration, | ||
Stack, | ||
aws_codebuild as codebuild, | ||
aws_iam as iam, | ||
aws_s3_assets, | ||
aws_logs as logs, | ||
Environment, | ||
) |
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.
In the future it is much easier to review big changes like this if you don't reformat unrelated code. If there wasn't consistent formatting of this cdk code before your change it would much easier to review if one PR is just reformatting everything.
tests/ci/cdk/pipeline/ci_stage.py
Outdated
|
||
self.build_options = [] | ||
|
||
# Define CodeBuild Batch job for testing code. |
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.
Can this reuse any of the existing CDK definitions? In the future if we add a new build project to our public CI we might forget to update this spot as well.
tests/ci/cdk/pipeline/ci_stage.py
Outdated
|
||
self.build_options = [] | ||
|
||
# Define CodeBuild Batch job for testing code. |
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 the CI that tests the code in PRs, or the CI that tests the pipeline and docker images is working?
tests/ci/cdk/pipeline/ci_stage.py
Outdated
"curl -H \"Authorization: token ${GITHUB_PAT}\" https://api.github.com/user", | ||
"git clone https://${GITHUB_PAT}@github.com/${STAGING_GITHUB_REPO_OWNER}/${STAGING_GITHUB_REPO_NAME}.git", | ||
"git remote add upstream https://github.com/aws/aws-lc.git", | ||
"git fetch upstream", | ||
"git checkout main", | ||
"git merge upstream/main", |
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 are you merging aws/aws-lc into the pr branch? What happens if there is a conflict?
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 is merging aws/aws-lc
into our staging repo's main branch, not the pr branch. Since our staging repo is for testing only, it should never diverge from aws-lc
. Conflicts should never happen. If they do, it means something is wrong with our staging repo.
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 are you updating the staging branch locally?
else {} | ||
) | ||
|
||
@jsii.member(jsii_name="produceAction") |
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.
Yeah, is there some functionality missing in the Python CDK? Have we given feedback to them about it
|
||
self.output = { | ||
"s3_bucket_name": f"{env.account}-{S3_FOR_WIN_DOCKER_IMG_BUILD}", | ||
} |
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.
I don't see output
member documented for Stack class. Are you intending for these to just be CfnOutputs or are you wanting them to be exported values from the stack? Would self.export_value(...)
be more appropriate?
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.
I tried but that wouldn't work. export_values
works for cross-stack dependencies. But since everything all belongs to AwsLcCiPipeline
, the export won't be created by the time we need to reference in the stage's post actions
"git fetch upstream", | ||
"git checkout main", | ||
"git merge upstream/main", | ||
# "git push origin main", |
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.
Should be uncommented?
"git remote add upstream https://github.com/aws/aws-lc.git", | ||
"git fetch upstream", | ||
"git checkout main", | ||
"git merge upstream/main", |
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.
Probably should specify --ff-only
as well here.
input=input, | ||
commands=[ | ||
"cd tests/ci/cdk/pipeline/scripts", | ||
"chmod +x check_trigger_conditions.sh", |
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 should just be corrected and committed to the repository with the correct permissions.
input=input, | ||
commands=[ | ||
"cd tests/ci/cdk/pipeline/scripts", | ||
"chmod +x build_target.sh", |
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.
Ditto here about fixing the permissions and committing them.
input=input, | ||
commands=[ | ||
"cd tests/ci/cdk/pipeline/scripts", | ||
"chmod +x cleanup_orphaned_images.sh check_trigger_conditions.sh build_target.sh", |
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.
Commit the fixed permissions and then remove this line.
export AWS_ACCESS_KEY_ID=$(echo $CREDENTIALS | jq -r .Credentials.AccessKeyId) | ||
export AWS_SECRET_ACCESS_KEY=$(echo $CREDENTIALS | jq -r .Credentials.SecretAccessKey) | ||
export AWS_SESSION_TOKEN=$(echo $CREDENTIALS | jq -r .Credentials.SessionToken) |
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.
I think this might cause the credentials to get logged? Should we call set +x
when entering this function, and then re-enabling it on exit?
# if [[ "${bucket_name}" == *"${AWS_LC_S3_BUCKET_PREFIX}"* ]]; then | ||
# aws s3 rm "s3://${bucket_name}" --recursive | ||
# aws s3api delete-bucket --bucket "${bucket_name}" |
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.
Just remove the code if not needed anymore.
@@ -178,7 +178,7 @@ function win_docker_img_build_status_check() { | |||
|
|||
function build_linux_docker_images() { | |||
# Always destroy docker build stacks (which include EC2 instance) on EXIT. | |||
trap destroy_docker_img_build_stack EXIT | |||
# trap destroy_docker_img_build_stack EXIT |
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.
same here, git keeps the history so just remove the code if not applicable anymore.
from datetime import datetime | ||
|
||
# timestamp = datetime.now().strftime('%Y-%m-%d-%H-%M') |
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.
Remove comment, and is import need anymore?
env=Environment(account=PIPELINE_ACCOUNT, region=PIPELINE_REGION), | ||
) | ||
|
||
if DEPLOY_ACCOUNT and DEPLOY_REGION: |
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.
If these aren't set what happens when this calls app.synth?
Issues:
Resolves #CryptoAlg-2983 and #CryptoAlg-2984
Description of changes:
This PR implements steps to deploy to pre-production in the CI pipeline, which will act as template for production deployment later on. The PR also sets up a dev deployment environment for testing purposes.
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license and the ISC license.