fdsreader 1.11.7__tar.gz → 1.11.9__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 (180) hide show
  1. fdsreader-1.11.9/.gitattributes +1 -0
  2. fdsreader-1.11.9/.github/ISSUE_TEMPLATE/bug_report.yml +54 -0
  3. fdsreader-1.11.9/.github/ISSUE_TEMPLATE/config.yml +1 -0
  4. fdsreader-1.11.9/.github/last_tested_fds_version.txt +1 -0
  5. fdsreader-1.11.9/.github/workflows/ci.yml +94 -0
  6. fdsreader-1.11.9/.github/workflows/fds_compat.yml +85 -0
  7. fdsreader-1.11.9/.github/workflows/release.yml +65 -0
  8. fdsreader-1.11.9/.gitignore +536 -0
  9. fdsreader-1.11.9/.pre-commit-config.yaml +17 -0
  10. fdsreader-1.11.9/.readthedocs.yaml +17 -0
  11. fdsreader-1.11.9/CITATION.cff +27 -0
  12. fdsreader-1.11.9/CONTRIBUTING.md +102 -0
  13. fdsreader-1.11.9/MANIFEST.in +2 -0
  14. {fdsreader-1.11.7/fdsreader.egg-info → fdsreader-1.11.9}/PKG-INFO +44 -42
  15. {fdsreader-1.11.7 → fdsreader-1.11.9}/README.md +30 -38
  16. fdsreader-1.11.9/RELEASE.md +333 -0
  17. fdsreader-1.11.9/codecov.yml +13 -0
  18. fdsreader-1.11.9/docs/bndf.rst +20 -0
  19. fdsreader-1.11.9/docs/conf.py +54 -0
  20. fdsreader-1.11.9/docs/devc.rst +7 -0
  21. fdsreader-1.11.9/docs/evac.rst +14 -0
  22. fdsreader-1.11.9/docs/export.rst +22 -0
  23. fdsreader-1.11.9/docs/fds_classes.rst +17 -0
  24. fdsreader-1.11.9/docs/geom.rst +14 -0
  25. fdsreader-1.11.9/docs/img/data-structure.drawio +1 -0
  26. fdsreader-1.11.9/docs/img/data-structure.svg +3 -0
  27. fdsreader-1.11.9/docs/index.rst +50 -0
  28. fdsreader-1.11.9/docs/isof.rst +14 -0
  29. fdsreader-1.11.9/docs/part.rst +14 -0
  30. fdsreader-1.11.9/docs/pl3d.rst +14 -0
  31. fdsreader-1.11.9/docs/quantity.rst +7 -0
  32. fdsreader-1.11.9/docs/releasing.rst +91 -0
  33. fdsreader-1.11.9/docs/simulation.rst +7 -0
  34. fdsreader-1.11.9/docs/slcf.rst +26 -0
  35. fdsreader-1.11.9/docs/smoke3d.rst +14 -0
  36. fdsreader-1.11.9/docs/utils.rst +12 -0
  37. fdsreader-1.11.9/examples/bndf/bndf_example_anim.py +47 -0
  38. fdsreader-1.11.9/examples/bndf/fds_data/wall_005.fds +108 -0
  39. fdsreader-1.11.9/examples/devc/devc_example.py +17 -0
  40. fdsreader-1.11.9/examples/devc/fds_steckler/steckler.fds +43 -0
  41. fdsreader-1.11.9/examples/evac/evac_example.py +16 -0
  42. fdsreader-1.11.9/examples/evac/fds_fed/fed_verification_multi_mesh.fds +332 -0
  43. fdsreader-1.11.9/examples/evac/fds_no_fed/stairs_evss_meshes.fds +238 -0
  44. fdsreader-1.11.9/examples/export/export_all.py +14 -0
  45. fdsreader-1.11.9/examples/export/obst_export.py +17 -0
  46. fdsreader-1.11.9/examples/export/slcf_export.py +16 -0
  47. fdsreader-1.11.9/examples/export/smoke3d_export.py +17 -0
  48. fdsreader-1.11.9/examples/geom/fds_data/sphere_radiate.fds +1443 -0
  49. fdsreader-1.11.9/examples/geom/fds_geomslices/PWB01_GEOM.fds +361 -0
  50. fdsreader-1.11.9/examples/geom/geom_example.py +20 -0
  51. fdsreader-1.11.9/examples/geom/geom_slices.py +12 -0
  52. fdsreader-1.11.9/examples/isof/fds_steckler/input_steckler.fds +40 -0
  53. fdsreader-1.11.9/examples/isof/isof_example.py +30 -0
  54. fdsreader-1.11.9/examples/part/part_example.py +39 -0
  55. fdsreader-1.11.9/examples/pl3d/fds_data/vort3d_80.fds +49 -0
  56. fdsreader-1.11.9/examples/pl3d/pl3d_example.py +37 -0
  57. fdsreader-1.11.9/examples/slcf/fds_data/vort2d_80.fds +30 -0
  58. fdsreader-1.11.9/examples/slcf/fds_multimesh/multimesh.fds +71 -0
  59. fdsreader-1.11.9/examples/slcf/fds_steckler/input_steckler.fds +45 -0
  60. fdsreader-1.11.9/examples/slcf/slcf_example_global.py +26 -0
  61. fdsreader-1.11.9/examples/slcf/slcf_example_mask.py +34 -0
  62. fdsreader-1.11.9/examples/smoke3d/fds_steckler/input_steckler.fds +36 -0
  63. fdsreader-1.11.9/examples/smoke3d/smoke3d_example.py +43 -0
  64. fdsreader-1.11.9/fdsreader/__init__.py +9 -0
  65. fdsreader-1.11.9/fdsreader/bndf/__init__.py +5 -0
  66. {fdsreader-1.11.7 → fdsreader-1.11.9}/fdsreader/bndf/obstruction.py +281 -198
  67. {fdsreader-1.11.7 → fdsreader-1.11.9}/fdsreader/bndf/obstruction_collection.py +7 -9
  68. {fdsreader-1.11.7 → fdsreader-1.11.9}/fdsreader/bndf/utils.py +2 -3
  69. fdsreader-1.11.9/fdsreader/devc/__init__.py +2 -0
  70. {fdsreader-1.11.7 → fdsreader-1.11.9}/fdsreader/devc/device.py +35 -13
  71. {fdsreader-1.11.7 → fdsreader-1.11.9}/fdsreader/devc/device_collection.py +22 -12
  72. fdsreader-1.11.9/fdsreader/evac/__init__.py +2 -0
  73. {fdsreader-1.11.7 → fdsreader-1.11.9}/fdsreader/evac/evac_collection.py +123 -114
  74. {fdsreader-1.11.7 → fdsreader-1.11.9}/fdsreader/evac/evacuation.py +15 -22
  75. fdsreader-1.11.9/fdsreader/export/__init__.py +4 -0
  76. {fdsreader-1.11.7 → fdsreader-1.11.9}/fdsreader/export/obst_exporter.py +38 -22
  77. {fdsreader-1.11.7 → fdsreader-1.11.9}/fdsreader/export/sim_exporter.py +12 -5
  78. {fdsreader-1.11.7 → fdsreader-1.11.9}/fdsreader/export/slcf_exporter.py +36 -20
  79. {fdsreader-1.11.7 → fdsreader-1.11.9}/fdsreader/export/smoke3d_exporter.py +33 -18
  80. fdsreader-1.11.9/fdsreader/fds_classes/__init__.py +4 -0
  81. {fdsreader-1.11.7 → fdsreader-1.11.9}/fdsreader/fds_classes/mesh.py +60 -35
  82. {fdsreader-1.11.7 → fdsreader-1.11.9}/fdsreader/fds_classes/mesh_collection.py +3 -4
  83. {fdsreader-1.11.7 → fdsreader-1.11.9}/fdsreader/fds_classes/surface.py +13 -4
  84. {fdsreader-1.11.7 → fdsreader-1.11.9}/fdsreader/fds_classes/ventilation.py +14 -9
  85. fdsreader-1.11.9/fdsreader/geom/__init__.py +3 -0
  86. {fdsreader-1.11.7 → fdsreader-1.11.9}/fdsreader/geom/geometry.py +37 -38
  87. {fdsreader-1.11.7 → fdsreader-1.11.9}/fdsreader/geom/geometry_collection.py +10 -8
  88. fdsreader-1.11.9/fdsreader/isof/__init__.py +2 -0
  89. {fdsreader-1.11.7 → fdsreader-1.11.9}/fdsreader/isof/isosurface.py +88 -88
  90. {fdsreader-1.11.7 → fdsreader-1.11.9}/fdsreader/isof/isosurface_collection.py +10 -8
  91. fdsreader-1.11.9/fdsreader/part/__init__.py +2 -0
  92. {fdsreader-1.11.7 → fdsreader-1.11.9}/fdsreader/part/particle.py +6 -9
  93. {fdsreader-1.11.7 → fdsreader-1.11.9}/fdsreader/part/particle_collection.py +33 -26
  94. fdsreader-1.11.9/fdsreader/pl3d/__init__.py +2 -0
  95. {fdsreader-1.11.7 → fdsreader-1.11.9}/fdsreader/pl3d/pl3d.py +87 -60
  96. {fdsreader-1.11.7 → fdsreader-1.11.9}/fdsreader/pl3d/plot3D_collection.py +11 -8
  97. {fdsreader-1.11.7 → fdsreader-1.11.9}/fdsreader/simulation.py +263 -190
  98. fdsreader-1.11.9/fdsreader/slcf/__init__.py +4 -0
  99. {fdsreader-1.11.7 → fdsreader-1.11.9}/fdsreader/slcf/geomslice.py +62 -62
  100. {fdsreader-1.11.7 → fdsreader-1.11.9}/fdsreader/slcf/geomslice_collection.py +14 -13
  101. {fdsreader-1.11.7 → fdsreader-1.11.9}/fdsreader/slcf/slice.py +210 -200
  102. {fdsreader-1.11.7 → fdsreader-1.11.9}/fdsreader/slcf/slice_collection.py +14 -13
  103. fdsreader-1.11.9/fdsreader/smoke3d/__init__.py +2 -0
  104. {fdsreader-1.11.7 → fdsreader-1.11.9}/fdsreader/smoke3d/smoke3D_collection.py +9 -7
  105. {fdsreader-1.11.7 → fdsreader-1.11.9}/fdsreader/smoke3d/smoke3d.py +93 -72
  106. fdsreader-1.11.9/fdsreader/utils/__init__.py +5 -0
  107. {fdsreader-1.11.7 → fdsreader-1.11.9}/fdsreader/utils/data.py +13 -12
  108. {fdsreader-1.11.7 → fdsreader-1.11.9}/fdsreader/utils/dimension.py +9 -10
  109. {fdsreader-1.11.7 → fdsreader-1.11.9}/fdsreader/utils/extent.py +20 -26
  110. {fdsreader-1.11.7 → fdsreader-1.11.9}/fdsreader/utils/fortran_data.py +26 -17
  111. fdsreader-1.11.9/fdsreader/utils/misc.py +28 -0
  112. {fdsreader-1.11.7 → fdsreader-1.11.9/fdsreader.egg-info}/PKG-INFO +44 -42
  113. fdsreader-1.11.9/fdsreader.egg-info/SOURCES.txt +157 -0
  114. fdsreader-1.11.9/fdsreader.egg-info/requires.txt +14 -0
  115. fdsreader-1.11.9/fdsreader.egg-info/scm_file_list.json +154 -0
  116. fdsreader-1.11.9/fdsreader.egg-info/scm_version.json +8 -0
  117. fdsreader-1.11.9/pyproject.toml +90 -0
  118. fdsreader-1.11.9/requirements-dev.txt +5 -0
  119. fdsreader-1.11.9/tests/acceptance_tests/test_bndf.py +45 -0
  120. fdsreader-1.11.9/tests/acceptance_tests/test_devc.py +58 -0
  121. fdsreader-1.11.9/tests/acceptance_tests/test_geom.py +33 -0
  122. fdsreader-1.11.9/tests/acceptance_tests/test_isof.py +39 -0
  123. fdsreader-1.11.9/tests/acceptance_tests/test_part.py +43 -0
  124. fdsreader-1.11.9/tests/acceptance_tests/test_pl3d.py +31 -0
  125. fdsreader-1.11.9/tests/acceptance_tests/test_slcf.py +44 -0
  126. fdsreader-1.11.9/tests/acceptance_tests/test_smoke3d.py +42 -0
  127. fdsreader-1.11.9/tests/cases/bndf_data.tgz +3 -0
  128. fdsreader-1.11.9/tests/cases/bndf_data_fds6100.tgz +3 -0
  129. fdsreader-1.11.9/tests/cases/devc_data.tgz +3 -0
  130. fdsreader-1.11.9/tests/cases/devc_data_fds6100.tgz +3 -0
  131. fdsreader-1.11.9/tests/cases/fds_inputs/input_steckler.fds +49 -0
  132. fdsreader-1.11.9/tests/cases/fds_inputs/sphere_radiate.fds +1443 -0
  133. fdsreader-1.11.9/tests/cases/fds_inputs/steckler.fds +40 -0
  134. fdsreader-1.11.9/tests/cases/fds_inputs/vort3d_80.fds +49 -0
  135. fdsreader-1.11.9/tests/cases/fds_inputs/wall_005.fds +108 -0
  136. fdsreader-1.11.9/tests/cases/fds_inputs/water_droplets.fds +44 -0
  137. fdsreader-1.11.9/tests/cases/geom_data.tgz +3 -0
  138. fdsreader-1.11.9/tests/cases/part_data.tgz +3 -0
  139. fdsreader-1.11.9/tests/cases/part_data_fds6100.tgz +3 -0
  140. fdsreader-1.11.9/tests/cases/pl3d_data.tgz +3 -0
  141. fdsreader-1.11.9/tests/cases/pl3d_data_fds6100.tgz +3 -0
  142. fdsreader-1.11.9/tests/cases/steckler_data.tgz +3 -0
  143. fdsreader-1.11.9/tests/cases/steckler_data_fds6100.tgz +3 -0
  144. fdsreader-1.11.9/tests/conftest.py +9 -0
  145. fdsreader-1.11.9/tests/perf_verification.py +160 -0
  146. fdsreader-1.11.9/tests/run_tests.sh +54 -0
  147. fdsreader-1.11.9/tests/test.smv +334 -0
  148. fdsreader-1.11.9/tests/test_basic_read.py +45 -0
  149. fdsreader-1.11.9/tests/test_devc_csv_parsing.py +49 -0
  150. fdsreader-1.11.9/tests/test_obstruction_subobstructions.py +26 -0
  151. fdsreader-1.11.9/tests/test_particle_quantity_reshape.py +67 -0
  152. fdsreader-1.11.9/tests/test_slice_3d_ghost_points.py +41 -0
  153. fdsreader-1.11.9/tests/test_slice_coordinates.py +36 -0
  154. fdsreader-1.11.9/tests/test_smoke3d_multires.py +47 -0
  155. fdsreader-1.11.7/MANIFEST.in +0 -2
  156. fdsreader-1.11.7/fdsreader/__init__.py +0 -6
  157. fdsreader-1.11.7/fdsreader/_version.py +0 -11
  158. fdsreader-1.11.7/fdsreader/bndf/__init__.py +0 -3
  159. fdsreader-1.11.7/fdsreader/devc/__init__.py +0 -3
  160. fdsreader-1.11.7/fdsreader/evac/__init__.py +0 -3
  161. fdsreader-1.11.7/fdsreader/export/__init__.py +0 -4
  162. fdsreader-1.11.7/fdsreader/fds_classes/__init__.py +0 -7
  163. fdsreader-1.11.7/fdsreader/geom/__init__.py +0 -3
  164. fdsreader-1.11.7/fdsreader/isof/__init__.py +0 -3
  165. fdsreader-1.11.7/fdsreader/part/__init__.py +0 -3
  166. fdsreader-1.11.7/fdsreader/pl3d/__init__.py +0 -3
  167. fdsreader-1.11.7/fdsreader/slcf/__init__.py +0 -7
  168. fdsreader-1.11.7/fdsreader/smoke3d/__init__.py +0 -3
  169. fdsreader-1.11.7/fdsreader/utils/__init__.py +0 -7
  170. fdsreader-1.11.7/fdsreader/utils/misc.py +0 -20
  171. fdsreader-1.11.7/fdsreader.egg-info/SOURCES.txt +0 -61
  172. fdsreader-1.11.7/fdsreader.egg-info/requires.txt +0 -6
  173. fdsreader-1.11.7/pyproject.toml +0 -44
  174. fdsreader-1.11.7/requirements.txt +0 -163
  175. fdsreader-1.11.7/tests/test_version_compatibility.py +0 -16
  176. {fdsreader-1.11.7 → fdsreader-1.11.9}/LICENSE +0 -0
  177. {fdsreader-1.11.7 → fdsreader-1.11.9}/fdsreader/settings.py +0 -0
  178. {fdsreader-1.11.7 → fdsreader-1.11.9}/fdsreader.egg-info/dependency_links.txt +0 -0
  179. {fdsreader-1.11.7 → fdsreader-1.11.9}/fdsreader.egg-info/top_level.txt +0 -0
  180. {fdsreader-1.11.7 → fdsreader-1.11.9}/setup.cfg +0 -0
@@ -0,0 +1 @@
1
+ *.tgz filter=lfs diff=lfs merge=lfs -text
@@ -0,0 +1,54 @@
1
+ name: Bug report
2
+ description: Report an error or unexpected behavior
3
+ title: "[Bug]: "
4
+ labels: [bug]
5
+
6
+ body:
7
+ - type: markdown
8
+ attributes:
9
+ value: |
10
+ Welcome to the fdsreader GitHub repository!
11
+ We always appreciate feedback from our users.
12
+ Please fill out as many fields as possible to help us reproduce the bug
13
+ more easily.
14
+
15
+ Thank you for using fdsreader!
16
+
17
+ - type: textarea
18
+ id: what-happened
19
+ attributes:
20
+ label: What happened?
21
+ description: Also tell us, what did you expect to happen?
22
+ placeholder: Tell us what you see!
23
+ validations:
24
+ required: true
25
+
26
+ - type: textarea
27
+ attributes:
28
+ label: Steps to reproduce
29
+ description: |
30
+ Tell us how to reproduce this bug.
31
+ If possible, please include a minimal, fully reproducible example or a link to a Git repository.
32
+ placeholder: Put your code or a link here
33
+
34
+ - type: textarea
35
+ id: fds-version
36
+ attributes:
37
+ label: FDS version used
38
+ description: Please tell us what FDS version was used.
39
+ placeholder: Version
40
+ validations:
41
+ required: true
42
+
43
+ - type: textarea
44
+ id: fdsreader-version
45
+ attributes:
46
+ label: fdsreader version used
47
+ description: Please tell us what fdsreader version was used.
48
+ placeholder: Version
49
+ validations:
50
+ required: true
51
+
52
+ - type: markdown
53
+ attributes:
54
+ value: "_Thanks for submitting this bug report!_"
@@ -0,0 +1 @@
1
+ blank_issues_enabled: true
@@ -0,0 +1 @@
1
+ FDS-6.8.0
@@ -0,0 +1,94 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [master]
6
+ paths:
7
+ - "fdsreader/**"
8
+ - "tests/**"
9
+ - "pyproject.toml"
10
+ - "docs/**"
11
+ - ".readthedocs.yaml"
12
+ - ".github/workflows/ci.yml"
13
+ pull_request:
14
+ paths:
15
+ - "fdsreader/**"
16
+ - "tests/**"
17
+ - "pyproject.toml"
18
+ - "docs/**"
19
+ - ".readthedocs.yaml"
20
+
21
+ jobs:
22
+ changes:
23
+ runs-on: ubuntu-latest
24
+ outputs:
25
+ code: ${{ steps.filter.outputs.code }}
26
+ docs: ${{ steps.filter.outputs.docs }}
27
+ steps:
28
+ - uses: actions/checkout@v4
29
+ - uses: dorny/paths-filter@v3
30
+ id: filter
31
+ with:
32
+ filters: |
33
+ code:
34
+ - "fdsreader/**"
35
+ - "tests/**"
36
+ - "pyproject.toml"
37
+ docs:
38
+ - "docs/**"
39
+ - ".readthedocs.yaml"
40
+
41
+ lint:
42
+ needs: changes
43
+ if: needs.changes.outputs.code == 'true'
44
+ runs-on: ubuntu-latest
45
+ steps:
46
+ - uses: actions/checkout@v4
47
+ - uses: actions/setup-python@v5
48
+ with:
49
+ python-version: "3.12"
50
+ - run: pip install ruff
51
+ - run: ruff check fdsreader/
52
+ - run: ruff format --check fdsreader/
53
+
54
+ test:
55
+ needs: changes
56
+ if: needs.changes.outputs.code == 'true'
57
+ runs-on: ubuntu-latest
58
+ strategy:
59
+ matrix:
60
+ python-version: ["3.10", "3.11", "3.12"]
61
+ steps:
62
+ - uses: actions/checkout@v4
63
+ with:
64
+ lfs: true
65
+ - uses: actions/setup-python@v5
66
+ with:
67
+ python-version: ${{ matrix.python-version }}
68
+ cache: pip
69
+ - name: Install dependencies
70
+ run: pip install -e ".[dev]"
71
+ - name: Prepare test cases
72
+ run: cd tests/cases && for f in *.tgz; do tar -xzvf "$f"; done
73
+ - name: Run tests
74
+ run: pytest tests/ --cov=fdsreader --cov-report=xml --cov-report=term-missing
75
+ - name: Upload coverage
76
+ if: matrix.python-version == '3.12'
77
+ uses: codecov/codecov-action@v5
78
+ with:
79
+ token: ${{ secrets.CODECOV_TOKEN }}
80
+ files: coverage.xml
81
+
82
+ docs-build:
83
+ needs: changes
84
+ if: needs.changes.outputs.docs == 'true'
85
+ runs-on: ubuntu-latest
86
+ steps:
87
+ - uses: actions/checkout@v4
88
+ - uses: actions/setup-python@v5
89
+ with:
90
+ python-version: "3.12"
91
+ - name: Install dependencies
92
+ run: pip install -e ".[docs]"
93
+ - name: Build docs
94
+ run: sphinx-build --keep-going -b html docs/ docs/_build/html
@@ -0,0 +1,85 @@
1
+ name: FDS Compatibility Check
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ inputs:
6
+ fds_version:
7
+ description: "FDS version tag (e.g. FDS-6.10.1) — leave empty for latest"
8
+ required: false
9
+ schedule:
10
+ - cron: "0 6 * * 1" # Every Monday 06:00 UTC
11
+
12
+ jobs:
13
+ detect-version:
14
+ runs-on: ubuntu-latest
15
+ outputs:
16
+ run_compat: ${{ steps.check.outputs.run_compat }}
17
+ fds_version: ${{ steps.check.outputs.fds_version }}
18
+ steps:
19
+ - uses: actions/checkout@v4
20
+ - id: check
21
+ run: |
22
+ if [ -n "${{ inputs.fds_version }}" ]; then
23
+ echo "fds_version=${{ inputs.fds_version }}" >> $GITHUB_OUTPUT
24
+ echo "run_compat=true" >> $GITHUB_OUTPUT
25
+ else
26
+ LATEST=$(gh api repos/firemodels/fds/releases/latest --jq '.tag_name')
27
+ LAST=$(cat .github/last_tested_fds_version.txt 2>/dev/null || echo "none")
28
+ echo "fds_version=$LATEST" >> $GITHUB_OUTPUT
29
+ if [ "$LATEST" != "$LAST" ]; then
30
+ echo "run_compat=true" >> $GITHUB_OUTPUT
31
+ else
32
+ echo "run_compat=false" >> $GITHUB_OUTPUT
33
+ fi
34
+ fi
35
+ env:
36
+ GH_TOKEN: ${{ github.token }}
37
+
38
+ check-compat:
39
+ needs: detect-version
40
+ if: needs.detect-version.outputs.run_compat == 'true'
41
+ runs-on: ubuntu-latest
42
+ steps:
43
+ - uses: actions/checkout@v4
44
+ with:
45
+ lfs: true
46
+ - uses: actions/setup-python@v5
47
+ with:
48
+ python-version: "3.12"
49
+ - name: Download FDS
50
+ run: |
51
+ VERSION=${{ needs.detect-version.outputs.fds_version }}
52
+ ASSET_URL=$(gh api repos/firemodels/fds/releases/tags/${VERSION} --jq '.assets[] | select(.name | test("_lnx\\.sh$")) | .browser_download_url' | head -n1)
53
+ if [ -z "$ASSET_URL" ]; then
54
+ echo "No Linux installer asset found for release $VERSION" >&2
55
+ exit 1
56
+ fi
57
+ wget -q "$ASSET_URL" -O fds_install.sh
58
+ echo "" | bash fds_install.sh --prefix=$HOME/fds
59
+ env:
60
+ GH_TOKEN: ${{ github.token }}
61
+ - name: Run test simulations
62
+ run: |
63
+ FDS=$HOME/fds/bin/fds_openmp
64
+ for dir in tests/cases/fds_inputs/*.fds; do
65
+ name=$(basename "$dir" .fds)
66
+ mkdir -p /tmp/fds_out/$name
67
+ cd /tmp/fds_out/$name
68
+ $FDS "$GITHUB_WORKSPACE/$dir" || true
69
+ cd $GITHUB_WORKSPACE
70
+ done
71
+ - name: Install fdsreader and run tests
72
+ run: |
73
+ pip install ".[dev]"
74
+ cd tests/cases && for f in *.tgz; do tar -xzvf "$f"; done
75
+ cd ../..
76
+ pytest tests/ -v
77
+ - name: Update tracked FDS version
78
+ if: success()
79
+ run: |
80
+ echo "${{ needs.detect-version.outputs.fds_version }}" > .github/last_tested_fds_version.txt
81
+ git config user.name "github-actions[bot]"
82
+ git config user.email "github-actions[bot]@users.noreply.github.com"
83
+ git add .github/last_tested_fds_version.txt
84
+ git diff --staged --quiet || git commit -m "chore: update last tested FDS version to ${{ needs.detect-version.outputs.fds_version }}"
85
+ git push
@@ -0,0 +1,65 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - "v*"
7
+
8
+ jobs:
9
+ build:
10
+ runs-on: ubuntu-latest
11
+ steps:
12
+ - uses: actions/checkout@v7
13
+ with:
14
+ fetch-depth: 0
15
+ - uses: actions/setup-python@v7
16
+ with:
17
+ python-version: "3.x"
18
+ - run: pip install build
19
+ - run: python -m build
20
+ - uses: actions/upload-artifact@v7
21
+ with:
22
+ name: python-package-distributions
23
+ path: dist/
24
+
25
+ publish-testpypi:
26
+ if: contains(github.ref_name, 'a') || contains(github.ref_name, 'b') || contains(github.ref_name, 'rc')
27
+ needs: build
28
+ runs-on: ubuntu-latest
29
+ environment:
30
+ name: testpypi
31
+ url: https://test.pypi.org/p/fdsreader
32
+ permissions:
33
+ id-token: write
34
+ steps:
35
+ - uses: actions/download-artifact@v8
36
+ with:
37
+ name: python-package-distributions
38
+ path: dist/
39
+ - uses: pypa/gh-action-pypi-publish@release/v1
40
+ with:
41
+ repository-url: https://test.pypi.org/legacy/
42
+
43
+ publish-pypi:
44
+ if: "!contains(github.ref_name, 'a') && !contains(github.ref_name, 'b') && !contains(github.ref_name, 'rc')"
45
+ needs: build
46
+ runs-on: ubuntu-latest
47
+ environment:
48
+ name: pypi
49
+ url: https://pypi.org/p/fdsreader
50
+ permissions:
51
+ id-token: write
52
+ contents: write
53
+ steps:
54
+ - uses: actions/download-artifact@v8
55
+ with:
56
+ name: python-package-distributions
57
+ path: dist/
58
+ - uses: pypa/gh-action-pypi-publish@release/v1
59
+ - name: Create GitHub Release
60
+ env:
61
+ GITHUB_TOKEN: ${{ github.token }}
62
+ run: |
63
+ gh release create '${{ github.ref_name }}' dist/** \
64
+ --repo '${{ github.repository }}' \
65
+ --generate-notes