Skip to content

AWS CI/CD Integration #1043

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 35 commits into from
Mar 6, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
dc4fe8c
Merge pull request #1023 from thecourseforum/dev
barrett-ruth Feb 18, 2025
3f3eaa3
Merge pull request #1025 from thecourseforum/dev
ajnye Feb 18, 2025
622bf9e
add deploy using aws into cicd
gckang Feb 17, 2025
2adbbef
feat(settings): load balancer configs
barrett-ruth Jan 19, 2025
2c1edab
remove dockerhub stuff from cicd
gckang Mar 2, 2025
70d3efc
move aws deploy cicd to master-to-app-engine.yml
gckang Mar 2, 2025
04d0d3c
s3 - by ldkohler (GOAT)
ldkohler Mar 2, 2025
011f47f
update region aws cicd
gckang Mar 2, 2025
95ca2a1
dynamic task defintion update and ecs image name
gckang Mar 2, 2025
fb08f87
update geting task definition dynamically
gckang Mar 2, 2025
4289102
update requirements to include django-storages and boto3
ldkohler Mar 2, 2025
7c6f4a7
update ecr container name cicd
gckang Mar 2, 2025
581bb48
delete .env.example
ldkohler Mar 2, 2025
bd535ee
revise cicd and rename yaml
ldkohler Mar 2, 2025
62fe9e9
delete old app.yaml template
ldkohler Mar 2, 2025
e336677
feat(aws): update django-storages config
barrett-ruth Mar 2, 2025
08ad2a5
fix(s3): use the latest boto-storages api
barrett-ruth Mar 2, 2025
ba2a329
prayge
barrett-ruth Mar 2, 2025
838c7d8
fix django remove staticfiles
barrett-ruth Mar 2, 2025
203f082
prayge
barrett-ruth Mar 2, 2025
b661329
pray
barrett-ruth Mar 2, 2025
6c29fdd
Merge branch 'master' into aws/cicd
barrett-ruth Mar 5, 2025
9bdb3af
feat(aws/ci): temporarily change branch to this one to test
barrett-ruth Mar 5, 2025
ce2d210
fix(ci): expose aws info to ci environment
barrett-ruth Mar 5, 2025
7016dc3
fix(ci): extract s3 bucket name to env var
barrett-ruth Mar 5, 2025
ebbd7c9
.env.example needed for ci coverage
barrett-ruth Mar 5, 2025
3ebe817
feat(env): force include env example
barrett-ruth Mar 5, 2025
dfec134
fix(ci/aws): remove superfluous gcloud step
barrett-ruth Mar 5, 2025
8df27f1
feat(aws/ci): run ci on non-default branch
barrett-ruth Mar 5, 2025
5315a2b
revert(ci/aws): remove the if statement, idek
barrett-ruth Mar 5, 2025
d3ac6ca
fix(aws): use master branch only
barrett-ruth Mar 6, 2025
2678e5c
fix(aws): update env var name
barrett-ruth Mar 6, 2025
a11218b
fix env var names
barrett-ruth Mar 6, 2025
542820f
switch default ACL to none
ldkohler Mar 6, 2025
6fc2531
fix(ci): proper s3 env vars
barrett-ruth Mar 6, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 0 additions & 30 deletions .config/.env.example

This file was deleted.

47 changes: 0 additions & 47 deletions .config/app.yaml.template

This file was deleted.

36 changes: 36 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# Django
DJANGO_SETTINGS_MODULE=?
DEBUG=?
SECRET_KEY=?

ENVIRONMENT=?

# review drive account
REVIEW_DRIVE_ID=?
REVIEW_DRIVE_EMAIL=?
REVIEW_DRIVE_PASSWORD=?

# social-auth-app-django library
SOCIAL_AUTH_GOOGLE_OAUTH2_KEY=?
SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET=?

# database
DB_USER=?
DB_NAME=?
DB_PASSWORD=?
DB_HOST=?
DB_PORT=?
sslmode=?

# email
EMAIL_HOST_USER=?
EMAIL_HOST_PASSWORD=?


# aws
AWS_ACCESS_KEY_ID=?
AWS_SECRET_ACCESS_KEY=?

# s3
AWS_STORAGE_BUCKET_NAME=?
AWS_S3_REGION_NAME=?
112 changes: 112 additions & 0 deletions .github/workflows/aws.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
# Based on https://github.com/actions/starter-workflows/blob/main/ci/django.yml
name: AWS Deployment

on:
# CI must pass on the master branch
workflow_run:
workflows: ["Continuous Integration"]
branches: [master]
types:
- completed

env:
PYTHON_TARGET: 3.11
# Django
DJANGO_SETTINGS_MODULE: tcf_core.settings.prod
SECRET_KEY: ${{ secrets.SECRET_KEY }}
DEBUG: 0
# database
DB_NAME: ${{ secrets.DB_NAME }}
DB_USER: ${{ secrets.DB_USER }}
DB_PASSWORD: ${{ secrets.DB_PASSWORD }}
DB_HOST: ${{ secrets.DB_HOST }}
DB_PORT: ${{ secrets.DB_PORT }}
# social-auth-app-django
SOCIAL_AUTH_GOOGLE_OAUTH2_KEY: ${{ secrets.SOCIAL_AUTH_GOOGLE_OAUTH2_KEY }}
SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET: ${{ secrets.SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET }}
# email for account verification
EMAIL_HOST_USER: ${{ secrets.EMAIL_HOST_USER }}
EMAIL_HOST_PASSWORD: ${{ secrets.EMAIL_HOST_PASSWORD }}
# review drive account information
REVIEW_DRIVE_ID: ${{ secrets.REVIEW_DRIVE_ID }}
REVIEW_DRIVE_EMAIL: ${{ secrets.REVIEW_DRIVE_EMAIL }}
REVIEW_DRIVE_PASSWORD: ${{ secrets.REVIEW_DRIVE_PASSWORD }}
# aws ecs image
AWS_REGION: us-east-1
ECS_SERVICE: barrett-fogle-love-v1
ECS_CLUSTER: tcf-fargate-cluster
ECR_REPO: tcf/thecourseforum2
ECR_CONTAINER_NAME: tcf-container
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_ACCOUNT_ID: ${{ secrets.AWS_ACCOUNT_ID }}
AWS_STORAGE_BUCKET_NAME: ${{ secrets.AWS_STORAGE_BUCKET_NAME }}

jobs:
deploy:
# if: ${{ github.event.workflow_run.conclusion == 'success' }}
runs-on: ubuntu-latest
steps:
- name: Checkout `master`
uses: actions/checkout@v2
with:
ref: ${{ github.event.workflow_run.head_sha }}

- name: Set up Python ${{ env.PYTHON_TARGET }}
uses: actions/setup-python@v2
with:
python-version: ${{ env.PYTHON_TARGET }}

- name: Install Python packages, excluding the unnecessary ones
run: |
python -m pip install --upgrade pip
sed -i '/\(coverage\|lint\|types\-tqdm\|mypy\|black\|isort\|gunicorn\|django\-heroku\|django\-stubs\)/d' requirements.txt
pip install -r requirements.txt

- name: Migrations
run: |
python manage.py migrate

- 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: ${{ env.AWS_REGION }}

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

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2

- name: Build and push
uses: docker/build-push-action@v4
with:
context: .
file: ./Dockerfile
push: true
tags: ${{ secrets.AWS_ACCOUNT_ID }}.dkr.ecr.${{ env.AWS_REGION }}.amazonaws.com/${{ env.ECR_REPO }}:${{github.sha}}

- name: Get latest task definition
run: |
aws ecs describe-task-definition \
--task-definition tcf-prod-task \
--query taskDefinition > task-definition.json

- name: Add image in ECS task definition
id: task-def
uses: aws-actions/amazon-ecs-render-task-definition@v1
with:
task-definition: task-definition.json
container-name: ${{ env.ECR_CONTAINER_NAME }}
image: ${{ env.AWS_ACCOUNT_ID }}.dkr.ecr.${{ env.AWS_REGION }}.amazonaws.com/${{ env.ECR_REPO }}:${{github.sha}}

- name: Deploy Amazon ECS task definition
uses: aws-actions/amazon-ecs-deploy-task-definition@v1
with:
task-definition: ${{ steps.task-def.outputs.task-definition }}
service: ${{ env.ECS_SERVICE }}
cluster: ${{ env.ECS_CLUSTER }}
wait-for-service-stability: true
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,10 @@ env:
REVIEW_DRIVE_ID: ${{ secrets.REVIEW_DRIVE_ID }}
REVIEW_DRIVE_EMAIL: ${{ secrets.REVIEW_DRIVE_EMAIL }}
REVIEW_DRIVE_PASSWORD: ${{ secrets.REVIEW_DRIVE_PASSWORD }}
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_ACCOUNT_ID: ${{ secrets.AWS_ACCOUNT_ID }}
AWS_STORAGE_BUCKET_NAME: ${{ secrets.AWS_STORAGE_BUCKET_NAME }}

jobs:
pylint:
Expand Down Expand Up @@ -84,7 +88,7 @@ jobs:

- name: Migrations & Tests
run: |
envsubst < .config/.env.example > .env
envsubst < .env.example > .env
python manage.py migrate
coverage run manage.py test

Expand All @@ -108,3 +112,4 @@ jobs:

- name: Run ESLint
run: npx eslint -c .config/.eslintrc.yml tcf_website/static/

78 changes: 0 additions & 78 deletions .github/workflows/master-to-app-engine.yml

This file was deleted.

2 changes: 2 additions & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
Django~=4.2.8
backoff~=2.2.1
black~=24.1.1
boto3~=1.37.4
coverage~=7.3.3
django-cachalot~=2.6.1
django-environ~=0.11.2
django-filter~=23.5
django-heroku~=0.3.1
django-storages~=1.14.5
django-stubs~=4.2.7
djangorestframework~=3.14.0
gunicorn~=21.2.0
Expand Down
Loading
Loading