solverforge 0.6.0__tar.gz → 0.6.2__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.
- {solverforge-0.6.0 → solverforge-0.6.2}/Cargo.lock +13 -85
- {solverforge-0.6.0 → solverforge-0.6.2}/Cargo.toml +19 -8
- {solverforge-0.6.0 → solverforge-0.6.2}/PKG-INFO +9 -15
- {solverforge-0.6.0 → solverforge-0.6.2}/README.md +8 -14
- {solverforge-0.6.0 → solverforge-0.6.2}/pyproject.toml +1 -1
- {solverforge-0.6.0 → solverforge-0.6.2}/python/solverforge/__init__.py +1 -1
- solverforge-0.6.0/.github/workflows/ci.yml +0 -69
- solverforge-0.6.0/.github/workflows/release.yml +0 -212
- solverforge-0.6.0/.gitignore +0 -11
- solverforge-0.6.0/.pre-commit-config.yaml +0 -31
- solverforge-0.6.0/.python-version +0 -1
- solverforge-0.6.0/AGENTS.md +0 -153
- solverforge-0.6.0/CHANGELOG.md +0 -61
- solverforge-0.6.0/Makefile +0 -419
- solverforge-0.6.0/WIREFRAME.md +0 -456
- solverforge-0.6.0/examples/list_tsp.py +0 -20
- solverforge-0.6.0/examples/mixed_job_shop.py +0 -30
- solverforge-0.6.0/examples/nqueens.py +0 -36
- solverforge-0.6.0/examples/shift_scheduling.py +0 -45
- solverforge-0.6.0/examples/solverforge_deliveries/README.md +0 -90
- solverforge-0.6.0/examples/solverforge_deliveries/__init__.py +0 -23
- solverforge-0.6.0/examples/solverforge_deliveries/__main__.py +0 -32
- solverforge-0.6.0/examples/solverforge_deliveries/solver.toml +0 -51
- solverforge-0.6.0/examples/solverforge_deliveries/src/__init__.py +0 -1
- solverforge-0.6.0/examples/solverforge_deliveries/src/api/__init__.py +0 -1
- solverforge-0.6.0/examples/solverforge_deliveries/src/api/dto.py +0 -233
- solverforge-0.6.0/examples/solverforge_deliveries/src/api/mod.py +0 -3
- solverforge-0.6.0/examples/solverforge_deliveries/src/api/routes.py +0 -239
- solverforge-0.6.0/examples/solverforge_deliveries/src/api/sse.py +0 -42
- solverforge-0.6.0/examples/solverforge_deliveries/src/constraints/__init__.py +0 -5
- solverforge-0.6.0/examples/solverforge_deliveries/src/constraints/mod.py +0 -47
- solverforge-0.6.0/examples/solverforge_deliveries/src/data/__init__.py +0 -5
- solverforge-0.6.0/examples/solverforge_deliveries/src/data/data_seed/__init__.py +0 -5
- solverforge-0.6.0/examples/solverforge_deliveries/src/data/data_seed/entrypoints.py +0 -149
- solverforge-0.6.0/examples/solverforge_deliveries/src/data/data_seed/locations.json +0 -1472
- solverforge-0.6.0/examples/solverforge_deliveries/src/data/mod.py +0 -1
- solverforge-0.6.0/examples/solverforge_deliveries/src/domain/__init__.py +0 -33
- solverforge-0.6.0/examples/solverforge_deliveries/src/domain/delivery.py +0 -32
- solverforge-0.6.0/examples/solverforge_deliveries/src/domain/metrics.py +0 -493
- solverforge-0.6.0/examples/solverforge_deliveries/src/domain/mod.py +0 -1
- solverforge-0.6.0/examples/solverforge_deliveries/src/domain/plan.py +0 -126
- solverforge-0.6.0/examples/solverforge_deliveries/src/domain/vehicle.py +0 -112
- solverforge-0.6.0/examples/solverforge_deliveries/src/lib.py +0 -34
- solverforge-0.6.0/examples/solverforge_deliveries/src/main.py +0 -22
- solverforge-0.6.0/examples/solverforge_deliveries/src/solver/__init__.py +0 -5
- solverforge-0.6.0/examples/solverforge_deliveries/src/solver/mod.py +0 -1
- solverforge-0.6.0/examples/solverforge_deliveries/src/solver/service/__init__.py +0 -196
- solverforge-0.6.0/examples/solverforge_deliveries/src/solver/service/mod.py +0 -7
- solverforge-0.6.0/examples/solverforge_deliveries/src/solver/service/payload.py +0 -86
- solverforge-0.6.0/examples/solverforge_deliveries/static/app/main.mjs +0 -287
- solverforge-0.6.0/examples/solverforge_deliveries/static/app/models/core.mjs +0 -57
- solverforge-0.6.0/examples/solverforge_deliveries/static/app/models/formatters.mjs +0 -53
- solverforge-0.6.0/examples/solverforge_deliveries/static/app/models/preview.mjs +0 -154
- solverforge-0.6.0/examples/solverforge_deliveries/static/app/models/timeline.mjs +0 -94
- solverforge-0.6.0/examples/solverforge_deliveries/static/app/models.mjs +0 -8
- solverforge-0.6.0/examples/solverforge_deliveries/static/app/ui/api-guide.mjs +0 -29
- solverforge-0.6.0/examples/solverforge_deliveries/static/app/ui/components.mjs +0 -44
- solverforge-0.6.0/examples/solverforge_deliveries/static/app/ui/data-tables.mjs +0 -98
- solverforge-0.6.0/examples/solverforge_deliveries/static/app/ui/layout.mjs +0 -123
- solverforge-0.6.0/examples/solverforge_deliveries/static/app/ui/lifecycle.mjs +0 -23
- solverforge-0.6.0/examples/solverforge_deliveries/static/app/ui/modals.mjs +0 -63
- solverforge-0.6.0/examples/solverforge_deliveries/static/app/ui/overview.mjs +0 -172
- solverforge-0.6.0/examples/solverforge_deliveries/static/app.css +0 -196
- solverforge-0.6.0/examples/solverforge_deliveries/static/app.js +0 -3
- solverforge-0.6.0/examples/solverforge_deliveries/static/generated/ui-model.json +0 -25
- solverforge-0.6.0/examples/solverforge_deliveries/static/index.html +0 -22
- solverforge-0.6.0/examples/solverforge_deliveries/static/sf-config.json +0 -4
- solverforge-0.6.0/examples/solverforge_hospital/README.md +0 -86
- solverforge-0.6.0/examples/solverforge_hospital/__init__.py +0 -43
- solverforge-0.6.0/examples/solverforge_hospital/__main__.py +0 -32
- solverforge-0.6.0/examples/solverforge_hospital/solver.toml +0 -38
- solverforge-0.6.0/examples/solverforge_hospital/src/__init__.py +0 -41
- solverforge-0.6.0/examples/solverforge_hospital/src/api/__init__.py +0 -20
- solverforge-0.6.0/examples/solverforge_hospital/src/api/dto.py +0 -299
- solverforge-0.6.0/examples/solverforge_hospital/src/api/mod.py +0 -20
- solverforge-0.6.0/examples/solverforge_hospital/src/api/routes.py +0 -193
- solverforge-0.6.0/examples/solverforge_hospital/src/api/sse.py +0 -42
- solverforge-0.6.0/examples/solverforge_hospital/src/constraints/__init__.py +0 -3
- solverforge-0.6.0/examples/solverforge_hospital/src/constraints/assigned_shift.py +0 -14
- solverforge-0.6.0/examples/solverforge_hospital/src/constraints/balance_assignments.py +0 -20
- solverforge-0.6.0/examples/solverforge_hospital/src/constraints/desired_day.py +0 -24
- solverforge-0.6.0/examples/solverforge_hospital/src/constraints/minimum_rest.py +0 -33
- solverforge-0.6.0/examples/solverforge_hospital/src/constraints/mod.py +0 -42
- solverforge-0.6.0/examples/solverforge_hospital/src/constraints/one_shift_per_day.py +0 -16
- solverforge-0.6.0/examples/solverforge_hospital/src/constraints/overlapping_shift.py +0 -28
- solverforge-0.6.0/examples/solverforge_hospital/src/constraints/required_skill.py +0 -20
- solverforge-0.6.0/examples/solverforge_hospital/src/constraints/unavailable_employee.py +0 -32
- solverforge-0.6.0/examples/solverforge_hospital/src/constraints/undesired_day.py +0 -24
- solverforge-0.6.0/examples/solverforge_hospital/src/data/__init__.py +0 -23
- solverforge-0.6.0/examples/solverforge_hospital/src/data/data_seed/LARGE.json +0 -1
- solverforge-0.6.0/examples/solverforge_hospital/src/data/data_seed/__init__.py +0 -13
- solverforge-0.6.0/examples/solverforge_hospital/src/data/data_seed/availability.py +0 -16
- solverforge-0.6.0/examples/solverforge_hospital/src/data/data_seed/cohorts.py +0 -14
- solverforge-0.6.0/examples/solverforge_hospital/src/data/data_seed/coverage.py +0 -14
- solverforge-0.6.0/examples/solverforge_hospital/src/data/data_seed/demand.py +0 -9
- solverforge-0.6.0/examples/solverforge_hospital/src/data/data_seed/employees.py +0 -18
- solverforge-0.6.0/examples/solverforge_hospital/src/data/data_seed/entrypoints.py +0 -32
- solverforge-0.6.0/examples/solverforge_hospital/src/data/data_seed/large.py +0 -16
- solverforge-0.6.0/examples/solverforge_hospital/src/data/data_seed/preferences.py +0 -17
- solverforge-0.6.0/examples/solverforge_hospital/src/data/data_seed/shifts.py +0 -20
- solverforge-0.6.0/examples/solverforge_hospital/src/data/data_seed/skills.py +0 -15
- solverforge-0.6.0/examples/solverforge_hospital/src/data/data_seed/time_utils.py +0 -5
- solverforge-0.6.0/examples/solverforge_hospital/src/data/data_seed/validation.py +0 -12
- solverforge-0.6.0/examples/solverforge_hospital/src/data/data_seed/vocabulary.py +0 -10
- solverforge-0.6.0/examples/solverforge_hospital/src/data/data_seed/witness.py +0 -10
- solverforge-0.6.0/examples/solverforge_hospital/src/data/mod.py +0 -3
- solverforge-0.6.0/examples/solverforge_hospital/src/domain/__init__.py +0 -59
- solverforge-0.6.0/examples/solverforge_hospital/src/domain/care_hub.py +0 -63
- solverforge-0.6.0/examples/solverforge_hospital/src/domain/employee.py +0 -32
- solverforge-0.6.0/examples/solverforge_hospital/src/domain/mod.py +0 -19
- solverforge-0.6.0/examples/solverforge_hospital/src/domain/plan.py +0 -301
- solverforge-0.6.0/examples/solverforge_hospital/src/lib.py +0 -56
- solverforge-0.6.0/examples/solverforge_hospital/src/main.py +0 -22
- solverforge-0.6.0/examples/solverforge_hospital/src/solver/__init__.py +0 -8
- solverforge-0.6.0/examples/solverforge_hospital/src/solver/mod.py +0 -8
- solverforge-0.6.0/examples/solverforge_hospital/src/solver/service/__init__.py +0 -202
- solverforge-0.6.0/examples/solverforge_hospital/src/solver/service/mod.py +0 -8
- solverforge-0.6.0/examples/solverforge_hospital/src/solver/service/payload.py +0 -86
- solverforge-0.6.0/examples/solverforge_hospital/static/app/main.mjs +0 -130
- solverforge-0.6.0/examples/solverforge_hospital/static/app/schedule/analysis-modal.mjs +0 -79
- solverforge-0.6.0/examples/solverforge_hospital/static/app/schedule/datetime.mjs +0 -60
- solverforge-0.6.0/examples/solverforge_hospital/static/app/schedule/employee-view.mjs +0 -95
- solverforge-0.6.0/examples/solverforge_hospital/static/app/schedule/grouping.mjs +0 -77
- solverforge-0.6.0/examples/solverforge_hospital/static/app/schedule/identity.mjs +0 -33
- solverforge-0.6.0/examples/solverforge_hospital/static/app/schedule/location-view.mjs +0 -42
- solverforge-0.6.0/examples/solverforge_hospital/static/app/schedule/presentation.mjs +0 -116
- solverforge-0.6.0/examples/solverforge_hospital/static/app/schedule/rail-renderer.mjs +0 -154
- solverforge-0.6.0/examples/solverforge_hospital/static/app/shell/api-guide.mjs +0 -104
- solverforge-0.6.0/examples/solverforge_hospital/static/app/shell/app-shell.mjs +0 -103
- solverforge-0.6.0/examples/solverforge_hospital/static/app/shell/app-state.mjs +0 -7
- solverforge-0.6.0/examples/solverforge_hospital/static/app/shell/config-loader.mjs +0 -63
- solverforge-0.6.0/examples/solverforge_hospital/static/app/shell/data-panel.mjs +0 -22
- solverforge-0.6.0/examples/solverforge_hospital/static/app/shell/solver-controller.mjs +0 -134
- solverforge-0.6.0/examples/solverforge_hospital/static/app/views/registry.mjs +0 -10
- solverforge-0.6.0/examples/solverforge_hospital/static/generated/ui-model.json +0 -41
- solverforge-0.6.0/examples/solverforge_hospital/static/index.html +0 -23
- solverforge-0.6.0/examples/solverforge_hospital/static/sf-config.json +0 -5
- solverforge-0.6.0/examples/vrp_owner_hooks.py +0 -21
- solverforge-0.6.0/scripts/verify_release_artifacts.py +0 -211
- solverforge-0.6.0/scripts/verify_solverforge_release_base.py +0 -109
- solverforge-0.6.0/tests/python/test_candidate_trace_provenance.py +0 -174
- solverforge-0.6.0/tests/python/test_config.py +0 -225
- solverforge-0.6.0/tests/python/test_constraints.py +0 -1440
- solverforge-0.6.0/tests/python/test_decorators.py +0 -606
- solverforge-0.6.0/tests/python/test_deliveries_example.py +0 -380
- solverforge-0.6.0/tests/python/test_deliveries_frontend_app.py +0 -289
- solverforge-0.6.0/tests/python/test_examples_import_surface.py +0 -63
- solverforge-0.6.0/tests/python/test_examples_playwright.py +0 -296
- solverforge-0.6.0/tests/python/test_hospital_example.py +0 -199
- solverforge-0.6.0/tests/python/test_hospital_frontend_app.py +0 -400
- solverforge-0.6.0/tests/python/test_list_solving.py +0 -2089
- solverforge-0.6.0/tests/python/test_manager.py +0 -372
- solverforge-0.6.0/tests/python/test_mixed_solving.py +0 -8
- solverforge-0.6.0/tests/python/test_release_metadata.py +0 -195
- solverforge-0.6.0/tests/python/test_scalar_solving.py +0 -3275
- solverforge-0.6.0/tests/python/test_threading.py +0 -11
- solverforge-0.6.0/tests/python/test_tracebacks.py +0 -185
- solverforge-0.6.0/tests/python/test_ui_assets.py +0 -125
- solverforge-0.6.0/tests/rust/constraint_set.rs +0 -45
- solverforge-0.6.0/tests/rust/descriptor.rs +0 -85
- solverforge-0.6.0/tests/rust/manager.rs +0 -6
- solverforge-0.6.0/tests/rust/runtime_slots.rs +0 -226
- solverforge-0.6.0/tests/rust/score.rs +0 -8
- solverforge-0.6.0/tests/rust/state_clone.rs +0 -306
- solverforge-0.6.0/tests/rust.rs +0 -16
- {solverforge-0.6.0 → solverforge-0.6.2}/LICENSE +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/python/solverforge/_native.pyi +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/python/solverforge/config.py +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/python/solverforge/console.py +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/python/solverforge/constraints.py +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/python/solverforge/decorators.py +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/python/solverforge/errors.py +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/python/solverforge/events.py +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/python/solverforge/fields.py +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/python/solverforge/groups.py +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/python/solverforge/joiner.py +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/python/solverforge/manager.py +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/python/solverforge/model.py +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/python/solverforge/py.typed +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/python/solverforge/score.py +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/python/solverforge/solver.py +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/python/solverforge/typing.py +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/python/solverforge/ui.py +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/rust-toolchain.toml +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/bindings.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/callbacks/call.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/callbacks/mod.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/callbacks/registry.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/callbacks/threading.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/config.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/constraints/compiled.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/constraints/evaluate.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/constraints/incremental.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/constraints/list_precedence.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/constraints/matches.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/constraints/mod.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/constraints/state.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/constraints/stream_plan.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/descriptor/extractor.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/descriptor/mod.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/descriptor/variable.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/error.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/intern.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/lib.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/manager/candidate_trace.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/manager/events.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/manager/jobs.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/manager/mod.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/manager/provenance.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/proxy/entity.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/proxy/list.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/proxy/mod.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/proxy/solution.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/runtime/candidate_metric.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/runtime/dynamic_assignment_group.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/runtime/dynamic_provider.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/runtime/list_slots.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/runtime/mod.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/runtime/scalar_slots.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/schema/build.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/schema/compiled.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/schema/mod.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/schema/parse.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/schema/python.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/schema/runtime_plan.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/schema/types.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/schema/validate.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/score.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/solver/api.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/solver/console.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/solver/mod.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/solver/progress.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/solver/result.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/solver/solvable.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/state/callback_view.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/state/clone.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/state/entity_table.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/state/marshal.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/state/mod.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/state/solution.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/state/variables.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/ui.rs +0 -0
- {solverforge-0.6.0 → solverforge-0.6.2}/src/value.rs +0 -0
|
@@ -29,12 +29,6 @@ version = "2.13.0"
|
|
|
29
29
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
30
30
|
checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8"
|
|
31
31
|
|
|
32
|
-
[[package]]
|
|
33
|
-
name = "bytes"
|
|
34
|
-
version = "1.12.0"
|
|
35
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
36
|
-
checksum = "8ae3f5d315924270530207e2a68396c3cc547f6dca3fbdca317cfb1a51edb593"
|
|
37
|
-
|
|
38
32
|
[[package]]
|
|
39
33
|
name = "cfg-if"
|
|
40
34
|
version = "1.0.4"
|
|
@@ -104,16 +98,6 @@ version = "1.0.2"
|
|
|
104
98
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
105
99
|
checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
|
|
106
100
|
|
|
107
|
-
[[package]]
|
|
108
|
-
name = "errno"
|
|
109
|
-
version = "0.3.14"
|
|
110
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
111
|
-
checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
|
|
112
|
-
dependencies = [
|
|
113
|
-
"libc",
|
|
114
|
-
"windows-sys",
|
|
115
|
-
]
|
|
116
|
-
|
|
117
101
|
[[package]]
|
|
118
102
|
name = "getrandom"
|
|
119
103
|
version = "0.4.3"
|
|
@@ -233,17 +217,6 @@ dependencies = [
|
|
|
233
217
|
"autocfg",
|
|
234
218
|
]
|
|
235
219
|
|
|
236
|
-
[[package]]
|
|
237
|
-
name = "mio"
|
|
238
|
-
version = "1.2.1"
|
|
239
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
240
|
-
checksum = "02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda"
|
|
241
|
-
dependencies = [
|
|
242
|
-
"libc",
|
|
243
|
-
"wasi",
|
|
244
|
-
"windows-sys",
|
|
245
|
-
]
|
|
246
|
-
|
|
247
220
|
[[package]]
|
|
248
221
|
name = "nu-ansi-term"
|
|
249
222
|
version = "0.50.3"
|
|
@@ -579,37 +552,17 @@ dependencies = [
|
|
|
579
552
|
"lazy_static",
|
|
580
553
|
]
|
|
581
554
|
|
|
582
|
-
[[package]]
|
|
583
|
-
name = "signal-hook-registry"
|
|
584
|
-
version = "1.4.8"
|
|
585
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
586
|
-
checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b"
|
|
587
|
-
dependencies = [
|
|
588
|
-
"errno",
|
|
589
|
-
"libc",
|
|
590
|
-
]
|
|
591
|
-
|
|
592
555
|
[[package]]
|
|
593
556
|
name = "smallvec"
|
|
594
557
|
version = "1.15.2"
|
|
595
558
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
596
559
|
checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90"
|
|
597
560
|
|
|
598
|
-
[[package]]
|
|
599
|
-
name = "socket2"
|
|
600
|
-
version = "0.6.4"
|
|
601
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
602
|
-
checksum = "52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51"
|
|
603
|
-
dependencies = [
|
|
604
|
-
"libc",
|
|
605
|
-
"windows-sys",
|
|
606
|
-
]
|
|
607
|
-
|
|
608
561
|
[[package]]
|
|
609
562
|
name = "solverforge-bridge"
|
|
610
|
-
version = "0.
|
|
563
|
+
version = "0.19.0"
|
|
611
564
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
612
|
-
checksum = "
|
|
565
|
+
checksum = "f47d5b1bc4e9ea86acf24e3e71f971161bc5c1eba09d4b7105a25542045ed59a"
|
|
613
566
|
dependencies = [
|
|
614
567
|
"solverforge-config",
|
|
615
568
|
"solverforge-core",
|
|
@@ -619,9 +572,9 @@ dependencies = [
|
|
|
619
572
|
|
|
620
573
|
[[package]]
|
|
621
574
|
name = "solverforge-config"
|
|
622
|
-
version = "0.
|
|
575
|
+
version = "0.19.0"
|
|
623
576
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
624
|
-
checksum = "
|
|
577
|
+
checksum = "a94f2ff36fc3513dd17473fea8402a7908470b0d18132862e938b402d4cc3dce"
|
|
625
578
|
dependencies = [
|
|
626
579
|
"serde",
|
|
627
580
|
"serde_yaml",
|
|
@@ -632,9 +585,9 @@ dependencies = [
|
|
|
632
585
|
|
|
633
586
|
[[package]]
|
|
634
587
|
name = "solverforge-console"
|
|
635
|
-
version = "0.
|
|
588
|
+
version = "0.19.0"
|
|
636
589
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
637
|
-
checksum = "
|
|
590
|
+
checksum = "5ecece452a5533bda0f129188cf5284b06b5f0f4b32b6334521e5dbcefa2a318"
|
|
638
591
|
dependencies = [
|
|
639
592
|
"num-format",
|
|
640
593
|
"owo-colors",
|
|
@@ -644,18 +597,18 @@ dependencies = [
|
|
|
644
597
|
|
|
645
598
|
[[package]]
|
|
646
599
|
name = "solverforge-core"
|
|
647
|
-
version = "0.
|
|
600
|
+
version = "0.19.0"
|
|
648
601
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
649
|
-
checksum = "
|
|
602
|
+
checksum = "75396bba5cd24cd16c77477e7ef93dac5643026998904aa862c1bd3f70a5a04f"
|
|
650
603
|
dependencies = [
|
|
651
604
|
"thiserror",
|
|
652
605
|
]
|
|
653
606
|
|
|
654
607
|
[[package]]
|
|
655
608
|
name = "solverforge-scoring"
|
|
656
|
-
version = "0.
|
|
609
|
+
version = "0.19.0"
|
|
657
610
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
658
|
-
checksum = "
|
|
611
|
+
checksum = "85df4f001bed630512b2205334113c1766d80ac8b7f4a5da1c2c63f680db1494"
|
|
659
612
|
dependencies = [
|
|
660
613
|
"solverforge-core",
|
|
661
614
|
"thiserror",
|
|
@@ -663,9 +616,9 @@ dependencies = [
|
|
|
663
616
|
|
|
664
617
|
[[package]]
|
|
665
618
|
name = "solverforge-solver"
|
|
666
|
-
version = "0.
|
|
619
|
+
version = "0.19.0"
|
|
667
620
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
668
|
-
checksum = "
|
|
621
|
+
checksum = "606d50e70307c448f09370028d7ec02172066899896fd8142dd59886b0cb555e"
|
|
669
622
|
dependencies = [
|
|
670
623
|
"rand",
|
|
671
624
|
"rand_chacha",
|
|
@@ -691,7 +644,7 @@ dependencies = [
|
|
|
691
644
|
|
|
692
645
|
[[package]]
|
|
693
646
|
name = "solverforge_py"
|
|
694
|
-
version = "0.6.
|
|
647
|
+
version = "0.6.2"
|
|
695
648
|
dependencies = [
|
|
696
649
|
"indexmap",
|
|
697
650
|
"once_cell",
|
|
@@ -767,26 +720,7 @@ version = "1.52.3"
|
|
|
767
720
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
768
721
|
checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe"
|
|
769
722
|
dependencies = [
|
|
770
|
-
"bytes",
|
|
771
|
-
"libc",
|
|
772
|
-
"mio",
|
|
773
|
-
"parking_lot",
|
|
774
723
|
"pin-project-lite",
|
|
775
|
-
"signal-hook-registry",
|
|
776
|
-
"socket2",
|
|
777
|
-
"tokio-macros",
|
|
778
|
-
"windows-sys",
|
|
779
|
-
]
|
|
780
|
-
|
|
781
|
-
[[package]]
|
|
782
|
-
name = "tokio-macros"
|
|
783
|
-
version = "2.7.0"
|
|
784
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
785
|
-
checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496"
|
|
786
|
-
dependencies = [
|
|
787
|
-
"proc-macro2",
|
|
788
|
-
"quote",
|
|
789
|
-
"syn",
|
|
790
724
|
]
|
|
791
725
|
|
|
792
726
|
[[package]]
|
|
@@ -937,12 +871,6 @@ version = "0.1.1"
|
|
|
937
871
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
938
872
|
checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65"
|
|
939
873
|
|
|
940
|
-
[[package]]
|
|
941
|
-
name = "wasi"
|
|
942
|
-
version = "0.11.1+wasi-snapshot-preview1"
|
|
943
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
944
|
-
checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
|
|
945
|
-
|
|
946
874
|
[[package]]
|
|
947
875
|
name = "windows-link"
|
|
948
876
|
version = "0.2.1"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[package]
|
|
2
2
|
name = "solverforge_py"
|
|
3
|
-
version = "0.6.
|
|
3
|
+
version = "0.6.2"
|
|
4
4
|
edition = "2021"
|
|
5
5
|
license = "Apache-2.0"
|
|
6
6
|
rust-version = "1.95"
|
|
@@ -9,13 +9,24 @@ readme = "README.md"
|
|
|
9
9
|
repository = "https://github.com/SolverForge/solverforge-py"
|
|
10
10
|
homepage = "https://solverforge.org"
|
|
11
11
|
documentation = "https://docs.solverforge.org"
|
|
12
|
+
include = [
|
|
13
|
+
"/Cargo.lock",
|
|
14
|
+
"/LICENSE",
|
|
15
|
+
"/README.md",
|
|
16
|
+
"/pyproject.toml",
|
|
17
|
+
"/python/solverforge/*.py",
|
|
18
|
+
"/python/solverforge/*.pyi",
|
|
19
|
+
"/python/solverforge/py.typed",
|
|
20
|
+
"/rust-toolchain.toml",
|
|
21
|
+
"/src/**",
|
|
22
|
+
]
|
|
12
23
|
|
|
13
24
|
[lib]
|
|
14
25
|
name = "solverforge_py"
|
|
15
26
|
crate-type = ["cdylib", "rlib"]
|
|
16
27
|
|
|
17
28
|
[package.metadata.solverforge]
|
|
18
|
-
version = "0.
|
|
29
|
+
version = "0.19.0"
|
|
19
30
|
|
|
20
31
|
[dependencies]
|
|
21
32
|
indexmap = "2.12.1"
|
|
@@ -31,12 +42,12 @@ toml = "0.9.8"
|
|
|
31
42
|
tracing = "0.1.44"
|
|
32
43
|
tracing-subscriber = { version = "0.3.23", features = ["env-filter"] }
|
|
33
44
|
|
|
34
|
-
solverforge-config = { version = "=0.
|
|
35
|
-
solverforge-bridge = { version = "=0.
|
|
36
|
-
solverforge-console = { version = "=0.
|
|
37
|
-
solverforge-core = { version = "=0.
|
|
38
|
-
solverforge-scoring = { version = "=0.
|
|
39
|
-
solverforge-solver = { version = "=0.
|
|
45
|
+
solverforge-config = { version = "=0.19.0" }
|
|
46
|
+
solverforge-bridge = { version = "=0.19.0" }
|
|
47
|
+
solverforge-console = { version = "=0.19.0", features = ["verbose-logging"] }
|
|
48
|
+
solverforge-core = { version = "=0.19.0" }
|
|
49
|
+
solverforge-scoring = { version = "=0.19.0" }
|
|
50
|
+
solverforge-solver = { version = "=0.19.0" }
|
|
40
51
|
solverforge-ui = { version = "=0.7.0", default-features = false }
|
|
41
52
|
|
|
42
53
|
[dev-dependencies]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: solverforge
|
|
3
|
-
Version: 0.6.
|
|
3
|
+
Version: 0.6.2
|
|
4
4
|
Classifier: Development Status :: 3 - Alpha
|
|
5
5
|
Classifier: Intended Audience :: Developers
|
|
6
6
|
Classifier: Intended Audience :: Science/Research
|
|
@@ -40,7 +40,7 @@ clone, mutate, and snapshot solutions safely. Python callbacks are the single
|
|
|
40
40
|
constraint authoring surface.
|
|
41
41
|
|
|
42
42
|
The package targets CPython 3.14 and Rust 1.95.0. This checkout consumes the
|
|
43
|
-
published SolverForge Rust crates `0.
|
|
43
|
+
published SolverForge Rust crates `0.19.0` and pins `solverforge-ui` to `0.7.0`
|
|
44
44
|
through exact crates.io versions in `Cargo.toml` and registry checksums in
|
|
45
45
|
`Cargo.lock`; it has no local path or Git dependency override. The `solverforge`
|
|
46
46
|
`0.6.x` line is the current dynamic binding architecture and intentionally
|
|
@@ -50,11 +50,12 @@ Java service requirements, and other APIs that are not part of this package.
|
|
|
50
50
|
|
|
51
51
|
## Installation
|
|
52
52
|
|
|
53
|
-
|
|
54
|
-
locked SolverForge Rust `0.
|
|
53
|
+
The package version prepared by this checkout is `solverforge` `0.6.2`, built
|
|
54
|
+
on the exact published and locked SolverForge Rust `0.19.0` registry dependency
|
|
55
|
+
base. Install the matching package after publication with:
|
|
55
56
|
|
|
56
57
|
```sh
|
|
57
|
-
python3.14 -m pip install "solverforge==0.6.
|
|
58
|
+
python3.14 -m pip install "solverforge==0.6.2"
|
|
58
59
|
```
|
|
59
60
|
|
|
60
61
|
The installable wheel contains the core `solverforge` package, native extension,
|
|
@@ -73,13 +74,13 @@ make hospital-run
|
|
|
73
74
|
make deliveries-run PORT=7861
|
|
74
75
|
```
|
|
75
76
|
|
|
76
|
-
|
|
77
|
-
without `PYTHONPATH` or an editable checkout:
|
|
77
|
+
After publication, the same source-checkout examples can be run against the
|
|
78
|
+
installed package without `PYTHONPATH` or an editable checkout:
|
|
78
79
|
|
|
79
80
|
```sh
|
|
80
81
|
python3.14 -m venv .venv-examples
|
|
81
82
|
. .venv-examples/bin/activate
|
|
82
|
-
python -m pip install "solverforge[examples]==0.6.
|
|
83
|
+
python -m pip install "solverforge[examples]==0.6.2"
|
|
83
84
|
python examples/nqueens.py
|
|
84
85
|
python -m examples.solverforge_hospital
|
|
85
86
|
python -m examples.solverforge_deliveries
|
|
@@ -402,13 +403,6 @@ solution state, safe to run concurrently, and treat solution-level lookup contex
|
|
|
402
403
|
as immutable for the duration of a solve. Third-party Python extension modules
|
|
403
404
|
used inside callbacks may still impose their own synchronization constraints.
|
|
404
405
|
|
|
405
|
-
## Release
|
|
406
|
-
|
|
407
|
-
The current package and crate version is `0.6.0`, built on the published
|
|
408
|
-
SolverForge `0.18.0` crates and `solverforge-ui` `0.7.0`. `Cargo.lock` resolves
|
|
409
|
-
those exact crates from crates.io. Maintainers run `make pre-release` to verify
|
|
410
|
-
the dependency base, local CI, distribution metadata, and artifact contents.
|
|
411
|
-
|
|
412
406
|
## License
|
|
413
407
|
|
|
414
408
|
SolverForge Python is licensed under the Apache License, Version 2.0. See
|
|
@@ -9,7 +9,7 @@ clone, mutate, and snapshot solutions safely. Python callbacks are the single
|
|
|
9
9
|
constraint authoring surface.
|
|
10
10
|
|
|
11
11
|
The package targets CPython 3.14 and Rust 1.95.0. This checkout consumes the
|
|
12
|
-
published SolverForge Rust crates `0.
|
|
12
|
+
published SolverForge Rust crates `0.19.0` and pins `solverforge-ui` to `0.7.0`
|
|
13
13
|
through exact crates.io versions in `Cargo.toml` and registry checksums in
|
|
14
14
|
`Cargo.lock`; it has no local path or Git dependency override. The `solverforge`
|
|
15
15
|
`0.6.x` line is the current dynamic binding architecture and intentionally
|
|
@@ -19,11 +19,12 @@ Java service requirements, and other APIs that are not part of this package.
|
|
|
19
19
|
|
|
20
20
|
## Installation
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
locked SolverForge Rust `0.
|
|
22
|
+
The package version prepared by this checkout is `solverforge` `0.6.2`, built
|
|
23
|
+
on the exact published and locked SolverForge Rust `0.19.0` registry dependency
|
|
24
|
+
base. Install the matching package after publication with:
|
|
24
25
|
|
|
25
26
|
```sh
|
|
26
|
-
python3.14 -m pip install "solverforge==0.6.
|
|
27
|
+
python3.14 -m pip install "solverforge==0.6.2"
|
|
27
28
|
```
|
|
28
29
|
|
|
29
30
|
The installable wheel contains the core `solverforge` package, native extension,
|
|
@@ -42,13 +43,13 @@ make hospital-run
|
|
|
42
43
|
make deliveries-run PORT=7861
|
|
43
44
|
```
|
|
44
45
|
|
|
45
|
-
|
|
46
|
-
without `PYTHONPATH` or an editable checkout:
|
|
46
|
+
After publication, the same source-checkout examples can be run against the
|
|
47
|
+
installed package without `PYTHONPATH` or an editable checkout:
|
|
47
48
|
|
|
48
49
|
```sh
|
|
49
50
|
python3.14 -m venv .venv-examples
|
|
50
51
|
. .venv-examples/bin/activate
|
|
51
|
-
python -m pip install "solverforge[examples]==0.6.
|
|
52
|
+
python -m pip install "solverforge[examples]==0.6.2"
|
|
52
53
|
python examples/nqueens.py
|
|
53
54
|
python -m examples.solverforge_hospital
|
|
54
55
|
python -m examples.solverforge_deliveries
|
|
@@ -371,13 +372,6 @@ solution state, safe to run concurrently, and treat solution-level lookup contex
|
|
|
371
372
|
as immutable for the duration of a solve. Third-party Python extension modules
|
|
372
373
|
used inside callbacks may still impose their own synchronization constraints.
|
|
373
374
|
|
|
374
|
-
## Release
|
|
375
|
-
|
|
376
|
-
The current package and crate version is `0.6.0`, built on the published
|
|
377
|
-
SolverForge `0.18.0` crates and `solverforge-ui` `0.7.0`. `Cargo.lock` resolves
|
|
378
|
-
those exact crates from crates.io. Maintainers run `make pre-release` to verify
|
|
379
|
-
the dependency base, local CI, distribution metadata, and artifact contents.
|
|
380
|
-
|
|
381
375
|
## License
|
|
382
376
|
|
|
383
377
|
SolverForge Python is licensed under the Apache License, Version 2.0. See
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
name: CI
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
push:
|
|
5
|
-
branches: [main]
|
|
6
|
-
pull_request:
|
|
7
|
-
|
|
8
|
-
permissions:
|
|
9
|
-
contents: read
|
|
10
|
-
|
|
11
|
-
env:
|
|
12
|
-
PYTHON_VERSION: "3.14"
|
|
13
|
-
RUST_VERSION: "1.95.0"
|
|
14
|
-
|
|
15
|
-
jobs:
|
|
16
|
-
ci-local:
|
|
17
|
-
name: local CI gate
|
|
18
|
-
runs-on: ${{ github.server_url == 'https://github.com' && 'ubuntu-latest' || 'rust' }}
|
|
19
|
-
steps:
|
|
20
|
-
- name: Checkout solverforge-py
|
|
21
|
-
uses: actions/checkout@v6
|
|
22
|
-
|
|
23
|
-
- name: Set up Python
|
|
24
|
-
shell: bash
|
|
25
|
-
run: |
|
|
26
|
-
curl --retry 5 --retry-all-errors --retry-delay 5 \
|
|
27
|
-
-LsSf https://astral.sh/uv/install.sh | sh
|
|
28
|
-
echo "${HOME}/.local/bin" >> "${GITHUB_PATH}"
|
|
29
|
-
"${HOME}/.local/bin/uv" python install "${PYTHON_VERSION}"
|
|
30
|
-
host_python="$("${HOME}/.local/bin/uv" python find "${PYTHON_VERSION}")"
|
|
31
|
-
host_python_dir="$(dirname "${host_python}")"
|
|
32
|
-
host_python_libdir="$("${host_python}" -c 'import sysconfig; print(sysconfig.get_config_var("LIBDIR") or "")')"
|
|
33
|
-
echo "${host_python_dir}" >> "${GITHUB_PATH}"
|
|
34
|
-
echo "HOST_PYTHON=${host_python}" >> "${GITHUB_ENV}"
|
|
35
|
-
echo "PYO3_PYTHON=${host_python}" >> "${GITHUB_ENV}"
|
|
36
|
-
echo "PYTHON_SYS_EXECUTABLE=${host_python}" >> "${GITHUB_ENV}"
|
|
37
|
-
echo "LIBRARY_PATH=${host_python_libdir}:${LIBRARY_PATH:-}" >> "${GITHUB_ENV}"
|
|
38
|
-
echo "LD_LIBRARY_PATH=${host_python_libdir}:${LD_LIBRARY_PATH:-}" >> "${GITHUB_ENV}"
|
|
39
|
-
"${host_python}" --version
|
|
40
|
-
|
|
41
|
-
- name: Set up Rust
|
|
42
|
-
shell: bash
|
|
43
|
-
run: |
|
|
44
|
-
curl --retry 5 --retry-all-errors --retry-delay 5 \
|
|
45
|
-
--proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs \
|
|
46
|
-
| sh -s -- -y --profile minimal --default-toolchain "${RUST_VERSION}" \
|
|
47
|
-
--component rustfmt --component clippy
|
|
48
|
-
if [ -f "${HOME}/.cargo/env" ]; then
|
|
49
|
-
. "${HOME}/.cargo/env"
|
|
50
|
-
echo "${HOME}/.cargo/bin" >> "${GITHUB_PATH}"
|
|
51
|
-
else
|
|
52
|
-
. /usr/local/cargo/env
|
|
53
|
-
echo "/usr/local/cargo/bin" >> "${GITHUB_PATH}"
|
|
54
|
-
fi
|
|
55
|
-
rustc --version
|
|
56
|
-
cargo --version
|
|
57
|
-
|
|
58
|
-
- name: Validate SolverForge release base
|
|
59
|
-
run: make release-base-check
|
|
60
|
-
|
|
61
|
-
- name: Install Playwright system dependencies
|
|
62
|
-
if: ${{ runner.os == 'Linux' }}
|
|
63
|
-
run: make install-playwright-system-deps
|
|
64
|
-
|
|
65
|
-
- name: Run local CI
|
|
66
|
-
run: make ci-local
|
|
67
|
-
|
|
68
|
-
- name: Build and verify local distributions
|
|
69
|
-
run: make build-dist dist-check smoke-wheel
|
|
@@ -1,212 +0,0 @@
|
|
|
1
|
-
name: Release
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
workflow_dispatch: {}
|
|
5
|
-
push:
|
|
6
|
-
tags:
|
|
7
|
-
- "v*.*.*"
|
|
8
|
-
|
|
9
|
-
permissions:
|
|
10
|
-
contents: read
|
|
11
|
-
|
|
12
|
-
env:
|
|
13
|
-
PYTHON_VERSION: "3.14"
|
|
14
|
-
RUST_VERSION: "1.95.0"
|
|
15
|
-
|
|
16
|
-
jobs:
|
|
17
|
-
forgejo-release-guard:
|
|
18
|
-
name: Forgejo release guard
|
|
19
|
-
if: github.server_url != 'https://github.com'
|
|
20
|
-
runs-on: rust
|
|
21
|
-
steps:
|
|
22
|
-
- name: Skip publish-only release workflow
|
|
23
|
-
run: echo "Release publishing runs only on GitHub; Forgejo tag CI is intentionally a no-op."
|
|
24
|
-
|
|
25
|
-
sdist:
|
|
26
|
-
name: source distribution
|
|
27
|
-
if: github.server_url == 'https://github.com'
|
|
28
|
-
runs-on: ${{ github.server_url == 'https://github.com' && 'ubuntu-latest' || 'rust' }}
|
|
29
|
-
steps:
|
|
30
|
-
- name: Checkout solverforge-py
|
|
31
|
-
uses: actions/checkout@v6
|
|
32
|
-
with:
|
|
33
|
-
path: solverforge-py
|
|
34
|
-
|
|
35
|
-
- name: Set up Python
|
|
36
|
-
uses: actions/setup-python@v6
|
|
37
|
-
with:
|
|
38
|
-
python-version: ${{ env.PYTHON_VERSION }}
|
|
39
|
-
|
|
40
|
-
- name: Set up Rust
|
|
41
|
-
uses: dtolnay/rust-toolchain@stable
|
|
42
|
-
with:
|
|
43
|
-
toolchain: ${{ env.RUST_VERSION }}
|
|
44
|
-
components: rustfmt, clippy
|
|
45
|
-
|
|
46
|
-
- name: Build sdist
|
|
47
|
-
working-directory: solverforge-py
|
|
48
|
-
run: make build-sdist
|
|
49
|
-
|
|
50
|
-
- name: Upload sdist
|
|
51
|
-
uses: actions/upload-artifact@v7
|
|
52
|
-
with:
|
|
53
|
-
name: sdist
|
|
54
|
-
path: solverforge-py/dist/*.tar.gz
|
|
55
|
-
|
|
56
|
-
wheels:
|
|
57
|
-
name: wheel ${{ matrix.os }} ${{ matrix.target }}
|
|
58
|
-
if: github.server_url == 'https://github.com'
|
|
59
|
-
runs-on: ${{ github.server_url == 'https://github.com' && matrix.os || 'rust' }}
|
|
60
|
-
strategy:
|
|
61
|
-
fail-fast: false
|
|
62
|
-
matrix:
|
|
63
|
-
include:
|
|
64
|
-
- os: ubuntu-latest
|
|
65
|
-
target: x86_64
|
|
66
|
-
manylinux: "2014"
|
|
67
|
-
interpreter: python3.14
|
|
68
|
-
- os: macos-14
|
|
69
|
-
target: aarch64
|
|
70
|
-
manylinux: ""
|
|
71
|
-
interpreter: python3.14
|
|
72
|
-
- os: windows-latest
|
|
73
|
-
target: x64
|
|
74
|
-
manylinux: ""
|
|
75
|
-
interpreter: python
|
|
76
|
-
steps:
|
|
77
|
-
- name: Checkout solverforge-py
|
|
78
|
-
uses: actions/checkout@v6
|
|
79
|
-
with:
|
|
80
|
-
path: solverforge-py
|
|
81
|
-
|
|
82
|
-
- name: Set up Python
|
|
83
|
-
uses: actions/setup-python@v6
|
|
84
|
-
with:
|
|
85
|
-
python-version: ${{ env.PYTHON_VERSION }}
|
|
86
|
-
|
|
87
|
-
- name: Build wheels
|
|
88
|
-
uses: PyO3/maturin-action@v1
|
|
89
|
-
with:
|
|
90
|
-
command: build
|
|
91
|
-
args: --release --locked --strip --compatibility pypi -i ${{ matrix.interpreter }} --out dist
|
|
92
|
-
manylinux: ${{ matrix.manylinux }}
|
|
93
|
-
target: ${{ matrix.target }}
|
|
94
|
-
rust-toolchain: ${{ env.RUST_VERSION }}
|
|
95
|
-
working-directory: solverforge-py
|
|
96
|
-
|
|
97
|
-
- name: Upload wheels
|
|
98
|
-
uses: actions/upload-artifact@v7
|
|
99
|
-
with:
|
|
100
|
-
name: wheels-${{ matrix.os }}-${{ matrix.target }}
|
|
101
|
-
path: solverforge-py/dist/*.whl
|
|
102
|
-
|
|
103
|
-
verify:
|
|
104
|
-
name: verify artifacts
|
|
105
|
-
if: github.server_url == 'https://github.com'
|
|
106
|
-
runs-on: ${{ github.server_url == 'https://github.com' && 'ubuntu-latest' || 'rust' }}
|
|
107
|
-
needs: [sdist, wheels]
|
|
108
|
-
steps:
|
|
109
|
-
- name: Checkout solverforge-py
|
|
110
|
-
uses: actions/checkout@v6
|
|
111
|
-
|
|
112
|
-
- name: Set up Python
|
|
113
|
-
uses: actions/setup-python@v6
|
|
114
|
-
with:
|
|
115
|
-
python-version: ${{ env.PYTHON_VERSION }}
|
|
116
|
-
|
|
117
|
-
- name: Download artifacts
|
|
118
|
-
uses: actions/download-artifact@v8
|
|
119
|
-
with:
|
|
120
|
-
path: artifact-download
|
|
121
|
-
|
|
122
|
-
- name: Collect distributions
|
|
123
|
-
run: |
|
|
124
|
-
mkdir dist
|
|
125
|
-
find artifact-download -type f \( -name '*.whl' -o -name '*.tar.gz' \) -exec cp '{}' dist/ \;
|
|
126
|
-
|
|
127
|
-
- name: Install release tools
|
|
128
|
-
run: python -m pip install --disable-pip-version-check twine
|
|
129
|
-
|
|
130
|
-
- name: Check metadata
|
|
131
|
-
run: |
|
|
132
|
-
python -m twine check dist/*
|
|
133
|
-
python scripts/verify_release_artifacts.py --dist dist
|
|
134
|
-
|
|
135
|
-
- name: Upload verified distributions
|
|
136
|
-
uses: actions/upload-artifact@v7
|
|
137
|
-
with:
|
|
138
|
-
name: release-dist
|
|
139
|
-
path: dist/*
|
|
140
|
-
|
|
141
|
-
publish-testpypi:
|
|
142
|
-
name: publish to TestPyPI
|
|
143
|
-
runs-on: ${{ github.server_url == 'https://github.com' && 'ubuntu-latest' || 'rust' }}
|
|
144
|
-
needs: verify
|
|
145
|
-
if: >-
|
|
146
|
-
always() &&
|
|
147
|
-
needs.verify.result == 'success' &&
|
|
148
|
-
github.server_url == 'https://github.com' &&
|
|
149
|
-
github.event_name == 'workflow_dispatch'
|
|
150
|
-
environment: testpypi
|
|
151
|
-
permissions:
|
|
152
|
-
contents: read
|
|
153
|
-
steps:
|
|
154
|
-
- name: Download verified distributions
|
|
155
|
-
uses: actions/download-artifact@v8
|
|
156
|
-
with:
|
|
157
|
-
name: release-dist
|
|
158
|
-
path: dist
|
|
159
|
-
|
|
160
|
-
- name: Publish to TestPyPI
|
|
161
|
-
uses: pypa/gh-action-pypi-publish@release/v1
|
|
162
|
-
with:
|
|
163
|
-
repository-url: https://test.pypi.org/legacy/
|
|
164
|
-
password: ${{ secrets.TEST_PYPI_API_TOKEN }}
|
|
165
|
-
|
|
166
|
-
publish-pypi:
|
|
167
|
-
name: publish to PyPI
|
|
168
|
-
runs-on: ${{ github.server_url == 'https://github.com' && 'ubuntu-latest' || 'rust' }}
|
|
169
|
-
needs: verify
|
|
170
|
-
if: >-
|
|
171
|
-
always() &&
|
|
172
|
-
needs.verify.result == 'success' &&
|
|
173
|
-
github.server_url == 'https://github.com' &&
|
|
174
|
-
github.event_name == 'push' &&
|
|
175
|
-
startsWith(github.ref, 'refs/tags/v')
|
|
176
|
-
environment: pypi
|
|
177
|
-
permissions:
|
|
178
|
-
contents: read
|
|
179
|
-
steps:
|
|
180
|
-
- name: Checkout solverforge-py
|
|
181
|
-
uses: actions/checkout@v6
|
|
182
|
-
|
|
183
|
-
- name: Set up Python
|
|
184
|
-
uses: actions/setup-python@v6
|
|
185
|
-
with:
|
|
186
|
-
python-version: ${{ env.PYTHON_VERSION }}
|
|
187
|
-
|
|
188
|
-
- name: Validate tag version
|
|
189
|
-
run: |
|
|
190
|
-
python - <<'PY'
|
|
191
|
-
import os
|
|
192
|
-
import tomllib
|
|
193
|
-
|
|
194
|
-
with open("pyproject.toml", "rb") as handle:
|
|
195
|
-
version = tomllib.load(handle)["project"]["version"]
|
|
196
|
-
|
|
197
|
-
expected = f"v{version}"
|
|
198
|
-
actual = os.environ["GITHUB_REF_NAME"]
|
|
199
|
-
if actual != expected:
|
|
200
|
-
raise SystemExit(f"tag {actual} does not match package version {expected}")
|
|
201
|
-
PY
|
|
202
|
-
|
|
203
|
-
- name: Download verified distributions
|
|
204
|
-
uses: actions/download-artifact@v8
|
|
205
|
-
with:
|
|
206
|
-
name: release-dist
|
|
207
|
-
path: dist
|
|
208
|
-
|
|
209
|
-
- name: Publish to PyPI
|
|
210
|
-
uses: pypa/gh-action-pypi-publish@release/v1
|
|
211
|
-
with:
|
|
212
|
-
password: ${{ secrets.PYPI_API_TOKEN }}
|