Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
76 commits
Select commit Hold shift + click to select a range
e618781
feat: route server networking through SmallOS kernel
MikiEEE Aug 22, 2026
08c4d6e
fix: harden kernel transport lifecycle
MikiEEE Aug 22, 2026
2b27c95
fix: retain resources after cleanup failures
MikiEEE Aug 22, 2026
76e3937
feat: add timeout-bounded regex routing
MikiEEE Aug 22, 2026
42d3215
fix: harden regex routing after review
MikiEEE Aug 22, 2026
82c6ace
fix: isolate route events and optimize static dispatch
MikiEEE Aug 22, 2026
8f11677
fix: isolate regex observer execution
MikiEEE Aug 22, 2026
5875bad
fix: keep route observers on SmallOS
MikiEEE Aug 22, 2026
a476393
fix: bound failed connection ownership
MikiEEE Aug 22, 2026
d06dc14
fix: make capacity and rollback lifecycle safe
MikiEEE Aug 22, 2026
113e162
fix: treat shutdown accept invalidation as normal
MikiEEE Aug 22, 2026
61e55c0
feat: add managed server lifecycle
MikiEEE Aug 22, 2026
f4b48c6
test: cover constrained lifecycle cleanup
MikiEEE Aug 22, 2026
2c9645a
fix: retain lifecycle ownership through cleanup retries
MikiEEE Aug 22, 2026
7e0324e
test: cover lifecycle cleanup integration
MikiEEE Aug 22, 2026
5b1b8aa
fix: type runtime lifecycle capabilities precisely
MikiEEE Aug 22, 2026
a8465fa
fix: harden lifecycle ownership and cleanup
MikiEEE Aug 22, 2026
ce000b5
Merge branch 'develop' into feat/regex-routing
MikiEEE Aug 22, 2026
11263ce
Merge branch 'develop' into feat/kernel-network-abstraction
MikiEEE Aug 22, 2026
d53873b
Merge branch 'develop' into feat/server-lifecycle-api
MikiEEE Aug 22, 2026
6ac4ec1
Merge remote-tracking branch 'origin/feat/regex-routing' into feat/we…
MikiEEE Aug 22, 2026
5cc5236
feat: add bounded HTTP/2 prior-knowledge server
MikiEEE Aug 22, 2026
2b59c92
docs: document HTTP/2 prior-knowledge usage
MikiEEE Aug 22, 2026
be3e8e9
fix: retain HTTP/2 graceful cleanup fallback
MikiEEE Aug 22, 2026
ba49eec
feat: add bounded WebSocket server
MikiEEE Aug 22, 2026
342a666
docs: add WebSocket examples and guide
MikiEEE Aug 22, 2026
f6e2bc3
test: cover WebSocket deadlines and interoperability
MikiEEE Aug 22, 2026
4285ff6
fix: harden HTTP/2 stream and lifecycle bounds
MikiEEE Aug 22, 2026
cf74ffc
docs: describe HTTP/2 test and timeout contracts
MikiEEE Aug 22, 2026
e9b972b
fix: require finite HTTP/2 timeouts
MikiEEE Aug 22, 2026
d777424
docs: add comprehensive public guide
MikiEEE Aug 22, 2026
fafa379
fix: harden WebSocket protocol lifecycle
MikiEEE Aug 22, 2026
e36a1bf
test: cover WebSocket review regressions
MikiEEE Aug 22, 2026
0970716
docs: document WebSocket deadline semantics
MikiEEE Aug 22, 2026
0a7a03d
fix: bound HTTP/2 fairness and connection failures
MikiEEE Aug 22, 2026
edadb77
Merge branch 'docs/comprehensive-guide-base' into feat/websocket-server
MikiEEE Aug 22, 2026
fa7e107
Merge public documentation guide into HTTP/2 feature
MikiEEE Aug 22, 2026
daba8e7
fix: close HTTP/2 batch and output budget gaps
MikiEEE Aug 22, 2026
58e7d7f
docs: clarify WebSocket example and closure semantics
MikiEEE Aug 22, 2026
beb292e
docs: clarify HTTP/2 install and request semantics
MikiEEE Aug 22, 2026
22bd72d
Merge regex routing into HTTP/2 feature
MikiEEE Aug 22, 2026
40c261a
Test regex observer lifecycle ownership
MikiEEE Aug 22, 2026
884cb35
Restore integrated regex protocol coverage
MikiEEE Aug 22, 2026
29d2cfd
docs: qualify bounded route event delivery
MikiEEE Aug 22, 2026
65ad88c
feat: configure SmallServer-owned SmallOS runtimes
MikiEEE Aug 22, 2026
76e1653
ci: release successful main builds
MikiEEE Aug 22, 2026
2bf91fe
fix(ci): exercise optional protocol suites
MikiEEE Aug 22, 2026
d3e25eb
fix: validate managed runtime capacity
MikiEEE Aug 22, 2026
6247d1a
fix(ci): serialize release publication
MikiEEE Aug 22, 2026
ca0725c
fix(ci): pin release workflow actions
MikiEEE Aug 22, 2026
2fe177d
fix: support response defaults on Python 3.12
MikiEEE Aug 22, 2026
7cc53e4
fix: keep managed runtime defaults explicit
MikiEEE Aug 22, 2026
cc4f27d
Merge pull request #10 from MikiEEE/chore/release-pipeline
MikiEEE Aug 22, 2026
8ef710d
Merge pull request #9 from MikiEEE/feat/runtime-config-bridge
MikiEEE Aug 23, 2026
b7e6a02
Merge pull request #5 from MikiEEE/feat/kernel-network-abstraction
MikiEEE Aug 23, 2026
6f39ff0
Merge develop into regex routing
MikiEEE Aug 23, 2026
3db01b1
Merge remote-tracking branch 'origin/develop' into feat/websocket-server
MikiEEE Aug 23, 2026
189c2fe
Merge reconciled regex and develop into HTTP/2
MikiEEE Aug 23, 2026
fced232
Merge commit '6f39ff0259338624626b647133cae65980cc1982' into feat/web…
MikiEEE Aug 23, 2026
c184547
docs: integrate managed runtime configuration
MikiEEE Aug 23, 2026
e292b38
chore: move public documentation out of WebSocket PR
MikiEEE Aug 23, 2026
19df00b
Revert "chore: move public documentation out of WebSocket PR"
MikiEEE Aug 23, 2026
397f989
docs: align examples with reconciled WebSocket API
MikiEEE Aug 23, 2026
c1230d4
Merge pull request #4 from MikiEEE/feat/regex-routing
MikiEEE Aug 23, 2026
e118234
Merge pull request #7 from MikiEEE/feat/websocket-server
MikiEEE Aug 23, 2026
7962fc6
Merge WebSocket develop into HTTP/2
MikiEEE Aug 23, 2026
906b64d
Fix coalesced WebSocket close test race
MikiEEE Aug 23, 2026
e05183f
Merge pull request #8 from MikiEEE/feat/http2-server
MikiEEE Aug 23, 2026
0ef794f
chore: pin SmallOS v1.2.0 release
MikiEEE Aug 23, 2026
b0eeea6
Merge remote-tracking branch 'origin/develop' into docs/websocket-server
MikiEEE Aug 23, 2026
24bd407
feat: expose execution adapters through SmallServer
MikiEEE Aug 23, 2026
ae42451
Merge pull request #11 from MikiEEE/docs/websocket-server
MikiEEE Aug 23, 2026
13d6225
Merge pull request #13 from MikiEEE/feat/adapter-facade
MikiEEE Aug 23, 2026
45c30ed
Merge pull request #12 from MikiEEE/chore/smallos-v1.2.0
MikiEEE Aug 23, 2026
810ab7a
test: preserve coalesced WebSocket deadline frames
MikiEEE Aug 23, 2026
2ec30a0
Merge pull request #15 from MikiEEE/fix/websocket-deadline-test-coale…
MikiEEE Aug 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 61 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
name: CI

on:
pull_request:
branches: [develop, main]
push:
branches: [develop, main]

permissions:
contents: read

concurrency:
group: ci-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
test:
name: Python ${{ matrix.python-version }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python-version: ["3.10", "3.12"]
steps:
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
with:
python-version: ${{ matrix.python-version }}
cache: pip
- name: Install SmallOS and test dependencies
run: |
python -m pip install --upgrade pip
python -m pip install -r requirements.txt
python -m pip install -e '.[test]'
- name: Run tests
run: python -m unittest discover -s tests -v
- name: Compile sources
run: python -m compileall -q smallserver tests examples

package:
name: Build package
runs-on: ubuntu-latest
needs: test
steps:
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
with:
python-version: "3.12"
cache: pip
- name: Install release tooling
run: python -m pip install --upgrade build twine
- name: Build and inspect distributions
run: |
python -m build
python -m twine check dist/*
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with:
name: distributions-${{ github.sha }}
path: dist/*
if-no-files-found: error
retention-days: 14
105 changes: 105 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
name: Release

on:
workflow_run:
workflows: [CI]
types: [completed]
branches: [main]

permissions:
contents: write
attestations: write
id-token: write

concurrency:
group: release-main
cancel-in-progress: false

jobs:
release:
name: Cut GitHub release
if: >-
github.event.workflow_run.conclusion == 'success' &&
github.event.workflow_run.head_branch == 'main'
runs-on: ubuntu-latest
environment: release
env:
GH_TOKEN: ${{ github.token }}
VALIDATED_SHA: ${{ github.event.workflow_run.head_sha }}
steps:
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
with:
ref: ${{ env.VALIDATED_SHA }}
fetch-depth: 0
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
with:
python-version: "3.12"
cache: pip
- id: main
name: Confirm the validated commit is still main
run: |
current_main="$(git ls-remote origin refs/heads/main | awk '{print $1}')"
if [ "$current_main" != "$VALIDATED_SHA" ]; then
echo "A newer main commit exists; its CI run owns the next release."
echo "current=false" >> "$GITHUB_OUTPUT"
else
echo "current=true" >> "$GITHUB_OUTPUT"
fi
- id: version
name: Read and validate the release version
if: steps.main.outputs.current == 'true'
run: |
python - <<'PY'
import os
import re
import tomllib

with open("pyproject.toml", "rb") as handle:
version = tomllib.load(handle)["project"]["version"]
if re.fullmatch(r"[0-9]+\.[0-9]+\.[0-9]+(?:[a-zA-Z0-9.-]+)?", version) is None:
raise SystemExit("pyproject.toml contains an unsupported release version")
with open(os.environ["GITHUB_OUTPUT"], "a", encoding="utf-8") as output:
output.write("version={}\n".format(version))
output.write("tag=v{}\n".format(version))
PY
- name: Require a new version
if: steps.main.outputs.current == 'true'
env:
RELEASE_TAG: ${{ steps.version.outputs.tag }}
run: |
if git ls-remote --exit-code --tags origin "refs/tags/$RELEASE_TAG"; then
echo "::error::Release $RELEASE_TAG already exists. Bump project.version before merging to main."
exit 1
fi
- name: Build release artifacts
if: steps.main.outputs.current == 'true'
run: |
python -m pip install --upgrade build twine
python -m build
python -m twine check dist/*
- id: publish
name: Confirm main is unchanged before publishing
if: steps.main.outputs.current == 'true'
run: |
current_main="$(git ls-remote origin refs/heads/main | awk '{print $1}')"
if [ "$current_main" != "$VALIDATED_SHA" ]; then
echo "A newer main commit exists; its CI run owns the next release."
echo "current=false" >> "$GITHUB_OUTPUT"
else
echo "current=true" >> "$GITHUB_OUTPUT"
fi
- name: Attest release artifacts
if: steps.publish.outputs.current == 'true'
uses: actions/attest-build-provenance@96b4a1ef7235a096b17240c259729fdd70c83d45 # v2
with:
subject-path: dist/*
- name: Create tag and GitHub release
if: steps.publish.outputs.current == 'true'
env:
RELEASE_TAG: ${{ steps.version.outputs.tag }}
run: >-
gh release create "$RELEASE_TAG" dist/*
--repo "$GITHUB_REPOSITORY"
--target "$VALIDATED_SHA"
--title "$RELEASE_TAG"
--generate-notes
Loading
Loading