Merge pull request #403 from LACMTA/dev #111
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 Prod AWS Lightsail Container Service | |
on: | |
push: | |
branches: | |
- main | |
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: 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.changed-files.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 Prod | |
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 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 Docker Image on Lightsail Prod | |
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 metro-api-v2 --containers '{"redis": {"image": "redis:latest", "environment": {}, "ports": {"6379": "TCP"}}, "fastapi": {"image":"lacmta/metro-api-v2:fastapi", "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": "https://listener.logz.io:8071", "RUNNING_ENV": "prod", "REDIS_URL": "redis://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 |