Merge pull request #449 from LACMTA:2023-api-optimization #294
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
# This workflow will upload a Python Package using Twine when a release is created | |
# For more information see: https://help.github.com/en/actions/language-and-framework-guides/using-python-with-github-actions#publishing-to-package-registries | |
# This workflow uses actions that are not certified by GitHub. | |
# They are provided by a third-party and are governed by | |
# separate terms of service, privacy policy, and support | |
# documentation. | |
# Source Partly from: https://aws.amazon.com/getting-started/guides/deploy-webapp-lightsail/module-four/ | |
name: Deploy Docker Image to Dev AWS Lightsail Container Service | |
on: | |
push: | |
branches: | |
- dev | |
workflow_dispatch: | |
jobs: | |
deploy-to-aws: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@master | |
- name: 🔎 Check if files besides docs have changed | |
id: changed-files | |
uses: tj-actions/changed-files@v35 | |
with: | |
files_ignore: documentation | |
- name: 🔎 Check if files in data-loading-service have changed | |
id: data-loading-service-changed | |
uses: tj-actions/changed-files@v35 | |
with: | |
files: data-loading-service | |
- name: Upgrade AWS CLI version and setup lightsailctl | |
if: steps.changed-files.outputs.any_changed == 'true' | |
run: | | |
aws --version | |
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" | |
unzip awscliv2.zip | |
sudo ./aws/install --bin-dir /usr/local/bin --install-dir /usr/local/aws-cli --update | |
which aws | |
aws --version | |
sudo curl "https://s3.us-west-2.amazonaws.com/lightsailctl/latest/linux-amd64/lightsailctl" -o "/usr/local/bin/lightsailctl" | |
sudo chmod +x /usr/local/bin/lightsailctl | |
- name: Configure AWS Credentials | |
if: steps.changed-files.outputs.any_changed == 'true' | |
uses: aws-actions/configure-aws-credentials@v1-node16 | |
with: | |
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
aws-region: ${{ secrets.AWS_REGION }} | |
- name: Set up Docker Buildx | |
if: steps.changed-files.outputs.any_changed == 'true' | |
uses: docker/setup-buildx-action@v2 | |
- name: Login to DockerHub | |
if: steps.changed-files.outputs.any_changed == 'true' | |
uses: docker/login-action@v2 | |
with: | |
username: ${{ secrets.DOCKERHUB_USERNAME }} | |
password: ${{ secrets.DOCKERHUB_TOKEN }} | |
- name: Build and push 1-data-loading-service | |
if: steps.data-loading-service-changed.outputs.any_changed == 'true' | |
id: docker_build_data_loading_service | |
uses: docker/build-push-action@v2 | |
with: | |
push: true | |
tags: lacmta/metro-api-v2:data-loading-service | |
context: ./data-loading-service/ | |
build-args: | | |
BUILDKIT_CONTEXT_KEEP_GIT_DIR=true | |
- name: Build and push 2-fastapi | |
if: steps.changed-files.outputs.any_changed == 'true' | |
id: docker_build_fastapi | |
uses: docker/build-push-action@v2 | |
with: | |
push: true | |
tags: lacmta/metro-api-v2:fastapi | |
context: ./fastapi/ | |
build-args: | | |
BUILDKIT_CONTEXT_KEEP_GIT_DIR=true | |
- name: Push Updated data loading service Docker Image on Lightsail Dev | |
if: steps.data-loading-service-changed.outputs.any_changed == 'true' | |
run: | | |
MAX_RETRIES=5 | |
RETRY_DELAY=5 | |
count=0 | |
until aws lightsail create-container-service-deployment --service-name data-loading-service --containers '{"data-loading-service": {"image":"lacmta/metro-api-v2:data-loading-service", "environment": {"FTP_SERVER": "${{secrets.FTP_SERVER}}", "FTP_USERNAME": "${{secrets.FTP_USERNAME}}", "FTP_PASS": "${{secrets.FTP_PASS}}", "SWIFTLY_AUTH_KEY_BUS": "${{secrets.SWIFTLY_AUTH_KEY_BUS}}", "SWIFTLY_AUTH_KEY_RAIL": "${{secrets.SWIFTLY_AUTH_KEY_RAIL}}", "AWS_ACCESS_KEY_ID": "${{secrets.AWS_ACCESS_KEY_ID}}", "ACCESS_SECRET_KEY": "${{secrets.ACCESS_SECRET_KEY}}", "SWIFTLY_AUTH_KEY": "${{secrets.SWIFTLY_AUTH_KEY}}", "API_DB_URI": "${{secrets.API_DB_URI}}", "HASH_KEY": "${{secrets.HASH_KEY}}", "HASHING_ALGORITHM": "${{secrets.HASHING_ALGORITHM}}", "LOGZIO_TOKEN": "${{secrets.LOGZIO_TOKEN}}", "LOGZIO_URL": "${{secrets.LOGZIO_URL}}", "RUNNING_ENV": "prod"}}}' | |
do | |
if [[ "$count" -lt "$MAX_RETRIES" ]]; then | |
count=$((count+1)) | |
echo "Attempt $count of $MAX_RETRIES. Retrying after $RETRY_DELAY seconds..." | |
sleep $RETRY_DELAY | |
else | |
echo "All attempts failed. Exiting..." | |
exit 1 | |
fi | |
done | |
- name: Push Updated FastAPI to Image on Lightsail Dev | |
if: steps.changed-files.outputs.any_changed == 'true' | |
run: | | |
MAX_RETRIES=5 | |
RETRY_DELAY=5 | |
count=0 | |
until aws lightsail create-container-service-deployment --service-name dev-metro-api-v2 --containers '{"redis": {"image": "redis:latest", "environment": {}, "ports": {"6379": "TCP"}}, "fastapi": {"image":"lacmta/metro-api-v2:fastapi", "environment": { "BASE_URL": "https://dev-metro-api-v2.ofhq3vd1r7une.us-west-2.cs.amazonlightsail.com","FTP_SERVER": "${{secrets.FTP_SERVER}}", "FTP_USERNAME": "${{secrets.FTP_USERNAME}}", "FTP_PASS": "${{secrets.FTP_PASS}}", "SWIFTLY_AUTH_KEY_BUS": "${{secrets.SWIFTLY_AUTH_KEY_BUS}}", "SWIFTLY_AUTH_KEY_RAIL": "${{secrets.SWIFTLY_AUTH_KEY_RAIL}}", "AWS_ACCESS_KEY_ID": "${{secrets.AWS_ACCESS_KEY_ID}}", "ACCESS_SECRET_KEY": "${{secrets.ACCESS_SECRET_KEY}}", "SWIFTLY_AUTH_KEY": "${{secrets.SWIFTLY_AUTH_KEY}}", "API_DB_URI": "${{secrets.API_DB_URI}}", "HASH_KEY": "${{secrets.HASH_KEY}}", "HASHING_ALGORITHM": "${{secrets.HASHING_ALGORITHM}}", "LOGZIO_TOKEN": "${{secrets.LOGZIO_TOKEN}}", "LOGZIO_URL": "https://listener.logz.io:8071", "BASE_URL": "https://dev-metro-api-v2.ofhq3vd1r7une.us-west-2.cs.amazonlightsail.com","RUNNING_ENV": "dev", "REDIS_URL": "redis://dev-metro-api-v2.service.local:6379"}, "ports": {"80": "HTTP"}}}' --public-endpoint '{"containerName": "fastapi","containerPort": 80,"healthCheck":{ "healthyThreshold": 2,"unhealthyThreshold": 2,"timeoutSeconds": 2,"intervalSeconds": 5,"path": "/","successCodes": "200-499"}}' | |
do | |
if [[ "$count" -lt "$MAX_RETRIES" ]]; then | |
count=$((count+1)) | |
echo "Attempt $count of $MAX_RETRIES. Retrying after $RETRY_DELAY seconds..." | |
sleep $RETRY_DELAY | |
else | |
echo "All attempts failed. Exiting..." | |
exit 1 | |
fi | |
done | |
deploy-documentation: | |
runs-on: ubuntu-latest | |
name: Deploy Documentation to GitHub Pages | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-node@v3 | |
with: | |
node-version: 18 | |
cache: yarn | |
cache-dependency-path: "./documentation/package.json" | |
- name: 🔎 Check for change in docs folder | |
id: changed-documentation | |
uses: tj-actions/changed-files@v35 | |
with: | |
files: documentation | |
- name: Install dependencies | |
if: steps.changed-documentation.outputs.any_changed == 'true' | |
working-directory: ./documentation | |
run: yarn install | |
- name: Build website | |
if: steps.changed-documentation.outputs.any_changed == 'true' | |
working-directory: ./documentation | |
run: yarn build | |
- name: Deploy Documentation to GitHub Pages | |
if: steps.changed-documentation.outputs.any_changed == 'true' | |
uses: peaceiris/actions-gh-pages@v3 | |
with: | |
github_token: ${{ secrets.METRO_GITHUB_TOKEN }} | |
publish_dir: ./documentation/build | |
publish_branch: gh-pages | |
user_name: github-actions[bot] | |
user_email: 41898282+github-actions[bot]@users.noreply.github.com |