diff --git a/.github/workflows/prod_deploy.yaml b/.github/workflows/prod_deploy.yaml new file mode 100644 index 0000000..0047066 --- /dev/null +++ b/.github/workflows/prod_deploy.yaml @@ -0,0 +1,41 @@ +## BINARY MODE, USE WITH THE GITHUB RUNNER BINARY INSTALLED ON THE SERVER + +name: Deploy to Server +run-name: Deploying onto server on ${{ github.ref }} +on: + push: + branches: + - main + - ci/actions +jobs: + deploy: + runs-on: [prod, self-hosted] + steps: + - name: Fetch and Diff Analysis + id: diff + run: | + cd ${{ secrets.PROD_DIR }} + git fetch origin main + CHANGES=$(git diff --name-only HEAD origin/main | cut -d/ -f1 | sort -u | tr '\n' ' ') + echo "dirs=$CHANGES" >> $GITHUB_OUTPUT + echo "Changed dirs: $CHANGES" + + - name: Sync Server Files + run: | + cd ${{ secrets.PROD_DIR }} + git reset --hard origin/main + echo "Server files synced with origin/main" + + - name: Deploy Services + run: | + cd ${{ secrets.PROD_DIR }} + for dir in ${{ steps.diff.outputs.dirs }}; do + if [ -d "$dir" ] && ([ -f "$dir/compose.yaml" ] || [ -f "$dir/docker-compose.yaml" ]); then + echo ">>> Deploying $dir" + cd "$dir" + DOCKER_BUILDKIT=1 BUILDKIT_PROGRESS=plain docker compose up -d --build --no-color + cd .. + else + echo ">>> Skipping $dir: no compose file found" + fi + done