167 lines
5.5 KiB
YAML
167 lines
5.5 KiB
YAML
name: HealthSync Intelligence CI
|
||
|
||
on:
|
||
push:
|
||
branches: [ main, develop ]
|
||
paths:
|
||
- '**/*.py'
|
||
- 'requirements.txt'
|
||
- 'Dockerfile'
|
||
- 'deployment/**'
|
||
- '.github/workflows/intelligence-ci.yml'
|
||
pull_request:
|
||
branches: [ main, develop ]
|
||
paths:
|
||
- '**/*.py'
|
||
- 'requirements.txt'
|
||
- 'Dockerfile'
|
||
- 'deployment/**'
|
||
workflow_dispatch:
|
||
inputs:
|
||
version:
|
||
description: '배포할 버전 (예: 1.2.3)'
|
||
required: false
|
||
type: string
|
||
|
||
env:
|
||
ACR_REGISTRY: acrhealthsync01.azurecr.io
|
||
TEAM_ID: team1tier
|
||
PYTHON_VERSION: '3.11'
|
||
MANIFEST_REPO: TeamOneTier/HealthSync_Manifest
|
||
MANIFEST_BRANCH: main
|
||
|
||
jobs:
|
||
build-and-push:
|
||
runs-on: ubuntu-latest
|
||
steps:
|
||
- name: Checkout code
|
||
uses: actions/checkout@v4
|
||
|
||
- name: Install Azure CLI
|
||
run: |
|
||
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
|
||
|
||
- name: Azure 로그인 (Azure Login 액션 사용)
|
||
uses: azure/login@v1
|
||
with:
|
||
creds: ${{ secrets.AZURE_CREDENTIALS }}
|
||
|
||
- name: Show ACR Tags
|
||
run: |
|
||
az acr repository show-tags \
|
||
--name acrhealthsync01 \
|
||
--repository "${{ env.TEAM_ID }}/intelligence-service"
|
||
|
||
- name: Generate version
|
||
id: version
|
||
run: |
|
||
if [[ "$GITHUB_EVENT_NAME" == "workflow_dispatch" && -n "${{ github.event.inputs.version }}" ]]; then
|
||
VERSION="${{ github.event.inputs.version }}"
|
||
echo "🎯 Using manual version: $VERSION"
|
||
else
|
||
echo "🔍 Generating version automatically from ACR..."
|
||
|
||
REPO_NAME="${{ env.TEAM_ID }}/intelligence-service"
|
||
ACR_NAME="$(echo "${{ env.ACR_REGISTRY }}" | cut -d'.' -f1)"
|
||
|
||
if TAGS=$(az acr repository show-tags --name "$ACR_NAME" --repository "$REPO_NAME" --output tsv 2>/dev/null); then
|
||
if [[ -z "$TAGS" ]]; then
|
||
VERSION="1.0.0"
|
||
else
|
||
LATEST_VERSION=$(echo "$TAGS" | tr '\t' '\n' | grep -E '^[0-9]+\.[0-9]+\.[0-9]+$' | sort -t. -k1,1n -k2,2n -k3,3n | tail -1)
|
||
if [[ -z "$LATEST_VERSION" ]]; then
|
||
VERSION="1.0.0"
|
||
else
|
||
MAJOR=$(echo "$LATEST_VERSION" | cut -d'.' -f1)
|
||
MINOR=$(echo "$LATEST_VERSION" | cut -d'.' -f2)
|
||
PATCH=$(echo "$LATEST_VERSION" | cut -d'.' -f3)
|
||
VERSION="$MAJOR.$MINOR.$((PATCH + 1))"
|
||
fi
|
||
fi
|
||
else
|
||
VERSION="1.0.0"
|
||
fi
|
||
fi
|
||
|
||
echo "version=$VERSION" >> $GITHUB_OUTPUT
|
||
echo "🏷️ Final version for Intelligence: $VERSION"
|
||
|
||
- name: Set up Python ${{ env.PYTHON_VERSION }}
|
||
uses: actions/setup-python@v4
|
||
with:
|
||
python-version: ${{ env.PYTHON_VERSION }}
|
||
|
||
- name: Install dependencies
|
||
run: |
|
||
python -m pip install --upgrade pip
|
||
if [ -f requirements.txt ]; then
|
||
pip install -r requirements.txt
|
||
echo "✅ Python dependencies installed"
|
||
fi
|
||
|
||
- name: Login to ACR
|
||
run: |
|
||
echo ${{ secrets.ACR_PASSWORD }} | docker login ${{ env.ACR_REGISTRY }} \
|
||
--username ${{ secrets.ACR_USERNAME }} \
|
||
--password-stdin
|
||
|
||
- name: Build and Push Docker Image
|
||
run: |
|
||
IMAGE_TAG="${{ env.ACR_REGISTRY }}/${{ env.TEAM_ID }}/intelligence-service:${{ steps.version.outputs.version }}"
|
||
|
||
docker build \
|
||
--platform linux/amd64 \
|
||
--build-arg SERVICE_NAME=healthsync-intelligence \
|
||
--build-arg VERSION=${{ steps.version.outputs.version }} \
|
||
-t "$IMAGE_TAG" \
|
||
.
|
||
|
||
docker push "$IMAGE_TAG"
|
||
echo "✅ Pushed: $IMAGE_TAG"
|
||
|
||
- name: Checkout Manifest Repository
|
||
uses: actions/checkout@v4
|
||
with:
|
||
repository: ${{ env.MANIFEST_REPO }}
|
||
token: ${{ secrets.GIT_REPO_TOKEN }}
|
||
path: manifest-repo
|
||
|
||
- name: Update Manifest Deployment
|
||
run: |
|
||
cd manifest-repo
|
||
|
||
# Intelligence manifest 파일 경로 설정
|
||
MANIFEST_FILE="HealthSync_Intelligence/manifest/deployment/intelligence-service-deployment.yaml"
|
||
|
||
if [ ! -f "$MANIFEST_FILE" ]; then
|
||
echo "❌ Manifest file not found: $MANIFEST_FILE"
|
||
exit 1
|
||
fi
|
||
|
||
# 새로운 이미지 태그
|
||
NEW_IMAGE="${{ env.ACR_REGISTRY }}/${{ env.TEAM_ID }}/intelligence-service:${{ steps.version.outputs.version }}"
|
||
|
||
echo "🔄 Updating $MANIFEST_FILE with new image: $NEW_IMAGE"
|
||
|
||
# sed를 사용하여 image 태그 업데이트
|
||
sed -i "s|image: ${{ env.ACR_REGISTRY }}/${{ env.TEAM_ID }}/intelligence-service:.*|image: $NEW_IMAGE|g" "$MANIFEST_FILE"
|
||
|
||
echo "✅ Updated manifest file"
|
||
git diff "$MANIFEST_FILE"
|
||
|
||
- name: Commit and Push Manifest Changes
|
||
run: |
|
||
cd manifest-repo
|
||
|
||
git config --global user.name "github-actions[bot]"
|
||
git config --global user.email "github-actions[bot]@users.noreply.github.com"
|
||
|
||
git add .
|
||
git commit -m "🚀 Update intelligence-service image to ${{ steps.version.outputs.version }}" || {
|
||
echo "ℹ️ No changes to commit"
|
||
exit 0
|
||
}
|
||
|
||
git push origin ${{ env.MANIFEST_BRANCH }}
|
||
echo "✅ Manifest updated and pushed successfully"
|