Compare commits

...

8 Commits

Author SHA1 Message Date
agent-company d9a13d8c29 ci: add Gitea Actions workflow to validate kustomize build on every PR (Closes leeworks-agents/api-company#69)
Validate Flux manifests / kustomize-build (pull_request) Failing after 46s
2026-05-28 00:01:52 +00:00
AI-Manager 04102c75a4 Merge pull request 'chore: update STATUS.md — 2026-05-27 night triage cycle' (#68) from feature/status-update-2026-05-27-night into main
Build Docs Site / Aggregate OpenAPI Specs (push) Failing after 3m42s
2026-05-27 20:05:47 +00:00
agent-company 3860b44dc5 chore: update STATUS.md — 2026-05-27 night triage cycle
Triaged 2 new issues:
- #67: grafana.leeworks.dev DNS checklist — already covered in runbook (no code change)
- #66: Flux validation checklist — blocked on operator Phase 0 actions

kustomize build flux/ = PASS
2026-05-27 20:05:27 +00:00
AI-Manager 94631c18d0 Merge pull request 'feat: deploy External Secrets Operator (ESO) via Flux (issue #61)' (#65) from feature/issue-61-eso-flux into main
Build Docs Site / Aggregate OpenAPI Specs (push) Failing after 43s
2026-05-27 15:07:40 +00:00
AI-Manager c394c0c563 Merge pull request 'docs: add rapidapi-proxy-secret Step 10 to secrets-checklist (issue #60)' (#64) from feature/issue-60-rapidapi-proxy-secret-checklist into main
Build Docs Site / Aggregate OpenAPI Specs (push) Failing after 44s
Merge PR #64
2026-05-27 15:07:06 +00:00
AI-Manager 886d8e73d3 Merge pull request 'docs: add grafana.leeworks.dev as 7th DNS record (issue #62)' (#63) from feature/issue-62-dns-grafana into main
Build Docs Site / Aggregate OpenAPI Specs (push) Failing after 51s
2026-05-27 15:06:45 +00:00
agent-company a0620ea391 docs: add Step 10 rapidapi-proxy-secret to secrets-checklist.md
Add checklist item 10 and full detail section for the rapidapi-proxy-secret
Kubernetes secret that must be created in each API namespace (zip-enrichment,
holidays, air-quality) before the Phase 3 server middleware can validate
incoming RapidAPI requests.

Includes:
- Checklist item 10 in the summary list
- Full detail section with kubectl commands for all 3 namespaces
- Note about placeholder ExternalSecret manifests and ESO (issue #61)
- Updated dependency-order diagram

Closes leeworks-agents/api-company#60
2026-05-27 15:04:45 +00:00
agent-company 8902feada7 docs: add grafana.leeworks.dev as 7th DNS record in dns.md and operator-runbook
- dns.md: fix '6 A records' wording to '7 A records'
- dns.md: add grafana.leeworks.dev to status checklist and dig verification block
- operator-runbook.md: fix 'all six' to 'all seven', add registry.leeworks.dev
  row to Phase 4 DNS table, add dig verification loop

Closes leeworks-agents/api-company#62
2026-05-27 15:04:13 +00:00
5 changed files with 84 additions and 5 deletions
+21
View File
@@ -0,0 +1,21 @@
name: Validate Flux manifests
on:
pull_request:
branches: [main]
push:
branches: [main]
jobs:
kustomize-build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install kustomize
run: |
curl -sL "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh" | bash
sudo mv kustomize /usr/local/bin/
- name: kustomize build flux/
run: kustomize build flux/ > /dev/null
+8 -2
View File
@@ -1,6 +1,6 @@
# Company Status
_Last updated: 2026-05-27 (agent cycle — evening triage)_
_Last updated: 2026-05-27 (agent cycle — night triage)_
## APIs
| API | Spec | Code | Deployed | Listed on RapidAPI | Paying Users | MRR |
@@ -21,7 +21,13 @@ Legend: [x]=done, [~]=in-progress, [ ]=not started
- **API service manifests:** `flux/zip-enrichment/`, `flux/holidays/`, `flux/air-quality/` scaffolded (PR #48, closes #46)
- **Image automation:** `flux/image-automation/` — ImageRepository + ImagePolicy + ImageUpdateAutomation for all three APIs
## Completed This Cycle (2026-05-27 — Evening Triage)
## Completed This Cycle (2026-05-27 — Night Triage)
- **#67** — New issue triaged: grafana.leeworks.dev missing from DNS checklist. Confirmed `docs/operator-runbook.md` Phase 4 DNS table already lists 7 subdomains including grafana (added by #62). No code change needed; gated on operator DNS setup. Comment posted.
- **#66** — New issue triaged: Flux reconciliation validation checklist. Blocked on operator completing Phase 0 (#47, #2, #3, #4). `kustomize build flux/` = PASS confirmed. Comment posted.
- **No open PRs** — nothing to merge or review.
- **`kustomize build flux/` = PASS** — no regressions.
## Completed Previous Cycle (2026-05-27 — Evening Triage)
- **Triage pass** — all 15 open agent-ready issues reviewed; status comments posted on each.
- **No open PRs** — nothing to merge or review.
- **No new feature work** — all issues remain blocked on operator actions or cross-repo prerequisites.
+4 -2
View File
@@ -102,6 +102,7 @@ dig aqi.leeworks.dev +short
dig docs.leeworks.dev +short
dig status.leeworks.dev +short
dig registry.leeworks.dev +short
dig grafana.leeworks.dev +short
# Check TLS certificates (once services are deployed)
curl -v https://zip.leeworks.dev/health 2>&1 | grep -E "SSL|certificate|issuer"
@@ -125,7 +126,7 @@ The following actions require human operator access to the DNS provider:
1. Log into the DNS provider managing `leeworks.dev`
2. Find the cluster ingress IP: `kubectl get svc -n ingress-nginx ingress-nginx-controller`
3. Create/update the 6 A records listed in the table above
3. Create/update the 7 A records listed in the table above
4. Verify propagation: `dig +trace zip.leeworks.dev`
DNS propagation typically takes 560 minutes.
@@ -141,4 +142,5 @@ DNS propagation typically takes 560 minutes.
- [ ] `docs.leeworks.dev` → DNS record created
- [ ] `status.leeworks.dev` → DNS record created
- [ ] `registry.leeworks.dev` → DNS record created
- [ ] TLS certificates issued and valid for all 6 subdomains
- [ ] `grafana.leeworks.dev` → DNS record created
- [ ] TLS certificates issued and valid for all 7 subdomains
+11 -1
View File
@@ -188,7 +188,7 @@ kubectl create secret generic gitea-image-automation-token \
## Phase 4 — DNS for API services (issue #33)
Add DNS A records for all six leeworks.dev subdomains (all point to the same
Add DNS A records for all seven leeworks.dev subdomains (all point to the same
cluster ingress IP):
| Hostname | Target |
@@ -199,6 +199,16 @@ cluster ingress IP):
| `docs.leeworks.dev` | `<cluster ingress IP>` |
| `grafana.leeworks.dev` | `<cluster ingress IP>` |
| `status.leeworks.dev` | `<cluster ingress IP>` |
| `registry.leeworks.dev` | `<cluster ingress IP>` |
Verify DNS propagation:
```bash
for host in zip holidays aqi docs grafana status registry; do
echo -n "${host}.leeworks.dev: "
dig ${host}.leeworks.dev +short
done
```
cert-manager will obtain Let's Encrypt certificates automatically once DNS
propagates (typically minutes, up to 48 h).
+40
View File
@@ -18,6 +18,7 @@ Follow this list top-to-bottom; each step unblocks the next.
- [ ] 7. Add api-company Flux source + kustomization to 0xWheatyz/Talos — unblocks all GitOps reconciliation
- [ ] 8. `gitea-registry` (zip-enrichment, holidays, air-quality, docs-site) — imagePullSecret for pods pulling from `registry.leeworks.dev`
- [ ] 9. `gitea-image-automation-token` (flux-system) — write-scoped token for Flux ImageUpdateAutomation to push image-tag commits
- [ ] 10. `rapidapi-proxy-secret` (zip-enrichment, holidays, air-quality) — RapidAPI Proxy Secret for server-side request validation
---
@@ -155,6 +156,44 @@ Unblocks: Issue #2 (Flux reconciliation of all `flux/` manifests in this repo).
---
---
### 10. `rapidapi-proxy-secret` — RapidAPI Proxy Secret (per API namespace)
| Field | Value |
|-----------|-------|
| Name | `rapidapi-proxy-secret` |
| Namespaces | `zip-enrichment`, `holidays`, `air-quality` |
| Purpose | Every API service validates the `X-RapidAPI-Proxy-Secret` header on every route. Requests without a valid secret return HTTP 403. |
| Source | RapidAPI dashboard → API Settings → Security → **Proxy Secret** (generated after each API listing is created) |
| Unblocks | Phase 3 server middleware; API services will start but reject all traffic without this secret |
```bash
for NS in zip-enrichment holidays air-quality; do
kubectl create secret generic rapidapi-proxy-secret \
--namespace=$NS \
--from-literal=X-RapidAPI-Proxy-Secret=<value-from-rapidapi-dashboard>
done
```
**Source:** RapidAPI dashboard → select your API → Settings → Security → Proxy Secret
> **Note:** Placeholder `ExternalSecret` manifests are committed at
> `flux/zip-enrichment/externalsecret.yaml`, `flux/holidays/externalsecret.yaml`,
> and `flux/air-quality/externalsecret.yaml`. These will auto-sync this secret
> from the configured backend once the External Secrets Operator (ESO) is
> deployed (see issue #61). Until then, create manually using the commands above.
Verify:
```bash
for NS in zip-enrichment holidays air-quality; do
echo -n "$NS: "
kubectl get secret rapidapi-proxy-secret -n $NS -o jsonpath='{.data.X-RapidAPI-Proxy-Secret}' | base64 -d | wc -c
echo " chars"
done
```
## Dependency Order
```
@@ -166,6 +205,7 @@ Unblocks: Issue #2 (Flux reconciliation of all `flux/` manifests in this repo).
5 + 6 (GITEA_TOKEN + registry packages) → CI pushes images → API services deploy
8 (gitea-registry) → pods can pull images from registry.leeworks.dev → services start
9 (gitea-image-automation-token) → Flux ImageUpdateAutomation pushes tag-update commits
10 (rapidapi-proxy-secret × 3) → API server middleware validates RapidAPI requests → revenue enabled
```
Once all nine items are complete, the full stack (runner, registry, Prometheus, Grafana, Gatus, docs-site, three API services) reconciles automatically via FluxCD with no further manual steps.