shinestacker 1.13.1__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.
Files changed (202) hide show
  1. shinestacker-1.13.1/.coveragerc +9 -0
  2. shinestacker-1.13.1/.flake8 +8 -0
  3. shinestacker-1.13.1/.github/workflows/ci-multiplatform.yml +45 -0
  4. shinestacker-1.13.1/.github/workflows/pylint.yml +28 -0
  5. shinestacker-1.13.1/.github/workflows/pypi-publish.yml +37 -0
  6. shinestacker-1.13.1/.github/workflows/release.yml +115 -0
  7. shinestacker-1.13.1/.gitignore +23 -0
  8. shinestacker-1.13.1/.pylintrc +6 -0
  9. shinestacker-1.13.1/.readthedocs.yaml +22 -0
  10. shinestacker-1.13.1/CHANGELOG.md +780 -0
  11. shinestacker-1.13.1/LICENSE +165 -0
  12. shinestacker-1.13.1/MANIFEST.in +2 -0
  13. shinestacker-1.13.1/PKG-INFO +123 -0
  14. shinestacker-1.13.1/README.md +92 -0
  15. shinestacker-1.13.1/THIRD_PARTY_LICENSES.txt +73 -0
  16. shinestacker-1.13.1/docs/alignment.md +152 -0
  17. shinestacker-1.13.1/docs/api.md +10 -0
  18. shinestacker-1.13.1/docs/balancing.md +33 -0
  19. shinestacker-1.13.1/docs/conf.py +42 -0
  20. shinestacker-1.13.1/docs/focus_stacking.md +86 -0
  21. shinestacker-1.13.1/docs/gui.md +129 -0
  22. shinestacker-1.13.1/docs/index.md +17 -0
  23. shinestacker-1.13.1/docs/job.md +50 -0
  24. shinestacker-1.13.1/docs/macos-install.md +19 -0
  25. shinestacker-1.13.1/docs/main.md +109 -0
  26. shinestacker-1.13.1/docs/multilayer.md +13 -0
  27. shinestacker-1.13.1/docs/noise.md +56 -0
  28. shinestacker-1.13.1/docs/requirements.txt +3 -0
  29. shinestacker-1.13.1/docs/vignetting.md +28 -0
  30. shinestacker-1.13.1/img/coffee.gif +0 -0
  31. shinestacker-1.13.1/img/coffee_stack.jpg +0 -0
  32. shinestacker-1.13.1/img/extreme-vignetting.jpg +0 -0
  33. shinestacker-1.13.1/img/flies.gif +0 -0
  34. shinestacker-1.13.1/img/flies_stack.jpg +0 -0
  35. shinestacker-1.13.1/img/flow-diagram.png +0 -0
  36. shinestacker-1.13.1/img/gui-project-new.png +0 -0
  37. shinestacker-1.13.1/img/gui-project-run.png +0 -0
  38. shinestacker-1.13.1/img/gui-retouch.png +0 -0
  39. shinestacker-1.13.1/index.html +47 -0
  40. shinestacker-1.13.1/pyproject.toml +81 -0
  41. shinestacker-1.13.1/requirements.txt +13 -0
  42. shinestacker-1.13.1/scripts/build_release.py +210 -0
  43. shinestacker-1.13.1/scripts/create_macos_icon.py +58 -0
  44. shinestacker-1.13.1/scripts/git-rev-list.sh +6 -0
  45. shinestacker-1.13.1/scripts/hooks/hook-IPython.py +10 -0
  46. shinestacker-1.13.1/scripts/hooks/hook-PySide6.py +53 -0
  47. shinestacker-1.13.1/scripts/hooks/hook-opencv.py +24 -0
  48. shinestacker-1.13.1/scripts/hooks/hook-tests.py +7 -0
  49. shinestacker-1.13.1/scripts/scan_imports.py +47 -0
  50. shinestacker-1.13.1/scripts/shinestacker-inno-setup.iss +72 -0
  51. shinestacker-1.13.1/scripts/validate-tomli.py +20 -0
  52. shinestacker-1.13.1/setup.cfg +4 -0
  53. shinestacker-1.13.1/src/shinestacker/__init__.py +17 -0
  54. shinestacker-1.13.1/src/shinestacker/_version.py +1 -0
  55. shinestacker-1.13.1/src/shinestacker/algorithms/__init__.py +23 -0
  56. shinestacker-1.13.1/src/shinestacker/algorithms/align.py +403 -0
  57. shinestacker-1.13.1/src/shinestacker/algorithms/align_auto.py +88 -0
  58. shinestacker-1.13.1/src/shinestacker/algorithms/align_parallel.py +311 -0
  59. shinestacker-1.13.1/src/shinestacker/algorithms/balance.py +642 -0
  60. shinestacker-1.13.1/src/shinestacker/algorithms/base_stack_algo.py +94 -0
  61. shinestacker-1.13.1/src/shinestacker/algorithms/corrections.py +26 -0
  62. shinestacker-1.13.1/src/shinestacker/algorithms/denoise.py +12 -0
  63. shinestacker-1.13.1/src/shinestacker/algorithms/depth_map.py +308 -0
  64. shinestacker-1.13.1/src/shinestacker/algorithms/exif.py +1050 -0
  65. shinestacker-1.13.1/src/shinestacker/algorithms/feature_match.py +196 -0
  66. shinestacker-1.13.1/src/shinestacker/algorithms/multilayer.py +222 -0
  67. shinestacker-1.13.1/src/shinestacker/algorithms/noise_detection.py +384 -0
  68. shinestacker-1.13.1/src/shinestacker/algorithms/plot_manager.py +54 -0
  69. shinestacker-1.13.1/src/shinestacker/algorithms/pyramid.py +201 -0
  70. shinestacker-1.13.1/src/shinestacker/algorithms/pyramid_auto.py +155 -0
  71. shinestacker-1.13.1/src/shinestacker/algorithms/pyramid_tiles.py +489 -0
  72. shinestacker-1.13.1/src/shinestacker/algorithms/sharpen.py +19 -0
  73. shinestacker-1.13.1/src/shinestacker/algorithms/stack.py +189 -0
  74. shinestacker-1.13.1/src/shinestacker/algorithms/stack_framework.py +413 -0
  75. shinestacker-1.13.1/src/shinestacker/algorithms/tonemapping.py +33 -0
  76. shinestacker-1.13.1/src/shinestacker/algorithms/transform_estimate.py +382 -0
  77. shinestacker-1.13.1/src/shinestacker/algorithms/utils.py +395 -0
  78. shinestacker-1.13.1/src/shinestacker/algorithms/vignetting.py +264 -0
  79. shinestacker-1.13.1/src/shinestacker/algorithms/white_balance.py +14 -0
  80. shinestacker-1.13.1/src/shinestacker/app/__init__.py +0 -0
  81. shinestacker-1.13.1/src/shinestacker/app/about_dialog.py +184 -0
  82. shinestacker-1.13.1/src/shinestacker/app/args_parser_opts.py +66 -0
  83. shinestacker-1.13.1/src/shinestacker/app/gui_utils.py +90 -0
  84. shinestacker-1.13.1/src/shinestacker/app/help_menu.py +17 -0
  85. shinestacker-1.13.1/src/shinestacker/app/main.py +283 -0
  86. shinestacker-1.13.1/src/shinestacker/app/open_frames.py +43 -0
  87. shinestacker-1.13.1/src/shinestacker/app/project.py +74 -0
  88. shinestacker-1.13.1/src/shinestacker/app/retouch.py +71 -0
  89. shinestacker-1.13.1/src/shinestacker/app/settings_dialog.py +451 -0
  90. shinestacker-1.13.1/src/shinestacker/classic_project/__init__.py +0 -0
  91. shinestacker-1.13.1/src/shinestacker/classic_project/classic_element_action_manager.py +312 -0
  92. shinestacker-1.13.1/src/shinestacker/classic_project/classic_project_view.py +792 -0
  93. shinestacker-1.13.1/src/shinestacker/classic_project/classic_selection_state.py +81 -0
  94. shinestacker-1.13.1/src/shinestacker/classic_project/gui_run.py +325 -0
  95. shinestacker-1.13.1/src/shinestacker/classic_project/list_container.py +248 -0
  96. shinestacker-1.13.1/src/shinestacker/classic_project/tab_widget.py +87 -0
  97. shinestacker-1.13.1/src/shinestacker/common_project/__init__.py +0 -0
  98. shinestacker-1.13.1/src/shinestacker/common_project/element_action_manager.py +117 -0
  99. shinestacker-1.13.1/src/shinestacker/common_project/menu_manager.py +358 -0
  100. shinestacker-1.13.1/src/shinestacker/common_project/new_project.py +480 -0
  101. shinestacker-1.13.1/src/shinestacker/common_project/processing_widget.py +309 -0
  102. shinestacker-1.13.1/src/shinestacker/common_project/project_handler.py +200 -0
  103. shinestacker-1.13.1/src/shinestacker/common_project/project_undo_manager.py +47 -0
  104. shinestacker-1.13.1/src/shinestacker/common_project/project_view.py +302 -0
  105. shinestacker-1.13.1/src/shinestacker/common_project/run_worker.py +150 -0
  106. shinestacker-1.13.1/src/shinestacker/common_project/selection_state.py +108 -0
  107. shinestacker-1.13.1/src/shinestacker/config/__init__.py +7 -0
  108. shinestacker-1.13.1/src/shinestacker/config/app_config.py +30 -0
  109. shinestacker-1.13.1/src/shinestacker/config/config.py +60 -0
  110. shinestacker-1.13.1/src/shinestacker/config/constants.py +177 -0
  111. shinestacker-1.13.1/src/shinestacker/config/defaults.py +146 -0
  112. shinestacker-1.13.1/src/shinestacker/config/gui_constants.py +85 -0
  113. shinestacker-1.13.1/src/shinestacker/config/settings.py +153 -0
  114. shinestacker-1.13.1/src/shinestacker/core/__init__.py +12 -0
  115. shinestacker-1.13.1/src/shinestacker/core/colors.py +61 -0
  116. shinestacker-1.13.1/src/shinestacker/core/core_utils.py +56 -0
  117. shinestacker-1.13.1/src/shinestacker/core/exceptions.py +72 -0
  118. shinestacker-1.13.1/src/shinestacker/core/framework.py +323 -0
  119. shinestacker-1.13.1/src/shinestacker/core/logging.py +89 -0
  120. shinestacker-1.13.1/src/shinestacker/gui/__init__.py +0 -0
  121. shinestacker-1.13.1/src/shinestacker/gui/action_config.py +601 -0
  122. shinestacker-1.13.1/src/shinestacker/gui/action_config_dialog.py +1053 -0
  123. shinestacker-1.13.1/src/shinestacker/gui/base_form_dialog.py +23 -0
  124. shinestacker-1.13.1/src/shinestacker/gui/colors.py +67 -0
  125. shinestacker-1.13.1/src/shinestacker/gui/config_dialog.py +79 -0
  126. shinestacker-1.13.1/src/shinestacker/gui/flow_layout.py +105 -0
  127. shinestacker-1.13.1/src/shinestacker/gui/folder_file_selection.py +107 -0
  128. shinestacker-1.13.1/src/shinestacker/gui/gui_images.py +222 -0
  129. shinestacker-1.13.1/src/shinestacker/gui/gui_logging.py +223 -0
  130. shinestacker-1.13.1/src/shinestacker/gui/ico/shinestacker.icns +0 -0
  131. shinestacker-1.13.1/src/shinestacker/gui/ico/shinestacker.ico +0 -0
  132. shinestacker-1.13.1/src/shinestacker/gui/ico/shinestacker.png +0 -0
  133. shinestacker-1.13.1/src/shinestacker/gui/ico/shinestacker.svg +60 -0
  134. shinestacker-1.13.1/src/shinestacker/gui/img/dark/close-round-line-icon.png +0 -0
  135. shinestacker-1.13.1/src/shinestacker/gui/img/dark/forward-button-icon.png +0 -0
  136. shinestacker-1.13.1/src/shinestacker/gui/img/dark/play-button-round-icon.png +0 -0
  137. shinestacker-1.13.1/src/shinestacker/gui/img/dark/plus-round-line-icon.png +0 -0
  138. shinestacker-1.13.1/src/shinestacker/gui/img/dark/shinestacker_bkg.png +0 -0
  139. shinestacker-1.13.1/src/shinestacker/gui/img/dark/stop-button-round-icon.png +0 -0
  140. shinestacker-1.13.1/src/shinestacker/gui/img/light/close-round-line-icon.png +0 -0
  141. shinestacker-1.13.1/src/shinestacker/gui/img/light/forward-button-icon.png +0 -0
  142. shinestacker-1.13.1/src/shinestacker/gui/img/light/play-button-round-icon.png +0 -0
  143. shinestacker-1.13.1/src/shinestacker/gui/img/light/plus-round-line-icon.png +0 -0
  144. shinestacker-1.13.1/src/shinestacker/gui/img/light/shinestacker_bkg.png +0 -0
  145. shinestacker-1.13.1/src/shinestacker/gui/img/light/stop-button-round-icon.png +0 -0
  146. shinestacker-1.13.1/src/shinestacker/gui/project_converter.py +161 -0
  147. shinestacker-1.13.1/src/shinestacker/gui/project_model.py +139 -0
  148. shinestacker-1.13.1/src/shinestacker/gui/qt_plot_manager.py +12 -0
  149. shinestacker-1.13.1/src/shinestacker/gui/recent_file_manager.py +75 -0
  150. shinestacker-1.13.1/src/shinestacker/gui/select_path_widget.py +32 -0
  151. shinestacker-1.13.1/src/shinestacker/gui/sys_mon.py +97 -0
  152. shinestacker-1.13.1/src/shinestacker/gui/time_progress_bar.py +117 -0
  153. shinestacker-1.13.1/src/shinestacker/modern_project/__init__.py +0 -0
  154. shinestacker-1.13.1/src/shinestacker/modern_project/action_widget.py +128 -0
  155. shinestacker-1.13.1/src/shinestacker/modern_project/base_widget.py +404 -0
  156. shinestacker-1.13.1/src/shinestacker/modern_project/element_operations.py +77 -0
  157. shinestacker-1.13.1/src/shinestacker/modern_project/job_widget.py +82 -0
  158. shinestacker-1.13.1/src/shinestacker/modern_project/modern_element_action_manager.py +467 -0
  159. shinestacker-1.13.1/src/shinestacker/modern_project/modern_project_view.py +1554 -0
  160. shinestacker-1.13.1/src/shinestacker/modern_project/progress_mapper.py +42 -0
  161. shinestacker-1.13.1/src/shinestacker/modern_project/progress_signal_handler.py +141 -0
  162. shinestacker-1.13.1/src/shinestacker/modern_project/selection_navigation_manager.py +176 -0
  163. shinestacker-1.13.1/src/shinestacker/modern_project/sub_action_widget.py +27 -0
  164. shinestacker-1.13.1/src/shinestacker/project/__init__.py +0 -0
  165. shinestacker-1.13.1/src/shinestacker/project/main_window.py +560 -0
  166. shinestacker-1.13.1/src/shinestacker/retouch/__init__.py +0 -0
  167. shinestacker-1.13.1/src/shinestacker/retouch/adjustments.py +95 -0
  168. shinestacker-1.13.1/src/shinestacker/retouch/base_filter.py +344 -0
  169. shinestacker-1.13.1/src/shinestacker/retouch/brush.py +11 -0
  170. shinestacker-1.13.1/src/shinestacker/retouch/brush_gradient.py +52 -0
  171. shinestacker-1.13.1/src/shinestacker/retouch/brush_preview.py +140 -0
  172. shinestacker-1.13.1/src/shinestacker/retouch/brush_tool.py +118 -0
  173. shinestacker-1.13.1/src/shinestacker/retouch/denoise_filter.py +13 -0
  174. shinestacker-1.13.1/src/shinestacker/retouch/display_manager.py +240 -0
  175. shinestacker-1.13.1/src/shinestacker/retouch/exif_data.py +179 -0
  176. shinestacker-1.13.1/src/shinestacker/retouch/file_loader.py +107 -0
  177. shinestacker-1.13.1/src/shinestacker/retouch/filter_manager.py +20 -0
  178. shinestacker-1.13.1/src/shinestacker/retouch/icon_container.py +19 -0
  179. shinestacker-1.13.1/src/shinestacker/retouch/image_editor_ui.py +965 -0
  180. shinestacker-1.13.1/src/shinestacker/retouch/image_view_status.py +68 -0
  181. shinestacker-1.13.1/src/shinestacker/retouch/image_viewer.py +146 -0
  182. shinestacker-1.13.1/src/shinestacker/retouch/io_gui_handler.py +467 -0
  183. shinestacker-1.13.1/src/shinestacker/retouch/io_threads.py +76 -0
  184. shinestacker-1.13.1/src/shinestacker/retouch/layer_collection.py +192 -0
  185. shinestacker-1.13.1/src/shinestacker/retouch/local_tonemapping_filter.py +64 -0
  186. shinestacker-1.13.1/src/shinestacker/retouch/overlaid_view.py +207 -0
  187. shinestacker-1.13.1/src/shinestacker/retouch/paint_area_manager.py +30 -0
  188. shinestacker-1.13.1/src/shinestacker/retouch/reset_slider.py +19 -0
  189. shinestacker-1.13.1/src/shinestacker/retouch/shortcuts_help.py +117 -0
  190. shinestacker-1.13.1/src/shinestacker/retouch/sidebyside_view.py +474 -0
  191. shinestacker-1.13.1/src/shinestacker/retouch/transformation_manager.py +41 -0
  192. shinestacker-1.13.1/src/shinestacker/retouch/undo_manager.py +101 -0
  193. shinestacker-1.13.1/src/shinestacker/retouch/unsharp_mask_filter.py +58 -0
  194. shinestacker-1.13.1/src/shinestacker/retouch/view_strategy.py +826 -0
  195. shinestacker-1.13.1/src/shinestacker/retouch/vignetting_filter.py +78 -0
  196. shinestacker-1.13.1/src/shinestacker/retouch/white_balance_filter.py +186 -0
  197. shinestacker-1.13.1/src/shinestacker.egg-info/PKG-INFO +123 -0
  198. shinestacker-1.13.1/src/shinestacker.egg-info/SOURCES.txt +200 -0
  199. shinestacker-1.13.1/src/shinestacker.egg-info/dependency_links.txt +1 -0
  200. shinestacker-1.13.1/src/shinestacker.egg-info/entry_points.txt +4 -0
  201. shinestacker-1.13.1/src/shinestacker.egg-info/requires.txt +17 -0
  202. shinestacker-1.13.1/src/shinestacker.egg-info/top_level.txt +1 -0
@@ -0,0 +1,9 @@
1
+ [run]
2
+ omit =
3
+ src/shinestacker/app/*
4
+ src/shinestacker/classic_project/*
5
+ src/shinestacker/common_project/*
6
+ src/shinestacker/gui/*
7
+ src/shinestacker/modern_project/*
8
+ src/shinestacker/project/*
9
+ src/shinestacker/retouch/*
@@ -0,0 +1,8 @@
1
+ [flake8]
2
+ exclude =
3
+ */.ipynb_checkpoints/*
4
+ src/shinestacker/_version.py
5
+ .venv
6
+ dist/*
7
+ max-line-length = 100
8
+ ignore = E402, W503, W504
@@ -0,0 +1,45 @@
1
+ ---
2
+
3
+ name: CI multiplatform
4
+
5
+ on:
6
+ push:
7
+ branches: [main]
8
+ pull_request:
9
+ branches: [main]
10
+
11
+ jobs:
12
+ build-and-test:
13
+ permissions:
14
+ contents: read
15
+ pull-requests: write
16
+ runs-on: ${{ matrix.os }}
17
+ strategy:
18
+ matrix:
19
+ os: [ubuntu-latest, windows-latest, macos-latest]
20
+ python-version: ["3.12"]
21
+
22
+ steps:
23
+ - name: Checkout repo
24
+ uses: actions/checkout@v4
25
+
26
+ - name: Set up Python
27
+ uses: actions/setup-python@v5
28
+ with:
29
+ python-version: "3.12"
30
+
31
+ - name: Install dependencies
32
+ run: |
33
+ python -m pip install --upgrade pip setuptools pytest-cov
34
+ pip install -e .[dev]
35
+
36
+ - name: Run non-GUI tests (test_00*.py)
37
+ run: >
38
+ python3 -c "import glob, pytest, sys; test_files = sorted(glob.glob('tests/test_00*.py')); sys.exit(pytest.main(test_files + ['-v', '--disable-warnings', '--cov=shinestacker', '--cov-report=xml']))"
39
+
40
+ - name: Upload coverage to Codecov
41
+ if: matrix.os == 'ubuntu-latest'
42
+ uses: codecov/codecov-action@v5
43
+ with:
44
+ token: ${{ secrets.CODECOV_TOKEN }}
45
+ slug: lucalista/shinestacker
@@ -0,0 +1,28 @@
1
+ name: Pylint Check
2
+
3
+ on:
4
+ push:
5
+ branches: [ main, master ]
6
+ pull_request:
7
+ branches: [ main, master ]
8
+
9
+ jobs:
10
+ pylint:
11
+ runs-on: ubuntu-latest
12
+ permissions:
13
+ contents: write
14
+ steps:
15
+ - uses: actions/checkout@v4
16
+
17
+ - uses: Silleellie/pylint-github-action@v2.1
18
+ with:
19
+ lint-path: src
20
+ python-version: 3.9
21
+ requirements-path: requirements.txt
22
+ readme-path: README.md
23
+ pylintrc-path: .pylintrc
24
+ badge-text: PyLint
25
+ color-bad-score: red
26
+ color-ok-score: orange
27
+ color-good-score: yellow
28
+ color-perfect-score: brightgreen
@@ -0,0 +1,37 @@
1
+ name: Publish to PyPI
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+
7
+ jobs:
8
+ build-and-publish:
9
+ name: Build and publish Python package
10
+ runs-on: ubuntu-latest
11
+
12
+ permissions:
13
+ id-token: write
14
+ contents: read
15
+
16
+ steps:
17
+ - uses: actions/checkout@v4
18
+
19
+ - name: Set up Python
20
+ uses: actions/setup-python@v5
21
+ with:
22
+ python-version: '3.14'
23
+
24
+ - name: Install build tools
25
+ run: |
26
+ python -m pip install --upgrade build twine
27
+
28
+ - name: Build package
29
+ run: |
30
+ python -m build
31
+
32
+ - name: Publish to PyPI
33
+ env:
34
+ TWINE_USERNAME: __token__
35
+ TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
36
+ run: |
37
+ twine upload dist/*
@@ -0,0 +1,115 @@
1
+ name: Create new release
2
+
3
+ permissions:
4
+ contents: write
5
+ packages: write
6
+ pull-requests: write
7
+
8
+ on:
9
+ push:
10
+ tags:
11
+ - 'v*'
12
+ workflow_dispatch:
13
+
14
+ jobs:
15
+ detect-macos-architectures:
16
+ runs-on: ubuntu-latest
17
+ outputs:
18
+ intel-runner: ${{ steps.detect.outputs.intel-runner }}
19
+ silicon-runner: ${{ steps.detect.outputs.silicon-runner }}
20
+ steps:
21
+ - name: Detect available macOS runners
22
+ id: detect
23
+ run: |
24
+ echo "intel-runner=macos-15" >> $GITHUB_OUTPUT
25
+ echo "silicon-runner=macos-15" >> $GITHUB_OUTPUT
26
+
27
+ publish-release:
28
+ runs-on: ${{ matrix.os }}
29
+ needs: detect-macos-architectures
30
+ strategy:
31
+ matrix:
32
+ include:
33
+ - os: ubuntu-latest
34
+ label: linux
35
+ python-version: "3.12"
36
+ - os: windows-latest
37
+ label: windows
38
+ python-version: "3.12"
39
+ - os: ${{ needs.detect-macos-architectures.outputs.intel-runner }}
40
+ label: macos-intel
41
+ python-version: "3.12"
42
+ - os: ${{ needs.detect-macos-architectures.outputs.silicon-runner }}
43
+ label: macos-apple-silicon
44
+ python-version: "3.12"
45
+
46
+ steps:
47
+ - name: Checkout repo
48
+ uses: actions/checkout@v4
49
+
50
+ - name: Set up Python
51
+ uses: actions/setup-python@v5
52
+ with:
53
+ python-version: ${{ matrix.python-version }}
54
+
55
+ - name: Install Inno Setup
56
+ if: runner.os == 'Windows'
57
+ run: choco install innosetup -y --no-progress --accept-license
58
+
59
+ - name: Install dependencies
60
+ run: |
61
+ python -m pip install --upgrade pip
62
+ pip install pyinstaller
63
+ pip install -e .[dev]
64
+
65
+ - name: Build and package release
66
+ run: |
67
+ python scripts/build_release.py
68
+
69
+ - name: Upload artifacts
70
+ uses: actions/upload-artifact@v4
71
+ with:
72
+ name: shinestacker-${{ matrix.label }}
73
+ path: |
74
+ ${{ matrix.os == 'windows-latest' && 'dist/shinestacker-release.zip' || '' }}
75
+ ${{ matrix.os == 'windows-latest' && 'dist/*.exe' || '' }}
76
+ ${{ matrix.os == 'ubuntu-latest' && 'dist/shinestacker-release.tar.gz' || '' }}
77
+ ${{ contains(matrix.label, 'macos') && 'dist/shinestacker-release.dmg' || '' }}
78
+ if-no-files-found: ignore
79
+
80
+ create-release:
81
+ needs: [detect-macos-architectures, publish-release]
82
+ runs-on: ubuntu-latest
83
+ steps:
84
+ - name: Download all artifacts
85
+ uses: actions/download-artifact@v4
86
+ with:
87
+ path: artifacts
88
+
89
+ - name: Prepare release assets
90
+ run: |
91
+ mkdir -p release_assets
92
+ # Check and copy each artifact if it exists
93
+ if [ -f "artifacts/shinestacker-linux/shinestacker-release.tar.gz" ]; then
94
+ cp artifacts/shinestacker-linux/shinestacker-release.tar.gz release_assets/shinestacker-ubuntu.tar.gz
95
+ fi
96
+ if [ -f "artifacts/shinestacker-macos-intel/shinestacker-release.dmg" ]; then
97
+ cp artifacts/shinestacker-macos-intel/shinestacker-release.dmg release_assets/shinestacker-macos-intel.dmg
98
+ fi
99
+ if [ -f "artifacts/shinestacker-macos-apple-silicon/shinestacker-release.dmg" ]; then
100
+ cp artifacts/shinestacker-macos-apple-silicon/shinestacker-release.dmg release_assets/shinestacker-macos-apple-silicon.dmg
101
+ fi
102
+ if [ -f "artifacts/shinestacker-windows/shinestacker-release.zip" ]; then
103
+ cp artifacts/shinestacker-windows/shinestacker-release.zip release_assets/shinestacker-windows.zip
104
+ fi
105
+ if ls artifacts/shinestacker-windows/shinestacker-setup.exe 1> /dev/null 2>&1; then
106
+ cp artifacts/shinestacker-windows/shinestacker-setup.exe release_assets/
107
+ fi
108
+ echo "Available release assets:"
109
+ ls -la release_assets/
110
+
111
+ - name: Create release
112
+ uses: softprops/action-gh-release@v1
113
+ with:
114
+ draft: true
115
+ files: release_assets/*
@@ -0,0 +1,23 @@
1
+ __pycache__/*
2
+ */__pycache__/*
3
+ *.pyc
4
+ .ipynb_checkpoints/*
5
+ */.ipynb_checkpoints/*
6
+ */*/.ipynb_checkpoints/*
7
+ */*/*/.ipynb_checkpoints/*
8
+ anaconda_projects
9
+ tests/output/*
10
+ tests/plots/*
11
+ tests/noise-map/*
12
+ sandbox/img-test/*
13
+ */logs/*
14
+ .DS_Store
15
+ .virtual_documents
16
+ *.egg-info/
17
+ build/
18
+ dist/
19
+ .eggs/
20
+ src/focusstack/_version.py
21
+ *~
22
+ *.spec
23
+ logs
@@ -0,0 +1,6 @@
1
+ [MASTER]
2
+ ignore-patterns =
3
+ _version\.py,
4
+ ignore-paths =
5
+ .*\.ipynb_checkpoints,
6
+ .*\/\.ipynb_checkpoints
@@ -0,0 +1,22 @@
1
+ # Read the Docs configuration file
2
+ # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
3
+
4
+ # Required
5
+ version: 2
6
+
7
+ # Set the OS, Python version, and other tools you might need
8
+ build:
9
+ os: ubuntu-24.04
10
+ tools:
11
+ python: "3.12"
12
+
13
+ # Build documentation in the "docs/" directory with Sphinx
14
+ sphinx:
15
+ configuration: docs/conf.py
16
+
17
+ # Optionally, but recommended,
18
+ # declare the Python requirements required to build your documentation
19
+ # See https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html
20
+ python:
21
+ install:
22
+ - requirements: docs/requirements.txt