| #!/bin/bash |
| set -ex |
| # Prerequisites: Set variables |
| ORGANIZATION_ID=$ASTRO_ORG_ID |
| DEPLOYMENT_ID=$ASTRO_DEPLOYMENT_ID |
| ASTRO_API_TOKEN=$ASTRO_API_TOKEN |
| ASTRO_PROJECT_PATH=$ASTRO_PROJECT_PATH |
| # Step 1: Initialize deploy |
| echo -e "Initiating Deploy Process for deployment $DEPLOYMENT_ID\n" |
| CREATE_DEPLOY=$(curl --location --request POST "https://api.astronomer.io/platform/v1beta1/organizations/$ORGANIZATION_ID/deployments/$DEPLOYMENT_ID/deploys" \ |
| --header "X-Astro-Client-Identifier: script" \ |
| --header "Content-Type: application/json" \ |
| --header "Authorization: Bearer $ASTRO_API_TOKEN" \ |
| --data '{ |
| "type": "IMAGE_AND_DAG" |
| }' | jq '.') |
| DEPLOY_ID=$(echo $CREATE_DEPLOY | jq -r '.id') |
| REPOSITORY=$(echo $CREATE_DEPLOY | jq -r '.imageRepository') |
| TAG=$(echo $CREATE_DEPLOY | jq -r '.imageTag') |
| DAGS_UPLOAD_URL=$(echo $CREATE_DEPLOY | jq -r '.dagsUploadUrl') |
| # Step 2: Log in to Docker |
| docker login $REPOSITORY -u cli -p $ASTRO_API_TOKEN |
| echo -e "\nBuilding Docker image $REPOSITORY:$TAG for $DEPLOYMENT_ID from $ASTRO_PROJECT_PATH" |
| # Step 3: Build image |
| docker build -t $REPOSITORY:$TAG --platform=linux/amd64 $ASTRO_PROJECT_PATH |
| # Step 4: Push image |
| echo -e "\nPushing Docker image $REPOSITORY:$TAG to $DEPLOYMENT_ID" |
| docker push $REPOSITORY:$TAG |
| # Step 5: Create tar file wd |
| echo -e "\nCreating a dags tar file from $ASTRO_PROJECT_PATH/dags and stored in $ASTRO_PROJECT_PATH/dags.tar\n" |
| cd $ASTRO_PROJECT_PATH |
| tar -cvf "$ASTRO_PROJECT_PATH/dags.tar" "dags" |
| # Step 6: Upload dags tar file |
| echo -e "\nUploading tar file $ASTRO_PROJECT_PATH/dags.tar\n" |
| VERSION_ID=$(curl -i --request PUT $DAGS_UPLOAD_URL \ |
| --header 'x-ms-blob-type: BlockBlob' \ |
| --header 'Content-Type: application/x-tar' \ |
| --upload-file "$ASTRO_PROJECT_PATH/dags.tar" | grep x-ms-version-id | awk -F': ' '{print $2}') |
| VERSION_ID=$(echo $VERSION_ID | sed 's/\r//g') # Remove unexpected carriage return characters |
| echo -e "\nTar file uploaded with version: $VERSION_ID\n" |
| # Step 7: Finalizing Deploy |
| FINALIZE_DEPLOY=$(curl --location --request POST "https://api.astronomer.io/platform/v1beta1/organizations/$ORGANIZATION_ID/deployments/$DEPLOYMENT_ID/deploys/$DEPLOY_ID/finalize" \ |
| --header "X-Astro-Client-Identifier: script" \ |
| --header "Content-Type: application/json" \ |
| --header "Authorization: Bearer $ASTRO_API_TOKEN" \ |
| --data '{"dagTarballVersion": "'$VERSION_ID'"}') |
| ID=$(echo $FINALIZE_DEPLOY | jq -r '.id') |
| if [[ "$ID" != null ]]; then |
| echo -e "\nDeploy is Finalized. Image and dag changes for deployment $DEPLOYMENT_ID should be live in a few minutes" |
| echo "Deployed Image tag: $TAG" |
| echo "Deployed dag Tarball Version: $VERSION_ID" |
| else |
| MESSAGE=$(echo $FINALIZE_DEPLOY | jq -r '.message') |
| if [[ "$MESSAGE" != null ]]; then |
| echo $MESSAGE |
| else |
| echo "Something went wrong. Reach out to astronomer support for assistance" |
| fi |
| fi |
| # Cleanup |
| echo -e "\nCleaning up the created tar file from $ASTRO_PROJECT_PATH/dags.tar" |
| rm -rf "$ASTRO_PROJECT_PATH/dags.tar" |