name: Deploy (main) on: push: branches: ["main"] workflow_dispatch: jobs: build-and-deploy: runs-on: ubuntu-latest permissions: contents: read steps: - name: Checkout uses: actions/checkout@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Login to registry uses: docker/login-action@v3 with: registry: ${{ secrets.REGISTRY }} username: ${{ secrets.REGISTRY_USER }} password: ${{ secrets.REGISTRY_PASSWORD }} - name: Build and push uses: docker/build-push-action@v5 with: context: . push: true tags: | ${{ secrets.REGISTRY }}/${{ secrets.IMAGE_NAME }}:latest ${{ secrets.REGISTRY }}/${{ secrets.IMAGE_NAME }}:${{ github.sha }} - name: Deploy via SSH uses: appleboy/ssh-action@v1.0.3 with: host: ${{ secrets.SSH_HOST }} username: ${{ secrets.SSH_USER }} key: ${{ secrets.SSH_KEY }} port: ${{ secrets.SSH_PORT }} script: | cd ${{ secrets.DEPLOY_PATH }} cat << 'EOF' > .env ${{ secrets.DEPLOY_ENV_FILE }} EOF # Export variables from .env file set -a source .env set +a docker compose --env-file .env pull docker compose --env-file .env up -d