Deploy to AWS ECR(Guest Docker Image v.test) by @JaeHyuckSa #61
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: Guest DEV Docker Push | |
run-name: Deploy to AWS ECR(Guest Docker Image v.${{ github.event.inputs.docker_image_tag }}) by @${{ github.actor }} | |
on: | |
workflow_dispatch: | |
inputs: | |
docker_image_tag: | |
description: '이전 버전과 다른 상위 버전을 입력해주세요. (ex. 1.0.0)' | |
default: '1.0.0' | |
required: true | |
type: string | |
permissions: | |
users: | |
- saJaeHyukc | |
- DongwookKim0823 | |
jobs: | |
build: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
token: ${{ secrets.OWNER_ACCESS_TOKEN }} | |
submodules: true | |
fetch-depth: 0 | |
- name: Set up QEMU for ARM64 | |
uses: docker/setup-qemu-action@v2 | |
with: | |
platforms: linux/arm64 | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
- name: AWS configure | |
uses: aws-actions/configure-aws-credentials@v4 | |
with: | |
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
aws-region: ap-northeast-2 | |
- name: Login to Amazon ECR | |
id: login-ecr | |
uses: aws-actions/amazon-ecr-login@v2 | |
- name: Get changed files | |
id: changed-files-specific | |
uses: tj-actions/changed-files@v45 | |
with: | |
files: | | |
docker/dev-package.Dockerfile | |
docker/dev.Dockerfile | |
pyproject.toml | |
poetry.lock | |
- name: Build dev-package docker image and push to ECR | |
id: build-and-push | |
if: steps.changed-files-specific.outputs.any_changed == 'true' | |
uses: docker/build-push-action@v5 | |
env: | |
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }} | |
with: | |
context: . | |
file: ./docker/dev-package.Dockerfile | |
platforms: linux/arm64 | |
push: true | |
tags: | | |
${{ env.ECR_REGISTRY }}/mung-manager-guest-dev-package:latest | |
- name: Replace Dockerfile and docker-compose | |
run: | | |
sed -i 's|${DEV_PACKAGE_IMAGE}|${{ steps.login-ecr.outputs.registry }}/mung-manager-guest-dev-package:latest|' docker/dev.Dockerfile | |
sed -i 's|docker/local.Dockerfile|docker/dev.Dockerfile|' docker-compose.yml | |
- name: Create env file | |
env: | |
DJANGO_GUEST_ENV: ${{ secrets.DJANGO_GUEST_ENV }} | |
run: | | |
touch .env.guest | |
echo "$DJANGO_GUEST_ENV" >> .env.guest | |
- name: Build docker compose images for ARM64 | |
env: | |
DOCKER_BUILDKIT: 1 | |
COMPOSE_DOCKER_CLI_BUILD: 1 | |
DOCKER_DEFAULT_PLATFORM: linux/arm64 | |
run: | | |
docker compose build postgres_db guest_service redis | |
- name: Run isort | |
run: docker compose run guest_service poetry run isort mung_manager/ --check | |
- name: Run black | |
run: docker compose run guest_service poetry run black mung_manager/ --check | |
- name: Run flake8 | |
run: docker compose run guest_service poetry run flake8 | |
- name: Run mypy | |
run: docker compose run guest_service poetry run mypy --config mypy.ini mung_manager/ | |
# - name: Run tests | |
# run: docker compose run guest_service poetry run pytest --cov=mung_manager/ --cov-fail-under=80 tests/ -n 4 | |
- name: Build dev docker image and push to ECR | |
id: build-dev-and-push | |
uses: docker/build-push-action@v5 | |
env: | |
IMAGE_TAG: ${{ github.event.inputs.docker_image_tag }} | |
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }} | |
with: | |
context: . | |
file: ./docker/dev.Dockerfile | |
platforms: linux/arm64 | |
push: true | |
tags: | | |
${{ env.ECR_REGISTRY }}/mung-manager-guest:${{ env.IMAGE_TAG }} | |
${{ env.ECR_REGISTRY }}/mung-manager-guest:latest | |
- name: Infra Repository Dispatch | |
uses: peter-evans/repository-dispatch@v3 | |
with: | |
token: ${{ secrets.OWNER_ACCESS_TOKEN }} | |
repository: Mung-Manager/BE-Infra | |
event-type: guest-dev-deploy | |
client-payload: | | |
{ | |
"prev_common_docker_image": "${{ steps.login-ecr-public.outputs.registry }}/${{ secrets.ECR_PUBLIC_REGISTRY_ALIAS }}", | |
"guest_image_tag": "${{ github.event.inputs.docker_image_tag }}", | |
"s3_bucket": "mung-manager-deploy/dev/guest/", | |
"actor": "${{ github.actor }}", | |
"branch": "${{ github.ref }}", | |
"django_settings_module": "config.django.dev" | |
} | |
- name: Notify Slack on Success | |
if: success() | |
id: slack-success | |
uses: slackapi/[email protected] | |
with: | |
payload: | | |
{ | |
"channel": "${{ secrets.SLACK_CHANNEL_ID }}", | |
"attachments": [ | |
{ | |
"color": "#36a64f", | |
"title": "${{ github.repository }}", | |
"title_link": "https://github.com/${{github.repository}}", | |
"text": "GitHub Action Guest DEV-DOCKER-BUILD 성공 😄", | |
"fields": [ | |
{ | |
"title": "Repository", | |
"value": "${{ github.repository }}", | |
"short": true | |
}, | |
{ | |
"title": "Tag", | |
"value": "${{ github.ref_name }}", | |
"short": true | |
} | |
] | |
} | |
] | |
} | |
env: | |
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} | |
SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK | |
- name: Notify Slack on Failure | |
if: failure() | |
id: slack-failure | |
uses: slackapi/[email protected] | |
with: | |
payload: | | |
{ | |
"channel": "${{ secrets.SLACK_CHANNEL_ID }}", | |
"attachments": [ | |
{ | |
"color": "#ff0000", | |
"title": "${{ github.repository }}", | |
"title_link": "https://github.com/${{github.repository}}", | |
"text": "GitHub Action Guest DEV-DOCKER-BUILD 실패 😭", | |
"fields": [ | |
{ | |
"title": "Repository", | |
"value": "${{ github.repository }}", | |
"short": true | |
}, | |
{ | |
"title": "Tag", | |
"value": "${{ github.ref_name }}", | |
"short": true | |
} | |
] | |
} | |
] | |
} | |
env: | |
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} | |
SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK |