name: publish-site on: workflow_dispatch: push: branches: - main paths: - site/** - install/** - README.md - .gitea/workflows/publish-site.yml jobs: deploy-public-site: runs-on: self-hosted steps: - name: Checkout uses: actions/checkout@v4 - name: Resolve host and site dir shell: bash run: | set -euo pipefail mkdir -p .tmp PUBLIC_HOST="${PUBLIC_HOST:-}" if [ -z "$PUBLIC_HOST" ]; then PUBLIC_HOST="$(hostname -I 2>/dev/null | awk '{print $1}' || true)" fi if [ -z "$PUBLIC_HOST" ]; then PUBLIC_HOST="$(hostname)" fi SITE_DIR="/tmp/devops-skills-site" rm -rf "$SITE_DIR" mkdir -p "$SITE_DIR" cp -r site/* "$SITE_DIR"/ echo "PUBLIC_HOST=$PUBLIC_HOST" >> "$GITHUB_ENV" echo "SITE_DIR=$SITE_DIR" >> "$GITHUB_ENV" echo "SITE_URL=http://${PUBLIC_HOST}:8098/" >> "$GITHUB_ENV" - name: Deploy with docker or python fallback shell: bash run: | set -euo pipefail if command -v docker >/dev/null 2>&1 && docker info >/dev/null 2>&1; then docker rm -f devops-skills-site >/dev/null 2>&1 || true docker run -d \ --name devops-skills-site \ --restart unless-stopped \ -p 8098:80 \ -v "${SITE_DIR}":/usr/share/nginx/html:ro \ nginx:alpine >/dev/null echo "DEPLOY_MODE=docker" >> "$GITHUB_ENV" exit 0 fi PY_CMD="" if command -v python3 >/dev/null 2>&1; then PY_CMD="python3" elif command -v python >/dev/null 2>&1; then PY_CMD="python" else echo "Neither docker nor python available on runner." exit 1 fi pkill -f "http.server 8098" >/dev/null 2>&1 || true nohup "$PY_CMD" -m http.server 8098 --bind 0.0.0.0 --directory "${SITE_DIR}" >/tmp/devops-skills-site.log 2>&1 & sleep 2 echo "DEPLOY_MODE=python-http-server" >> "$GITHUB_ENV" - name: Verify local endpoint shell: bash run: | set -euo pipefail curl -fsS "http://127.0.0.1:8098/" >/dev/null echo "Site deployed" echo "Mode: ${DEPLOY_MODE}" echo "URL: ${SITE_URL}" - name: Output public url shell: bash run: | echo "Public URL: ${SITE_URL}"