name: Docker Images on: push: branches: [main] paths: - 'src/food-market.api/**' - 'src/food-market.web/**' - 'src/food-market.application/**' - 'src/food-market.domain/**' - 'src/food-market.infrastructure/**' - 'src/food-market.shared/**' - 'deploy/**' - '.forgejo/workflows/docker.yml' workflow_dispatch: env: LOCAL_REGISTRY: 127.0.0.1:5001 jobs: api: name: API image runs-on: [self-hosted, linux] steps: - uses: actions/checkout@v4 - name: Build + push api env: SHA: ${{ github.sha }} run: | docker build -f deploy/Dockerfile.api \ -t $LOCAL_REGISTRY/food-market-api:$SHA \ -t $LOCAL_REGISTRY/food-market-api:latest . for tag in $SHA latest; do docker push $LOCAL_REGISTRY/food-market-api:$tag done web: name: Web image runs-on: [self-hosted, linux] steps: - uses: actions/checkout@v4 - name: Build + push web env: SHA: ${{ github.sha }} run: | docker build -f deploy/Dockerfile.web \ -t $LOCAL_REGISTRY/food-market-web:$SHA \ -t $LOCAL_REGISTRY/food-market-web:latest . for tag in $SHA latest; do docker push $LOCAL_REGISTRY/food-market-web:$tag done deploy-stage: name: Deploy stage runs-on: [self-hosted, linux] needs: [api, web] steps: - uses: actions/checkout@v4 - name: Write .env + copy compose (runner = stage host) env: SHA: ${{ github.sha }} PGPASS: ${{ secrets.STAGE_POSTGRES_PASSWORD }} run: | cat > /home/nns/food-market-stage/deploy/.env < /dev/null - name: Notify Telegram on failure if: failure() env: BOT: ${{ secrets.TELEGRAM_BOT_TOKEN }} CHAT: ${{ secrets.TELEGRAM_CHAT_ID }} SHA: ${{ github.sha }} run: | curl -sS -X POST "https://api.telegram.org/bot$BOT/sendMessage" \ --data-urlencode "chat_id=$CHAT" \ --data-urlencode "text=❌ stage deploy FAILED — ${SHA:0:7}" \ > /dev/null