diff --git a/.gitea/workflows/publish-site.yml b/.gitea/workflows/publish-site.yml new file mode 100644 index 0000000..2c3fc51 --- /dev/null +++ b/.gitea/workflows/publish-site.yml @@ -0,0 +1,88 @@ +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}"