DefStream 0.1.14__tar.gz → 0.1.16__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {defstream-0.1.14 → defstream-0.1.16}/.github/workflows/ci.yml +45 -87
- {defstream-0.1.14 → defstream-0.1.16}/.gitignore +0 -4
- {defstream-0.1.14 → defstream-0.1.16}/DefStream.egg-info/PKG-INFO +487 -14
- {defstream-0.1.14 → defstream-0.1.16}/DefStream.egg-info/SOURCES.txt +51 -5
- defstream-0.1.16/DefStream.egg-info/requires.txt +6 -0
- {defstream-0.1.14 → defstream-0.1.16}/PKG-INFO +487 -14
- {defstream-0.1.14 → defstream-0.1.16}/README.en.md +499 -11
- {defstream-0.1.14 → defstream-0.1.16}/README.md +484 -11
- {defstream-0.1.14 → defstream-0.1.16}/issues/feature/8/REQUIREMENTS.md +3 -3
- defstream-0.1.16/issues/fix/24/IMPLEMENTS.md +25 -0
- defstream-0.1.16/issues/fix/24/ISSUE.md +14 -0
- defstream-0.1.16/issues/fix/24/README.md +7 -0
- defstream-0.1.16/issues/fix/24/REQUIREMENTS.md +48 -0
- defstream-0.1.16/issues/fix/25/IMPLEMENTS.md +61 -0
- defstream-0.1.16/issues/fix/25/ISSUE.md +13 -0
- defstream-0.1.16/issues/fix/25/README.md +38 -0
- defstream-0.1.16/issues/fix/25/REQUIREMENTS.md +107 -0
- defstream-0.1.16/issues/fix/25/TASK.md +38 -0
- defstream-0.1.16/samples/Broker/RabbitMQ/Sample.RPC.py +188 -0
- defstream-0.1.16/samples/Broker/RabbitMQ/Sample.Stream.py +102 -0
- defstream-0.1.16/samples/Broker/RabbitMQ/Sample.py +146 -0
- defstream-0.1.16/samples/Broker/Redis/Sample.Stream.py +87 -0
- defstream-0.1.16/samples/Broker/Redis/Sample.py +76 -0
- {defstream-0.1.14 → defstream-0.1.16}/samples/Worker/RabbitMQ/Worker.py +5 -5
- {defstream-0.1.14 → defstream-0.1.16}/samples/Worker/Redis/Sample.py +5 -5
- {defstream-0.1.14 → defstream-0.1.16}/setup.py +3 -3
- defstream-0.1.16/src/Broker/Implements/RabbitMQ/Configuration.py +48 -0
- defstream-0.1.16/src/Broker/Implements/RabbitMQ/Connection.py +542 -0
- defstream-0.1.16/src/Broker/Implements/RabbitMQ/Consumer.py +359 -0
- defstream-0.1.16/src/Broker/Implements/RabbitMQ/Event.py +127 -0
- defstream-0.1.16/src/Broker/Implements/RabbitMQ/Exchange.py +278 -0
- defstream-0.1.16/src/Broker/Implements/RabbitMQ/Policies.py +9 -0
- defstream-0.1.16/src/Broker/Implements/RabbitMQ/Queue.py +319 -0
- defstream-0.1.16/src/Broker/Implements/RabbitMQ/Serializer.py +61 -0
- defstream-0.1.16/src/Broker/Implements/RabbitMQ/Stream.py +179 -0
- defstream-0.1.16/src/Broker/Implements/RabbitMQ/Subscription.py +74 -0
- defstream-0.1.16/src/Broker/Implements/RabbitMQ/__init__.py +47 -0
- defstream-0.1.16/src/Broker/Implements/Redis/Configuration.py +59 -0
- defstream-0.1.16/src/Broker/Implements/Redis/Connection.py +265 -0
- defstream-0.1.16/src/Broker/Implements/Redis/Consumer.py +364 -0
- defstream-0.1.16/src/Broker/Implements/Redis/Event.py +191 -0
- defstream-0.1.16/src/Broker/Implements/Redis/Queue.py +284 -0
- defstream-0.1.16/src/Broker/Implements/Redis/Serializer.py +48 -0
- defstream-0.1.16/src/Broker/Implements/Redis/Subscription.py +46 -0
- defstream-0.1.16/src/Broker/Implements/Redis/__init__.py +29 -0
- defstream-0.1.14/src/Inspector/Extensions/HealthCheck.py → defstream-0.1.16/src/Inspector/Extensions/Ping.py +8 -8
- defstream-0.1.14/src/Inspector/Extensions/Dashboard.html → defstream-0.1.16/src/Inspector/Extensions/Status.html +2 -2
- defstream-0.1.14/src/Inspector/Extensions/Dashboard.py → defstream-0.1.16/src/Inspector/Extensions/Status.py +13 -13
- {defstream-0.1.14 → defstream-0.1.16}/src/Inspector/Extensions/__init__.py +4 -4
- defstream-0.1.16/tests/test_broker_packaging.py +108 -0
- {defstream-0.1.14 → defstream-0.1.16}/tests/test_inspector.py +21 -21
- {defstream-0.1.14 → defstream-0.1.16}/tests/test_inspector_logging.py +4 -4
- defstream-0.1.16/tests/test_rabbitmq_broker_methods.py +139 -0
- defstream-0.1.16/tests/test_rabbitmq_integration.py +143 -0
- defstream-0.1.16/tests/test_rabbitmq_logging.py +489 -0
- defstream-0.1.16/tests/test_rabbitmq_priorities.py +442 -0
- defstream-0.1.16/tests/test_rabbitmq_release_workflow.py +398 -0
- defstream-0.1.16/tests/test_rabbitmq_rpc.py +417 -0
- defstream-0.1.16/tests/test_rabbitmq_rpc_integration.py +240 -0
- defstream-0.1.16/tests/test_rabbitmq_worker.py +301 -0
- defstream-0.1.16/tests/test_redis.py +292 -0
- defstream-0.1.16/tests/test_redis_integration.py +322 -0
- defstream-0.1.16/tests/test_redis_logging.py +336 -0
- defstream-0.1.16/tests/test_redis_release_workflow.py +398 -0
- {defstream-0.1.14 → defstream-0.1.16}/tests/test_release_workflow.py +13 -4
- defstream-0.1.14/tests/test_dashboard.py → defstream-0.1.16/tests/test_status.py +30 -17
- defstream-0.1.14/tests/test_dashboard_ui.cjs → defstream-0.1.16/tests/test_status_ui.cjs +2 -2
- defstream-0.1.14/DefStream.egg-info/requires.txt +0 -6
- {defstream-0.1.14 → defstream-0.1.16}/.github/ISSUE_TEMPLATE/01.feature.yml +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/.github/ISSUE_TEMPLATE/02.bug.yml +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/.github/ISSUE_TEMPLATE/03.fix.yml +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/.github/ISSUE_TEMPLATE/04.task.yml +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/DefStream.egg-info/dependency_links.txt +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/DefStream.egg-info/top_level.txt +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/LICENSE +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/issues/bug/16/IMPLEMENTS.md +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/issues/bug/16/ISSUE.md +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/issues/bug/16/README.md +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/issues/bug/16/REQUIREMENTS.md +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/issues/feature/1/IMPLEMENTS.md +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/issues/feature/1/README.md +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/issues/feature/1/REQUIREMENTS.md +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/issues/feature/1/TASK.md +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/issues/feature/1/ci.refs.json +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/issues/feature/8/IMPLEMENTS.md +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/issues/feature/8/README.md +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/issues/feature/8/ci.refs.json +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/issues/fix/10/IMPLEMENTS.md +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/issues/fix/10/README.md +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/issues/fix/10/REQUIREMENTS.md +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/issues/fix/13/README.md +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/issues/fix/21/IMPLEMENTS.md +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/issues/fix/21/ISSUE.md +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/issues/fix/21/README.md +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/issues/fix/21/REQUIREMENTS.md +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/issues/fix/3/IMPLEMENTS.md +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/issues/fix/3/README.md +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/issues/fix/3/REQUIREMENTS.md +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/issues/fix/3/ci.refs.json +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/issues/fix/6/IMPLEMENTS.md +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/issues/fix/6/README.md +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/issues/fix/6/REQUIREMENTS.md +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/issues/task/18/IMPLEMENTS.md +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/issues/task/18/README.md +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/issues/task/18/REQUIREMENTS.md +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/samples/Broker/Sample.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/samples/Worker/RabbitMQ/Client.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/samples/Worker/RabbitMQ/Tasks.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/samples/Worker/Sample.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/setup.cfg +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/src/Broker/Configuration.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/src/Broker/Connection.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/src/Broker/Consumer.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/src/Broker/Errors.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/src/Broker/Event.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/src/Broker/Implements/__init__.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/src/Broker/Policies.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/src/Broker/Priority.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/src/Broker/Protocol.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/src/Broker/__init__.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/src/Descriptor/DataObject.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/src/Descriptor/Types.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/src/Descriptor/Value.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/src/Descriptor/__init__.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/src/Inspector/Extension.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/src/Inspector/Extensions/Console.html +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/src/Inspector/Extensions/Console.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/src/Inspector/Extensions/Metrics.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/src/Inspector/Extensions/Specifications.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/src/Inspector/Inspector.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/src/Inspector/Response.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/src/Inspector/__init__.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/src/Validator/Pattern.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/src/Validator/Patterns/Array.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/src/Validator/Patterns/Common.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/src/Validator/Patterns/Compare.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/src/Validator/Patterns/Condition.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/src/Validator/Patterns/DataObject.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/src/Validator/Patterns/DateTime.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/src/Validator/Patterns/Number.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/src/Validator/Patterns/Object.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/src/Validator/Patterns/Size.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/src/Validator/Patterns/String.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/src/Validator/Patterns/Type.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/src/Validator/Patterns/__init__.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/src/Validator/Validate.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/src/Validator/Validator.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/src/Validator/__init__.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/src/Worker/Executor.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/src/Worker/Message.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/src/Worker/Pool.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/src/Worker/Run.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/src/Worker/Specification.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/src/Worker/Startup.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/src/Worker/Worker.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/src/Worker/__init__.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/src/__init__.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/tests/test_descriptor.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/tests/test_inspector_console.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/tests/test_lifecycle_hooks.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/tests/test_logging.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/tests/test_pool_callbacks.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/tests/test_process_signals.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/tests/test_protocol_contracts.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/tests/test_runner_hooks.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/tests/test_specifications.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/tests/test_task_messages.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/tests/test_task_priorities.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/tests/test_validator_patterns.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/tests/test_worker.py +0 -0
- {defstream-0.1.14 → defstream-0.1.16}/tests/test_worker_startup.py +0 -0
|
@@ -30,9 +30,6 @@ jobs:
|
|
|
30
30
|
build: ${{ steps.changes.outputs.build }}
|
|
31
31
|
new_version: ${{ steps.changes.outputs.new_version }}
|
|
32
32
|
tag: ${{ steps.changes.outputs.tag }}
|
|
33
|
-
core_ref: ${{ steps.refs.outputs.core_ref }}
|
|
34
|
-
rabbitmq_ref: ${{ steps.refs.outputs.rabbitmq_ref }}
|
|
35
|
-
redis_ref: ${{ steps.refs.outputs.redis_ref }}
|
|
36
33
|
test_required: ${{ steps.test_paths.outputs.required }}
|
|
37
34
|
steps:
|
|
38
35
|
- uses: actions/checkout@v7
|
|
@@ -58,7 +55,7 @@ jobs:
|
|
|
58
55
|
base = event['pull_request']['base']['sha']
|
|
59
56
|
changed = check_output([
|
|
60
57
|
'git', 'diff', '--name-only', '--no-renames', '-z',
|
|
61
|
-
f'{base}...{environ["GITHUB_SHA"]}', '--', 'samples/', 'src/', 'tests/', 'setup.py',
|
|
58
|
+
f'{base}...{environ["GITHUB_SHA"]}', '--', 'samples/', 'src/', 'tests/', 'setup.py', '.github/workflows/ci.yml',
|
|
62
59
|
])
|
|
63
60
|
required = bool(changed)
|
|
64
61
|
with Path(environ['GITHUB_OUTPUT']).open('a', encoding='utf-8') as output:
|
|
@@ -198,43 +195,6 @@ jobs:
|
|
|
198
195
|
with Path(environ['GITHUB_OUTPUT']).open('a', encoding='utf-8') as output:
|
|
199
196
|
output.write(f'branch={branch}\n')
|
|
200
197
|
PY
|
|
201
|
-
- name: Resolve dependency refs
|
|
202
|
-
id: refs
|
|
203
|
-
env:
|
|
204
|
-
BRANCH: ${{ steps.changelog.outputs.branch }}
|
|
205
|
-
run: |
|
|
206
|
-
python - <<'PY'
|
|
207
|
-
from json import loads
|
|
208
|
-
from os import environ
|
|
209
|
-
from pathlib import Path
|
|
210
|
-
from subprocess import check_output, run
|
|
211
|
-
|
|
212
|
-
head = environ['GITHUB_SHA']
|
|
213
|
-
path = f'issues/{environ["BRANCH"]}/ci.refs.json'
|
|
214
|
-
entry = check_output(['git', 'ls-tree', head, '--', path]).decode().split()
|
|
215
|
-
refs = {}
|
|
216
|
-
if entry:
|
|
217
|
-
if entry[0] not in ('100644', '100755'):
|
|
218
|
-
raise ValueError(f'Dependency refs must be a regular file: {path}')
|
|
219
|
-
refs = loads(check_output(['git', 'show', f'{head}:{path}']).decode('utf-8'))
|
|
220
|
-
else:
|
|
221
|
-
print(f'{path} not found: dependency refs default to master')
|
|
222
|
-
projects = {
|
|
223
|
-
'DefStream': 'core_ref',
|
|
224
|
-
'DefStream-RabbitMQ': 'rabbitmq_ref',
|
|
225
|
-
'DefStream-Redis': 'redis_ref',
|
|
226
|
-
}
|
|
227
|
-
if not isinstance(refs, dict) or refs.keys() - projects.keys():
|
|
228
|
-
raise ValueError(f'Expected an object with only supported project names: {path}')
|
|
229
|
-
with Path(environ['GITHUB_OUTPUT']).open('a', encoding='utf-8') as output:
|
|
230
|
-
for project, key in projects.items():
|
|
231
|
-
ref = refs.get(project, 'master')
|
|
232
|
-
if not isinstance(ref, str) or not ref or ref.startswith('-'):
|
|
233
|
-
raise ValueError(f'Invalid dependency ref for {project}: {ref!r}')
|
|
234
|
-
run(['git', 'check-ref-format', '--allow-onelevel', ref], check=True)
|
|
235
|
-
output.write(f'{key}={ref}\n')
|
|
236
|
-
print(f'{project} dependency ref: {ref}')
|
|
237
|
-
PY
|
|
238
198
|
- name: Preserve customer release notes
|
|
239
199
|
uses: actions/upload-artifact@v7
|
|
240
200
|
with:
|
|
@@ -255,7 +215,7 @@ jobs:
|
|
|
255
215
|
matrix:
|
|
256
216
|
python: ['3.9', '3.10', '3.11', '3.12', '3.13', '3.14']
|
|
257
217
|
env:
|
|
258
|
-
PROJECT:
|
|
218
|
+
PROJECT: DefStream
|
|
259
219
|
DEFSTREAM_RABBITMQ_TESTS: '1'
|
|
260
220
|
DEFSTREAM_REDIS_TESTS: '1'
|
|
261
221
|
services:
|
|
@@ -285,30 +245,11 @@ jobs:
|
|
|
285
245
|
- name: Check out core
|
|
286
246
|
uses: actions/checkout@v7
|
|
287
247
|
with:
|
|
288
|
-
|
|
289
|
-
ref: ${{ github.event.repository.name == 'DefStream' && github.sha || needs.changes.outputs.core_ref }}
|
|
248
|
+
ref: ${{ github.sha }}
|
|
290
249
|
path: packages/DefStream
|
|
291
250
|
fetch-depth: 0
|
|
292
251
|
persist-credentials: false
|
|
293
252
|
|
|
294
|
-
- name: Check out RabbitMQ adapter
|
|
295
|
-
uses: actions/checkout@v7
|
|
296
|
-
with:
|
|
297
|
-
repository: yong5eon/DefStream-RabbitMQ
|
|
298
|
-
ref: ${{ github.event.repository.name == 'DefStream-RabbitMQ' && github.sha || needs.changes.outputs.rabbitmq_ref }}
|
|
299
|
-
path: packages/DefStream-RabbitMQ
|
|
300
|
-
fetch-depth: 0
|
|
301
|
-
persist-credentials: false
|
|
302
|
-
|
|
303
|
-
- name: Check out Redis adapter
|
|
304
|
-
uses: actions/checkout@v7
|
|
305
|
-
with:
|
|
306
|
-
repository: yong5eon/DefStream-Redis
|
|
307
|
-
ref: ${{ github.event.repository.name == 'DefStream-Redis' && github.sha || needs.changes.outputs.redis_ref }}
|
|
308
|
-
path: packages/DefStream-Redis
|
|
309
|
-
fetch-depth: 0
|
|
310
|
-
persist-credentials: false
|
|
311
|
-
|
|
312
253
|
- name: Set up Python
|
|
313
254
|
uses: actions/setup-python@v7
|
|
314
255
|
with:
|
|
@@ -329,7 +270,7 @@ jobs:
|
|
|
329
270
|
from re import fullmatch
|
|
330
271
|
|
|
331
272
|
project = environ['PROJECT']
|
|
332
|
-
if project
|
|
273
|
+
if project != 'DefStream':
|
|
333
274
|
raise ValueError(f'Unexpected project: {project}')
|
|
334
275
|
if environ['RELEASE_BUILD'] != 'true':
|
|
335
276
|
print('Test-only build: using the existing Git-derived development version.')
|
|
@@ -353,23 +294,17 @@ jobs:
|
|
|
353
294
|
NEW_VERSION: ${{ needs.changes.outputs.new_version }}
|
|
354
295
|
WHEEL_BUILD: ${{ needs.changes.outputs.build }}
|
|
355
296
|
run: |
|
|
356
|
-
mkdir -p dist
|
|
357
|
-
|
|
358
|
-
if [ "$
|
|
359
|
-
|
|
360
|
-
if [ "$NEW_VERSION" = "true" ]; then
|
|
361
|
-
SETUPTOOLS_SCM_PRETEND_VERSION="$RELEASE_VERSION" python -m build --outdir "$GITHUB_WORKSPACE/dist" "packages/$name"
|
|
362
|
-
else
|
|
363
|
-
SETUPTOOLS_SCM_PRETEND_VERSION="$RELEASE_VERSION" python -m build --wheel --outdir "$GITHUB_WORKSPACE/dist" "packages/$name"
|
|
364
|
-
fi
|
|
365
|
-
python -m wheel tags --build "$WHEEL_BUILD" --remove dist/*.whl
|
|
366
|
-
else
|
|
367
|
-
python -m build --outdir "$GITHUB_WORKSPACE/dist" "packages/$name"
|
|
368
|
-
fi
|
|
297
|
+
mkdir -p dist
|
|
298
|
+
if [ "$RELEASE_BUILD" = "true" ]; then
|
|
299
|
+
if [ "$NEW_VERSION" = "true" ]; then
|
|
300
|
+
SETUPTOOLS_SCM_PRETEND_VERSION="$RELEASE_VERSION" python -m build --outdir "$GITHUB_WORKSPACE/dist" packages/DefStream
|
|
369
301
|
else
|
|
370
|
-
python -m build --outdir "$GITHUB_WORKSPACE/
|
|
302
|
+
SETUPTOOLS_SCM_PRETEND_VERSION="$RELEASE_VERSION" python -m build --wheel --outdir "$GITHUB_WORKSPACE/dist" packages/DefStream
|
|
371
303
|
fi
|
|
372
|
-
|
|
304
|
+
python -m wheel tags --build "$WHEEL_BUILD" --remove dist/*.whl
|
|
305
|
+
else
|
|
306
|
+
python -m build --outdir "$GITHUB_WORKSPACE/dist" packages/DefStream
|
|
307
|
+
fi
|
|
373
308
|
python -m twine check --strict dist/*
|
|
374
309
|
|
|
375
310
|
- name: Normalize source archive timestamps
|
|
@@ -399,31 +334,54 @@ jobs:
|
|
|
399
334
|
path.write_bytes(buffer.getvalue())
|
|
400
335
|
PY
|
|
401
336
|
|
|
337
|
+
- name: Verify optional client installations
|
|
338
|
+
run: |
|
|
339
|
+
python - <<'PY'
|
|
340
|
+
from os import environ
|
|
341
|
+
from pathlib import Path
|
|
342
|
+
from subprocess import run
|
|
343
|
+
from venv import EnvBuilder
|
|
344
|
+
|
|
345
|
+
wheel, = Path('dist').glob('*.whl')
|
|
346
|
+
for extra, modules in (
|
|
347
|
+
('', ('DefStream', 'DefStream.Worker', 'DefStream.Inspector')),
|
|
348
|
+
('RabbitMQ', ('DefStream.Broker.Implements.RabbitMQ',)),
|
|
349
|
+
('Redis', ('DefStream.Broker.Implements.Redis',)),
|
|
350
|
+
):
|
|
351
|
+
environment = Path(environ['RUNNER_TEMP'], 'optional-' + (extra or 'core'))
|
|
352
|
+
EnvBuilder(with_pip=True).create(environment)
|
|
353
|
+
python = environment / 'bin' / 'python'
|
|
354
|
+
package = str(wheel.resolve()) + (f'[{extra}]' if extra else '')
|
|
355
|
+
run([str(python), '-m', 'pip', 'install', package], check=True)
|
|
356
|
+
code = (
|
|
357
|
+
'from importlib import import_module; from importlib.util import find_spec; '
|
|
358
|
+
f'assert (find_spec("pika") is not None) == {extra == "RabbitMQ"}; '
|
|
359
|
+
f'assert (find_spec("redis") is not None) == {extra == "Redis"}; '
|
|
360
|
+
f'[import_module(name) for name in {modules!r}]'
|
|
361
|
+
)
|
|
362
|
+
run([str(python), '-I', '-c', code], check=True)
|
|
363
|
+
run([str(python), '-m', 'pip', 'check'], check=True)
|
|
364
|
+
PY
|
|
365
|
+
|
|
402
366
|
- name: Install built wheels into a clean environment
|
|
403
367
|
run: |
|
|
404
368
|
python -m venv "$RUNNER_TEMP/installed"
|
|
405
|
-
"$RUNNER_TEMP/installed/bin/python" -m pip install dist/*.whl
|
|
369
|
+
"$RUNNER_TEMP/installed/bin/python" -m pip install "$(echo dist/*.whl)[RabbitMQ,Redis]"
|
|
406
370
|
"$RUNNER_TEMP/installed/bin/python" -m pip check
|
|
407
371
|
|
|
408
372
|
- name: Test installed package
|
|
409
373
|
run: |
|
|
410
374
|
cd "$RUNNER_TEMP"
|
|
411
|
-
test_directory=test
|
|
412
|
-
if [ "$PROJECT" = "DefStream" ]; then
|
|
413
|
-
test_directory=tests
|
|
414
|
-
fi
|
|
415
375
|
"$RUNNER_TEMP/installed/bin/python" -m unittest discover \
|
|
416
|
-
-s "$GITHUB_WORKSPACE/packages
|
|
376
|
+
-s "$GITHUB_WORKSPACE/packages/DefStream/tests" -p 'test_*.py' -v
|
|
417
377
|
|
|
418
378
|
- name: Set up Node for core UI tests
|
|
419
|
-
if: env.PROJECT == 'DefStream'
|
|
420
379
|
uses: actions/setup-node@v7
|
|
421
380
|
with:
|
|
422
381
|
node-version: '22'
|
|
423
382
|
|
|
424
383
|
- name: Test core UI
|
|
425
|
-
|
|
426
|
-
run: node --test packages/DefStream/tests/test_dashboard_ui.cjs
|
|
384
|
+
run: node --test packages/DefStream/tests/test_status_ui.cjs
|
|
427
385
|
|
|
428
386
|
- name: Preserve verified release distributions
|
|
429
387
|
if: needs.changes.outputs.release == 'true' && matrix.python == '3.13'
|