Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
109 changes: 72 additions & 37 deletions buildspec.yml
100755 → 100644
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
version: 0.2

env:
variables:
MISSION_NAME: hermes

phases:
pre_build:
commands:
Expand All @@ -15,7 +19,7 @@ phases:
- conda create -n myenv python=3.10 -y
- echo 'conda activate myenv' >> $HOME/.bashrc
- source $HOME/.bashrc

- echo Installing CI/CD Dependencies...
- pip install flake8 black pytest pytest-astropy pytest-cov
- pip install pytest pytest-astropy pytest-cov
Expand All @@ -25,52 +29,83 @@ phases:
- echo Linting with Black...
- black --check --diff lambda_function
- echo ________________________________

- echo Linting with Flake...
- echo ________________________________

build:
commands:
- REGION=us-east-1
- echo Login to Private ECR $REGION
- aws ecr get-login-password --region $REGION | docker login --username AWS --password-stdin 351967858401.dkr.ecr.$REGION.amazonaws.com
- echo ________________________________
- ACCOUNT_ID=$(aws sts get-caller-identity --query 'Account' --output text)
- |
set -eu

REGION=us-east-1
PUBLIC_ECR_NAMESPACE=public.ecr.aws/w5r9l1c8
LAMBDA_COMPONENT=sorting
LAMBDA_PIPELINE=SORTING
MISSION_SLUG=$(printf '%s' "${MISSION_NAME}" | tr '_' '-')

if [ "${MISSION_NAME}" = "hermes" ]; then
ECR_REPO_NAME="sdc_aws_${LAMBDA_COMPONENT}_lambda"
BASE_IMAGE_NAME="swsoc-docker-lambda-base:latest"
ARCHITECTURE_PROJECT_NAME="build_sdc_aws_pipeline_architecture"
ARCHITECTURE_PROJECT_REGION="us-east-2"
else
ECR_REPO_NAME="${MISSION_NAME}_sdc_aws_${LAMBDA_COMPONENT}_lambda"
BASE_IMAGE_NAME="${MISSION_SLUG}-swsoc-docker-lambda-base:latest"
ARCHITECTURE_PROJECT_NAME="build_${MISSION_NAME}_sdc_aws_pipeline_architecture"
ARCHITECTURE_PROJECT_REGION="${AWS_DEFAULT_REGION:-us-east-1}"
fi

ACCOUNT_ID=$(aws sts get-caller-identity --query 'Account' --output text)
echo Login to Private ECR "${REGION}"
aws ecr get-login-password --region "${REGION}" | docker login --username AWS --password-stdin "${ACCOUNT_ID}.dkr.ecr.${REGION}.amazonaws.com"
echo ________________________________

- |
if git describe --tags --exact-match > /dev/null 2>&1; then
echo "This is a tag push event"
ECR_REPO="$ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com/sdc_aws_sorting_lambda"
CDK_ENVIRONMENT=PRODUCTION
VERSION=`git describe --tags --exact-match`
elif [[ "${CDK_ENVIRONMENT}" == "PRODUCTION" ]]; then
echo "This is a production environment"
ECR_REPO="$ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com/sdc_aws_sorting_lambda"
CDK_ENVIRONMENT=PRODUCTION
VERSION=`date -u +"%Y%m%d%H%M%S"`
else
echo "This is a development environment"
ECR_REPO="$ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com/dev-sdc_aws_sorting_lambda"
CDK_ENVIRONMENT=DEVELOPMENT
VERSION=`date -u +"%Y%m%d%H%M%S"`
fi
- echo ________________________________
- echo Build Docker Image
- docker build --build-arg PUBLIC_ECR_REPO=$PUBLIC_ECR_REPO -t $ECR_REPO:latest lambda_function/.
if git describe --tags --exact-match > /dev/null 2>&1; then
echo "This is a tag push event"
CDK_ENVIRONMENT=PRODUCTION
ECR_REPO="${ECR_REPO_NAME}"
BASE_IMAGE="${PUBLIC_ECR_NAMESPACE}/${BASE_IMAGE_NAME}"
VERSION=$(git describe --tags --exact-match)
elif [ "${CDK_ENVIRONMENT:-}" = "PRODUCTION" ]; then
echo "This is a production environment"
CDK_ENVIRONMENT=PRODUCTION
ECR_REPO="${ECR_REPO_NAME}"
BASE_IMAGE="${PUBLIC_ECR_NAMESPACE}/${BASE_IMAGE_NAME}"
VERSION=$(date -u +"%Y%m%d%H%M%S")
else
echo "This is a development environment"
CDK_ENVIRONMENT=DEVELOPMENT
ECR_REPO="dev-${ECR_REPO_NAME}"
BASE_IMAGE="${PUBLIC_ECR_NAMESPACE}/dev-${BASE_IMAGE_NAME}"
VERSION=$(date -u +"%Y%m%d%H%M%S")
fi

FULL_ECR_REPO="${ACCOUNT_ID}.dkr.ecr.${REGION}.amazonaws.com/${ECR_REPO}"
echo "Build Docker Image: ${FULL_ECR_REPO}:${VERSION}"
docker build \
--build-arg BASE_IMAGE="${BASE_IMAGE}" \
-t "${FULL_ECR_REPO}:latest" \
lambda_function/.

- echo Tagging Docker Image...
- docker tag $ECR_REPO:latest $ECR_REPO:$VERSION
echo Tagging Docker Image...
docker tag "${FULL_ECR_REPO}:latest" "${FULL_ECR_REPO}:${VERSION}"

- echo Pushing the Docker image with Tags...
- docker push $ECR_REPO:latest
- docker push $ECR_REPO:$VERSION
- echo ________________________________
echo Pushing the Docker image with Tags...
docker push "${FULL_ECR_REPO}:latest"
docker push "${FULL_ECR_REPO}:${VERSION}"
echo ________________________________

- echo Updating Deployment
- echo ________________________________
- aws codebuild start-build --project-name arn:aws:codebuild:us-east-2:$ACCOUNT_ID:project/build_sdc_aws_pipeline_architecture --environment-variables-override name=CDK_ENVIRONMENT,value=$CDK_ENVIRONMENT,type=PLAINTEXT
echo Updating Deployment
aws codebuild start-build \
--project-name "${ARCHITECTURE_PROJECT_NAME}" \
--region "${ARCHITECTURE_PROJECT_REGION}" \
--environment-variables-override \
name=CDK_ENVIRONMENT,value="${CDK_ENVIRONMENT}",type=PLAINTEXT \
name=MISSION_NAME,value="${MISSION_NAME}",type=PLAINTEXT \
name=LAMBDA_PIPELINE,value="${LAMBDA_PIPELINE}",type=PLAINTEXT \
name=TAG,value="${VERSION}",type=PLAINTEXT

post_build:
commands:
- echo Build Successful - Lambda Successfully Built and Pushed to ECR
- echo Build Successful - Lambda Successfully Built and Pushed to ECR
Loading