fiberpath 0.3.0__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.
- fiberpath-0.3.0/.gitattributes +5 -0
- fiberpath-0.3.0/.github/actions/setup-node/action.yml +27 -0
- fiberpath-0.3.0/.github/actions/setup-python/action.yml +46 -0
- fiberpath-0.3.0/.github/actions/setup-rust/action.yml +44 -0
- fiberpath-0.3.0/.github/workflows/backend-ci.yml +73 -0
- fiberpath-0.3.0/.github/workflows/docs-ci.yml +44 -0
- fiberpath-0.3.0/.github/workflows/docs-deploy.yml +59 -0
- fiberpath-0.3.0/.github/workflows/gui-ci.yml +75 -0
- fiberpath-0.3.0/.github/workflows/gui-packaging.yml +62 -0
- fiberpath-0.3.0/.github/workflows/release.yml +172 -0
- fiberpath-0.3.0/.gitignore +210 -0
- fiberpath-0.3.0/.vscode/extensions.json +32 -0
- fiberpath-0.3.0/.workflow-old-archive/ci.yml +66 -0
- fiberpath-0.3.0/.workflow-old-archive/docs-site.yml +66 -0
- fiberpath-0.3.0/.workflow-old-archive/gui-tests.yml +97 -0
- fiberpath-0.3.0/.workflow-old-archive/gui.yml +105 -0
- fiberpath-0.3.0/CONTRIBUTING.md +68 -0
- fiberpath-0.3.0/LICENSE +661 -0
- fiberpath-0.3.0/PKG-INFO +827 -0
- fiberpath-0.3.0/README.md +125 -0
- fiberpath-0.3.0/docs/api.md +111 -0
- fiberpath-0.3.0/docs/architecture.md +90 -0
- fiberpath-0.3.0/docs/ci-cd.md +262 -0
- fiberpath-0.3.0/docs/concepts.md +35 -0
- fiberpath-0.3.0/docs/format-wind.md +374 -0
- fiberpath-0.3.0/docs/index.md +30 -0
- fiberpath-0.3.0/docs/packaging.md +90 -0
- fiberpath-0.3.0/docs/planner-math.md +63 -0
- fiberpath-0.3.0/docs/roadmap.md +3 -0
- fiberpath-0.3.0/examples/README.md +3 -0
- fiberpath-0.3.0/examples/complex_surface/README.md +3 -0
- fiberpath-0.3.0/examples/multi_layer/README.md +3 -0
- fiberpath-0.3.0/examples/multi_layer/input.wind +27 -0
- fiberpath-0.3.0/examples/simple_cylinder/README.md +3 -0
- fiberpath-0.3.0/examples/simple_cylinder/input.wind +17 -0
- fiberpath-0.3.0/examples/sized_simple_cylinder/README.md +7 -0
- fiberpath-0.3.0/examples/sized_simple_cylinder/input.wind +17 -0
- fiberpath-0.3.0/fiberpath/__init__.py +10 -0
- fiberpath-0.3.0/fiberpath/config/__init__.py +22 -0
- fiberpath-0.3.0/fiberpath/config/schemas.py +72 -0
- fiberpath-0.3.0/fiberpath/config/validator.py +31 -0
- fiberpath-0.3.0/fiberpath/execution/__init__.py +7 -0
- fiberpath-0.3.0/fiberpath/execution/marlin.py +311 -0
- fiberpath-0.3.0/fiberpath/gcode/__init__.py +6 -0
- fiberpath-0.3.0/fiberpath/gcode/dialects.py +47 -0
- fiberpath-0.3.0/fiberpath/gcode/generator.py +31 -0
- fiberpath-0.3.0/fiberpath/geometry/__init__.py +13 -0
- fiberpath-0.3.0/fiberpath/geometry/curves.py +16 -0
- fiberpath-0.3.0/fiberpath/geometry/intersections.py +23 -0
- fiberpath-0.3.0/fiberpath/geometry/surfaces.py +17 -0
- fiberpath-0.3.0/fiberpath/math_utils.py +20 -0
- fiberpath-0.3.0/fiberpath/planning/__init__.py +13 -0
- fiberpath-0.3.0/fiberpath/planning/calculations.py +50 -0
- fiberpath-0.3.0/fiberpath/planning/exceptions.py +19 -0
- fiberpath-0.3.0/fiberpath/planning/helpers.py +55 -0
- fiberpath-0.3.0/fiberpath/planning/layer_strategies.py +194 -0
- fiberpath-0.3.0/fiberpath/planning/machine.py +151 -0
- fiberpath-0.3.0/fiberpath/planning/planner.py +133 -0
- fiberpath-0.3.0/fiberpath/planning/validators.py +51 -0
- fiberpath-0.3.0/fiberpath/simulation/__init__.py +5 -0
- fiberpath-0.3.0/fiberpath/simulation/simulator.py +186 -0
- fiberpath-0.3.0/fiberpath/visualization/__init__.py +13 -0
- fiberpath-0.3.0/fiberpath/visualization/export_json.py +14 -0
- fiberpath-0.3.0/fiberpath/visualization/plotter.py +261 -0
- fiberpath-0.3.0/fiberpath_api/__init__.py +5 -0
- fiberpath-0.3.0/fiberpath_api/main.py +19 -0
- fiberpath-0.3.0/fiberpath_api/routes/__init__.py +1 -0
- fiberpath-0.3.0/fiberpath_api/routes/plan.py +41 -0
- fiberpath-0.3.0/fiberpath_api/routes/simulate.py +29 -0
- fiberpath-0.3.0/fiberpath_api/routes/stream.py +49 -0
- fiberpath-0.3.0/fiberpath_api/routes/validate.py +21 -0
- fiberpath-0.3.0/fiberpath_api/schemas.py +50 -0
- fiberpath-0.3.0/fiberpath_cli/__init__.py +5 -0
- fiberpath-0.3.0/fiberpath_cli/__main__.py +6 -0
- fiberpath-0.3.0/fiberpath_cli/main.py +27 -0
- fiberpath-0.3.0/fiberpath_cli/output.py +14 -0
- fiberpath-0.3.0/fiberpath_cli/plan.py +100 -0
- fiberpath-0.3.0/fiberpath_cli/plot.py +37 -0
- fiberpath-0.3.0/fiberpath_cli/simulate.py +36 -0
- fiberpath-0.3.0/fiberpath_cli/stream.py +123 -0
- fiberpath-0.3.0/fiberpath_cli/validate.py +26 -0
- fiberpath-0.3.0/fiberpath_gui/.gitignore +6 -0
- fiberpath-0.3.0/fiberpath_gui/.stylelintrc.json +25 -0
- fiberpath-0.3.0/fiberpath_gui/README.md +63 -0
- fiberpath-0.3.0/fiberpath_gui/docs/ARCHITECTURE.md +42 -0
- fiberpath-0.3.0/fiberpath_gui/docs/CLI_HEALTH_CHECK.md +342 -0
- fiberpath-0.3.0/fiberpath_gui/docs/CSS_ARCHITECTURE.md +372 -0
- fiberpath-0.3.0/fiberpath_gui/docs/PERFORMANCE_PROFILING.md +186 -0
- fiberpath-0.3.0/fiberpath_gui/docs/SCHEMA.md +145 -0
- fiberpath-0.3.0/fiberpath_gui/docs/STORE_SPLITTING_ANALYSIS.md +183 -0
- fiberpath-0.3.0/fiberpath_gui/docs/TESTING.md +281 -0
- fiberpath-0.3.0/fiberpath_gui/docs/TYPE_SAFETY_IMPLEMENTATION.md +289 -0
- fiberpath-0.3.0/fiberpath_gui/generate-types.json +8 -0
- fiberpath-0.3.0/fiberpath_gui/index.html +12 -0
- fiberpath-0.3.0/fiberpath_gui/package-lock.json +6298 -0
- fiberpath-0.3.0/fiberpath_gui/package.json +59 -0
- fiberpath-0.3.0/fiberpath_gui/schemas/wind-schema.json +197 -0
- fiberpath-0.3.0/fiberpath_gui/src/App.tsx +170 -0
- fiberpath-0.3.0/fiberpath_gui/src/components/CliHealthWarning.tsx +60 -0
- fiberpath-0.3.0/fiberpath_gui/src/components/ErrorBoundary.tsx +88 -0
- fiberpath-0.3.0/fiberpath_gui/src/components/ErrorNotificationToast.tsx +39 -0
- fiberpath-0.3.0/fiberpath_gui/src/components/FileField.tsx +50 -0
- fiberpath-0.3.0/fiberpath_gui/src/components/MenuBar.tsx +252 -0
- fiberpath-0.3.0/fiberpath_gui/src/components/ResultCard.tsx +15 -0
- fiberpath-0.3.0/fiberpath_gui/src/components/StatusBar.tsx +72 -0
- fiberpath-0.3.0/fiberpath_gui/src/components/StatusText.tsx +26 -0
- fiberpath-0.3.0/fiberpath_gui/src/components/canvas/CanvasControls.tsx +66 -0
- fiberpath-0.3.0/fiberpath_gui/src/components/canvas/CenterCanvas.tsx +13 -0
- fiberpath-0.3.0/fiberpath_gui/src/components/canvas/LayerScrubber.tsx +34 -0
- fiberpath-0.3.0/fiberpath_gui/src/components/canvas/VisualizationCanvas.tsx +209 -0
- fiberpath-0.3.0/fiberpath_gui/src/components/dialogs/AboutDialog.tsx +120 -0
- fiberpath-0.3.0/fiberpath_gui/src/components/dialogs/CliUnavailableDialog.tsx +100 -0
- fiberpath-0.3.0/fiberpath_gui/src/components/dialogs/DiagnosticsDialog.tsx +219 -0
- fiberpath-0.3.0/fiberpath_gui/src/components/dialogs/ExportConfirmationDialog.tsx +187 -0
- fiberpath-0.3.0/fiberpath_gui/src/components/editors/HelicalLayerEditor.tsx +270 -0
- fiberpath-0.3.0/fiberpath_gui/src/components/editors/HoopLayerEditor.tsx +66 -0
- fiberpath-0.3.0/fiberpath_gui/src/components/editors/SkipLayerEditor.tsx +92 -0
- fiberpath-0.3.0/fiberpath_gui/src/components/forms/MachineSettingsForm.tsx +89 -0
- fiberpath-0.3.0/fiberpath_gui/src/components/forms/MandrelForm.tsx +100 -0
- fiberpath-0.3.0/fiberpath_gui/src/components/forms/TowForm.tsx +100 -0
- fiberpath-0.3.0/fiberpath_gui/src/components/layers/LayerRow.tsx +119 -0
- fiberpath-0.3.0/fiberpath_gui/src/components/layers/LayerStack.tsx +157 -0
- fiberpath-0.3.0/fiberpath_gui/src/components/panels/BottomPanel.tsx +18 -0
- fiberpath-0.3.0/fiberpath_gui/src/components/panels/LeftPanel.tsx +18 -0
- fiberpath-0.3.0/fiberpath_gui/src/components/panels/RightPanel.tsx +18 -0
- fiberpath-0.3.0/fiberpath_gui/src/contexts/CliHealthContext.tsx +77 -0
- fiberpath-0.3.0/fiberpath_gui/src/contexts/ErrorNotificationContext.tsx +77 -0
- fiberpath-0.3.0/fiberpath_gui/src/hooks/useCliHealth.ts +171 -0
- fiberpath-0.3.0/fiberpath_gui/src/hooks/useKeyboardShortcuts.ts +137 -0
- fiberpath-0.3.0/fiberpath_gui/src/layouts/MainLayout.tsx +56 -0
- fiberpath-0.3.0/fiberpath_gui/src/lib/commands.ts +120 -0
- fiberpath-0.3.0/fiberpath_gui/src/lib/fileOperations.ts +254 -0
- fiberpath-0.3.0/fiberpath_gui/src/lib/recentFiles.ts +69 -0
- fiberpath-0.3.0/fiberpath_gui/src/lib/retry.ts +66 -0
- fiberpath-0.3.0/fiberpath_gui/src/lib/schemas.test.ts +473 -0
- fiberpath-0.3.0/fiberpath_gui/src/lib/schemas.ts +310 -0
- fiberpath-0.3.0/fiberpath_gui/src/lib/validation.test.ts +380 -0
- fiberpath-0.3.0/fiberpath_gui/src/lib/validation.ts +44 -0
- fiberpath-0.3.0/fiberpath_gui/src/main.tsx +22 -0
- fiberpath-0.3.0/fiberpath_gui/src/state/projectStore.test.ts +304 -0
- fiberpath-0.3.0/fiberpath_gui/src/state/projectStore.ts +207 -0
- fiberpath-0.3.0/fiberpath_gui/src/styles/buttons.css +136 -0
- fiberpath-0.3.0/fiberpath_gui/src/styles/canvas.css +355 -0
- fiberpath-0.3.0/fiberpath_gui/src/styles/dialogs.css +503 -0
- fiberpath-0.3.0/fiberpath_gui/src/styles/forms.css +248 -0
- fiberpath-0.3.0/fiberpath_gui/src/styles/index.css +29 -0
- fiberpath-0.3.0/fiberpath_gui/src/styles/layout.css +409 -0
- fiberpath-0.3.0/fiberpath_gui/src/styles/notifications.css +163 -0
- fiberpath-0.3.0/fiberpath_gui/src/styles/panels.css +444 -0
- fiberpath-0.3.0/fiberpath_gui/src/styles/reset.css +45 -0
- fiberpath-0.3.0/fiberpath_gui/src/styles/tokens.css +175 -0
- fiberpath-0.3.0/fiberpath_gui/src/styles/typography.css +121 -0
- fiberpath-0.3.0/fiberpath_gui/src/tests/integration/workflows.test.ts +354 -0
- fiberpath-0.3.0/fiberpath_gui/src/tests/setup.ts +33 -0
- fiberpath-0.3.0/fiberpath_gui/src/types/components.ts +142 -0
- fiberpath-0.3.0/fiberpath_gui/src/types/converters.test.ts +447 -0
- fiberpath-0.3.0/fiberpath_gui/src/types/converters.ts +127 -0
- fiberpath-0.3.0/fiberpath_gui/src/types/project.ts +146 -0
- fiberpath-0.3.0/fiberpath_gui/src/types/wind-schema.ts +72 -0
- fiberpath-0.3.0/fiberpath_gui/src-tauri/Cargo.lock +4841 -0
- fiberpath-0.3.0/fiberpath_gui/src-tauri/Cargo.toml +20 -0
- fiberpath-0.3.0/fiberpath_gui/src-tauri/build.rs +3 -0
- fiberpath-0.3.0/fiberpath_gui/src-tauri/capabilities/default.json +11 -0
- fiberpath-0.3.0/fiberpath_gui/src-tauri/icons/128x128.png +0 -0
- fiberpath-0.3.0/fiberpath_gui/src-tauri/icons/256x256.png +0 -0
- fiberpath-0.3.0/fiberpath_gui/src-tauri/icons/32x32.png +0 -0
- fiberpath-0.3.0/fiberpath_gui/src-tauri/icons/512x512.png +0 -0
- fiberpath-0.3.0/fiberpath_gui/src-tauri/icons/icon.ico +0 -0
- fiberpath-0.3.0/fiberpath_gui/src-tauri/src/main.rs +303 -0
- fiberpath-0.3.0/fiberpath_gui/src-tauri/tauri.conf.json +41 -0
- fiberpath-0.3.0/fiberpath_gui/tsconfig.json +21 -0
- fiberpath-0.3.0/fiberpath_gui/tsconfig.node.json +12 -0
- fiberpath-0.3.0/fiberpath_gui/vite.config.ts +37 -0
- fiberpath-0.3.0/fiberpath_gui/vitest.config.ts +18 -0
- fiberpath-0.3.0/mkdocs.yml +47 -0
- fiberpath-0.3.0/pyproject.toml +80 -0
- fiberpath-0.3.0/roadmap-v1.md +157 -0
- fiberpath-0.3.0/roadmap-v2.md +243 -0
- fiberpath-0.3.0/roadmap-v3.md +268 -0
- fiberpath-0.3.0/roadmap-v4.md +7 -0
- fiberpath-0.3.0/roadmap-v5.md +145 -0
- fiberpath-0.3.0/scripts/export_schema.py +30 -0
- fiberpath-0.3.0/scripts/generate_schema.py +50 -0
- fiberpath-0.3.0/setup.cfg +13 -0
- fiberpath-0.3.0/tests/api/test_plan_route.py +60 -0
- fiberpath-0.3.0/tests/api/test_stream_route.py +23 -0
- fiberpath-0.3.0/tests/cli/test_axis_format.py +148 -0
- fiberpath-0.3.0/tests/cli/test_cli_json.py +68 -0
- fiberpath-0.3.0/tests/cli/test_cli_smoke.py +9 -0
- fiberpath-0.3.0/tests/cli/test_stream_command.py +17 -0
- fiberpath-0.3.0/tests/cyclone_reference_runs/inputs/helical-balanced.wind +33 -0
- fiberpath-0.3.0/tests/cyclone_reference_runs/inputs/simple-hoop.wind +21 -0
- fiberpath-0.3.0/tests/cyclone_reference_runs/inputs/skip-bias.wind +41 -0
- fiberpath-0.3.0/tests/cyclone_reference_runs/outputs/helical-balanced/output.gcode +43506 -0
- fiberpath-0.3.0/tests/cyclone_reference_runs/outputs/helical-balanced/preview.png +0 -0
- fiberpath-0.3.0/tests/cyclone_reference_runs/outputs/simple-hoop/output.gcode +1519 -0
- fiberpath-0.3.0/tests/cyclone_reference_runs/outputs/simple-hoop/preview.png +0 -0
- fiberpath-0.3.0/tests/cyclone_reference_runs/outputs/skip-bias/output.gcode +26889 -0
- fiberpath-0.3.0/tests/cyclone_reference_runs/outputs/skip-bias/preview.png +0 -0
- fiberpath-0.3.0/tests/execution/test_marlin_streamer.py +198 -0
- fiberpath-0.3.0/tests/gcode/test_generator.py +17 -0
- fiberpath-0.3.0/tests/geometry/test_surfaces.py +6 -0
- fiberpath-0.3.0/tests/planning/_generate_fixtures.py +92 -0
- fiberpath-0.3.0/tests/planning/fixtures/helical_layer.gcode +4525 -0
- fiberpath-0.3.0/tests/planning/fixtures/hoop_layer.gcode +251 -0
- fiberpath-0.3.0/tests/planning/fixtures/hoop_only_program.gcode +214 -0
- fiberpath-0.3.0/tests/planning/fixtures/skip_layer.gcode +3 -0
- fiberpath-0.3.0/tests/planning/test_axis_mapping.py +265 -0
- fiberpath-0.3.0/tests/planning/test_helpers_machine.py +63 -0
- fiberpath-0.3.0/tests/planning/test_layer_strategies.py +80 -0
- fiberpath-0.3.0/tests/planning/test_planner_smoke.py +82 -0
- fiberpath-0.3.0/tests/planning/test_validators.py +37 -0
- fiberpath-0.3.0/tests/simulation/test_simulator.py +45 -0
- fiberpath-0.3.0/tests/simulation/test_simulator_axis_detection.py +94 -0
- fiberpath-0.3.0/tests/visualization/test_plotter.py +82 -0
- fiberpath-0.3.0/tests/visualization/test_plotter_axis_detection.py +108 -0
- fiberpath-0.3.0/uv.lock +1958 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
name: Setup Node.js Environment
|
|
2
|
+
description: Sets up Node.js and installs npm dependencies
|
|
3
|
+
|
|
4
|
+
inputs:
|
|
5
|
+
node-version:
|
|
6
|
+
description: Node.js version to use
|
|
7
|
+
required: false
|
|
8
|
+
default: "20"
|
|
9
|
+
working-directory:
|
|
10
|
+
description: Working directory for npm install
|
|
11
|
+
required: false
|
|
12
|
+
default: "./fiberpath_gui"
|
|
13
|
+
|
|
14
|
+
runs:
|
|
15
|
+
using: composite
|
|
16
|
+
steps:
|
|
17
|
+
- name: Set up Node.js
|
|
18
|
+
uses: actions/setup-node@v4
|
|
19
|
+
with:
|
|
20
|
+
node-version: ${{ inputs.node-version }}
|
|
21
|
+
cache: npm
|
|
22
|
+
cache-dependency-path: ${{ inputs.working-directory }}/package-lock.json
|
|
23
|
+
|
|
24
|
+
- name: Install dependencies
|
|
25
|
+
shell: bash
|
|
26
|
+
working-directory: ${{ inputs.working-directory }}
|
|
27
|
+
run: npm ci
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
name: Setup Python Environment
|
|
2
|
+
description: Sets up Python with uv and installs dependencies
|
|
3
|
+
|
|
4
|
+
inputs:
|
|
5
|
+
python-version:
|
|
6
|
+
description: Python version to use
|
|
7
|
+
required: false
|
|
8
|
+
default: "3.11"
|
|
9
|
+
dependencies:
|
|
10
|
+
description: Dependency groups to install (e.g., ".[dev,api]")
|
|
11
|
+
required: false
|
|
12
|
+
default: ".[dev,api,docs]"
|
|
13
|
+
cache-key-suffix:
|
|
14
|
+
description: Additional suffix for cache key
|
|
15
|
+
required: false
|
|
16
|
+
default: ""
|
|
17
|
+
|
|
18
|
+
runs:
|
|
19
|
+
using: composite
|
|
20
|
+
steps:
|
|
21
|
+
- name: Set up Python
|
|
22
|
+
uses: actions/setup-python@v5
|
|
23
|
+
with:
|
|
24
|
+
python-version: ${{ inputs.python-version }}
|
|
25
|
+
|
|
26
|
+
- name: Set up uv
|
|
27
|
+
uses: astral-sh/setup-uv@v3
|
|
28
|
+
with:
|
|
29
|
+
enable-cache: true
|
|
30
|
+
cache-dependency-glob: "pyproject.toml"
|
|
31
|
+
|
|
32
|
+
- name: Cache Python virtual environment
|
|
33
|
+
uses: actions/cache@v4
|
|
34
|
+
with:
|
|
35
|
+
path: .venv
|
|
36
|
+
key: venv-${{ runner.os }}-${{ inputs.python-version }}-${{ hashFiles('pyproject.toml') }}-${{ inputs.cache-key-suffix }}
|
|
37
|
+
restore-keys: |
|
|
38
|
+
venv-${{ runner.os }}-${{ inputs.python-version }}-
|
|
39
|
+
|
|
40
|
+
- name: Create virtual environment
|
|
41
|
+
shell: bash
|
|
42
|
+
run: uv venv
|
|
43
|
+
|
|
44
|
+
- name: Install dependencies
|
|
45
|
+
shell: bash
|
|
46
|
+
run: uv pip install ${{ inputs.dependencies }}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
name: Setup Rust Environment
|
|
2
|
+
description: Sets up Rust toolchain with caching and Linux dependencies
|
|
3
|
+
|
|
4
|
+
inputs:
|
|
5
|
+
install-linux-deps:
|
|
6
|
+
description: Whether to install Linux dependencies for Tauri
|
|
7
|
+
required: false
|
|
8
|
+
default: "false"
|
|
9
|
+
working-directory:
|
|
10
|
+
description: Working directory for cargo operations
|
|
11
|
+
required: false
|
|
12
|
+
default: "./fiberpath_gui/src-tauri"
|
|
13
|
+
|
|
14
|
+
runs:
|
|
15
|
+
using: composite
|
|
16
|
+
steps:
|
|
17
|
+
- name: Set up Rust toolchain
|
|
18
|
+
uses: dtolnay/rust-toolchain@stable
|
|
19
|
+
|
|
20
|
+
- name: Cache cargo artifacts
|
|
21
|
+
uses: actions/cache@v4
|
|
22
|
+
with:
|
|
23
|
+
path: |
|
|
24
|
+
~/.cargo/bin
|
|
25
|
+
~/.cargo/registry
|
|
26
|
+
~/.cargo/git
|
|
27
|
+
${{ inputs.working-directory }}/target
|
|
28
|
+
key: ${{ runner.os }}-cargo-${{ hashFiles(format('{0}/Cargo.lock', inputs.working-directory)) }}
|
|
29
|
+
restore-keys: |
|
|
30
|
+
${{ runner.os }}-cargo-
|
|
31
|
+
|
|
32
|
+
- name: Install Linux dependencies
|
|
33
|
+
if: runner.os == 'Linux' && inputs.install-linux-deps == 'true'
|
|
34
|
+
shell: bash
|
|
35
|
+
run: |
|
|
36
|
+
sudo apt-get update
|
|
37
|
+
sudo apt-get install -y \
|
|
38
|
+
pkg-config \
|
|
39
|
+
libgtk-3-dev \
|
|
40
|
+
libwebkit2gtk-4.1-dev \
|
|
41
|
+
libjavascriptcoregtk-4.1-dev \
|
|
42
|
+
libayatana-appindicator3-dev \
|
|
43
|
+
librsvg2-dev \
|
|
44
|
+
patchelf
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
name: Backend CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main, tabsgui]
|
|
6
|
+
paths:
|
|
7
|
+
- "fiberpath/**"
|
|
8
|
+
- "fiberpath_api/**"
|
|
9
|
+
- "fiberpath_cli/**"
|
|
10
|
+
- "tests/**"
|
|
11
|
+
- "pyproject.toml"
|
|
12
|
+
- "setup.cfg"
|
|
13
|
+
- ".github/workflows/backend-ci.yml"
|
|
14
|
+
- ".github/actions/setup-python/**"
|
|
15
|
+
pull_request:
|
|
16
|
+
paths:
|
|
17
|
+
- "fiberpath/**"
|
|
18
|
+
- "fiberpath_api/**"
|
|
19
|
+
- "fiberpath_cli/**"
|
|
20
|
+
- "tests/**"
|
|
21
|
+
- "pyproject.toml"
|
|
22
|
+
- "setup.cfg"
|
|
23
|
+
- ".github/workflows/backend-ci.yml"
|
|
24
|
+
- ".github/actions/setup-python/**"
|
|
25
|
+
|
|
26
|
+
jobs:
|
|
27
|
+
lint-and-type-check:
|
|
28
|
+
name: Lint & Type Check
|
|
29
|
+
runs-on: ubuntu-latest
|
|
30
|
+
steps:
|
|
31
|
+
- name: Checkout repository
|
|
32
|
+
uses: actions/checkout@v4
|
|
33
|
+
|
|
34
|
+
- name: Setup Python environment
|
|
35
|
+
uses: ./.github/actions/setup-python
|
|
36
|
+
with:
|
|
37
|
+
dependencies: ".[dev,api,docs]"
|
|
38
|
+
|
|
39
|
+
- name: Run Ruff linter
|
|
40
|
+
run: uv run ruff check
|
|
41
|
+
|
|
42
|
+
- name: Run MyPy type checker
|
|
43
|
+
run: uv run mypy
|
|
44
|
+
|
|
45
|
+
test:
|
|
46
|
+
name: Test (${{ matrix.os }})
|
|
47
|
+
needs: lint-and-type-check
|
|
48
|
+
runs-on: ${{ matrix.os }}
|
|
49
|
+
strategy:
|
|
50
|
+
fail-fast: false
|
|
51
|
+
matrix:
|
|
52
|
+
os: [ubuntu-latest, macos-latest, windows-latest]
|
|
53
|
+
steps:
|
|
54
|
+
- name: Checkout repository
|
|
55
|
+
uses: actions/checkout@v4
|
|
56
|
+
|
|
57
|
+
- name: Setup Python environment
|
|
58
|
+
uses: ./.github/actions/setup-python
|
|
59
|
+
with:
|
|
60
|
+
dependencies: ".[dev,api]"
|
|
61
|
+
cache-key-suffix: ${{ matrix.os }}
|
|
62
|
+
|
|
63
|
+
- name: Run pytest with coverage
|
|
64
|
+
run: uv run pytest -v --cov --cov-report=xml
|
|
65
|
+
|
|
66
|
+
- name: Upload coverage
|
|
67
|
+
if: matrix.os == 'ubuntu-latest'
|
|
68
|
+
uses: codecov/codecov-action@v4
|
|
69
|
+
with:
|
|
70
|
+
files: ./coverage.xml
|
|
71
|
+
flags: backend
|
|
72
|
+
name: backend-${{ matrix.os }}
|
|
73
|
+
fail_ci_if_error: false
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
name: Docs CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main, tabsgui]
|
|
6
|
+
paths:
|
|
7
|
+
- "docs/**"
|
|
8
|
+
- "mkdocs.yml"
|
|
9
|
+
- "CONTRIBUTING.md"
|
|
10
|
+
- "README.md"
|
|
11
|
+
- ".github/workflows/docs-ci.yml"
|
|
12
|
+
- ".github/actions/setup-python/**"
|
|
13
|
+
pull_request:
|
|
14
|
+
paths:
|
|
15
|
+
- "docs/**"
|
|
16
|
+
- "mkdocs.yml"
|
|
17
|
+
- "CONTRIBUTING.md"
|
|
18
|
+
- "README.md"
|
|
19
|
+
- ".github/workflows/docs-ci.yml"
|
|
20
|
+
- ".github/actions/setup-python/**"
|
|
21
|
+
|
|
22
|
+
jobs:
|
|
23
|
+
validate:
|
|
24
|
+
name: Validate MkDocs Build
|
|
25
|
+
runs-on: ubuntu-latest
|
|
26
|
+
steps:
|
|
27
|
+
- name: Checkout repository
|
|
28
|
+
uses: actions/checkout@v4
|
|
29
|
+
|
|
30
|
+
- name: Setup Python environment
|
|
31
|
+
uses: ./.github/actions/setup-python
|
|
32
|
+
with:
|
|
33
|
+
dependencies: ".[docs]"
|
|
34
|
+
|
|
35
|
+
- name: Build MkDocs site
|
|
36
|
+
run: uv run mkdocs build --strict
|
|
37
|
+
|
|
38
|
+
- name: Verify build output
|
|
39
|
+
run: |
|
|
40
|
+
if [ ! -d "site" ]; then
|
|
41
|
+
echo "Build failed - no site directory"
|
|
42
|
+
exit 1
|
|
43
|
+
fi
|
|
44
|
+
echo "MkDocs build successful"
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
name: Docs Deploy
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
paths:
|
|
7
|
+
- "docs/**"
|
|
8
|
+
- "mkdocs.yml"
|
|
9
|
+
- "CONTRIBUTING.md"
|
|
10
|
+
- "README.md"
|
|
11
|
+
- ".github/workflows/docs-deploy.yml"
|
|
12
|
+
- ".github/actions/setup-python/**"
|
|
13
|
+
workflow_dispatch:
|
|
14
|
+
|
|
15
|
+
permissions:
|
|
16
|
+
contents: read
|
|
17
|
+
pages: write
|
|
18
|
+
id-token: write
|
|
19
|
+
|
|
20
|
+
concurrency:
|
|
21
|
+
group: pages-${{ github.ref }}
|
|
22
|
+
cancel-in-progress: true
|
|
23
|
+
|
|
24
|
+
jobs:
|
|
25
|
+
build:
|
|
26
|
+
name: Build MkDocs Site
|
|
27
|
+
runs-on: ubuntu-latest
|
|
28
|
+
steps:
|
|
29
|
+
- name: Checkout repository
|
|
30
|
+
uses: actions/checkout@v4
|
|
31
|
+
|
|
32
|
+
- name: Configure GitHub Pages
|
|
33
|
+
id: pages
|
|
34
|
+
uses: actions/configure-pages@v5
|
|
35
|
+
|
|
36
|
+
- name: Setup Python environment
|
|
37
|
+
uses: ./.github/actions/setup-python
|
|
38
|
+
with:
|
|
39
|
+
dependencies: ".[docs]"
|
|
40
|
+
|
|
41
|
+
- name: Build MkDocs site
|
|
42
|
+
run: uv run mkdocs build --strict --site-dir site
|
|
43
|
+
|
|
44
|
+
- name: Upload Pages artifact
|
|
45
|
+
uses: actions/upload-pages-artifact@v3
|
|
46
|
+
with:
|
|
47
|
+
path: site
|
|
48
|
+
|
|
49
|
+
deploy:
|
|
50
|
+
name: Deploy to GitHub Pages
|
|
51
|
+
needs: build
|
|
52
|
+
runs-on: ubuntu-latest
|
|
53
|
+
environment:
|
|
54
|
+
name: github-pages
|
|
55
|
+
url: ${{ steps.deployment.outputs.page_url }}
|
|
56
|
+
steps:
|
|
57
|
+
- name: Deploy to GitHub Pages
|
|
58
|
+
id: deployment
|
|
59
|
+
uses: actions/deploy-pages@v4
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
name: GUI CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main, tabsgui]
|
|
6
|
+
paths:
|
|
7
|
+
- "fiberpath_gui/**"
|
|
8
|
+
- ".github/workflows/gui-ci.yml"
|
|
9
|
+
- ".github/actions/setup-node/**"
|
|
10
|
+
- ".github/actions/setup-rust/**"
|
|
11
|
+
pull_request:
|
|
12
|
+
paths:
|
|
13
|
+
- "fiberpath_gui/**"
|
|
14
|
+
- ".github/workflows/gui-ci.yml"
|
|
15
|
+
- ".github/actions/setup-node/**"
|
|
16
|
+
- ".github/actions/setup-rust/**"
|
|
17
|
+
|
|
18
|
+
jobs:
|
|
19
|
+
lint-and-type-check:
|
|
20
|
+
name: Lint & Type Check
|
|
21
|
+
runs-on: ubuntu-latest
|
|
22
|
+
defaults:
|
|
23
|
+
run:
|
|
24
|
+
working-directory: fiberpath_gui
|
|
25
|
+
steps:
|
|
26
|
+
- name: Checkout repository
|
|
27
|
+
uses: actions/checkout@v4
|
|
28
|
+
|
|
29
|
+
- name: Setup Node.js environment
|
|
30
|
+
uses: ./.github/actions/setup-node
|
|
31
|
+
|
|
32
|
+
- name: Run ESLint
|
|
33
|
+
run: npm run lint
|
|
34
|
+
|
|
35
|
+
- name: Run TypeScript compiler
|
|
36
|
+
run: npx tsc --noEmit
|
|
37
|
+
|
|
38
|
+
test:
|
|
39
|
+
name: Test & Build
|
|
40
|
+
needs: lint-and-type-check
|
|
41
|
+
runs-on: ubuntu-latest
|
|
42
|
+
defaults:
|
|
43
|
+
run:
|
|
44
|
+
working-directory: fiberpath_gui
|
|
45
|
+
steps:
|
|
46
|
+
- name: Checkout repository
|
|
47
|
+
uses: actions/checkout@v4
|
|
48
|
+
|
|
49
|
+
- name: Setup Node.js environment
|
|
50
|
+
uses: ./.github/actions/setup-node
|
|
51
|
+
|
|
52
|
+
- name: Run Vitest
|
|
53
|
+
run: npm test
|
|
54
|
+
|
|
55
|
+
- name: Run tests with coverage
|
|
56
|
+
run: npm run test:coverage
|
|
57
|
+
|
|
58
|
+
- name: Upload coverage
|
|
59
|
+
uses: codecov/codecov-action@v4
|
|
60
|
+
with:
|
|
61
|
+
files: ./fiberpath_gui/coverage/lcov.info
|
|
62
|
+
flags: gui
|
|
63
|
+
name: gui
|
|
64
|
+
fail_ci_if_error: false
|
|
65
|
+
|
|
66
|
+
- name: Build Vite assets
|
|
67
|
+
run: npm run build
|
|
68
|
+
|
|
69
|
+
- name: Verify build output
|
|
70
|
+
run: |
|
|
71
|
+
if [ ! -d "dist" ]; then
|
|
72
|
+
echo "Build failed - no dist directory"
|
|
73
|
+
exit 1
|
|
74
|
+
fi
|
|
75
|
+
echo "Build successful - dist/ directory created"
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
name: GUI Packaging
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main, tabsgui]
|
|
6
|
+
paths:
|
|
7
|
+
- "fiberpath_gui/**"
|
|
8
|
+
- ".github/workflows/gui-packaging.yml"
|
|
9
|
+
- ".github/actions/setup-node/**"
|
|
10
|
+
- ".github/actions/setup-rust/**"
|
|
11
|
+
workflow_call:
|
|
12
|
+
workflow_dispatch:
|
|
13
|
+
release:
|
|
14
|
+
types: [published]
|
|
15
|
+
|
|
16
|
+
jobs:
|
|
17
|
+
package:
|
|
18
|
+
name: Build Installers (${{ matrix.os }})
|
|
19
|
+
runs-on: ${{ matrix.os }}
|
|
20
|
+
timeout-minutes: 45
|
|
21
|
+
strategy:
|
|
22
|
+
fail-fast: false
|
|
23
|
+
matrix:
|
|
24
|
+
os: [windows-latest, macos-latest, ubuntu-latest]
|
|
25
|
+
defaults:
|
|
26
|
+
run:
|
|
27
|
+
working-directory: fiberpath_gui
|
|
28
|
+
steps:
|
|
29
|
+
- name: Checkout repository
|
|
30
|
+
uses: actions/checkout@v4
|
|
31
|
+
|
|
32
|
+
- name: Setup Node.js environment
|
|
33
|
+
uses: ./.github/actions/setup-node
|
|
34
|
+
|
|
35
|
+
- name: Setup Rust environment
|
|
36
|
+
uses: ./.github/actions/setup-rust
|
|
37
|
+
with:
|
|
38
|
+
install-linux-deps: "true"
|
|
39
|
+
|
|
40
|
+
- name: Build Tauri bundles
|
|
41
|
+
run: npm run package
|
|
42
|
+
|
|
43
|
+
- name: Upload artifacts
|
|
44
|
+
uses: actions/upload-artifact@v4
|
|
45
|
+
with:
|
|
46
|
+
name: fiberpath-gui-${{ matrix.os }}
|
|
47
|
+
path: fiberpath_gui/src-tauri/target/release/bundle
|
|
48
|
+
if-no-files-found: error
|
|
49
|
+
retention-days: 30
|
|
50
|
+
|
|
51
|
+
- name: Upload release assets
|
|
52
|
+
if: github.event_name == 'release'
|
|
53
|
+
uses: softprops/action-gh-release@v2
|
|
54
|
+
with:
|
|
55
|
+
files: |
|
|
56
|
+
fiberpath_gui/src-tauri/target/release/bundle/dmg/*.dmg
|
|
57
|
+
fiberpath_gui/src-tauri/target/release/bundle/nsis/*.exe
|
|
58
|
+
fiberpath_gui/src-tauri/target/release/bundle/msi/*.msi
|
|
59
|
+
fiberpath_gui/src-tauri/target/release/bundle/deb/*.deb
|
|
60
|
+
fiberpath_gui/src-tauri/target/release/bundle/appimage/*.AppImage
|
|
61
|
+
env:
|
|
62
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
inputs:
|
|
6
|
+
version:
|
|
7
|
+
description: Version to release (e.g., 0.3.0)
|
|
8
|
+
required: true
|
|
9
|
+
type: string
|
|
10
|
+
prerelease:
|
|
11
|
+
description: Mark as pre-release
|
|
12
|
+
required: false
|
|
13
|
+
type: boolean
|
|
14
|
+
default: false
|
|
15
|
+
|
|
16
|
+
permissions:
|
|
17
|
+
contents: write
|
|
18
|
+
id-token: write
|
|
19
|
+
|
|
20
|
+
jobs:
|
|
21
|
+
validate:
|
|
22
|
+
name: Validate Release
|
|
23
|
+
runs-on: ubuntu-latest
|
|
24
|
+
outputs:
|
|
25
|
+
tag: ${{ steps.check.outputs.tag }}
|
|
26
|
+
steps:
|
|
27
|
+
- name: Checkout repository
|
|
28
|
+
uses: actions/checkout@v4
|
|
29
|
+
with:
|
|
30
|
+
fetch-depth: 0
|
|
31
|
+
|
|
32
|
+
- name: Setup Python environment
|
|
33
|
+
uses: ./.github/actions/setup-python
|
|
34
|
+
|
|
35
|
+
- name: Validate version format
|
|
36
|
+
id: check
|
|
37
|
+
run: |
|
|
38
|
+
VERSION="${{ inputs.version }}"
|
|
39
|
+
if [[ ! "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9.]+)?$ ]]; then
|
|
40
|
+
echo "Error: Invalid version format. Use semantic versioning (e.g., 0.3.0 or 0.3.0-rc.1)"
|
|
41
|
+
exit 1
|
|
42
|
+
fi
|
|
43
|
+
TAG="v$VERSION"
|
|
44
|
+
echo "tag=$TAG" >> $GITHUB_OUTPUT
|
|
45
|
+
echo "Release tag: $TAG"
|
|
46
|
+
|
|
47
|
+
- name: Check if tag already exists
|
|
48
|
+
run: |
|
|
49
|
+
TAG="${{ steps.check.outputs.tag }}"
|
|
50
|
+
if git rev-parse "$TAG" >/dev/null 2>&1; then
|
|
51
|
+
echo "Error: Tag $TAG already exists"
|
|
52
|
+
exit 1
|
|
53
|
+
fi
|
|
54
|
+
echo "Tag $TAG is available"
|
|
55
|
+
|
|
56
|
+
- name: Verify version in pyproject.toml
|
|
57
|
+
run: |
|
|
58
|
+
VERSION="${{ inputs.version }}"
|
|
59
|
+
PYPROJECT_VERSION=$(grep -E '^version = ' pyproject.toml | cut -d'"' -f2)
|
|
60
|
+
if [ "$VERSION" != "$PYPROJECT_VERSION" ]; then
|
|
61
|
+
echo "Warning: Input version ($VERSION) doesn't match pyproject.toml ($PYPROJECT_VERSION)"
|
|
62
|
+
echo "Please update pyproject.toml before releasing"
|
|
63
|
+
exit 1
|
|
64
|
+
fi
|
|
65
|
+
|
|
66
|
+
create-release:
|
|
67
|
+
name: Create GitHub Release
|
|
68
|
+
needs: validate
|
|
69
|
+
runs-on: ubuntu-latest
|
|
70
|
+
steps:
|
|
71
|
+
- name: Checkout repository
|
|
72
|
+
uses: actions/checkout@v4
|
|
73
|
+
|
|
74
|
+
- name: Create release tag
|
|
75
|
+
run: |
|
|
76
|
+
git config user.name "github-actions[bot]"
|
|
77
|
+
git config user.email "github-actions[bot]@users.noreply.github.com"
|
|
78
|
+
git tag -a ${{ needs.validate.outputs.tag }} -m "Release ${{ inputs.version }}"
|
|
79
|
+
git push origin ${{ needs.validate.outputs.tag }}
|
|
80
|
+
|
|
81
|
+
- name: Get previous tag
|
|
82
|
+
id: previous-tag
|
|
83
|
+
run: |
|
|
84
|
+
PREV_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
|
|
85
|
+
echo "previous=$PREV_TAG" >> $GITHUB_OUTPUT
|
|
86
|
+
echo "Previous tag: ${PREV_TAG:-none}"
|
|
87
|
+
|
|
88
|
+
- name: Generate release notes
|
|
89
|
+
id: notes
|
|
90
|
+
uses: actions/github-script@v7
|
|
91
|
+
with:
|
|
92
|
+
script: |
|
|
93
|
+
const prevTag = '${{ steps.previous-tag.outputs.previous }}';
|
|
94
|
+
const newTag = '${{ needs.validate.outputs.tag }}';
|
|
95
|
+
|
|
96
|
+
if (!prevTag) {
|
|
97
|
+
return `## Release ${newTag}\n\nInitial release.`;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
const { data: commits } = await github.rest.repos.compareCommits({
|
|
101
|
+
owner: context.repo.owner,
|
|
102
|
+
repo: context.repo.repo,
|
|
103
|
+
base: prevTag,
|
|
104
|
+
head: newTag
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
const changes = commits.commits
|
|
108
|
+
.map(c => `- ${c.commit.message.split('\n')[0]} (${c.sha.substring(0, 7)})`)
|
|
109
|
+
.join('\n');
|
|
110
|
+
|
|
111
|
+
return `## What's Changed\n\n${changes}\n\n**Full Changelog**: https://github.com/${{ github.repository }}/compare/${prevTag}...${newTag}`;
|
|
112
|
+
result-encoding: string
|
|
113
|
+
|
|
114
|
+
- name: Create GitHub Release
|
|
115
|
+
uses: softprops/action-gh-release@v2
|
|
116
|
+
with:
|
|
117
|
+
tag_name: ${{ needs.validate.outputs.tag }}
|
|
118
|
+
name: Release ${{ inputs.version }}
|
|
119
|
+
body: ${{ steps.notes.outputs.result }}
|
|
120
|
+
draft: false
|
|
121
|
+
prerelease: ${{ inputs.prerelease }}
|
|
122
|
+
env:
|
|
123
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
124
|
+
|
|
125
|
+
publish-backend:
|
|
126
|
+
name: Publish Backend to PyPI
|
|
127
|
+
needs: [validate, create-release]
|
|
128
|
+
runs-on: ubuntu-latest
|
|
129
|
+
environment:
|
|
130
|
+
name: pypi
|
|
131
|
+
url: https://pypi.org/project/fiberpath/
|
|
132
|
+
steps:
|
|
133
|
+
- name: Checkout repository
|
|
134
|
+
uses: actions/checkout@v4
|
|
135
|
+
|
|
136
|
+
- name: Setup Python environment
|
|
137
|
+
uses: ./.github/actions/setup-python
|
|
138
|
+
with:
|
|
139
|
+
dependencies: ".[dev]"
|
|
140
|
+
|
|
141
|
+
- name: Verify version matches tag
|
|
142
|
+
run: |
|
|
143
|
+
TAG_VERSION="${{ inputs.version }}"
|
|
144
|
+
PACKAGE_VERSION=$(uv run python -c "import fiberpath; print(fiberpath.__version__)")
|
|
145
|
+
if [ "$TAG_VERSION" != "$PACKAGE_VERSION" ]; then
|
|
146
|
+
echo "Error: Tag version ($TAG_VERSION) doesn't match package version ($PACKAGE_VERSION)"
|
|
147
|
+
exit 1
|
|
148
|
+
fi
|
|
149
|
+
echo "Version check passed: $PACKAGE_VERSION"
|
|
150
|
+
|
|
151
|
+
- name: Build distribution packages
|
|
152
|
+
run: uv build
|
|
153
|
+
|
|
154
|
+
- name: Verify build artifacts
|
|
155
|
+
run: |
|
|
156
|
+
if [ ! -d "dist" ] || [ -z "$(ls -A dist)" ]; then
|
|
157
|
+
echo "Error: No distribution files in dist/"
|
|
158
|
+
exit 1
|
|
159
|
+
fi
|
|
160
|
+
echo "Built packages:"
|
|
161
|
+
ls -lh dist/
|
|
162
|
+
|
|
163
|
+
- name: Publish to PyPI
|
|
164
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
165
|
+
with:
|
|
166
|
+
print-hash: true
|
|
167
|
+
|
|
168
|
+
build-gui-installers:
|
|
169
|
+
name: Build GUI Installers
|
|
170
|
+
needs: [validate, create-release]
|
|
171
|
+
uses: ./.github/workflows/gui-packaging.yml
|
|
172
|
+
secrets: inherit
|