Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
117 commits
Select commit Hold shift + click to select a range
ed34c55
ci: Add CI/CD workflows
conradbzura May 2, 2025
3541b0c
feat: Add project setup, core functionality, and CLI commands
conradbzura May 6, 2025
a3731d1
ci: Fix glob patterns in label-pr, publish-release, and validate-pr w…
conradbzura May 7, 2025
e6e9228
ci: Fix glob patterns in label-pr, publish-release, and validate-pr w…
conradbzura May 7, 2025
3f4a12d
feat: Implement wool-locking subpackage
conradbzura May 7, 2025
e20bb96
docs: Update wool-locking package description
conradbzura May 7, 2025
2678919
Merge branch 'wool-locking-subpackage' into release
conradbzura May 7, 2025
a8fa011
build: Create symlink to .git in namespace packages prior to building
conradbzura May 7, 2025
7966766
fix: Update wool.__init__.py to update modules on public symbols
conradbzura May 7, 2025
4586338
Merge branch 'namespace-build-fixes' into release
conradbzura May 7, 2025
4fc0758
build: Set SCM root to .git
conradbzura May 7, 2025
bff1b5f
Merge branch 'scm-root-config' into release
conradbzura May 7, 2025
91ab08b
ci: Fix GitHub release title generation and remove tag verification
conradbzura May 7, 2025
5952f30
build: Add package classifiers
conradbzura May 7, 2025
bc03509
Merge branch 'release-title-and-classifiers' into release
conradbzura May 7, 2025
3e4eef3
ci: Update workflows to create GitHub release once and push all names…
conradbzura May 7, 2025
623a210
style: Fix formatting
conradbzura May 7, 2025
762d86e
Merge branch 'release-workflow-and-formatting' into release
conradbzura May 7, 2025
4ce8652
build: Remove invalid classifiers
conradbzura May 7, 2025
c42022a
Merge branch 'remove-invalid-classifiers' into release
conradbzura May 7, 2025
0439d33
ci: Update sync-branches workflow to approve generated sync PRs as wo…
conradbzura May 7, 2025
1eb8235
build: Migrate to hatchling build backend and implement custom build …
conradbzura May 15, 2025
c56f623
ci: Fix Build release action
conradbzura May 15, 2025
f777083
feat: Implement shared memory pool
conradbzura Jun 3, 2025
af8ac82
Merge branch 'hatchling-migration-and-mempool' into release
conradbzura Jun 3, 2025
2581fa6
feat: Add gRPC-based MemoryPool service implementation
conradbzura Jun 19, 2025
07c36d3
refactor: Improve MemoryPool caching and resource management
conradbzura Jul 1, 2025
1e54b8c
refactor: Clean up mempool.proto protobuf definitions and update type…
conradbzura Jul 1, 2025
8cb8a5f
build: Add grpcio to wool project dependencies
conradbzura Jul 1, 2025
76317b8
test: Update tests to use latest version of pytest-grpc-aio
conradbzura Jul 2, 2025
62a33cc
fix: Add fallback for typing.Self import to support Python 3.10
conradbzura Jul 2, 2025
52b2dff
refactor: Implement PR feedback
conradbzura Jul 2, 2025
2f241eb
Merge branch 'grpc-mempool-service' into release
conradbzura Jul 3, 2025
c0ff7df
feat: Implement memory pool session client
conradbzura Jul 18, 2025
fa26357
Merge branch 'mempool-session-client' into release
conradbzura Jul 18, 2025
8d73478
feat: Implement gRPC-based distributed worker pool with service disco…
conradbzura Sep 25, 2025
72e6c6f
Merge branch 'distributed-worker-pool' into release
conradbzura Sep 25, 2025
f1af4e9
ci: Make publish-release workflow manually runnable
conradbzura Sep 25, 2025
69ff475
ci: Fix bug causing tag-version job or publish-release workflow to be…
conradbzura Sep 25, 2025
24d0878
docs: Update README
conradbzura Sep 25, 2025
cced7a3
fix: Fix bug in WorkerPool default worker factory
conradbzura Sep 26, 2025
283c873
Merge branch 'fix-worker-factory-default' into release
conradbzura Sep 26, 2025
7ee5291
refactor: Refactor Worker and WorkerProxy to accept RegistrarLike, Di…
conradbzura Sep 26, 2025
6181295
Merge branch 'refactor-factory-protocols' into release
conradbzura Sep 26, 2025
1e0f494
fix: Fix latent bug in git version parser
conradbzura Sep 26, 2025
bfd9ceb
Merge branch 'fix-version-parser' into release
conradbzura Sep 26, 2025
eeb957b
docs: Update wool package README.md
conradbzura Sep 28, 2025
915c01a
docs: Fix URL in root README.md
conradbzura Sep 28, 2025
1df0c7a
perf: Optimize shared memory usage and limit creation rights to Worke…
conradbzura Oct 2, 2025
2d1d3a4
Merge branch 'readme-updates-and-mempool-optimization' into release
conradbzura Oct 2, 2025
2077a96
feat: Expose various worker timeouts and concurrency limits as functi…
conradbzura Oct 28, 2025
6a56024
Merge branch 'worker-config-and-cicd-fixes' into release
conradbzura Oct 28, 2025
1738b9a
docs: Replace README.md
conradbzura Oct 28, 2025
16a5a77
fix: Fix root README symlink
conradbzura Oct 28, 2025
f3325ec
refactor: Refactor discovery logic into a multi-layer subpackage
conradbzura Nov 3, 2025
0c2e0d6
refactor: Refactor load balancing logic into a multi-layer subpackage
conradbzura Nov 3, 2025
740e1da
Merge branch 'refactor-discovery-subpackage' into release
conradbzura Nov 3, 2025
39bc6ad
Merge branch 'refactor-loadbalancer-subpackage' into release
conradbzura Nov 3, 2025
e74b6e5
refactor: Refactor worker logic into a multi-layer subpackage
conradbzura Nov 7, 2025
15518f7
Merge branch 'refactor-worker-subpackage' into release
conradbzura Nov 7, 2025
49bd298
refactor: Move _connection.py and _worker_service.py into worker subp…
conradbzura Nov 8, 2025
24f2417
Merge branch 'move-connection-and-service' into release
conradbzura Nov 8, 2025
b40cce2
refactor: Move _worker_pool.py and _worker_proxy.py into worker subpa…
conradbzura Nov 9, 2025
57d74e4
Merge branch 'move-worker-pool-and-proxy' into release
conradbzura Nov 9, 2025
6a392f4
refactor: Move _resource_pool.py, _typing.py, and _context.py into wo…
conradbzura Nov 9, 2025
0568fcc
Merge branch 'move-resource-pool-and-typing' into release
conradbzura Nov 9, 2025
8a86919
refactor: Refactor work logic into a multi-layer subpackage
conradbzura Nov 11, 2025
8438524
Merge branch 'refactor-work-subpackage' into release
conradbzura Nov 11, 2025
3039d13
refactor: Rename core to runtime
conradbzura Nov 11, 2025
5a91f30
Merge branch 'rename-core-to-runtime' into release
conradbzura Nov 11, 2025
4d2cd8c
refactor: Refactor event system into a generic base class
conradbzura Nov 11, 2025
eec8bf1
Merge branch 'refactor-event-system' into release
conradbzura Nov 11, 2025
224318e
feat: Add support for distributed async generator work tasks
conradbzura Nov 13, 2025
e7fc299
Merge branch 'distributed-async-generators' into release
conradbzura Nov 13, 2025
1908be9
feat: Implement TLS-based worker authentication
conradbzura Nov 16, 2025
b2a7327
Merge branch 'tls-worker-auth' into release
conradbzura Nov 16, 2025
4d5322d
ci: Fix several issues with CI/CD pipeline
conradbzura Dec 31, 2025
cfd4b62
feat: Offload task execution to thread pool and fix concurrent dispat…
conradbzura Jan 27, 2026
971b36a
ci: Fix token bug in publish-release workflow
conradbzura Jan 27, 2026
864e3e4
ci: Pass new version downstream in publish-release workflow
conradbzura Jan 27, 2026
68cffdf
Merge branch 'thread-pool-and-cicd-fixes' into release
conradbzura Jan 27, 2026
8981723
fix: Fix bug in task-completed lifecycle event emission; Make wool.ro…
conradbzura Feb 10, 2026
7aa74cb
Merge branch 'fix-lifecycle-events' into release
conradbzura Feb 10, 2026
afaa16a
feat: Implement dedicated event handler thread
conradbzura Feb 10, 2026
81a11c5
Merge branch 'event-handler-thread' into release
conradbzura Feb 10, 2026
a82a835
ci: Do not push new version tag in bump-version job
conradbzura Feb 10, 2026
56e56e2
fix: Fix race condition in task cancellation during worker shutdown
conradbzura Feb 13, 2026
8453104
Merge branch 'version-tag-and-cancellation-fix' into release
conradbzura Feb 13, 2026
193e5ed
feat: Add optional filter argument to LanDiscovery and LocalDiscovery…
conradbzura Feb 13, 2026
6694daa
Merge branch 'discovery-filter-and-docs' into release
conradbzura Feb 13, 2026
b1c8cd9
refactor: Create LoadBalancerContextLike protocol to replace LoadBala…
conradbzura Feb 14, 2026
a4674e0
Merge branch 'loadbalancer-protocol' into release
conradbzura Feb 14, 2026
e18294a
refactor: Rename work subpackage to routine; Update READMEs for disco…
conradbzura Feb 18, 2026
37dbe7b
Merge branch 'rename-work-to-routine' into release
conradbzura Feb 18, 2026
310ea58
refactor: Replace WorkerMetadata host and port with address; Add work…
conradbzura Feb 19, 2026
7ce454f
Merge branch 'worker-metadata-address' into release
conradbzura Feb 19, 2026
f2204be
ci: Add issue templates for bug reports, feature requests, etc.
conradbzura Feb 19, 2026
37bbaf7
fix: Pool gRPC channels in WorkerConnection to outlive dispatch scope
conradbzura Feb 19, 2026
6824f85
test: Update tests for channel-pooled WorkerConnection
conradbzura Feb 19, 2026
f7237b1
docs: Update READMEs for channel-pooled WorkerConnection
conradbzura Feb 19, 2026
a60271b
docs: Add LLM workflow guides and skill definitions
conradbzura Feb 20, 2026
38e69af
docs: State explicitly that Markdown text should not be hard-wrapped …
conradbzura Feb 20, 2026
80a0ad8
ci: Add synchronize trigger to label-pr workflow
conradbzura Feb 20, 2026
942aee6
fix: Handle closed event loop in ResourcePool cross-loop cleanup
conradbzura Feb 19, 2026
01d04c7
refactor: Give _Channel its own close() method
conradbzura Feb 20, 2026
b1cfd69
test: Stop importing _channel_pool internals in tests
conradbzura Feb 20, 2026
34febfd
style: Fix test docstring format and remove duplicate decorator
conradbzura Feb 20, 2026
1f17617
Merge branch 'channel-pooling-and-docs' into release
conradbzura Feb 20, 2026
8f82c33
test: Add regression tests for WorkerFactory credential passing
conradbzura Feb 20, 2026
9b63959
fix: Pass full WorkerCredentials to worker factory
conradbzura Feb 20, 2026
2d565af
docs: Update WorkerFactory protocol snippet in README
conradbzura Feb 20, 2026
2cc5560
Merge branch 'worker-factory-credentials' into release
conradbzura Feb 20, 2026
acbb521
Merge branch 'fix-readme-symlink' into release
conradbzura Oct 28, 2025
dc91faf
build: Add pyright dev dependency and configuration
conradbzura Feb 21, 2026
f809636
ci: Add pyright linter job to run-tests workflow
conradbzura Feb 21, 2026
bb476b2
fix: Resolve type errors surfaced by pyright
conradbzura Feb 21, 2026
02ebf2b
Add pyright type checking to CI workflow (#114)
conradbzura Feb 21, 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
1 change: 1 addition & 0 deletions .github/.githubrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
alias cicd="$PWD/scripts/git-cicd.sh"
5 changes: 5 additions & 0 deletions .github/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
.*

!.gitignore
!.githubrc
!.github/
25 changes: 25 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
name: Bug Report
description: Report something that isn't working correctly.
labels: ["bug"]
body:
- type: textarea
id: summary
attributes:
label: Summary
description: What is the bug? Include steps to reproduce if applicable.
validations:
required: true
- type: textarea
id: root-cause
attributes:
label: Root cause
description: What is causing the bug? Include relevant code snippets.
validations:
required: true
- type: textarea
id: affected-code
attributes:
label: Affected code
description: Which files, modules, or components are affected?
validations:
required: false
25 changes: 25 additions & 0 deletions .github/ISSUE_TEMPLATE/build.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
name: Build
description: Propose a build system or dependency change.
labels: ["build"]
body:
- type: textarea
id: summary
attributes:
label: Summary
description: What build system or dependency change is needed?
validations:
required: true
- type: textarea
id: motivation
attributes:
label: Motivation
description: Why is this change needed?
validations:
required: true
- type: textarea
id: affected-code
attributes:
label: Affected code
description: Which build files, configs, or dependencies are affected?
validations:
required: false
25 changes: 25 additions & 0 deletions .github/ISSUE_TEMPLATE/cicd.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
name: CI/CD
description: Propose a CI/CD pipeline change.
labels: ["cicd"]
body:
- type: textarea
id: summary
attributes:
label: Summary
description: What CI/CD change is needed?
validations:
required: true
- type: textarea
id: motivation
attributes:
label: Motivation
description: Why is this change needed? What does it improve?
validations:
required: true
- type: textarea
id: affected-code
attributes:
label: Affected code
description: Which workflows, pipelines, or config files are affected?
validations:
required: false
1 change: 1 addition & 0 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
blank_issues_enabled: false
25 changes: 25 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
name: Feature Request
description: Propose a new feature or capability.
labels: ["feature"]
body:
- type: textarea
id: summary
attributes:
label: Summary
description: What is the feature? Describe the desired behavior.
validations:
required: true
- type: textarea
id: motivation
attributes:
label: Motivation
description: Why is this feature needed? What problem does it solve?
validations:
required: true
- type: textarea
id: affected-code
attributes:
label: Affected code
description: Which files, modules, or components would be affected?
validations:
required: false
25 changes: 25 additions & 0 deletions .github/ISSUE_TEMPLATE/refactor.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
name: Refactor
description: Propose a code restructuring without behavior change.
labels: ["refactor"]
body:
- type: textarea
id: summary
attributes:
label: Summary
description: What should be restructured and what does the end state look like?
validations:
required: true
- type: textarea
id: motivation
attributes:
label: Motivation
description: Why is this restructuring needed?
validations:
required: true
- type: textarea
id: affected-code
attributes:
label: Affected code
description: Which files, modules, or components are affected?
validations:
required: false
25 changes: 25 additions & 0 deletions .github/ISSUE_TEMPLATE/test.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
name: Test
description: Add or improve test coverage or test infrastructure.
labels: ["test"]
body:
- type: textarea
id: summary
attributes:
label: Summary
description: What needs to be tested or what test infrastructure is needed?
validations:
required: true
- type: textarea
id: motivation
attributes:
label: Motivation
description: Why is this test work needed? What gap does it fill?
validations:
required: true
- type: textarea
id: affected-code
attributes:
label: Affected code
description: Which files, modules, or components are affected?
validations:
required: false
22 changes: 22 additions & 0 deletions .github/actions/add-label/action.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
name: Add label
description: Add specified label to pull request.
inputs:
label:
description: Label to add to the pull request.
required: true
type: string

runs:
using: composite
steps:
- name: Verify event
if: ${{ github.event_name != 'pull_request' }}
shell: bash
run: |
echo "Error: This action can only be used on pull request events."
exit 1

- name: Add label
shell: bash
run: |
gh pr edit "${{ github.event.number }}" --add-label "${{ inputs.label }}"
34 changes: 34 additions & 0 deletions .github/actions/build-release/action.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
name: Build release
description: Build distribution for the target version.
inputs:
source:
required: true
type: string
version:
required: true
type: string

runs:
using: composite
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-tags: true
persist-credentials: false
ref: ${{ inputs.version }}

- name: Install uv & prepare python
uses: astral-sh/setup-uv@v5
with:
enable-cache: false

- name: Build distribution artifacts
shell: bash
run: uv build ${{ inputs.source }} --sdist --wheel --out-dir ${{ inputs.source }}-dist-${{ inputs.version }}

- name: Store distribution artifacts
uses: actions/upload-artifact@v4
with:
name: ${{ inputs.source }}-dist-${{ inputs.version }}
path: ${{ inputs.source }}-dist-${{ inputs.version }}/
31 changes: 31 additions & 0 deletions .github/actions/get-touched-files/action.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
name: Get touched files
description: Get a list of files that have been modified in a pull request.
inputs:
pathspec:
description: 'Optional pathspec(s) to filter files. E.g., "src/**" will only get files in the src directory.'
required: false
type: string
outputs:
touched:
description: 'List of files that have been modified in a pull request.'
value: ${{ steps.get-touched-files.outputs.touched }}

runs:
using: composite
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
persist-credentials: false

- name: Get touched files
id: get-touched-files
shell: bash
run: |
eval "pathspec=('${{ inputs.pathspec }}')"
echo "pathspec: '${pathspec[@]}'"
touched=$(git diff --name-only HEAD origin/master -- ${pathspec[@]})
touched=$(echo "$touched" | tr '\n' ' ' | xargs)
echo "touched: '$touched'"
echo "touched=$touched" >> $GITHUB_OUTPUT
32 changes: 32 additions & 0 deletions .github/actions/get-wool-labs-app-token/action.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
name: get-wool-labs-app-token
description: "Obtain a GitHub App installation access token to use in place of a PAT"
inputs:
app-id:
description: "The ID of the GitHub App"
required: true
app-installation-id:
description: "The installation ID of the GitHub App"
required: true
app-private-key:
description: "The private key of the GitHub App"
required: true
outputs:
access-token:
description: "Access token to use in place of a PAT"
value: ${{ steps.generate-access-token.outputs.access-token }}

runs:
using: "composite"
steps:
- name: Generate Access Token
id: generate-access-token
shell: bash
run: |
echo "${{ inputs.app-private-key }}" > /tmp/app-private-key.pem
access_token="$(APP_INSTALLATION_ID=${{ inputs.app-installation-id }} \
APP_ID=${{ inputs.app-id }} \
SIGNING_KEY_PATH="/tmp/app-private-key.pem" \
.github/scripts/generate-github-access-token.sh)"
echo "::add-mask::$access_token"
echo "access-token=$access_token" >> $GITHUB_OUTPUT

30 changes: 30 additions & 0 deletions .github/actions/publish-github-release/action.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
name: Publish release to GitHub
description: Publish the target version to GitHub.

inputs:
source:
required: true
type: string
version:
required: true
type: string

runs:
using: composite
steps:
- name: Download distribution artifacts
uses: actions/download-artifact@v4
with:
name: ${{ inputs.source }}-dist-${{ inputs.version }}
path: ${{ inputs.source }}-dist-${{ inputs.version }}/

- name: Sign the artifacts with Sigstore
uses: sigstore/gh-action-sigstore-python@v3.0.0
with:
inputs: ./${{ inputs.source }}-dist-${{ inputs.version }}/*.tar.gz ./${{ inputs.source }}-dist-${{ inputs.version }}/*.whl

- name: Upload artifact signatures to GitHub release
shell: bash
env:
GH_TOKEN: ${{ github.token }}
run: gh release upload ${{ inputs.version }} ${{ inputs.source }}-dist-${{ inputs.version }}/** --repo ${{ github.repository }}
30 changes: 30 additions & 0 deletions .github/actions/publish-pypi-release/action.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
name: Publish release to PyPI
description: Publish the target version to PyPI.

inputs:
source:
required: true
type: string
version:
required: true
type: string
pypi-token:
required: true
type: string

runs:
using: composite
steps:
- name: Download distribution artifacts
uses: actions/download-artifact@v4
with:
name: ${{ inputs.source }}-dist-${{ inputs.version }}
path: ${{ inputs.source }}-dist-${{ inputs.version }}/

- name: Install uv
uses: astral-sh/setup-uv@v5

- name: Upload distribution to PyPI
shell: bash
run: |
.github/scripts/publish-distribution.sh --source ${{ inputs.source }}-dist-${{ inputs.version }} ${{ inputs.pypi-token }}
Loading
Loading