feat: add public site publish workflow for direct web access
Some checks failed
publish-site / deploy-public-site (push) Has been cancelled
Some checks failed
publish-site / deploy-public-site (push) Has been cancelled
This commit is contained in:
88
.gitea/workflows/publish-site.yml
Normal file
88
.gitea/workflows/publish-site.yml
Normal file
@@ -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}"
|
||||||
Reference in New Issue
Block a user