Skip to content

initial docker arm build workflow #37

initial docker arm build workflow

initial docker arm build workflow #37

name: Build and Test Datastream Docker Containers on ARM
on:
push:
branches:
- main
paths:
- 'docker/**'
- 'forcingprocessor/**'
- 'scripts/**'
- 'python_tools/**'
- '.github/workflows/forcingprocessor.yml'
- '.github/workflows/datastream_python.yml'
- '.github/workflows/build_test_docker_arm.yml'
pull_request:
branches:
- main
paths:
- 'docker/**'
- 'forcingprocessor/**'
- 'scripts/**'
- 'python_tools/**'
- '.github/workflows/forcingprocessor.yml'
- '.github/workflows/datastream_python.yml'
- '.github/workflows/build_test_docker_arm.yml'
jobs:
build-test-docker-arm:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Setup Terraform
uses: hashicorp/setup-terraform@v1
- name: Configure AWS
run: |
aws configure set aws_access_key_id ${{ secrets.aws_access_key_id }}
aws configure set aws_secret_access_key ${{ secrets.aws_secret_access_key }}
aws configure set region us-east-1
- name: Build AWS Infra
run: |
cd research_datastream/terraform
terraform init
terraform validate
./test/import_resources.sh ./test/variables_gitactions_arm.tfvars
terraform apply -var-file=./test/variables_gitactions_arm.tfvars -auto-approve
sleep 60
- name: Set permissions
run : |
cd research_datastream/terraform
aws iam attach-role-policy --role-name datastream_ec2_role_github_actions_arm --policy-arn arn:aws:iam::aws:policy/SecretsManagerReadWrite
aws iam attach-role-policy --role-name datastream_ec2_role_github_actions_arm --policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess
aws secretsmanager put-resource-policy --secret-id docker_awiciroh_creds --resource-policy file://test/secret-policy.json --block-public-policy --region us-east-1
if ! aws ec2 describe-key-pairs --key-names "actions_key_arm" --query 'KeyPairs[0].KeyName' --output text 2>/dev/null; then aws ec2 create-key-pair --key-name "actions_key_arm" --query 'KeyName' --output text && echo "Key pair 'actions_key_arm' created in AWS"; else echo "Key pair 'actions_key_arm' already exists"; fi
sleep 60
- name: Build and Test arm docker containers with AWS infra
run : |
cd research_datastream/terraform
execution_arn=$(aws stepfunctions start-execution --state-machine-arn $(cat ./sm_ARN.txt) --name docker_builder_$(env TZ=US/Eastern date +'%Y%m%d%H%M%S') --input "file://test/execution_gp_arm_docker_buildNtester.json" --region us-east-1 --query 'executionArn' --output text); echo "Execution ARN: $execution_arn"; status="RUNNING"; while [ "$status" != "SUCCEEDED" ]; do status=$(aws stepfunctions describe-execution --execution-arn "$execution_arn" --region us-east-1 --query 'status' --output text); echo "Current status: $status"; if [ "$status" == "FAILED" ]; then echo "State machine execution failed!"; exit 1; fi; sleep 5; done; echo "State machine execution succeeded!"
- name: Confirm docker push
run : |
docker rmi -f $(docker images -aq)
docker pull awiciroh/datastream:latest
CREATION_EPOCH=$(date --date="$(docker inspect -f '{{.Created}}' awiciroh/datastream:latest)" +%s) && CURRENT_EPOCH=$(date +%s) && TIME_DIFF=$((CURRENT_EPOCH - CREATION_EPOCH)) && [ $TIME_DIFF -le 300 ] && echo "The container was created within the past 5 minutes." || { echo "Error: The container was NOT created within the past 5 minutes."; exit 1; }
docker pull awiciroh/forcingprocessor:latest
CREATION_EPOCH=$(date --date="$(docker inspect -f '{{.Created}}' awiciroh/forcingprocessor:latest)" +%s) && CURRENT_EPOCH=$(date +%s) && TIME_DIFF=$((CURRENT_EPOCH - CREATION_EPOCH)) && [ $TIME_DIFF -le 300 ] && echo "The container was created within the past 5 minutes." || { echo "Error: The container was NOT created within the past 5 minutes."; exit 1; }
- name: Tear down infra
if: always()
run : |
cd research_datastream/terraform
terraform destroy -var-file=./test/variables_gitactions_arm.tfvars -auto-approve
sleep 60