name: Build and Deploy on: push: branches: [main, decoupling] env: REGISTRY: registry.rose-ash.com:5000 COOP_DIR: /root/rose-ash jobs: build-and-deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Install tools run: | apt-get update && apt-get install -y --no-install-recommends openssh-client - name: Set up SSH env: SSH_KEY: ${{ secrets.DEPLOY_SSH_KEY }} DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }} run: | mkdir -p ~/.ssh echo "$SSH_KEY" > ~/.ssh/id_rsa chmod 600 ~/.ssh/id_rsa ssh-keyscan -H "$DEPLOY_HOST" >> ~/.ssh/known_hosts 2>/dev/null || true - name: Build and deploy changed apps env: DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }} run: | ssh "root@$DEPLOY_HOST" " cd ${{ env.COOP_DIR }} git fetch origin ${{ github.ref_name }} # Detect what changed since current HEAD CHANGED=\$(git diff --name-only HEAD origin/${{ github.ref_name }}) git reset --hard origin/${{ github.ref_name }} REBUILD_ALL=false if echo \"\$CHANGED\" | grep -q '^shared/'; then REBUILD_ALL=true fi if echo \"\$CHANGED\" | grep -q '^docker-compose.yml'; then REBUILD_ALL=true fi for app in blog market cart events federation account; do if [ \"\$REBUILD_ALL\" = true ] || echo \"\$CHANGED\" | grep -q \"^\$app/\"; then echo \"Building \$app...\" docker build \ --build-arg CACHEBUST=\$(date +%s) \ -f \$app/Dockerfile \ -t ${{ env.REGISTRY }}/\$app:latest \ -t ${{ env.REGISTRY }}/\$app:${{ github.sha }} \ . docker push ${{ env.REGISTRY }}/\$app:latest docker push ${{ env.REGISTRY }}/\$app:${{ github.sha }} else echo \"Skipping \$app (no changes)\" fi done source .env docker stack deploy -c docker-compose.yml coop echo 'Waiting for services to update...' sleep 10 docker stack services coop "