Skip to content

Commit

Permalink
Introduce UFPB labcheck initial deployment setup
Browse files Browse the repository at this point in the history
  • Loading branch information
thesocialdev committed Aug 26, 2024
1 parent a5fcc44 commit be25955
Show file tree
Hide file tree
Showing 3 changed files with 193 additions and 196 deletions.
345 changes: 149 additions & 196 deletions .github/workflows/aws.yml
Original file line number Diff line number Diff line change
@@ -1,201 +1,154 @@
name: Deploy to AWS EKS

on:
push:
branches:
- master
- stage
# For future
# release:
# types: [created]

push:
branches:
- master
- stage
- ufpb-labcheck
# For future
# release:
# types: [created]
env:
API_URL: ${{ secrets.API_URL }}
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY }}
AWS_DEFAULT_REGION: us-east-1
AWS_SDK_BUCKET: ${{ secrets.DEVELOPMENT_AWS_SDK_BUCKET }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
ECR_REGISTRY: ${{ secrets.ECR_REGISTRY }}
GITHUB_SHA: ${{ github.sha }}
KUBE_CONFIG: ${{ secrets.KUBE_CONFIG }}
NEW_RELIC_LICENSE_KEY: ${{ secrets.NEW_RELIC_LICENSE_KEY }}
IMAGE: aletheiafact-production
ENVIRONMENT: development
ENV: development
UMAMI_SITE_ID: ${{ secrets.DEVELOPMENT_UMAMI_SITE_ID }}
MONGODB_URI: ${{ secrets.DEVELOPMENT_MONGODB_URI }}
MONGODB_NAME: ${{ secrets.DEVELOPMENT_MONGODB_NAME }}
ORY_SDK_URL: ${{ secrets.DEVELOPMENT_ORY_SDK_URL }}
ORY_ACCESS_TOKEN: ${{ secrets.DEVELOPMENT_ORY_ACCESS_TOKEN }}
ALETHEIA_SCHEMA_ID: ${{ secrets.DEVELOPMENT_ALETHEIA_SCHEMA_ID }}
RECAPTCHA_SITEKEY: ${{ secrets.RECAPTCHA_SITEKEY }}
NOVU_API_KEY: ${{ secrets.DEVELOPMENT_NOVU_API_KEY }}
NOVU_APPLICATION_IDENTIFIER: ${{ secrets.DEVELOPMENT_NOVU_APPLICATION_IDENTIFIER }}
NEW_RELIC_APP_NAME: ${{ secrets.DEVELOPMENT_NEW_RELIC_APP_NAME }}
GITLAB_FEATURE_FLAG_URL: ${{ secrets.GITLAB_FEATURE_FLAG_URL }}
GITLAB_FEATURE_FLAG_INSTANCE_ID: ${{ secrets.GITLAB_FEATURE_FLAG_INSTANCE_ID }}
# Needed env variables for first build on next
NEXT_PUBLIC_UMAMI_SITE_ID: ${{ secrets.DEVELOPMENT_UMAMI_SITE_ID }}
NEXT_PUBLIC_RECAPTCHA_SITEKEY: ${{ secrets.RECAPTCHA_SITEKEY }}
AGENTS_API_URL: ${{ secrets.DEVELOPMENT_AGENTS_API_URL }}
OPENAI_API_KEY: ${{ secrets.DEVELOPMENT_OPENAI_API_KEY }}
ZENVIA_API_URL: ${{ secrets.DEVELOPMENT_ZENVIA_API_URL }}
ZENVIA_API_TOKEN: ${{ secrets.DEVELOPMENT_ZENVIA_API_URL }}
AGENCIA_ACCESS_TOKEN: ${{ secrets.DEVELOPMENT_AGENCIA_ACCESS_TOKEN }}
RECAPTCHA_SECRET: ${{ secrets.RECAPTCHA_SECRETKEY }}
TAG: ${{ github.sha}}
ECR_REGISTRY: ${{ secrets.ECR_REGISTRY }}
KUBE_CONFIG: ${{ secrets.KUBE_CONFIG }}
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY }}
AWS_DEFAULT_REGION: us-east-1
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
jobs:
setup-build-publish:
name: Build & Publish
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2

- name: Check Environment
if: endsWith(github.ref, '/master')
run: |
sed -i '11{s/test.//}' deployment/app.yml
sed -i '21{s/test.//}' deployment/app.yml
sed -i '11{s/testws./ws./}' deployment/websocket.yml
echo "ENV=production" >> $GITHUB_ENV
echo "ENVIRONMENT=production" >> $GITHUB_ENV
echo "UMAMI_SITE_ID=${{ secrets.PRODUCTION_UMAMI_SITE_ID }}" >> $GITHUB_ENV
echo "NEXT_PUBLIC_UMAMI_SITE_ID=${{ secrets.PRODUCTION_UMAMI_SITE_ID }}" >> $GITHUB_ENV
echo "MONGODB_URI=${{ secrets.PRODUCTION_MONGODB_URI }}" >> $GITHUB_ENV
echo "ORY_SDK_URL=${{ secrets.PRODUCTION_ORY_SDK_URL }}" >> $GITHUB_ENV
echo "ORY_ACCESS_TOKEN=${{ secrets.PRODUCTION_ORY_ACCESS_TOKEN }}" >> $GITHUB_ENV
echo "ALETHEIA_SCHEMA_ID=${{ secrets.PRODUCTION_ALETHEIA_SCHEMA_ID }}" >> $GITHUB_ENV
echo "API_URL=${{ secrets.API_URL_PRODUCTION }}" >> $GITHUB_ENV
echo "MONGODB_NAME=${{ secrets.PRODUCTION_MONGODB_NAME }}" >> $GITHUB_ENV
echo "AWS_SDK_BUCKET=${{ secrets.PRODUCTION_AWS_SDK_BUCKET }}" >> $GITHUB_ENV
echo "AWS_ACCESS_KEY_ID=${{ secrets.PRODUCTION_AWS_ACCESS_KEY_ID }}" >> $GITHUB_ENV
echo "AWS_SECRET_ACCESS_KEY=${{ secrets.PRODUCTION_AWS_SECRET_ACCESS_KEY }}" >> $GITHUB_ENV
echo "NOVU_API_KEY=${{ secrets.PRODUCTION_NOVU_API_KEY }}" >> $GITHUB_ENV
echo "NOVU_APPLICATION_IDENTIFIER=${{ secrets.PRODUCTION_NOVU_APPLICATION_IDENTIFIER }}" >> $GITHUB_ENV
echo "NEW_RELIC_APP_NAME=${{ secrets.PRODUCTION_NEW_RELIC_APP_NAME }}" >> $GITHUB_ENV
echo "NEXT_PUBLIC_ORY_SDK_URL=${{ secrets.ORY_SDK_URL }}" >> $GITHUB_ENV
echo "AGENTS_API_URL=${{ secrets.PRODUCTION_AGENTS_API_URL }}" >> $GITHUB_ENV
echo "OPENAI_API_KEY=${{ secrets.PRODUCTION_OPENAI_API_KEY }}" >> $GITHUB_ENV
echo "ZENVIA_API_URL=${{ secrets.PRODUCTION_ZENVIA_API_URL }}" >> $GITHUB_ENV
echo "ZENVIA_API_TOKEN=${{ secrets.PRODUCTION_ZENVIA_API_TOKEN }}" >> $GITHUB_ENV
echo "AGENCIA_ACCESS_TOKEN=${{ secrets.PRODUCTION_AGENCIA_ACCESS_TOKEN }}" >> $GITHUB_ENV
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: us-east-1

- name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@v1

- name: Install pkl
uses: pkl-community/setup-pkl@v0
with:
pkl-version: 0.25.2
# Setting up config.yaml based on environment
- name: Set config.yaml
run: |
pkl eval -f yaml ./deployment/config/config-file/$ENVIRONMENT.pkl > config.$ENVIRONMENT.yaml
- name: Set migrate-mongo-config.ts
run: |
sed -i "s%MONGODB_URI%$MONGODB_URI%g" migrate-mongo-config-example.ts
sed -i "s%MONGODB_NAME%$MONGODB_NAME%g" migrate-mongo-config-example.ts
# Build the Docker image
- name: Build
run: |
docker build --build-arg ENVIRONMENT=$ENVIRONMENT \
--build-arg NEXT_PUBLIC_UMAMI_SITE_ID=$NEXT_PUBLIC_UMAMI_SITE_ID \
--build-arg NEXT_PUBLIC_ENVIRONMENT=$ENVIRONMENT \
--build-arg NEXT_PUBLIC_ORY_SDK_URL=$ORY_SDK_URL \
--build-arg NEXT_PUBLIC_RECAPTCHA_SITEKEY=${{ secrets.NEXT_PUBLIC_RECAPTCHA_SITEKEY }} \
-t "$ECR_REGISTRY"/"$IMAGE":"$GITHUB_SHA" .
docker tag "$ECR_REGISTRY"/"$IMAGE":"$GITHUB_SHA" "$ECR_REGISTRY"/"$IMAGE":latest
# Push the Docker image to Google Container Registry
- name: Publish
run: |
docker push $ECR_REGISTRY/$IMAGE:$GITHUB_SHA
if [[ "$ENVIRONMENT" == "production" ]]; then docker push "$ECR_REGISTRY"/"$IMAGE":latest; fi
deploy:
name: Deploy
needs: setup-build-publish
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2

- name: Check Environment
if: endsWith(github.ref, '/master')
run: |
sed -i '11{s/testws./ws./}' deployment/websocket.yml
echo "ENVIRONMENT=production" >> $GITHUB_ENV
echo "UMAMI_SITE_ID=${{ secrets.PRODUCTION_UMAMI_SITE_ID }}" >> $GITHUB_ENV
echo "NEXT_PUBLIC_UMAMI_SITE_ID=${{ secrets.PRODUCTION_UMAMI_SITE_ID }}" >> $GITHUB_ENV
echo "MONGODB_URI=${{ secrets.PRODUCTION_MONGODB_URI }}" >> $GITHUB_ENV
echo "ORY_SDK_URL=${{ secrets.PRODUCTION_ORY_SDK_URL }}" >> $GITHUB_ENV
echo "ORY_ACCESS_TOKEN=${{ secrets.PRODUCTION_ORY_ACCESS_TOKEN }}" >> $GITHUB_ENV
echo "ALETHEIA_SCHEMA_ID=${{ secrets.PRODUCTION_ALETHEIA_SCHEMA_ID }}" >> $GITHUB_ENV
echo "API_URL=${{ secrets.API_URL_PRODUCTION }}" >> $GITHUB_ENV
echo "MONGODB_NAME=${{ secrets.PRODUCTION_MONGODB_NAME }}" >> $GITHUB_ENV
echo "AWS_SDK_BUCKET=${{ secrets.PRODUCTION_AWS_SDK_BUCKET }}" >> $GITHUB_ENV
echo "AWS_ACCESS_KEY_ID=${{ secrets.PRODUCTION_AWS_ACCESS_KEY_ID }}" >> $GITHUB_ENV
echo "AWS_SECRET_ACCESS_KEY=${{ secrets.PRODUCTION_AWS_SECRET_ACCESS_KEY }}" >> $GITHUB_ENV
echo "NOVU_API_KEY=${{ secrets.PRODUCTION_NOVU_API_KEY }}" >> $GITHUB_ENV
echo "NOVU_APPLICATION_IDENTIFIER=${{ secrets.PRODUCTION_NOVU_APPLICATION_IDENTIFIER }}" >> $GITHUB_ENV
echo "OPENAI_API_KEY=${{ secrets.PRODUCTION_OPENAI_API_KEY }}" >> $GITHUB_ENV
echo "ZENVIA_API_URL=${{ secrets.PRODUCTION_ZENVIA_API_URL }}" >> $GITHUB_ENV
echo "ZENVIA_API_TOKEN=${{ secrets.PRODUCTION_ZENVIA_API_TOKEN }}" >> $GITHUB_ENV
echo "AGENCIA_ACCESS_TOKEN=${{ secrets.PRODUCTION_AGENCIA_ACCESS_TOKEN }}" >> $GITHUB_ENV
- name: Install pkl
uses: pkl-community/setup-pkl@v0
with:
pkl-version: 0.25.2

- name: Set deployment/app.yml
run: |
pkl eval -f yaml ./deployment/k8s/$ENVIRONMENT.pkl > deployment/app.yml
- name: Set environment
run: |
sed -i 's%ENVIRONMENT%${{ env.ENVIRONMENT }}%g' deployment/websocket.yml
- name: Set deployment
run: |
sed -i "s/TAG/$GITHUB_SHA/" deployment/websocket.yml
- name: Applying Kubernetes Deployment
uses: giovannirossini/[email protected]
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: "us-east-1"
cluster-name: "production"
command: kubectl apply -f ./deployment/

- name: Validation
uses: giovannirossini/[email protected]
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: "us-east-1"
cluster-name: "production"
command: kubectl rollout status deployments/aletheia -n ${{ env.ENVIRONMENT }} --timeout=360s
if: success()

- name: Rollback
uses: giovannirossini/[email protected]
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: "us-east-1"
cluster-name: "production"
command: kubectl rollout undo deployments/aletheia -n ${{ env.ENVIRONMENT }}
if: failure()
setup-build-publish:
name: Build & Publish
runs-on: ubuntu-latest
environment: ${{ github.ref_name }}
env:
ENVIRONMENT: ${{ github.ref_name }}
AWS_SDK_BUCKET: ${{ secrets.AWS_SDK_BUCKET }}
API_URL: ${{ secrets.API_URL }}
GITHUB_SHA: ${{ github.sha }}
IMAGE: aletheiafact-production
ENV: ${{ github.ref_name }}
NEW_RELIC_LICENSE_KEY: ${{ secrets.NEW_RELIC_LICENSE_KEY }}
UMAMI_SITE_ID: ${{ secrets.UMAMI_SITE_ID }}
MONGODB_URI: ${{ secrets.MONGODB_URI }}
MONGODB_NAME: ${{ secrets.MONGODB_NAME }}
ORY_SDK_URL: ${{ secrets.ORY_SDK_URL }}
ORY_ACCESS_TOKEN: ${{ secrets.ORY_ACCESS_TOKEN }}
ALETHEIA_SCHEMA_ID: ${{ secrets.ALETHEIA_SCHEMA_ID }}
RECAPTCHA_SITEKEY: ${{ secrets.RECAPTCHA_SITEKEY }}
NOVU_API_KEY: ${{ secrets.NOVU_API_KEY }}
NOVU_APPLICATION_IDENTIFIER: ${{ secrets.NOVU_APPLICATION_IDENTIFIER }}
NEW_RELIC_APP_NAME: ${{ secrets.NEW_RELIC_APP_NAME }}
GITLAB_FEATURE_FLAG_URL: ${{ secrets.GITLAB_FEATURE_FLAG_URL }}
GITLAB_FEATURE_FLAG_INSTANCE_ID: ${{ secrets.GITLAB_FEATURE_FLAG_INSTANCE_ID }}
# Needed env variables for first build on next
NEXT_PUBLIC_UMAMI_SITE_ID: ${{ secrets.UMAMI_SITE_ID }}
NEXT_PUBLIC_RECAPTCHA_SITEKEY: ${{ secrets.RECAPTCHA_SITEKEY }}
AGENTS_API_URL: ${{ secrets.AGENTS_API_URL }}
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
ZENVIA_API_URL: ${{ secrets.ZENVIA_API_URL }}
ZENVIA_API_TOKEN: ${{ secrets.ZENVIA_API_URL }}
AGENCIA_ACCESS_TOKEN: ${{ secrets.AGENCIA_ACCESS_TOKEN }}
RECAPTCHA_SECRET: ${{ secrets.RECAPTCHA_SECRETKEY }}
TAG: ${{ github.sha}}
steps:
- name: Checkout
uses: actions/checkout@v2

- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: us-east-1

- name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@v1

- name: Install pkl
uses: pkl-community/setup-pkl@v0
with:
pkl-version: 0.25.2
# Setting up config.yaml based on environment
- name: Set config.yaml
run: |
pkl eval -f yaml ./deployment/config/config-file/$ENVIRONMENT.pkl > config.$ENVIRONMENT.yaml
- name: Set migrate-mongo-config.ts
run: |
sed -i "s%MONGODB_URI%$MONGODB_URI%g" migrate-mongo-config-example.ts
sed -i "s%MONGODB_NAME%$MONGODB_NAME%g" migrate-mongo-config-example.ts
# Build the Docker image
- name: Build
run: |
docker build --build-arg ENVIRONMENT=$ENVIRONMENT \
--build-arg NEXT_PUBLIC_UMAMI_SITE_ID=$NEXT_PUBLIC_UMAMI_SITE_ID \
--build-arg NEXT_PUBLIC_ENVIRONMENT=$ENVIRONMENT \
--build-arg NEXT_PUBLIC_ORY_SDK_URL=$ORY_SDK_URL \
--build-arg NEXT_PUBLIC_RECAPTCHA_SITEKEY=${{ secrets.NEXT_PUBLIC_RECAPTCHA_SITEKEY }} \
-t "$ECR_REGISTRY"/"$IMAGE":"$GITHUB_SHA" .
docker tag "$ECR_REGISTRY"/"$IMAGE":"$GITHUB_SHA" "$ECR_REGISTRY"/"$IMAGE":latest
# Push the Docker image to Google Container Registry
- name: Publish
run: |
docker push $ECR_REGISTRY/$IMAGE:$GITHUB_SHA
if [[ "$ENVIRONMENT" == "production" ]]; then docker push "$ECR_REGISTRY"/"$IMAGE":latest; fi
deploy:
name: Deploy
needs: setup-build-publish
runs-on: ubuntu-latest
environment: ${{ github.ref_name }}
env:
ENVIRONMENT: ${{ github.ref_name }}
KUBE_CONFIG: ${{ secrets.KUBE_CONFIG }}
NEW_RELIC_LICENSE_KEY: ${{ secrets.NEW_RELIC_LICENSE_KEY }}
UMAMI_SITE_ID: ${{ secrets.UMAMI_SITE_ID }}
ORY_SDK_URL: ${{ secrets.ORY_SDK_URL }}
ORY_ACCESS_TOKEN: ${{ secrets.ORY_ACCESS_TOKEN }}
RECAPTCHA_SITEKEY: ${{ secrets.RECAPTCHA_SITEKEY }}
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
TAG: ${{ github.sha}}
steps:
- name: Checkout
uses: actions/checkout@v2

- name: Install pkl
uses: pkl-community/setup-pkl@v0
with:
pkl-version: 0.25.2

- name: Set deployment/app.yml
run: |
pkl eval -f yaml ./deployment/k8s/$ENVIRONMENT.pkl > deployment/app.yml
- name: Applying Kubernetes Deployment
uses: giovannirossini/[email protected]
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: "us-east-1"
cluster-name: "production"
command: kubectl apply -f ./deployment/

- name: Validation
uses: giovannirossini/[email protected]
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: "us-east-1"
cluster-name: "production"
command: kubectl rollout status deployments/aletheia -n ${{ env.ENVIRONMENT }} --timeout=360s
if: success()

- name: Rollback
uses: giovannirossini/[email protected]
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: "us-east-1"
cluster-name: "production"
command: kubectl rollout undo deployments/aletheia -n ${{ env.ENVIRONMENT }}
if: failure()
16 changes: 16 additions & 0 deletions deployment/config/config-file/ufpb-labcheck.pkl
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
amends "./modules/main.pkl"
import "./modules/database/mongodb.pkl"
appBaseUrl = "aletheiafact.org"

var = new {
name = "aletheia-ufpb-labcheck"
conf {
cors = "*"
recaptcha_sitekey = "6Lc2BtYUAAAAAOUBI-9r1sDJUIfG2nt6C43noOXh"
websocketUrl = "wss://testws.\(appBaseUrl) "
baseUrl = "https://labcheck.\(appBaseUrl)"
db = (mongodb) {
atlas = true
}
}
}
28 changes: 28 additions & 0 deletions deployment/k8s/ufpb-labcheck.pkl
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
amends "./app.pkl"
import "package://pkg.pkl-lang.org/pkl-k8s/[email protected]#/K8sResource.pkl"
import "./modules/ingress.pkl" as ingress
import "./modules/aletheia.pkl"

appNamespace = "ufbp-labcheck"
podPort = 3000

local newAletheia = new (aletheia) {
ns = appNamespace
p = podPort
}

IngressOptions {
rules {
(ingress.rule) {
host = "labcheck.aletheiafact.org"
}
}
}

DeploymentOptions {
containers {
(newAletheia.pod.container) {
name = "aletheia"
}
}
}

0 comments on commit be25955

Please sign in to comment.