diff --git a/.github/workflows/deploy_to_staging.yml b/.github/workflows/deploy_to_staging.yml new file mode 100644 index 00000000..679d00cd --- /dev/null +++ b/.github/workflows/deploy_to_staging.yml @@ -0,0 +1,76 @@ +name: Staging Deployment + +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + +jobs: + deploy_to_staging: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Configure AWS credentials + uses: aws-actions/configure-aws-credentials@v2 + with: + aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} + aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + aws-region: us-east-1 + + - name: Login to Amazon ECR Public + id: login-ecr-public + uses: aws-actions/amazon-ecr-login@v1 + with: + mask-password: 'true' + registry-type: public + + - name: Build and tag Docker image + run: | + echo "Building Docker image..." + docker build -t "public.ecr.aws/b3c4u5n1/filecoin-core-api:${{ github.ref_name }}" -f fplus-http-server/Dockerfile fplus-http-server + + + - name: Push Docker image to ECR + run: | + echo "Pushing Docker image to ECR..." + docker push "public.ecr.aws/b3c4u5n1/filecoin-core-api:${{ github.ref_name }}" + + - name: Deploy to Lightsail Container Service + run: | + # Define containers.json with desired settings + echo '{ + "filplus-core": { + "image": "public.ecr.aws/b3c4u5n1/filecoin-core-api:${{ github.ref_name }}", + "ports": { + "8080": "HTTP" + }, + "environment": { + "GH_PRIVATE_KEY": "${{secrets.GH_STAGING_PRIVATE_KEY}}", + } + } + }' > containers.json + + # Define public-endpoint.json + echo '{ + "containerName": "filplus-core", + "containerPort": 8080, + "healthCheck": { + "healthyThreshold": 3, + "unhealthyThreshold": 3, + "timeoutSeconds": 5, + "intervalSeconds": 60, + "path": "/health", + "successCodes": "200" + } + }' > public-endpoint.json + + # Deploy to Lightsail Container Service + aws lightsail create-container-service-deployment \ + --service-name fp-core \ + --region us-east-2 \ + --containers file://containers.json \ + --public-endpoint file://public-endpoint.json