Skip to content

Commit ce607ec

Browse files
authored
Merge pull request #38 from modern-python/docs/migrate-to-gh-pages
docs: migrate to GitHub Pages (httpware.modern-python.org)
2 parents 8cf01be + ec3ace5 commit ce607ec

13 files changed

Lines changed: 781 additions & 24 deletions

.github/workflows/docs.yml

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
name: Deploy Docs
2+
3+
on:
4+
push:
5+
branches: [main]
6+
paths:
7+
- "docs/**"
8+
- "mkdocs.yml"
9+
- ".github/workflows/docs.yml"
10+
workflow_dispatch:
11+
12+
concurrency:
13+
group: docs-deploy
14+
cancel-in-progress: true
15+
16+
permissions:
17+
contents: write
18+
19+
jobs:
20+
deploy:
21+
runs-on: ubuntu-latest
22+
steps:
23+
- uses: actions/checkout@v4
24+
with:
25+
fetch-depth: 0
26+
- uses: extractions/setup-just@v2
27+
- uses: astral-sh/setup-uv@v3
28+
- run: just docs-deploy

.readthedocs.yaml

Lines changed: 0 additions & 13 deletions
This file was deleted.

CONTRIBUTING.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Contributing
22

33
The contributing guide is published as part of the project documentation:
4-
**https://httpware.readthedocs.io/en/latest/dev/contributing/**
4+
**https://httpware.modern-python.org/dev/contributing/**
55

66
Source: [`docs/dev/contributing.md`](docs/dev/contributing.md).

Justfile

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,8 @@ publish:
2929
uv version $GITHUB_REF_NAME
3030
uv build
3131
uv publish --token $PYPI_TOKEN
32+
33+
# Force-pushes built site to gh-pages; CI runs this on push to main.
34+
# Manual invocation from a stale checkout will roll the live site back.
35+
docs-deploy:
36+
uvx --with-requirements docs/requirements.txt mkdocs gh-deploy --force

docs/CNAME

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
httpware.modern-python.org

docs/recipes/modern-di.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Wiring `AsyncClient` into `modern-di`
22

3-
If you wire your app's dependencies with [`modern-di`](https://modern-di.readthedocs.io/) and want connection-pool teardown and middleware composition to flow through the container's lifecycle, this is the bridge. Both libraries ship under the [`modern-python`](https://github.com/modern-python) org.
3+
If you wire your app's dependencies with [`modern-di`](https://modern-di.modern-python.org/) and want connection-pool teardown and middleware composition to flow through the container's lifecycle, this is the bridge. Both libraries ship under the [`modern-python`](https://github.com/modern-python) org.
44

55
## The minimal wire-up
66

@@ -34,7 +34,7 @@ Breaking that down:
3434

3535
A common first instinct here is `finalizer=lambda c: c.aclose()`. **That does not work** — the lambda itself is sync, so `modern-di` calls it synchronously and discards the returned coroutine unawaited. The underlying connection pool leaks. Pass the unbound async method directly, or wrap in `async def`.
3636

37-
See the [`modern-di` factories docs](https://modern-di.readthedocs.io/providers/factories/) for the broader `CacheSettings` story (scopes, `clear_cache`, sync vs async finalizers).
37+
See the [`modern-di` factories docs](https://modern-di.modern-python.org/providers/factories/) for the broader `CacheSettings` story (scopes, `clear_cache`, sync vs async finalizers).
3838

3939
## Adding a second backend hits a type collision
4040

@@ -135,4 +135,4 @@ Each cached singleton owns its own `AsyncBulkhead` and `AsyncRetry` state — wh
135135
- **[Quick-Start](../index.md)** — the base `AsyncClient` API.
136136
- **[Middleware guide](../middleware.md)** — what `AsyncBulkhead` and `AsyncRetry` are doing in `kwargs[middleware]`.
137137
- **[Resilience reference](../resilience.md)** — every parameter on `AsyncRetry`, `RetryBudget`, `AsyncBulkhead`.
138-
- **[`modern-di` factories](https://modern-di.readthedocs.io/providers/factories/)**`CacheSettings`, scopes, the broader provider story.
138+
- **[`modern-di` factories](https://modern-di.modern-python.org/providers/factories/)**`CacheSettings`, scopes, the broader provider story.

mkdocs.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
site_name: httpware
2-
site_url: https://httpware.readthedocs.io/
2+
site_url: https://httpware.modern-python.org
33
repo_url: https://github.com/modern-python/httpware
44
docs_dir: docs
55
edit_uri: edit/main/docs/

planning/engineering.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ Post-pivot, the roadmap has three categories. Topic slugs in `planning/specs/` a
142142
- **v0.8.0:** sync `Client` with full feature parity (middleware chain, decoder seam, `Retry`, `Bulkhead`, `stream()`); async surface renamed to `Async*`/`async_*` prefix; `attempt_timeout=` removed from `AsyncRetry`. Breaking release for every public async middleware import.
143143
- **Epic 4 — Streaming: SHIPPED in v0.5.** `AsyncClient.stream()` context manager + Retry refuses streamed-body requests. See [`planning/archive/specs/2026-06-05-streaming-design.md`](archive/specs/2026-06-05-streaming-design.md) and [`planning/archive/plans/2026-06-05-streaming-plan.md`](archive/plans/2026-06-05-streaming-plan.md).
144144
- **Epic 5 — Observability: SHIPPED in v0.6** — re-scoped from the original 4-story plan. `Retry` and `Bulkhead` emit operational events via stdlib `logging` + opt-in OpenTelemetry span events. Stories `5-1` (Layer 1 middleware hooks) and `5-4` (standalone OTel middleware) RETIRED — `opentelemetry-instrumentation-httpx` already covers transport-level tracing; a separate httpware middleware would duplicate it. See [`planning/archive/specs/2026-06-05-observability-design.md`](archive/specs/2026-06-05-observability-design.md) and [`planning/archive/plans/2026-06-05-observability-plan.md`](archive/plans/2026-06-05-observability-plan.md).
145-
- **Epic 6 — Ship v1.0: SHIPPED.** `6-2` docs site live at <https://httpware.readthedocs.io/> (mkdocs-material, hand-written content only, auto-publishing from `main`). Stories `6-3` (benchmarks) and `6-5` (Trusted Publishers + Sigstore release flow) RETIRED — neither carries enough value to maintain. Tag-driven release via the existing `publish.yml` workflow stays as-is.
145+
- **Epic 6 — Ship v1.0: SHIPPED.** `6-2` docs site live at <https://httpware.modern-python.org/> (mkdocs-material, hand-written content only, auto-publishing from `main`). Stories `6-3` (benchmarks) and `6-5` (Trusted Publishers + Sigstore release flow) RETIRED — neither carries enough value to maintain. Tag-driven release via the existing `publish.yml` workflow stays as-is.
146146
- **Carry-forward decoder:** `1-6` msgspec decoder via extras — second `ResponseDecoder` adapter, already implemented; verified surviving in the pivot.
147147
- **Middleware protocol:** `2-1` and `2-2` already implemented in the pivot (protocol, chain, phase decorators).
148148

planning/plans/2026-06-06-modern-di-recipe-plan.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ Write `docs/recipes/modern-di.md` with the full content below.
170170
````markdown
171171
# Wiring `AsyncClient` into `modern-di`
172172

173-
If you wire your app's dependencies with [`modern-di`](https://modern-di.readthedocs.io/) and want connection-pool teardown and middleware composition to flow through the container's lifecycle, this is the bridge. Both libraries ship under the [`modern-python`](https://github.com/modern-python) org.
173+
If you wire your app's dependencies with [`modern-di`](https://modern-di.modern-python.org/) and want connection-pool teardown and middleware composition to flow through the container's lifecycle, this is the bridge. Both libraries ship under the [`modern-python`](https://github.com/modern-python) org.
174174

175175
## The minimal wire-up
176176

@@ -204,7 +204,7 @@ Breaking that down:
204204

205205
A common first instinct here is `finalizer=lambda c: c.aclose()`. **That does not work** — the lambda itself is sync, so `modern-di` calls it synchronously and discards the returned coroutine unawaited. The underlying connection pool leaks. Pass the unbound async method directly, or wrap in `async def`.
206206

207-
See the [`modern-di` factories docs](https://modern-di.readthedocs.io/providers/factories/) for the broader `CacheSettings` story (scopes, `clear_cache`, sync vs async finalizers).
207+
See the [`modern-di` factories docs](https://modern-di.modern-python.org/providers/factories/) for the broader `CacheSettings` story (scopes, `clear_cache`, sync vs async finalizers).
208208

209209
## Adding a second backend hits a type collision
210210

@@ -304,7 +304,7 @@ Each cached singleton owns its own `Bulkhead` and `Retry` state — what you wan
304304
- **[Quick-Start](../index.md)** — the base `AsyncClient` API.
305305
- **[Middleware guide](../middleware.md)** — what `Bulkhead` and `Retry` are doing in `kwargs[middleware]`.
306306
- **[Resilience reference](../resilience.md)** — every parameter on `Retry`, `RetryBudget`, `Bulkhead`.
307-
- **[`modern-di` factories](https://modern-di.readthedocs.io/providers/factories/)**`CacheSettings`, scopes, the broader provider story.
307+
- **[`modern-di` factories](https://modern-di.modern-python.org/providers/factories/)**`CacheSettings`, scopes, the broader provider story.
308308
````
309309

310310
- [ ] **Step 2: Update `mkdocs.yml` to add the `Recipes` nav section**

0 commit comments

Comments
 (0)