From 5d0123d3527b1488618867d53a1ba98e66483371 Mon Sep 17 00:00:00 2001 From: James Ray Date: Tue, 30 Jun 2026 03:40:11 -0700 Subject: [PATCH] Generalize sorting buildspec for mission deploys --- buildspec.yml | 109 +++++++++++++++++++++++++++++++++----------------- 1 file changed, 72 insertions(+), 37 deletions(-) mode change 100755 => 100644 buildspec.yml diff --git a/buildspec.yml b/buildspec.yml old mode 100755 new mode 100644 index 425b1a0..3afd724 --- a/buildspec.yml +++ b/buildspec.yml @@ -1,5 +1,9 @@ version: 0.2 +env: + variables: + MISSION_NAME: hermes + phases: pre_build: commands: @@ -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 @@ -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 \ No newline at end of file + - echo Build Successful - Lambda Successfully Built and Pushed to ECR