Skip to content

Merge pull request #13 from som141/refactor/som/9 #26

Merge pull request #13 from som141/refactor/som/9

Merge pull request #13 from som141/refactor/som/9 #26

Workflow file for this run

name: Deploy Bot
on:
push:
branches: ["main"]
workflow_dispatch:
permissions:
contents: read
concurrency:
group: dis-deploy-main
cancel-in-progress: true
jobs:
build-and-deploy:
runs-on: ubuntu-latest
env:
APP_IMAGE_NAME: discord-bot
COMPOSE_PROJECT_NAME: discord-bot
DEPLOY_DIR: /home/ubuntu/dis-bot
steps:
- name: Checkout
uses: actions/checkout@v5
- name: Set up JDK 21
uses: actions/setup-java@v5
with:
distribution: temurin
java-version: "21"
cache: gradle
- name: Build with Gradle
run: |
chmod +x ./gradlew
./gradlew clean compileJava compileTestJava bootJar --no-daemon
- name: Build Docker image
run: |
docker build -t "${APP_IMAGE_NAME}:${{ github.sha }}" .
- name: Save Docker image to tar.gz
run: |
mkdir -p out
docker save "${APP_IMAGE_NAME}:${{ github.sha }}" | gzip > "out/${APP_IMAGE_NAME}-${{ github.sha }}.tar.gz"
- name: Create env file
env:
DISCORD_TOKEN: ${{ secrets.DISCORD_TOKEN }}
DISCORD_DEV_GUILD_ID: ${{ secrets.DISCORD_DEV_GUILD_ID }}
YOUTUBE_REFRESH_TOKEN: ${{ secrets.YOUTUBE_REFRESH_TOKEN }}
RABBITMQ_USERNAME: ${{ secrets.RABBITMQ_USERNAME }}
RABBITMQ_PASSWORD: ${{ secrets.RABBITMQ_PASSWORD }}
run: |
mkdir -p out
{
printf "APP_IMAGE_NAME=%s\n" "${APP_IMAGE_NAME}"
printf "APP_IMAGE_TAG=%s\n" "${{ github.sha }}"
printf "COMPOSE_PROJECT_NAME=%s\n" "${COMPOSE_PROJECT_NAME}"
printf "DISCORD_TOKEN=%s\n" "${DISCORD_TOKEN}"
printf "DISCORD_DEV_GUILD_ID=%s\n" "${DISCORD_DEV_GUILD_ID}"
printf "YOUTUBE_REFRESH_TOKEN=%s\n" "${YOUTUBE_REFRESH_TOKEN}"
printf "YOUTUBE_OAUTH_INIT=false\n"
printf "RABBITMQ_USERNAME=%s\n" "${RABBITMQ_USERNAME}"
printf "RABBITMQ_PASSWORD=%s\n" "${RABBITMQ_PASSWORD}"
} > out/.env.cicd
- name: Prepare SSH
env:
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
SSH_HOST: ${{ secrets.SSH_HOST }}
SSH_PORT: ${{ secrets.SSH_PORT }}
run: |
mkdir -p ~/.ssh
echo "${SSH_PRIVATE_KEY}" > ~/.ssh/id_ed25519
chmod 600 ~/.ssh/id_ed25519
ssh-keyscan -p "${SSH_PORT}" "${SSH_HOST}" >> ~/.ssh/known_hosts
- name: Ensure remote directory
env:
SSH_HOST: ${{ secrets.SSH_HOST }}
SSH_USER: ${{ secrets.SSH_USER }}
SSH_PORT: ${{ secrets.SSH_PORT }}
run: |
ssh -p "${SSH_PORT}" -i ~/.ssh/id_ed25519 "${SSH_USER}@${SSH_HOST}" \
"mkdir -p '${DEPLOY_DIR}/incoming' '${DEPLOY_DIR}/releases'"
- name: Upload files
env:
SSH_HOST: ${{ secrets.SSH_HOST }}
SSH_USER: ${{ secrets.SSH_USER }}
SSH_PORT: ${{ secrets.SSH_PORT }}
run: |
ssh -p "${SSH_PORT}" -i ~/.ssh/id_ed25519 "${SSH_USER}@${SSH_HOST}" \
"mkdir -p '${DEPLOY_DIR}/incoming/ops'"
scp -P "${SSH_PORT}" -i ~/.ssh/id_ed25519 \
"out/${APP_IMAGE_NAME}-${{ github.sha }}.tar.gz" \
"${SSH_USER}@${SSH_HOST}:${DEPLOY_DIR}/incoming/"
scp -P "${SSH_PORT}" -i ~/.ssh/id_ed25519 \
"out/.env.cicd" \
"${SSH_USER}@${SSH_HOST}:${DEPLOY_DIR}/incoming/.env.cicd"
scp -P "${SSH_PORT}" -i ~/.ssh/id_ed25519 \
"docker-compose.yml" \
"${SSH_USER}@${SSH_HOST}:${DEPLOY_DIR}/incoming/docker-compose.yml"
scp -P "${SSH_PORT}" -i ~/.ssh/id_ed25519 \
"deploy.sh" \
"${SSH_USER}@${SSH_HOST}:${DEPLOY_DIR}/deploy.sh"
scp -P "${SSH_PORT}" -i ~/.ssh/id_ed25519 \
"ops/replay-command-dlq.sh" \
"ops/smoke-check.sh" \
"${SSH_USER}@${SSH_HOST}:${DEPLOY_DIR}/incoming/ops/"
- name: Remote deploy
env:
SSH_HOST: ${{ secrets.SSH_HOST }}
SSH_USER: ${{ secrets.SSH_USER }}
SSH_PORT: ${{ secrets.SSH_PORT }}
run: |
ssh -p "${SSH_PORT}" -i ~/.ssh/id_ed25519 "${SSH_USER}@${SSH_HOST}" \
"chmod +x '${DEPLOY_DIR}/deploy.sh' && DEPLOY_DIR='${DEPLOY_DIR}' COMPOSE_PROJECT_NAME='${COMPOSE_PROJECT_NAME}' bash '${DEPLOY_DIR}/deploy.sh' '${{ github.sha }}'"