name: "Place SQL file in EFS"
description: "Places your SQL file into EFS so the database can be initialized."

runs:
  using: "composite"
  steps:
    - run: |
        echo "SUBNET_ID=$( \
          aws ec2 describe-subnets \
            --filters Name=tag:Name,Values=$SUBNET_NAME \
            --query 'Subnets[0].SubnetId' \
            --output text)" >> $GITHUB_ENV
        echo "SG_ID=$( \
          aws ec2 describe-security-groups \
            --filters Name=group-name,Values=$SG_NAME \
            --query 'SecurityGroups[0].GroupId' \
            --output text)" >> $GITHUB_ENV
        echo "TASK_EXECUTION_ROLE_ARN=$( \
          aws iam get-role \
            --role-name ganderTaskExecutionRole \
            --query 'Role.Arn' \
            --output text)" >> $GITHUB_ENV
        echo "FS_ID=$( \
          aws efs describe-file-systems \
            --query "FileSystems[?Tags[?Key=='Name' && Value=='$FS_NAME']] | [0].FileSystemId" \
            --output text)" >> $GITHUB_ENV
      shell: bash
    - run: |
        cat << SCRIPT > ./seeder-script.sh
        #!/bin/sh
        mv ./init.sql ./efs-file-transfer/
        ls ./efs-file-transfer/
        SCRIPT

        echo "Creating Seeder Image"
        SEED_IMAGE_ARN=$ECR_REGISTRY/$ECR_REPO:$PROJECT-seed-$PR_NUMBER

        docker build -t $SEED_IMAGE_ARN -f- . <<EOF
        FROM alpine:3.13
        COPY $SQL_FILE init.sql
        COPY ./seeder-script.sh /startup.sh
        RUN chmod +x /startup.sh
        RUN mkdir efs-file-transfer
        ENTRYPOINT ["/startup.sh"]
        EOF

        echo "SEED_IMAGE_ARN=$SEED_IMAGE_ARN" >> $GITHUB_ENV
      shell: bash
    - run: |
        docker push $SEED_IMAGE_ARN
      shell: bash
    - run: |
        echo "Creating Seed Access Point"

        echo "SEED_AP_ID=$( \
          aws efs create-access-point \
            --client-token $PROJECT-$PR_NUMBER-seed \
            --file-system-id $FS_ID \
            --tags Key=GanderApps,Value=four_eyes \
            --root-directory "Path=/$PROJECT-$PR_NUMBER/seed,CreationInfo={OwnerUid=0,OwnerGid=0,Permissions=777}" \
            --query 'AccessPointId' \
            --output text \
        )" >> $GITHUB_ENV

      shell: bash

    - run: |
        cat << TASKDEF > ./seed-task.json
        {
          "family": "$PROJECT-setup-$PR_NUMBER",
          "networkMode": "awsvpc",
          "executionRoleArn": "$TASK_EXECUTION_ROLE_ARN",
          "containerDefinitions": [
            {
              "name": "db-setup",
              "image": "$SEED_IMAGE_ARN",
              "mountPoints": [
                {
                  "sourceVolume": "sql-seed",
                  "containerPath": "/efs-file-transfer"
                }
              ],
              "logConfiguration": {
                "logDriver": "awslogs",
                "options": {
                  "awslogs-create-group": "true",
                  "awslogs-region": "$REGION",
                  "awslogs-group": "gander-logs-$PROJECT-setup",
                  "awslogs-stream-prefix": "$PROJECT"
                }
              },
              "memory": 500,
              "cpu": 10
            }
          ],
          "volumes": [
            {
              "name": "sql-seed",
              "efsVolumeConfiguration": {
                "fileSystemId": "$FS_ID",
                "transitEncryption": "ENABLED",
                "authorizationConfig": {
                  "accessPointId": "$SEED_AP_ID"
                }
              }
            }
          ],
          "requiresCompatibilities": ["FARGATE"],
          "cpu": "256",
          "memory": "512"
        }
        TASKDEF
      shell: bash

    - run: |
        echo "Registering Task Definition"

        echo "SEED_TASK_DEF=$(aws ecs register-task-definition \
        --family $PROJECT-setup-$PR_NUMBER \
        --tags key=GanderApps,value=four_eyes \
        --cli-input-json file://seed-task.json \
        --query 'join(`:`,taskDefinition.[family,to_string(revision)])' \
        --output text)" >> $GITHUB_ENV

      shell: bash

    - run: |
        echo "Launching Seed Task"
        echo "SEED_TASK=$(aws ecs run-task \
          --cluster $PROJECT \
          --task-definition $SEED_TASK_DEF \
          --count 1 \
          --tags key=GanderApps,value=four_eyes \
          --launch-type "FARGATE" \
          --network-configuration "awsvpcConfiguration={ \
              subnets=[$SUBNET_ID], \
              securityGroups=[$SG_ID], \
              assignPublicIp=ENABLED \
            }" \
          --query 'tasks[0].taskArn' \
          --output text)" >> $GITHUB_ENV
      shell: bash
    - run: |
        echo "Awaiting task to finish..."
        aws ecs wait tasks-stopped --cluster $PROJECT --tasks $SEED_TASK
        echo "Task is finished!"
      shell: bash
