|
22 | 22 | - name: 🧾 Checkout |
23 | 23 | uses: actions/checkout@v4 |
24 | 24 |
|
| 25 | + - name: 🔧 Set up Docker Buildx |
| 26 | + uses: docker/setup-buildx-action@v3 |
| 27 | + |
25 | 28 | - name: 🔐 Log in to GHCR |
26 | 29 | uses: docker/login-action@v3 |
27 | 30 | with: |
|
38 | 41 | type=raw,value=dev-latest |
39 | 42 | type=sha,format=long,prefix=dev-,suffix= |
40 | 43 |
|
41 | | - - name: 📌 Show image tags to be pushed |
42 | | - run: | |
43 | | - echo "::group::Image tags" |
44 | | - echo "${{ steps.meta.outputs.tags }}" | tr ' ' '\n' |
45 | | - echo "::endgroup::" |
46 | | - { |
47 | | - echo "### 🏷️ Image tags"; |
48 | | - echo ''; |
49 | | - echo '${{ steps.meta.outputs.tags }}' | tr ' ' '\n' | sed 's/^/- /'; |
50 | | - } >> $GITHUB_STEP_SUMMARY |
51 | | -
|
52 | 44 | - name: 🏗️ Build and push image |
53 | 45 | uses: docker/build-push-action@v6 |
54 | 46 | with: |
|
57 | 49 | push: true |
58 | 50 | tags: ${{ steps.meta.outputs.tags }} |
59 | 51 | labels: ${{ steps.meta.outputs.labels }} |
60 | | - |
61 | | - - name: ✅ Verify image exists in GHCR |
62 | | - run: | |
63 | | - echo "::group::Verify GHCR image (dry check)" |
64 | | - echo "Primary tag: dev-latest" |
65 | | - echo "Repo: $IMAGE_REPO" |
66 | | - echo "::notice::If this step passed, push likely succeeded." |
67 | | - echo "::endgroup::" |
68 | | - { |
69 | | - echo "### ✅ Build & Push"; |
70 | | - echo "- Repo: \`$IMAGE_REPO\`"; |
71 | | - echo "- Primary tag: \`dev-latest\`"; |
72 | | - echo "- Status: **pushed**"; |
73 | | - } >> $GITHUB_STEP_SUMMARY |
| 52 | + cache-from: type=registry,ref=${{ env.IMAGE_REPO }}:buildcache |
| 53 | + cache-to: type=registry,ref=${{ env.IMAGE_REPO }}:buildcache,mode=max |
74 | 54 |
|
75 | 55 | - name: 🚀 Deploy on EC2 via SSH |
76 | 56 | uses: appleboy/ssh-action@v1 |
|
80 | 60 | key: ${{ secrets.EC2_SSH_PRIVATE_KEY }} |
81 | 61 | script: | |
82 | 62 | set -euxo pipefail |
83 | | -
|
84 | 63 | banner () { echo "::notice::$1"; } |
85 | 64 | section () { echo "::group::$1"; } |
86 | 65 | endsection () { echo "::endgroup::"; } |
|
90 | 69 | banner "Installing Docker..." |
91 | 70 | curl -fsSL https://get.docker.com | sh |
92 | 71 | sudo usermod -aG docker $USER || true |
93 | | - else |
94 | | - banner "Docker already installed." |
95 | 72 | fi |
96 | 73 | if ! docker compose version >/dev/null 2>&1; then |
97 | 74 | banner "Installing docker compose plugin..." |
|
100 | 77 | sudo curl -fsSL https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-linux-x86_64 \ |
101 | 78 | -o /usr/local/lib/docker/cli-plugins/docker-compose |
102 | 79 | sudo chmod +x /usr/local/lib/docker/cli-plugins/docker-compose |
103 | | - else |
104 | | - banner "Docker Compose already installed." |
105 | 80 | fi |
106 | 81 | docker --version |
107 | 82 | docker compose version |
@@ -173,9 +148,7 @@ jobs: |
173 | 148 | start_period: 60s |
174 | 149 | YAML |
175 | 150 | banner "Compose file written: ${COMPOSE_FILE_REMOTE}" |
176 | | - echo "----- compose config (normalized) -----" |
177 | 151 | docker compose -f ${COMPOSE_FILE_REMOTE} config |
178 | | - echo "--------------------------------------" |
179 | 152 | endsection |
180 | 153 |
|
181 | 154 | section "5) Pull & Up (recreate)" |
@@ -210,27 +183,3 @@ jobs: |
210 | 183 | endsection |
211 | 184 |
|
212 | 185 | banner "✅ Deploy done" |
213 | | -
|
214 | | - - name: 🧾 Add deploy summary |
215 | | - if: always() |
216 | | - run: | |
217 | | - { |
218 | | - echo "## 🚀 Deploy Summary"; |
219 | | - echo ""; |
220 | | - echo "- Image repo: \`${{ env.IMAGE_REPO }}\`"; |
221 | | - echo "- Tags pushed:"; |
222 | | - echo '${{ steps.meta.outputs.tags }}' | tr ' ' '\n' | sed 's/^/ - /'; |
223 | | - echo ""; |
224 | | - echo "### Health"; |
225 | | - echo "- Target container: \`${{ env.CONTAINER_NAME }}\`"; |
226 | | - echo "- Health check: \`GET /health\` (inside container)"; |
227 | | - echo ""; |
228 | | - echo "### Useful commands (on EC2)"; |
229 | | - echo "\`\`\`bash"; |
230 | | - echo "ssh ubuntu@${{ secrets.EC2_HOST }}"; |
231 | | - echo "cd ~/saerok"; |
232 | | - echo "docker compose -f ${COMPOSE_FILE_REMOTE} ps"; |
233 | | - echo "docker logs -f ${CONTAINER_NAME}"; |
234 | | - echo "curl -i localhost:8080/health"; |
235 | | - echo "\`\`\`"; |
236 | | - } >> $GITHUB_STEP_SUMMARY |
0 commit comments