Files
soroushasadi/.gitea/workflows/deploy.yml
T
soroush.asadi 4caba29984
deploy / deploy (push) Failing after 4s
Fix port conflict, healthcheck, and mirror routing
docker-compose.yml:
- Add top-level name: soroushasadi so Compose uses a stable project name
  regardless of which temp directory the runner checks out into. Without
  this, each run gets a different project name and the old container is not
  recognised as an orphan — it stays bound to port 3000 and the new
  container fails to start.
- Fix healthcheck: wget is not in node:20-slim; use Node 20's built-in
  fetch instead.
- Set NODE_IMAGE default to the Nexus docker-group mirror.

Workflows:
- Add GIT_SSL_NO_VERIFY=true to checkout steps (self-signed cert on
  git.soroushasadi.com).
- Pass NODE_IMAGE to build step in deploy.
- Add git remote remove guard to CI checkout (prevents failure on
  second run in the same workspace).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-31 13:40:36 +03:30

76 lines
1.9 KiB
YAML

name: deploy
on:
push:
branches:
- main
jobs:
deploy:
runs-on: self-hosted
env:
DOCKER_BUILDKIT: 1
COMPOSE_DOCKER_CLI_BUILD: 1
steps:
- name: Checkout
env:
TOKEN: ${{ github.token }}
REF: ${{ github.ref }}
GIT_SSL_NO_VERIFY: "true"
run: |
git init
git remote remove origin 2>/dev/null || true
git remote add origin "${{ github.server_url }}/${{ github.repository }}.git"
git config http.extraheader "Authorization: Bearer ${TOKEN}"
git fetch --depth=1 origin "${REF}"
git checkout FETCH_HEAD
- name: Create Environment File
run: |
cat > .env << EOF
ADMIN_PASSWORD=${{ secrets.ADMIN_PASSWORD }}
ADMIN_SESSION_SECRET=${{ secrets.ADMIN_SESSION_SECRET }}
RESEND_API_KEY=${{ secrets.RESEND_API_KEY }}
CONTACT_INBOX=${{ secrets.CONTACT_INBOX }}
CONTACT_FROM=${{ secrets.CONTACT_FROM }}
NPM_TOKEN=${{ secrets.NPM_TOKEN }}
EOF
- name: Build Container
env:
NODE_IMAGE: mirror.soroushasadi.com/repository/docker-group/node:20-slim
run: |
docker compose build
- name: Deploy
run: |
docker compose up -d --remove-orphans
- name: Wait For Health Check
run: |
for i in $(seq 1 30); do
STATUS=$(docker inspect \
--format='{{.State.Health.Status}}' \
soroushasadi-site 2>/dev/null)
echo "Status: $STATUS"
if [ "$STATUS" = "healthy" ]; then
echo "Deployment successful"
exit 0
fi
sleep 5
done
docker logs soroushasadi-site --tail 100
exit 1
- name: Cleanup
if: success()
run: |
docker image prune -f