name: Deploy on: workflow_dispatch: push: branches: - main paths: - 'src/**' - '.editorconfig' jobs: build: name: Build Docker Images runs-on: ubuntu-latest outputs: version: ${{ steps.version.outputs.version }} steps: - name: Checkout repository uses: actions/checkout@v6 - name: Login to Docker Hub uses: docker/login-action@v4 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_PASSWORD }} - name: Create version tag id: version run: echo "version=$(date +%Y.%m.%d.%H%M%S)" >> $GITHUB_OUTPUT - name: Build Docker image run: | WORKER_TAG=${{ secrets.DOCKERHUB_USERNAME }}/steves-bot:worker-${{ steps.version.outputs.version }} docker build -f src/StevesBot.Worker.Dockerfile -t $WORKER_TAG . docker push $WORKER_TAG WEBHOOK_TAG=${{ secrets.DOCKERHUB_USERNAME }}/steves-bot:webhook-${{ steps.version.outputs.version }} docker build -f src/StevesBot.Webhook.Dockerfile -t $WEBHOOK_TAG . docker push $WEBHOOK_TAG deploy: name: Deploy Docker Images runs-on: ubuntu-latest needs: build steps: - name: Checkout repository uses: actions/checkout@v6 - name: Copy compose file to server uses: appleboy/scp-action@v1 with: host: ${{ secrets.SSH_HOST }} username: ${{ secrets.SSH_USERNAME }} key: ${{ secrets.SSH_KEY }} source: src/compose.yml strip_components: 1 target: steves-bot - name: Run image on server uses: appleboy/ssh-action@v1 with: host: ${{ secrets.SSH_HOST }} username: ${{ secrets.SSH_USERNAME }} key: ${{ secrets.SSH_KEY }} script: | cd steves-bot echo 'WORKER_VERSION=worker-${{ needs.build.outputs.version }}' >> .env echo 'WEBHOOK_VERSION=webhook-${{ needs.build.outputs.version }}' >> .env echo 'DISCORD_API_URL=${{ vars.DISCORD_API_URL }}' >> .env echo 'DISCORD_APP_TOKEN=${{ secrets.DISCORD_APP_TOKEN }}' >> .env echo 'DISCORD_INTENTS=${{ vars.DISCORD_INTENTS }}' >> .env echo 'SEQ_SERVER_URL=${{ secrets.SEQ_SERVER_URL }}' >> .env echo 'SEQ_API_KEY_HEADER=${{ vars.SEQ_API_KEY_HEADER }}' >> .env echo 'SEQ_WORKER_API_KEY=${{ secrets.SEQ_WORKER_API_KEY }}' >> .env echo 'SEQ_WEBHOOK_API_KEY=${{ secrets.SEQ_WEBHOOK_API_KEY }}' >> .env echo 'YOUTUBE_BASE_URL=${{ vars.YOUTUBE_BASE_URL }}' >> .env echo 'YOUTUBE_API_KEY=${{ secrets.YOUTUBE_API_KEY }}' >> .env echo 'SUBSCRIPTION_CALLBACK_URL=${{ secrets.SUBSCRIPTION_CALLBACK_URL }}' >> .env echo 'SUBSCRIPTION_TOPIC_URL=${{ secrets.SUBSCRIPTION_TOPIC_URL }}' >> .env echo 'PUBSUB_BASE_URL=${{ vars.PUBSUB_BASE_URL }}' >> .env echo 'DISCORD_NOTIFICATION_CHANNEL_ID=${{ vars.DISCORD_NOTIFICATION_CHANNEL_ID }}' >> .env echo 'DISCORD_NOTIFICATION_MESSAGE_FORMAT=${{ vars.DISCORD_NOTIFICATION_MESSAGE_FORMAT }}' >> .env echo 'GEMINI_API_URL=${{ vars.GEMINI_API_URL }}' >> .env echo 'GEMINI_MODEL_ID=${{ secrets.GEMINI_MODEL_ID }}' >> .env echo 'GEMINI_API_KEY=${{ secrets.GEMINI_API_KEY }}' >> .env docker compose -f compose.yml down docker compose -f compose.yml pull docker compose -f compose.yml up -d --wait rm .env rm compose.yml