From 9b2472ac58839678957ff94e76fe30b0eca28b04 Mon Sep 17 00:00:00 2001 From: Asep Haryana Saputra <90584806+MythEclipse@users.noreply.github.com> Date: Thu, 21 May 2026 12:10:30 +0000 Subject: [PATCH] feat(deploy): enhance deployment workflow with improved Docker setup and SSH actions --- .github/workflows/deploy.yml | 88 +++++++++++++++++++++--------------- 1 file changed, 51 insertions(+), 37 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 6d7e88e..a005045 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -10,59 +10,73 @@ permissions: contents: read packages: write +env: + IMAGE_NAME: ghcr.io/${{ github.repository_owner }}/bete + jobs: deploy: runs-on: ubuntu-latest steps: - - name: Checkout Repository + - name: Checkout repository uses: actions/checkout@v4 with: submodules: recursive + - name: Normalize image name + run: echo "IMAGE_NAME=${IMAGE_NAME,,}" >> "$GITHUB_ENV" + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + - name: Log in to GHCR - run: echo "${{ github.token }}" | docker login ghcr.io -u "${{ github.actor }}" --password-stdin + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} - name: Build and push Docker image - env: - IMAGE_NAME: ghcr.io/mytheclipse/bete:${{ github.sha }} - run: | - docker build -t "$IMAGE_NAME" . - docker push "$IMAGE_NAME" + uses: docker/build-push-action@v6 + with: + context: . + push: true + tags: | + ${{ env.IMAGE_NAME }}:latest + ${{ env.IMAGE_NAME }}:${{ github.sha }} - name: Deploy to VPS + uses: appleboy/ssh-action@v1.2.0 env: - VPS_HOST: ${{ secrets.VPS_HOST }} - VPS_USERNAME: ${{ secrets.VPS_USERNAME }} - VPS_SSH_KEY: ${{ secrets.VPS_SSH_KEY }} + IMAGE_NAME: ${{ env.IMAGE_NAME }} + GHCR_USERNAME: ${{ github.actor }} + GHCR_TOKEN: ${{ secrets.GITHUB_TOKEN }} ENV_FILE: ${{ secrets.ENV_FILE }} - GITHUB_TOKEN: ${{ github.token }} - GITHUB_ACTOR: ${{ github.actor }} - IMAGE_NAME: ghcr.io/mytheclipse/bete:${{ github.sha }} - run: | - # 1. Setup SSH Key - mkdir -p ~/.ssh - echo "$VPS_SSH_KEY" > ~/.ssh/id_ed25519 - chmod 600 ~/.ssh/id_ed25519 - ssh-keyscan -H "$VPS_HOST" >> ~/.ssh/known_hosts - - # 2. Pull image and start containers on VPS - ssh -i ~/.ssh/id_ed25519 -o StrictHostKeyChecking=no "$VPS_USERNAME@$VPS_HOST" " - set -e + with: + host: ${{ secrets.VPS_HOST }} + username: ${{ secrets.VPS_USERNAME }} + key: ${{ secrets.VPS_SSH_KEY }} + envs: IMAGE_NAME,GHCR_USERNAME,GHCR_TOKEN,ENV_FILE + script: | + set -eu + APP_DIR=/opt/imphenbot - mkdir -p \$APP_DIR - cd \$APP_DIR + mkdir -p "$APP_DIR" + cd "$APP_DIR" - echo \"$GITHUB_TOKEN\" | docker login ghcr.io -u \"$GITHUB_ACTOR\" --password-stdin + printf '%s\nIMAGE_NAME=%s:latest\n' "$ENV_FILE" "$IMAGE_NAME" > .env - printf '%s\nIMAGE_NAME=$IMAGE_NAME' \"$ENV_FILE\" > .env + cat > docker-compose.yml <<'EOF' + services: + bete: + image: ${IMAGE_NAME} + container_name: imphenbot + restart: unless-stopped + env_file: + - .env + EOF - if command -v docker-compose &> /dev/null; then - docker-compose down || true - docker-compose pull - docker-compose up -d - else - docker compose down || true - docker compose pull - docker compose up -d - fi - " + echo "$GHCR_TOKEN" | docker login ghcr.io -u "$GHCR_USERNAME" --password-stdin + + docker compose pull + docker compose up -d + docker image prune -f