Serhii milestone4 (#69) #123
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Deploy to AWS App Runner | |
# Trigger this workflow on any push to the 'master' branch | |
on: | |
push: | |
branches: | |
- master | |
jobs: | |
# # Job for deploying the backend service | |
# deploy-backend: | |
# name: Deploy Backend to AWS App Runner | |
# runs-on: ubuntu-latest # Run on the latest version of Ubuntu | |
# steps: | |
# # Step 1: Check out the code from the repository | |
# - name: Check out code | |
# uses: actions/checkout@v3 # GitHub Action to check out the code | |
# # Step 2: Set up AWS CLI with necessary credentials | |
# - name: Set up AWS CLI | |
# uses: aws-actions/configure-aws-credentials@v2 # GitHub Action to configure AWS credentials | |
# with: | |
# aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} # AWS Access Key ID stored as a GitHub secret | |
# aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} # AWS Secret Access Key stored as a GitHub secret | |
# aws-region: ${{ secrets.AWS_REGION }} # AWS Region stored as a GitHub secret | |
# # Step 3: Deploy the backend service to AWS App Runner with retry logic | |
# - name: Deploy Backend | |
# run: | | |
# # Fetch the Service ARN from AWS App Runner | |
# SERVICE_ARN=$(aws apprunner list-services --query "ServiceSummaryList[?ServiceName=='${{ secrets.APP_RUNNER_SERVICE_NAME_BACKEND }}'].ServiceArn | [0]" --output text) | |
# if [ -z "$SERVICE_ARN" ]; then | |
# echo "Error: Service ARN not found for service name ${{ secrets.APP_RUNNER_SERVICE_NAME_BACKEND }}." | |
# exit 1 | |
# fi | |
# # Retry logic with exponential backoff | |
# RETRY_COUNT=0 | |
# MAX_RETRIES=15 | |
# BACKOFF_TIME=5 # Initial backoff time in seconds | |
# while [ $RETRY_COUNT -lt $MAX_RETRIES ]; do | |
# if aws apprunner update-service \ | |
# --service-arn $SERVICE_ARN \ | |
# --source-configuration {CodeRepository={RepositoryUrl=${{ secrets.REPOSITORY_URL }}, SourceCodeVersion={Type=BRANCH, Value=master}, SourceDirectory=linguaphoto}; then | |
# echo "Service updated successfully." | |
# exit 0 | |
# else | |
# RETRY_COUNT=$((RETRY_COUNT + 1)) | |
# echo "Update failed. Attempt $RETRY_COUNT of $MAX_RETRIES. Retrying in $BACKOFF_TIME seconds..." | |
# sleep $BACKOFF_TIME | |
# BACKOFF_TIME=$((BACKOFF_TIME * 2)) # Exponential backoff | |
# fi | |
# done | |
# echo "Failed to update the service after $MAX_RETRIES attempts." | |
# exit 1 | |
# Job for deploying the frontend service | |
deploy-frontend: | |
name: Deploy Frontend to CloudFront | |
runs-on: ubuntu-latest # Run on the latest version of Ubuntu | |
steps: | |
# Step 1: Check out the repository | |
- name: Check out repository | |
uses: actions/checkout@v3 | |
# Step 2: Set up Node.js environment | |
- name: Set up Node.js | |
uses: actions/setup-node@v3 | |
with: | |
node-version: "20.10.0" # Ensure this matches your project’s Node.js version | |
# Step 3: Restore cache (Node modules and mypy cache) | |
- name: Restore cache | |
id: restore-cache | |
uses: actions/cache/restore@v3 | |
with: | |
path: frontend/node_modules/ | |
key: deploy-${{ github.sha }}-${{ hashFiles('frontend/package-lock.json') }}-${{ hashFiles('linguaphoto/requirements.txt') }} | |
restore-keys: | | |
deploy-${{ github.sha }}- | |
deploy- | |
# Step 4: Install Node.js packages | |
- name: Install Node packages | |
working-directory: frontend | |
run: npm install | |
# Step 5: Build the frontend | |
- name: Build frontend | |
working-directory: frontend | |
run: npm run build | |
# Step 6: Configure AWS credentials | |
- name: Configure AWS credentials | |
uses: aws-actions/configure-aws-credentials@v1 | |
with: | |
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
aws-region: ${{ secrets.AWS_REGION }} | |
# Step 7: Deploy to S3 | |
- name: Replace S3 bucket contents | |
run: | | |
aws s3 rm s3://${{ secrets.S3_BUCKET }}/build --recursive | |
aws s3 cp frontend/build s3://${{ secrets.S3_BUCKET }}/build --recursive | |
# Step 8: Invalidate CloudFront cache | |
- name: Invalidate CloudFront cache | |
run: | | |
aws cloudfront create-invalidation --distribution-id ${{ secrets.CLOUDFRONT_DISTRIBUTION_ID }} --paths "/*" | |
# Step 9: Save cache (only on the master branch) | |
- name: Save cache | |
uses: actions/cache/save@v3 | |
if: github.ref == 'refs/heads/master' | |
with: | |
path: frontend/node_modules/ | |
key: deploy-${{ github.sha }}-${{ hashFiles('frontend/package-lock.json') }}-${{ hashFiles('linguaphoto/requirements.txt') }} |