a615b7ebfd
Closes leeworks-agents/api-company#5 (docs-site Astro scaffold) Closes leeworks-agents/api-company#9 (metrics instrumentation standard) Closes leeworks-agents/api-company#10 (Gitea Actions openapi aggregation pipeline) Closes leeworks-agents/api-company#11 (docs-site Flux HelmRelease) Closes leeworks-agents/api-company#12 (SEO blog posts x3) Closes leeworks-agents/api-company#13 (legal docs ToS/Privacy/AUP) Closes leeworks-agents/api-company#14 (DNS documentation) ## Changes ### docs/legal/ - terms-of-service.md — API usage, liability, account termination, governing law - privacy-policy.md — request log retention (90d), no PII sold, data sharing - acceptable-use-policy.md — rate limit abuse, scraping prohibition, resale ban ### docs/metrics-standard.md - Defines api_requests_total, api_response_duration_seconds, api_data_freshness_seconds - Fastify (TypeScript) and FastAPI (Python) reference middleware implementations - Prometheus scrape config and Grafana dashboard guidance ### docs/registry.md - Decision: use Gitea built-in container registry (no new infra) - Image naming convention, auth, Kubernetes imagePullSecrets, ingress config ### docs/dns.md - Required A records for all 6 subdomains - cert-manager ClusterIssuer and Ingress TLS examples - Verification commands and human-operator action items ### docs-site/ - Astro 4 + MDX + sitemap scaffold - Base layout with nav linking all APIs, blog, RapidAPI, status - Landing page with API cards - Per-API Redoc viewer pages (zip-enrichment, holidays, air-quality) - Blog index + 3 SEO blog posts (~1000 words each with JSON-LD) - Dockerfile (multi-stage: node build + nginx serve) - nginx.conf with gzip, caching, health endpoint ### flux/ - gitea-runner/: gitea-act-runner HelmRelease (org-scope, dind) - monitoring/: kube-prometheus-stack + Gatus HelmReleases - Prometheus with pod annotation scraping - Grafana at grafana.leeworks.dev with persistence - Gatus status page at status.leeworks.dev, 90-day retention - docs-site/: Deployment + Service + Ingress via raw chart - api-company-source/: GitRepository + Kustomization reference manifests - kustomization.yaml: root kustomize entry point (build validated) ### .gitea/workflows/build-docs.yaml - Aggregates openapi.yaml from zip-enrichment, holidays, air-quality repos - Builds Astro docs-site - Pushes image to registry.leeworks.dev/leeworks-agents/docs-site - Triggered on push to main, schedule daily 02:00 UTC, workflow_dispatch
86 lines
2.7 KiB
YAML
86 lines
2.7 KiB
YAML
# Gitea Actions: Aggregate openapi.yaml specs + trigger docs-site build
|
|
# Closes leeworks-agents/api-company#10
|
|
|
|
name: Build Docs Site
|
|
|
|
on:
|
|
push:
|
|
branches: [main]
|
|
workflow_dispatch:
|
|
schedule:
|
|
# Re-build daily at 02:00 UTC to pick up spec changes
|
|
- cron: '0 2 * * *'
|
|
|
|
jobs:
|
|
aggregate-specs:
|
|
name: Aggregate OpenAPI Specs
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout api-company
|
|
uses: actions/checkout@v4
|
|
with:
|
|
path: api-company
|
|
|
|
- name: Checkout zip-enrichment
|
|
uses: actions/checkout@v4
|
|
with:
|
|
repository: leeworks-agents/zip-enrichment
|
|
token: ${{ secrets.GITEA_TOKEN }}
|
|
path: zip-enrichment
|
|
|
|
- name: Checkout holidays
|
|
uses: actions/checkout@v4
|
|
with:
|
|
repository: leeworks-agents/holidays
|
|
token: ${{ secrets.GITEA_TOKEN }}
|
|
path: holidays
|
|
|
|
- name: Checkout air-quality
|
|
uses: actions/checkout@v4
|
|
with:
|
|
repository: leeworks-agents/air-quality
|
|
token: ${{ secrets.GITEA_TOKEN }}
|
|
path: air-quality
|
|
|
|
- name: Copy openapi.yaml specs into docs-site
|
|
run: |
|
|
mkdir -p api-company/docs-site/public/specs
|
|
cp zip-enrichment/openapi.yaml api-company/docs-site/public/specs/zip-enrichment.yaml
|
|
cp holidays/openapi.yaml api-company/docs-site/public/specs/holidays.yaml
|
|
cp air-quality/openapi.yaml api-company/docs-site/public/specs/air-quality.yaml
|
|
echo "Specs copied:"
|
|
ls -la api-company/docs-site/public/specs/
|
|
|
|
- name: Setup Node.js
|
|
uses: actions/setup-node@v4
|
|
with:
|
|
node-version: '20'
|
|
|
|
- name: Install docs-site dependencies
|
|
working-directory: api-company/docs-site
|
|
run: npm ci
|
|
|
|
- name: Build docs-site
|
|
working-directory: api-company/docs-site
|
|
run: npm run build
|
|
|
|
- name: Log in to container registry
|
|
run: |
|
|
echo "${{ secrets.GITEA_TOKEN }}" | docker login registry.leeworks.dev \
|
|
-u ${{ gitea.actor }} --password-stdin
|
|
|
|
- name: Build and push docs-site image
|
|
working-directory: api-company/docs-site
|
|
run: |
|
|
IMAGE="registry.leeworks.dev/leeworks-agents/docs-site"
|
|
SHA="${{ gitea.sha }}"
|
|
docker build -t "$IMAGE:$SHA" -t "$IMAGE:latest" .
|
|
docker push "$IMAGE:$SHA"
|
|
docker push "$IMAGE:latest"
|
|
echo "Pushed $IMAGE:$SHA"
|
|
|
|
- name: Trigger Flux reconcile (optional)
|
|
run: |
|
|
echo "Image pushed. Flux will detect new tag via image automation and re-deploy docs-site."
|
|
echo "If image automation is not configured, manually run: flux reconcile helmrelease docs-site -n docs-site"
|