@@ -14,14 +14,17 @@ jobs:
1414 packages : write
1515
1616 env :
17- IMAGE_REPO : ghcr.io/${{ github.repository }}
1817 CONTAINER_NAME : saerok-dev
1918 COMPOSE_FILE_REMOTE : docker-compose.dev.yml
2019
2120 steps :
2221 - name : 🧾 Checkout
2322 uses : actions/checkout@v4
2423
24+ # GHCR 레포(org/repo)를 소문자로 정규화
25+ - name : 🔧 Normalize image repo
26+ run : echo "IMAGE_REPO=ghcr.io/${GITHUB_REPOSITORY,,}" >> $GITHUB_ENV
27+
2528 - name : 🔧 Set up Docker Buildx
2629 uses : docker/setup-buildx-action@v3
2730
4144 type=raw,value=dev-latest
4245 type=sha,format=long,prefix=dev-,suffix=
4346
47+ - name : 📌 Show image tags
48+ run : |
49+ echo "::group::Image tags"
50+ echo "${{ steps.meta.outputs.tags }}" | tr ' ' '\n'
51+ echo "::endgroup::"
52+ {
53+ echo "### 🏷️ Image tags";
54+ echo '${{ steps.meta.outputs.tags }}' | tr ' ' '\n' | sed 's/^/- /';
55+ } >> $GITHUB_STEP_SUMMARY
56+
4457 - name : 🏗️ Build and push image
4558 uses : docker/build-push-action@v6
4659 with :
5265 cache-from : type=registry,ref=${{ env.IMAGE_REPO }}:buildcache
5366 cache-to : type=registry,ref=${{ env.IMAGE_REPO }}:buildcache,mode=max
5467
68+ - name : ✅ Verify image pushed
69+ run : |
70+ echo "::notice::Pushed to $IMAGE_REPO (primary tag: dev-latest)"
71+ {
72+ echo "### ✅ Build & Push";
73+ echo "- Repo: \`$IMAGE_REPO\`";
74+ echo "- Primary tag: \`dev-latest\`";
75+ } >> $GITHUB_STEP_SUMMARY
76+
5577 - name : 🚀 Deploy on EC2 via SSH
5678 uses : appleboy/ssh-action@v1
5779 with :
85107 section "1) Stop legacy raw JAR if running"
86108 if pgrep -fa "java .* -jar" >/dev/null 2>&1; then
87109 banner "Stopping old raw JAR process..."
88- pkill -f "java .* -jar" || true
110+ set +e
111+ pkill -f "java .* -jar"
89112 for i in $(seq 1 20); do
90113 if pgrep -fa "java .* -jar" >/dev/null 2>&1; then
91114 echo "waiting old jar... ($i)"
94117 break
95118 fi
96119 done
120+ set -e
97121 else
98122 banner "No raw JAR process found."
99123 fi
@@ -105,15 +129,15 @@ jobs:
105129 pwd
106130 endsection
107131
108- section "3) Docker login (pull from GHCR)"
132+ section "3) Docker login (GHCR pull )"
109133 echo "${{ secrets.GHCR_TOKEN }}" | docker login ghcr.io -u "${{ secrets.GHCR_USERNAME }}" --password-stdin
110134 endsection
111135
112136 section "4) Generate ${COMPOSE_FILE_REMOTE}"
113137 cat > ${COMPOSE_FILE_REMOTE} <<'YAML'
114138 services:
115139 app:
116- image: ghcr.io/ ${{ github.repository }}:dev-latest
140+ image: ${{ env.IMAGE_REPO }}:dev-latest
117141 container_name: saerok-dev
118142 restart: always
119143 ports:
@@ -148,7 +172,8 @@ jobs:
148172 start_period: 60s
149173 YAML
150174 banner "Compose file written: ${COMPOSE_FILE_REMOTE}"
151- docker compose -f ${COMPOSE_FILE_REMOTE} config
175+ # 비밀 유출 방지: 서비스 이름만 표시
176+ docker compose -f ${COMPOSE_FILE_REMOTE} config --services || true
152177 endsection
153178
154179 section "5) Pull & Up (recreate)"
@@ -183,3 +208,27 @@ jobs:
183208 endsection
184209
185210 banner "✅ Deploy done"
211+
212+ - name : 🧾 Summary
213+ if : always()
214+ run : |
215+ {
216+ echo "## 🚀 Deploy Summary";
217+ echo "";
218+ echo "- Image repo: \`${{ env.IMAGE_REPO }}\`";
219+ echo "- Tags pushed:";
220+ echo '${{ steps.meta.outputs.tags }}' | tr ' ' '\n' | sed 's/^/ - /';
221+ echo "";
222+ echo "### Health";
223+ echo "- Target container: \`${{ env.CONTAINER_NAME }}\`";
224+ echo "- Health check: \`GET /health\`";
225+ echo "";
226+ echo "### Useful commands (on EC2)";
227+ echo "\`\`\`bash";
228+ echo "ssh ubuntu@${{ secrets.EC2_HOST }}";
229+ echo "cd ~/saerok";
230+ echo "docker compose -f ${COMPOSE_FILE_REMOTE} ps";
231+ echo "docker logs -f ${CONTAINER_NAME}";
232+ echo "curl -i localhost:8080/health";
233+ echo "\`\`\`";
234+ } >> $GITHUB_STEP_SUMMARY
0 commit comments