Skip to content

Commit

Permalink
[BE] refactor: workflow 간소화 (#24)
Browse files Browse the repository at this point in the history
Signed-off-by: EunJiJung <[email protected]>
  • Loading branch information
bianbbc87 committed Feb 4, 2025
1 parent 4397c20 commit 45e9a10
Showing 1 changed file with 65 additions and 267 deletions.
332 changes: 65 additions & 267 deletions .github/workflows/be-main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ name: ECR actions for multiple folders

on:
push:
# 임시 테스트 브랜치
branches:
- be/setting/24-ecr

Expand All @@ -11,292 +10,91 @@ env:
NAMESPACE_SERVICE: "service"

jobs:
# 변경 사항 감지 Job (각 서비스별로 실행)
# 변경 사항 감지 Job
check-folder-change:
runs-on: ubuntu-latest

outputs:
msa_discovery_changed: ${{ steps.check_msa_discovery.outputs.changed }}
msa_config_changed: ${{ steps.check_msa_config.outputs.changed }}
msa_apigateway_changed: ${{ steps.check_msa_apigateway.outputs.changed }}
service_user_changed: ${{ steps.check_service_user.outputs.changed }}
service_chat_changed: ${{ steps.check_service_chat.outputs.changed }}
service_state_changed: ${{ steps.check_service_state.outputs.changed }}
service_guild_changed: ${{ steps.check_service_guild.outputs.changed }}
service_notification_changed: ${{ steps.check_service_notification.outputs.changed }}
service_signaling_changed: ${{ steps.check_service_signaling.outputs.changed }}
changed_services: ${{ steps.check_changes.outputs.changed_services }}

steps:
- name: Checkout repository
uses: actions/checkout@v3
with:
fetch-depth: 0 # 모든 브랜치의 전체 히스토리 가져오기

# 브랜치 확인
- name: Debug Git Branches
run: |
echo "Fetching all branches..."
git fetch --all
echo "Available remote branches:"
git branch -r
echo "Current branch:"
git branch
- name: Check for changes in MSA - Discovery
id: check_msa_discovery
run: |
if git rev-parse --verify origin/be/setting/24-test >/dev/null 2>&1; then
if git diff --name-only origin/be/setting/24-test...HEAD | grep -q "^src/backend/discovery-server/"; then
echo "changed=true" >> "$GITHUB_OUTPUT"
else
echo "changed=false" >> "$GITHUB_OUTPUT"
fi
else
echo "First PR: marking as changed"
echo "changed=true" >> "$GITHUB_OUTPUT"
fi

- name: Check for changes in MSA - Config
id: check_msa_config
run: |
if git rev-parse --verify origin/be/setting/24-test >/dev/null 2>&1; then
if git diff --name-only origin/be/setting/24-test...HEAD | grep -q "^src/backend/config-server/"; then
echo "changed=true" >> $GITHUB_ENV
else
echo "changed=false" >> $GITHUB_ENV
fi
else
echo "First PR: marking as changed"
echo "changed=true" >> "$GITHUB_OUTPUT"
fi
- name: Check for changes in MSA - API Gateway
id: check_msa_apigateway
run: |
if git rev-parse --verify origin/be/setting/24-test >/dev/null 2>&1; then
if git diff --name-only origin/be/setting/24-test...HEAD | grep -q "^src/backend/apigateway-server/"; then
echo "changed=true" >> $GITHUB_ENV
else
echo "changed=false" >> $GITHUB_ENV
fi
else
echo "First PR: marking as changed"
echo "changed=true" >> "$GITHUB_OUTPUT"
fi
fetch-depth: 0

- name: Check for changes in Service - User
id: check_service_user
- name: Check for changes in folders
id: check_changes
run: |
if git rev-parse --verify origin/be/setting/24-test >/dev/null 2>&1; then
if git diff --name-only origin/be/setting/24-test...HEAD | grep -q "^src/backend/user-server/"; then
echo "changed=true" >> $GITHUB_ENV
JSON_OUTPUT="{"
for service in discovery-server config-server apigateway-server user-server chat-server state-server guild-server notification-server signaling-server; do
if git rev-parse --verify origin/be/setting/24-test >/dev/null 2>&1; then
if git diff --name-only origin/be/setting/24-test...HEAD | grep -q "^src/backend/$service/"; then
JSON_OUTPUT+="\"$service\":\"true\","
else
JSON_OUTPUT+="\"$service\":\"false\","
fi
else
echo "changed=false" >> $GITHUB_ENV
JSON_OUTPUT+="\"$service\":\"true\","
fi
else
echo "First PR: marking as changed"
echo "changed=true" >> "$GITHUB_OUTPUT"
fi
done
JSON_OUTPUT="${JSON_OUTPUT%,}}"
echo "changed_services=$JSON_OUTPUT" >> "$GITHUB_OUTPUT"
- name: Check for changes in Service - Chat
id: check_service_chat
run: |
if git rev-parse --verify origin/be/setting/24-test >/dev/null 2>&1; then
if git diff --name-only origin/be/setting/24-test...HEAD | grep -q "^src/backend/chat-server/"; then
echo "changed=true" >> $GITHUB_ENV
else
echo "changed=false" >> $GITHUB_ENV
fi
else
echo "First PR: marking as changed"
echo "changed=true" >> "$GITHUB_OUTPUT"
fi
- name: Check for changes in Service - State
id: check_service_state
run: |
if git rev-parse --verify origin/be/setting/24-test >/dev/null 2>&1; then
if git diff --name-only origin/be/setting/24-test...HEAD | grep -q "^src/backend/state-server/"; then
echo "changed=true" >> $GITHUB_ENV
else
echo "changed=false" >> $GITHUB_ENV
fi
else
echo "First PR: marking as changed"
echo "changed=true" >> "$GITHUB_OUTPUT"
fi
- name: Check for changes in Service - Guild
id: check_service_guild
run: |
if git rev-parse --verify origin/be/setting/24-test >/dev/null 2>&1; then
if git diff --name-only origin/be/setting/24-test...HEAD | grep -q "^src/backend/guild-server/"; then
echo "changed=true" >> $GITHUB_ENV
else
echo "changed=false" >> $GITHUB_ENV
fi
else
echo "First PR: marking as changed"
echo "changed=true" >> "$GITHUB_OUTPUT"
fi
- name: Check for changes in Service - Notification
id: check_service_notification
run: |
if git rev-parse --verify origin/be/setting/24-test >/dev/null 2>&1; then
if git diff --name-only origin/be/setting/24-test...HEAD | grep -q "^src/backend/notification-server/"; then
echo "changed=true" >> $GITHUB_ENV
else
echo "changed=false" >> $GITHUB_ENV
fi
else
echo "First PR: marking as changed"
echo "changed=true" >> "$GITHUB_OUTPUT"
fi
- name: Check for changes in Service - Signaling
id: check_service_signaling
run: |
if git rev-parse --verify origin/be/setting/24-test >/dev/null 2>&1; then
if git diff --name-only origin/be/setting/24-test...HEAD | grep -q "^src/backend/signaling-server/"; then
echo "changed=true" >> $GITHUB_ENV
else
echo "changed=false" >> $GITHUB_ENV
fi
else
echo "First PR: marking as changed"
echo "changed=true" >> "$GITHUB_OUTPUT"
fi
# MSA 빌드 및 푸시
build-msa-discovery:
# 공통 빌드 Job (MSA + Service 통합)
build-and-push:
needs: check-folder-change
if: ${{ needs.check-folder-change.outputs.msa_discovery_changed == 'true' }}
runs-on: ubuntu-latest
strategy:
matrix:
include:
- name: "discovery-server"
namespace: "msa"
ecr_repo: "discovery"
- name: "config-server"
namespace: "msa"
ecr_repo: "config"
- name: "apigateway-server"
namespace: "msa"
ecr_repo: "apigateway"

- name: "user-server"
namespace: "service"
ecr_repo: "user"
- name: "chat-server"
namespace: "service"
ecr_repo: "chat"
- name: "state-server"
namespace: "service"
ecr_repo: "state"
- name: "guild-server"
namespace: "service"
ecr_repo: "guild"
- name: "notification-server"
namespace: "service"
ecr_repo: "notification"
- name: "signaling-server"
namespace: "service"
ecr_repo: "media"

steps:
# 레포 가져오기
- name: Checkout repository
uses: actions/checkout@v3

- name: Build & Push MSA Discovery
uses: ./.github/actions/ecr-push
with:
namespace: ${{ env.NAMESPACE_MSA }}
folder: "src/backend/discovery-server"
ecr_repo: "discovery"
aws_access_key_id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}

build-msa-config:
needs: check-folder-change
if: ${{ needs.check-folder-change.outputs.msa_config_changed == 'true' }}
runs-on: ubuntu-latest
steps:
- name: Build & Push MSA Config
uses: ./.github/actions/ecr-push
with:
namespace: ${{ env.NAMESPACE_MSA }}
folder: "src/backend/config-server"
ecr_repo: "config"
aws_access_key_id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}

build-msa-apigateway:
needs: check-folder-change
if: ${{ needs.check-folder-change.outputs.msa_apigateway_changed == 'true' }}
runs-on: ubuntu-latest
steps:
- name: Build & Push MSA API Gateway
uses: ./.github/actions/ecr-push
with:
namespace: ${{ env.NAMESPACE_MSA }}
folder: "src/backend/apigateway-server"
ecr_repo: "apigateway"
aws_access_key_id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}

# Service 빌드 및 푸시
build-service-user:
needs: check-folder-change
if: ${{ needs.check-folder-change.outputs.service_user_changed == 'true' }}
runs-on: ubuntu-latest
steps:
- name: Build & Push Service User
uses: ./.github/actions/ecr-push
with:
namespace: ${{ env.NAMESPACE_SERVICE }}
folder: "src/backend/user-server"
ecr_repo: "user"
aws_access_key_id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}

build-service-chat:
needs: check-folder-change
if: ${{ needs.check-folder-change.outputs.service_chat_changed == 'true' }}
runs-on: ubuntu-latest
steps:
- name: Build & Push Service Chat
uses: ./.github/actions/ecr-push
with:
namespace: ${{ env.NAMESPACE_SERVICE }}
folder: "src/backend/chat-server"
ecr_repo: "chat"
aws_access_key_id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}

build-service-state:
needs: check-folder-change
if: ${{ needs.check-folder-change.outputs.service_state_changed == 'true' }}
runs-on: ubuntu-latest
steps:
- name: Build & Push Service State
uses: ./.github/actions/ecr-push
with:
namespace: ${{ env.NAMESPACE_SERVICE }}
folder: "src/backend/state-server"
ecr_repo: "state"
aws_access_key_id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}

build-service-guild:
needs: check-folder-change
if: ${{ needs.check-folder-change.outputs.service_guild_changed == 'true' }}
runs-on: ubuntu-latest
steps:
- name: Build & Push Service Guild
uses: ./.github/actions/ecr-push
with:
namespace: ${{ env.NAMESPACE_SERVICE }}
folder: "src/backend/guild-server"
ecr_repo: "guild"
aws_access_key_id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}

build-service-notification:
needs: check-folder-change
if: ${{ needs.check-folder-change.outputs.service_notification_changed == 'true' }}
runs-on: ubuntu-latest
steps:
- name: Build & Push Service Notification
uses: ./.github/actions/ecr-push
with:
namespace: ${{ env.NAMESPACE_SERVICE }}
folder: "src/backend/notification-server"
ecr_repo: "notification"
aws_access_key_id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
- name: Check if the service has changed
id: check_service_change
run: |
CHANGED_SERVICES='${{ needs.check-folder-change.outputs.changed_services }}'
SERVICE_NAME='${{ matrix.name }}'
if [[ "$(echo $CHANGED_SERVICES | jq -r .[$SERVICE_NAME])" != "true" ]]; then
echo "No changes detected for $SERVICE_NAME, skipping job."
exit 1
fi
build-service-signaling:
needs: check-folder-change
if: ${{ needs.check-folder-change.outputs.service_signaling_changed == 'true' }}
runs-on: ubuntu-latest
steps:
- name: Build & Push Service Signaling
- name: Build & Push ${{ matrix.name }}
uses: ./.github/actions/ecr-push
with:
namespace: ${{ env.NAMESPACE_SERVICE }}
folder: "src/backend/signaling-server"
ecr_repo: "media"
namespace: ${{ matrix.namespace }}
folder: "src/backend/${{ matrix.name }}"
ecr_repo: ${{ matrix.ecr_repo }}
aws_access_key_id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}

0 comments on commit 45e9a10

Please sign in to comment.