stable-diffusion-aws-extension/test/buildspec_build.sh

107 lines
5.0 KiB
Bash
Executable File

#!/bin/bash
export STACK_NAME="Extension-for-Stable-Diffusion-on-AWS"
export ACCOUNT_ID=$(aws sts get-caller-identity --query "Account" --output text)
export API_BUCKET=esd-test-$ACCOUNT_ID-$AWS_DEFAULT_REGION
if [ "$CLEAN_RESOURCES" = "yes" ]; then
export API_BUCKET=esd-test-$ACCOUNT_ID-$AWS_DEFAULT_REGION-$CODEBUILD_BUILD_NUMBER
fi
echo "export ACCOUNT_ID=$ACCOUNT_ID" > env.properties
echo "export API_BUCKET=$API_BUCKET" >> env.properties
echo "export STACK_NAME=$STACK_NAME" >> env.properties
aws cloudformation delete-stack --stack-name "comfy-stack"
aws cloudformation delete-stack --stack-name "webui-stack"
echo "----------------------------------------------------------------"
echo "$DEPLOY_STACK deploy start..."
echo "----------------------------------------------------------------"
STARTED_TIME=$(date +%s)
if [ "$DEPLOY_STACK" = "cdk" ]; then
pushd "stable-diffusion-aws-extension/infrastructure"
npm i -g pnpm
pnpm i
npx cdk deploy --parameters Email="example@amazon.com" \
--parameters Bucket="$API_BUCKET" \
--parameters LogLevel="INFO" \
--parameters SdExtensionApiKey="09876743210987654322" \
--require-approval never
popd
fi
if [ "$DEPLOY_STACK" = "template" ]; then
if aws cloudformation describe-stacks --stack-name "$STACK_NAME" &> /dev/null; then
echo "Stack exists, attempting to update..."
UPDATE_OUTPUT=$(aws cloudformation update-stack \
--stack-name "$STACK_NAME" \
--template-url "$TEMPLATE_FILE" \
--capabilities CAPABILITY_NAMED_IAM \
--parameters ParameterKey=Email,ParameterValue="example@example.com" \
ParameterKey=Bucket,ParameterValue="$API_BUCKET" \
ParameterKey=LogLevel,ParameterValue="INFO" \
ParameterKey=SdExtensionApiKey,ParameterValue="09876743210987654322" \
2>&1)
UPDATE_STATUS=$?
if [ $UPDATE_STATUS -eq 0 ]; then
echo "Update in progress..."
aws cloudformation wait stack-update-complete --stack-name "$STACK_NAME"
echo "Update completed."
else
echo "$UPDATE_OUTPUT" | grep "No updates are to be performed" &> /dev/null
if [ $? -eq 0 ]; then
echo "No updates needed."
else
echo "Update failed: $UPDATE_OUTPUT"
exit 1
fi
fi
else
echo "Stack does not exist, creating..."
aws cloudformation create-stack --stack-name "$STACK_NAME" \
--template-url "$TEMPLATE_FILE" \
--capabilities CAPABILITY_NAMED_IAM \
--parameters ParameterKey=Email,ParameterValue="example@example.com" \
ParameterKey=Bucket,ParameterValue="$API_BUCKET" \
ParameterKey=LogLevel,ParameterValue="INFO" \
ParameterKey=SdExtensionApiKey,ParameterValue="09876743210987654322"
aws cloudformation wait stack-create-complete --stack-name "$STACK_NAME"
echo "Creation completed."
fi
fi
python --version
sudo yum install wget -y
cd stable-diffusion-aws-extension/test || exit 1
make build
FINISHED_TIME=$(date +%s)
export DEPLOY_DURATION_TIME=$(( $FINISHED_TIME - $STARTED_TIME ))
echo "export DEPLOY_DURATION_TIME=$DEPLOY_DURATION_TIME" >> env.properties
echo "----------------------------------------------------------------"
echo "Get api gateway url & token"
echo "----------------------------------------------------------------"
stack_info=$(aws cloudformation describe-stacks --stack-name "$STACK_NAME")
export API_GATEWAY_URL=$(echo "$stack_info" | jq -r '.Stacks[0].Outputs[] | select(.OutputKey=="ApiGatewayUrl").OutputValue')
export API_GATEWAY_URL_TOKEN=$(echo "$stack_info" | jq -r '.Stacks[0].Outputs[] | select(.OutputKey=="ApiGatewayUrlToken").OutputValue')
echo "export API_GATEWAY_URL=$API_GATEWAY_URL" >> env.properties
echo "export API_GATEWAY_URL_TOKEN=$API_GATEWAY_URL_TOKEN" >> env.properties
aws cloudformation wait stack-delete-complete --stack-name "comfy-stack"
aws cloudformation wait stack-delete-complete --stack-name "webui-stack"
set -euxo pipefail
echo "----------------------------------------------------------------"
echo "Running pytest..."
echo "----------------------------------------------------------------"
API_TEST_STARTED_TIME=$(date +%s)
echo "export API_TEST_STARTED_TIME=$API_TEST_STARTED_TIME" >> env.properties
source venv/bin/activate
pytest ./ --exitfirst -rA --log-cli-level="INFO" --json-report --json-report-summary --json-report-file=detailed_report.json --html="report-${CODEBUILD_BUILD_NUMBER}.html" --self-contained-html --continue-on-collection-errors
FINISHED_TIME=$(date +%s)