generated from coulomb/repo-seed
Standardize public Gitea HTTPS endpoint
Some checks failed
Forge Runner Smoke / compatibility-smoke (push) Has been cancelled
Some checks failed
Forge Runner Smoke / compatibility-smoke (push) Has been cancelled
This commit is contained in:
2
Makefile
2
Makefile
@@ -84,7 +84,7 @@ gitea-deploy: ## Deploy / upgrade current Gitea forge runtime
|
|||||||
-f $(GITEA_REGISTRY_VALUES) \
|
-f $(GITEA_REGISTRY_VALUES) \
|
||||||
--namespace $(GITEA_NAMESPACE) --create-namespace
|
--namespace $(GITEA_NAMESPACE) --create-namespace
|
||||||
|
|
||||||
gitea-ingress-deploy: ## Apply the Gitea OCI registry ingress
|
gitea-ingress-deploy: ## Apply the public Gitea HTTPS ingress
|
||||||
kubectl apply -f $(GITEA_INGRESS)
|
kubectl apply -f $(GITEA_INGRESS)
|
||||||
|
|
||||||
gitea-status: ## Read-only status for current Gitea runtime and database
|
gitea-status: ## Read-only status for current Gitea runtime and database
|
||||||
|
|||||||
10
SCOPE.md
10
SCOPE.md
@@ -3,7 +3,7 @@
|
|||||||
This file defines what `railiance-forge` owns, when to use it, and where its
|
This file defines what `railiance-forge` owns, when to use it, and where its
|
||||||
boundaries stop.
|
boundaries stop.
|
||||||
|
|
||||||
Last reviewed: 2026-06-05
|
Last reviewed: 2026-06-13
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -116,15 +116,15 @@ The Fabric graph declarations for forge capabilities and edges live in
|
|||||||
- Status: active forge extraction.
|
- Status: active forge extraction.
|
||||||
- Implementation: repository contract, registry docs, initial operating
|
- Implementation: repository contract, registry docs, initial operating
|
||||||
contracts, deploy-capable Gitea files, and operator targets are present.
|
contracts, deploy-capable Gitea files, and operator targets are present.
|
||||||
- Stability: emerging but non-disruptive; files moved without any Helm deploy,
|
- Stability: emerging but now live-facing; forge owns the reviewed public
|
||||||
SOPS decryption, or Kubernetes apply.
|
Gitea HTTPS ingress for the web UI, package registry, and OCI registry.
|
||||||
- Usage: canonical reference point for forge and registry responsibilities
|
- Usage: canonical reference point for forge and registry responsibilities
|
||||||
currently transitioning out of `railiance-apps`.
|
currently transitioning out of `railiance-apps`.
|
||||||
|
|
||||||
Known starting point:
|
Known starting point:
|
||||||
|
|
||||||
- `railiance-forge` owns Gitea Helm values, registry overlays, ingress,
|
- `railiance-forge` owns Gitea Helm values, registry overlays, public HTTPS
|
||||||
operating contracts, and deploy/status entry points.
|
ingress, operating contracts, and deploy/status entry points.
|
||||||
- `railiance-apps` keeps app release ownership and transitional compatibility
|
- `railiance-apps` keeps app release ownership and transitional compatibility
|
||||||
wrappers for old Gitea commands.
|
wrappers for old Gitea commands.
|
||||||
- `railiance-enablement` owns the intent for delivery templates and developer
|
- `railiance-enablement` owns the intent for delivery templates and developer
|
||||||
|
|||||||
@@ -27,11 +27,11 @@ while app-release ownership remains there.
|
|||||||
|-------|--------------|--------------------|-------|
|
|-------|--------------|--------------------|-------|
|
||||||
| `helm/gitea-values.sops.yaml` | SOPS-encrypted Gitea Helm values. | Moved | Now `railiance-forge/helm/gitea-values.sops.yaml`; moved without decrypting. |
|
| `helm/gitea-values.sops.yaml` | SOPS-encrypted Gitea Helm values. | Moved | Now `railiance-forge/helm/gitea-values.sops.yaml`; moved without decrypting. |
|
||||||
| `helm/gitea-registry-values.yaml` | Non-secret overlay enabling Gitea package/container registry behavior. | Moved | Now `railiance-forge/helm/gitea-registry-values.yaml`. |
|
| `helm/gitea-registry-values.yaml` | Non-secret overlay enabling Gitea package/container registry behavior. | Moved | Now `railiance-forge/helm/gitea-registry-values.yaml`. |
|
||||||
| `manifests/gitea-ingress.yaml` | Registry-facing Gitea ingress for `/v2`. | Moved | Now `railiance-forge/manifests/gitea-ingress.yaml`; labels left unchanged until next reviewed deploy. |
|
| `manifests/gitea-ingress.yaml` | Public Gitea HTTPS ingress for `/`, `/api/packages`, and `/v2`. | Moved | Now `railiance-forge/manifests/gitea-ingress.yaml`; labels reconciled to forge ownership during the reviewed public-root deploy. |
|
||||||
| `releases/gitea/values.yaml` | Legacy/plain Gitea release values reference. | Moved | Now `railiance-forge/releases/gitea/values.yaml`; review before using as active deploy input. |
|
| `releases/gitea/values.yaml` | Legacy/plain Gitea release values reference. | Moved | Now `railiance-forge/releases/gitea/values.yaml`; review before using as active deploy input. |
|
||||||
| `Makefile` variables `GITEA_*` | Gitea release/chart/value/ingress defaults. | Moved | Forge owns canonical variables; apps keeps only release/name compatibility variables. |
|
| `Makefile` variables `GITEA_*` | Gitea release/chart/value/ingress defaults. | Moved | Forge owns canonical variables; apps keeps only release/name compatibility variables. |
|
||||||
| `make gitea-deploy` | Deploy/upgrade current Gitea release. | Moved | Forge owns target; apps delegates during compatibility window. |
|
| `make gitea-deploy` | Deploy/upgrade current Gitea release. | Moved | Forge owns target; apps delegates during compatibility window. |
|
||||||
| `make gitea-ingress-deploy` | Apply Gitea registry ingress. | Moved | Forge owns target; apps delegates during compatibility window. |
|
| `make gitea-ingress-deploy` | Apply public Gitea HTTPS ingress. | Moved | Forge owns target; apps delegates during compatibility window. |
|
||||||
| `make gitea-status` | Check Gitea pod/service/ingress and `gitea-db` status. | Moved | Forge owns target; apps delegates during compatibility window. |
|
| `make gitea-status` | Check Gitea pod/service/ingress and `gitea-db` status. | Moved | Forge owns target; apps delegates during compatibility window. |
|
||||||
|
|
||||||
## Copy With Compatibility Pointer
|
## Copy With Compatibility Pointer
|
||||||
|
|||||||
@@ -29,6 +29,10 @@ Collected from `/home/worsch/railiance-forge` on 2026-06-07.
|
|||||||
|
|
||||||
Public endpoint checks from this environment:
|
Public endpoint checks from this environment:
|
||||||
|
|
||||||
|
Historical note: the root/API `404` results below were collected before
|
||||||
|
`FORGE-WP-0004` made `https://gitea.coulomb.social/` the standard public Gitea
|
||||||
|
web endpoint on 2026-06-13.
|
||||||
|
|
||||||
| Endpoint | Result | Interpretation |
|
| Endpoint | Result | Interpretation |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| `https://gitea.coulomb.social/` | HTTP `404` | Public root route is not a useful Gitea web health signal here. |
|
| `https://gitea.coulomb.social/` | HTTP `404` | Public root route is not a useful Gitea web health signal here. |
|
||||||
|
|||||||
@@ -6,15 +6,16 @@ Gitea Helm and manifest files now live in this repo.
|
|||||||
|
|
||||||
## Registry Target
|
## Registry Target
|
||||||
|
|
||||||
Use `gitea.coulomb.social` as the approved registry host. The `/v2` ingress is
|
Use `gitea.coulomb.social` as the approved forge and registry host. The public
|
||||||
live as of 2026-05-15 and returns the OCI registry authentication challenge over
|
ingress serves the Gitea web route at `https://gitea.coulomb.social/`, the OCI
|
||||||
HTTPS.
|
registry route at `/v2`, and the Python package route at `/api/packages`. The
|
||||||
|
`/v2` route returns the OCI registry authentication challenge over HTTPS.
|
||||||
|
|
||||||
Registry-specific Gitea settings are carried in
|
Registry-specific Gitea settings are carried in
|
||||||
`helm/gitea-registry-values.yaml`, a non-secret overlay applied after the SOPS
|
`helm/gitea-registry-values.yaml`, a non-secret overlay applied after the SOPS
|
||||||
values file by `make gitea-deploy`. It explicitly enables packages, permits
|
values file by `make gitea-deploy`. It explicitly enables packages, permits
|
||||||
container and PyPI uploads without an app-level size cap, clears globally
|
container and PyPI uploads without an app-level size cap, clears globally
|
||||||
disabled repo units, and moves `ROOT_URL` to the HTTPS host.
|
disabled repo units, and keeps `ROOT_URL` on the HTTPS host.
|
||||||
|
|
||||||
Image names should use the Gitea owner and package path:
|
Image names should use the Gitea owner and package path:
|
||||||
|
|
||||||
|
|||||||
@@ -8,14 +8,15 @@ Gitea package support is enabled by `helm/gitea-registry-values.yaml`. That
|
|||||||
overlay is applied after the encrypted base values by `make gitea-deploy` and
|
overlay is applied after the encrypted base values by `make gitea-deploy` and
|
||||||
enables both container packages and Python packages.
|
enables both container packages and Python packages.
|
||||||
|
|
||||||
The public ingress intentionally exposes `/api/packages` and `/v2` only. The
|
The public ingress exposes the Gitea web route at
|
||||||
package route is required for Python package upload and install traffic; the
|
`https://gitea.coulomb.social/`, the Python package route at `/api/packages`,
|
||||||
general Gitea web UI and API remain outside this ingress manifest.
|
and the OCI registry route at `/v2`. The standard endpoint is HTTPS; if package
|
||||||
|
simple-index pages render `http://gitea.coulomb.social/...` artifact links,
|
||||||
|
reconcile the Gitea Helm release with `helm/gitea-registry-values.yaml` so
|
||||||
|
`ROOT_URL` is restored to the HTTPS host.
|
||||||
|
|
||||||
The live simple-index pages currently render package artifact links with
|
Status on 2026-06-13: the root web route returns `200`, live `ROOT_URL` is
|
||||||
`http://gitea.coulomb.social/...`. `uv lock` and clean `pip install` checks work
|
`https://gitea.coulomb.social/`, and package artifact links render HTTPS URLs.
|
||||||
against the public package route, but the next Gitea config reconciliation
|
|
||||||
should align `ROOT_URL` with the HTTPS package endpoint.
|
|
||||||
|
|
||||||
## Python Packages
|
## Python Packages
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# Forge Observability And Operating Evidence
|
# Forge Observability And Operating Evidence
|
||||||
|
|
||||||
Last reviewed: 2026-06-07
|
Last reviewed: 2026-06-13
|
||||||
|
|
||||||
Status: contract v1. This document defines checks, evidence, and future
|
Status: contract v1. This document defines checks, evidence, and future
|
||||||
monitoring expectations. It does not authorize a live monitoring deployment,
|
monitoring expectations. It does not authorize a live monitoring deployment,
|
||||||
@@ -44,7 +44,7 @@ Railiance cluster.
|
|||||||
Additional checks should stay read-only:
|
Additional checks should stay read-only:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Web/API health: expect HTTP 200/3xx for the web route, not 5xx.
|
# Web/API health: expect HTTP 200/3xx for the web route, not 404/5xx.
|
||||||
curl -fsSI https://gitea.coulomb.social/
|
curl -fsSI https://gitea.coulomb.social/
|
||||||
curl -fsS https://gitea.coulomb.social/api/v1/version
|
curl -fsS https://gitea.coulomb.social/api/v1/version
|
||||||
|
|
||||||
|
|||||||
@@ -6,8 +6,8 @@ metadata:
|
|||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: gitea
|
app.kubernetes.io/name: gitea
|
||||||
app.kubernetes.io/instance: gitea
|
app.kubernetes.io/instance: gitea
|
||||||
app.kubernetes.io/part-of: railiance-apps
|
app.kubernetes.io/part-of: railiance-forge
|
||||||
railiance/component: gitea-registry
|
railiance/component: gitea-public-endpoint
|
||||||
annotations:
|
annotations:
|
||||||
cert-manager.io/cluster-issuer: letsencrypt-prod
|
cert-manager.io/cluster-issuer: letsencrypt-prod
|
||||||
spec:
|
spec:
|
||||||
@@ -30,6 +30,13 @@ spec:
|
|||||||
name: gitea
|
name: gitea
|
||||||
port:
|
port:
|
||||||
number: 3000
|
number: 3000
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: gitea
|
||||||
|
port:
|
||||||
|
number: 3000
|
||||||
tls:
|
tls:
|
||||||
- hosts:
|
- hosts:
|
||||||
- gitea.coulomb.social
|
- gitea.coulomb.social
|
||||||
|
|||||||
116
workplans/FORGE-WP-0004-public-gitea-root-endpoint.md
Normal file
116
workplans/FORGE-WP-0004-public-gitea-root-endpoint.md
Normal file
@@ -0,0 +1,116 @@
|
|||||||
|
---
|
||||||
|
id: FORGE-WP-0004
|
||||||
|
type: workplan
|
||||||
|
title: "Standard public Gitea HTTPS root endpoint"
|
||||||
|
domain: railiance
|
||||||
|
repo: railiance-forge
|
||||||
|
status: finished
|
||||||
|
owner: codex
|
||||||
|
topic_slug: railiance
|
||||||
|
planning_priority: high
|
||||||
|
created: "2026-06-13"
|
||||||
|
updated: "2026-06-13"
|
||||||
|
state_hub_workstream_id: "10a11cbb-9c2b-496b-af6a-dc934aeee68b"
|
||||||
|
---
|
||||||
|
|
||||||
|
# Standard public Gitea HTTPS root endpoint
|
||||||
|
|
||||||
|
## Context
|
||||||
|
|
||||||
|
Before this workplan, `https://gitea.coulomb.social/` returned `404` because
|
||||||
|
the forge-owned ingress only routed package and OCI registry paths. The Helm
|
||||||
|
overlay already declared `ROOT_URL: "https://gitea.coulomb.social/"`, so the
|
||||||
|
deployment standard now makes the public Gitea web route, Python package route,
|
||||||
|
and OCI registry route part of the same forge-owned endpoint contract.
|
||||||
|
|
||||||
|
## T01 - Set the public endpoint contract
|
||||||
|
|
||||||
|
```task
|
||||||
|
id: FORGE-WP-0004-T01
|
||||||
|
status: done
|
||||||
|
priority: high
|
||||||
|
state_hub_task_id: "f0125038-cf5b-4c8b-a90f-c3f3bedfc386"
|
||||||
|
```
|
||||||
|
|
||||||
|
Define the standard public Gitea endpoint as:
|
||||||
|
|
||||||
|
- `https://gitea.coulomb.social/` for the web UI and normal Gitea web/API
|
||||||
|
routes;
|
||||||
|
- `https://gitea.coulomb.social/api/packages/...` for package publication and
|
||||||
|
installation;
|
||||||
|
- `https://gitea.coulomb.social/v2/` for OCI registry clients.
|
||||||
|
|
||||||
|
This explicitly supersedes the temporary registry-only ingress posture.
|
||||||
|
|
||||||
|
## T02 - Update forge-owned deployment files
|
||||||
|
|
||||||
|
```task
|
||||||
|
id: FORGE-WP-0004-T02
|
||||||
|
status: done
|
||||||
|
priority: high
|
||||||
|
state_hub_task_id: "225707ce-10b5-41e3-809d-55f4b3a52c80"
|
||||||
|
```
|
||||||
|
|
||||||
|
Add a `/` catch-all path to `manifests/gitea-ingress.yaml`, keep the explicit
|
||||||
|
`/api/packages` and `/v2` paths visible for operator clarity, and reconcile the
|
||||||
|
ingress labels from the earlier `railiance-apps` extraction to
|
||||||
|
`railiance-forge` ownership.
|
||||||
|
|
||||||
|
Done when the manifest and operator docs describe the root web endpoint as the
|
||||||
|
standard deployment shape.
|
||||||
|
|
||||||
|
Completed on 2026-06-13. The ingress manifest now routes `/`, `/api/packages`,
|
||||||
|
and `/v2` to the Gitea service, and the ingress labels identify
|
||||||
|
`railiance-forge` ownership. Forge docs and operator target wording now describe
|
||||||
|
the public endpoint as web, package, and OCI registry surface rather than a
|
||||||
|
registry-only ingress.
|
||||||
|
|
||||||
|
## T03 - Apply and verify the live endpoint
|
||||||
|
|
||||||
|
```task
|
||||||
|
id: FORGE-WP-0004-T03
|
||||||
|
status: done
|
||||||
|
priority: high
|
||||||
|
state_hub_task_id: "9d1cd8e6-80da-4ded-9ae7-ddfeb64af0ae"
|
||||||
|
```
|
||||||
|
|
||||||
|
Apply the reviewed ingress and, if needed, reconcile the Gitea Helm release so
|
||||||
|
`ROOT_URL` remains the HTTPS host. Verify:
|
||||||
|
|
||||||
|
- root URL returns `200` or an expected redirect;
|
||||||
|
- `/api/v1/version` is reachable;
|
||||||
|
- `/v2/` still returns an OCI authentication challenge;
|
||||||
|
- the package-specific PyPI simple index for `issue-core` still returns `200`.
|
||||||
|
|
||||||
|
Completed on 2026-06-13. `kubectl apply -f manifests/gitea-ingress.yaml`
|
||||||
|
configured the public root path. A pinned Helm `--reuse-values` upgrade kept
|
||||||
|
chart `gitea-12.5.0` and app `1.25.4` while overriding only
|
||||||
|
`gitea.config.server.ROOT_URL=https://gitea.coulomb.social/`; Gitea rolled to
|
||||||
|
Helm revision 7.
|
||||||
|
|
||||||
|
Verification evidence:
|
||||||
|
|
||||||
|
- `https://gitea.coulomb.social/` returned `200`;
|
||||||
|
- `https://gitea.coulomb.social/api/v1/version` returned `200` with
|
||||||
|
`{"version":"1.25.4"}`;
|
||||||
|
- `https://gitea.coulomb.social/v2/` returned `401`, preserving the OCI auth
|
||||||
|
challenge;
|
||||||
|
- `https://gitea.coulomb.social/api/packages/coulomb/pypi/simple/issue-core/`
|
||||||
|
returned `200`;
|
||||||
|
- live `ROOT_URL` is `https://gitea.coulomb.social/`;
|
||||||
|
- the Gitea web UI bootstrap and `issue-core==0.2.0` package artifact links now
|
||||||
|
render HTTPS URLs.
|
||||||
|
|
||||||
|
## T04 - Sync State Hub and record evidence
|
||||||
|
|
||||||
|
```task
|
||||||
|
id: FORGE-WP-0004-T04
|
||||||
|
status: done
|
||||||
|
priority: medium
|
||||||
|
state_hub_task_id: "ad4b9574-89fd-4ced-8dde-3b0d5a9a555a"
|
||||||
|
```
|
||||||
|
|
||||||
|
Run State Hub consistency sync for `railiance-forge` and record a progress note
|
||||||
|
with non-secret verification evidence.
|
||||||
|
|
||||||
|
Completed on 2026-06-13 after the live endpoint verification.
|
||||||
Reference in New Issue
Block a user