masster 0.5.25__tar.gz → 0.5.27__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.
Potentially problematic release.
This version of masster might be problematic. Click here for more details.
- {masster-0.5.25 → masster-0.5.27}/PKG-INFO +7 -1
- {masster-0.5.25 → masster-0.5.27}/README.md +5 -0
- masster-0.5.27/THIRD_PARTY_NOTICES.md +64 -0
- {masster-0.5.25 → masster-0.5.27}/pyproject.toml +31 -13
- masster-0.5.25/.github/workflows/publish.yml +0 -174
- masster-0.5.25/.github/workflows/security.yml +0 -88
- masster-0.5.25/.github/workflows/test.yml +0 -164
- masster-0.5.25/.pre-commit-config.yaml +0 -96
- masster-0.5.25/Makefile +0 -76
- masster-0.5.25/demo/example_batch_process.py +0 -190
- masster-0.5.25/demo/example_sample_process.py +0 -24
- masster-0.5.25/tox.ini +0 -61
- masster-0.5.25/uv.lock +0 -3626
- {masster-0.5.25 → masster-0.5.27}/.gitignore +0 -0
- {masster-0.5.25 → masster-0.5.27}/LICENSE +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/__init__.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/_version.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/chromatogram.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/data/libs/aa.csv +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/data/libs/ccm.csv +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/data/libs/urine.csv +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/data/wiff/2025_01_14_VW_7600_LpMx_DBS_CID_2min_TOP15_030msecMS1_005msecReac_CE35_DBS-ON_3.timeseries.data +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/data/wiff/2025_01_14_VW_7600_LpMx_DBS_CID_2min_TOP15_030msecMS1_005msecReac_CE35_DBS-ON_3.wiff +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/data/wiff/2025_01_14_VW_7600_LpMx_DBS_CID_2min_TOP15_030msecMS1_005msecReac_CE35_DBS-ON_3.wiff.scan +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/data/wiff/2025_01_14_VW_7600_LpMx_DBS_CID_2min_TOP15_030msecMS1_005msecReac_CE35_DBS-ON_3.wiff2 +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/lib/__init__.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/lib/lib.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/logger.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/sample/__init__.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/sample/adducts.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/sample/defaults/__init__.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/sample/defaults/find_adducts_def.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/sample/defaults/find_features_def.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/sample/defaults/find_ms2_def.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/sample/defaults/get_spectrum_def.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/sample/defaults/sample_def.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/sample/h5.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/sample/helpers.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/sample/lib.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/sample/load.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/sample/parameters.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/sample/plot.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/sample/processing.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/sample/quant.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/sample/sample.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/sample/sample5_schema.json +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/sample/save.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/sample/sciex.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/sample/thermo.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/spectrum.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/study/__init__.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/study/analysis.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/study/defaults/__init__.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/study/defaults/align_def.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/study/defaults/export_def.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/study/defaults/fill_def.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/study/defaults/find_consensus_def.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/study/defaults/find_ms2_def.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/study/defaults/identify_def.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/study/defaults/integrate_chrom_def.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/study/defaults/integrate_def.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/study/defaults/merge_def.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/study/defaults/study_def.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/study/export.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/study/h5.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/study/helpers.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/study/id.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/study/importers.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/study/load.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/study/merge.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/study/parameters.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/study/plot.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/study/processing.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/study/save.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/study/study.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/study/study5_schema.json +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/wizard/__init__.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/src/masster/wizard/wizard.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/tests/conftest.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/tests/test_chromatogram.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/tests/test_defaults.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/tests/test_imports.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/tests/test_integration.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/tests/test_logger.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/tests/test_parameters.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/tests/test_sample.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/tests/test_spectrum.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/tests/test_study.py +0 -0
- {masster-0.5.25 → masster-0.5.27}/tests/test_version.py +0 -0
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: masster
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.27
|
|
4
4
|
Summary: Mass spectrometry data analysis package
|
|
5
5
|
Project-URL: homepage, https://github.com/zamboni-lab/masster
|
|
6
6
|
Project-URL: repository, https://github.com/zamboni-lab/masster
|
|
7
7
|
Project-URL: documentation, https://github.com/zamboni-lab/masster#readme
|
|
8
|
+
Project-URL: Third-Party Licenses, https://github.com/zamboni-lab/masster/blob/main/THIRD_PARTY_NOTICES.md
|
|
8
9
|
Author: Zamboni Lab
|
|
9
10
|
License: GNU AFFERO GENERAL PUBLIC LICENSE
|
|
10
11
|
Version 3, 19 November 2007
|
|
@@ -851,5 +852,10 @@ python -c "from masster import Wizard; wiz = Wizard(source='D:/Data/studies/my_s
|
|
|
851
852
|
## License
|
|
852
853
|
GNU Affero General Public License v3
|
|
853
854
|
|
|
855
|
+
See the [LICENSE](LICENSE) file for details.
|
|
856
|
+
|
|
857
|
+
### Third-Party Licenses
|
|
858
|
+
This project uses several third-party libraries, including pyOpenMS which is licensed under the BSD 3-Clause License. For complete information about third-party dependencies and their licenses, see [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md).
|
|
859
|
+
|
|
854
860
|
## Citation
|
|
855
861
|
If you use Masster in your research, please cite this repository.
|
|
@@ -124,5 +124,10 @@ python -c "from masster import Wizard; wiz = Wizard(source='D:/Data/studies/my_s
|
|
|
124
124
|
## License
|
|
125
125
|
GNU Affero General Public License v3
|
|
126
126
|
|
|
127
|
+
See the [LICENSE](LICENSE) file for details.
|
|
128
|
+
|
|
129
|
+
### Third-Party Licenses
|
|
130
|
+
This project uses several third-party libraries, including pyOpenMS which is licensed under the BSD 3-Clause License. For complete information about third-party dependencies and their licenses, see [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md).
|
|
131
|
+
|
|
127
132
|
## Citation
|
|
128
133
|
If you use Masster in your research, please cite this repository.
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Third-Party Licenses and Notices
|
|
2
|
+
|
|
3
|
+
This project uses third-party libraries and components that are distributed under their own licenses. Below is a list of these dependencies and their respective license information.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## pyOpenMS
|
|
8
|
+
|
|
9
|
+
**License:** BSD 3-Clause License
|
|
10
|
+
**Copyright:** OpenMS Team
|
|
11
|
+
**Source:** https://github.com/OpenMS/OpenMS
|
|
12
|
+
|
|
13
|
+
pyOpenMS is a Python wrapper for OpenMS, a library for mass spectrometry data analysis.
|
|
14
|
+
|
|
15
|
+
### BSD 3-Clause License
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
Copyright (c) 2002-2025, The OpenMS Team
|
|
19
|
+
All rights reserved.
|
|
20
|
+
|
|
21
|
+
Redistribution and use in source and binary forms, with or without
|
|
22
|
+
modification, are permitted provided that the following conditions are met:
|
|
23
|
+
|
|
24
|
+
1. Redistributions of source code must retain the above copyright notice,
|
|
25
|
+
this list of conditions and the following disclaimer.
|
|
26
|
+
|
|
27
|
+
2. Redistributions in binary form must reproduce the above copyright notice,
|
|
28
|
+
this list of conditions and the following disclaimer in the documentation
|
|
29
|
+
and/or other materials provided with the distribution.
|
|
30
|
+
|
|
31
|
+
3. Neither the name of the copyright holder nor the names of its
|
|
32
|
+
contributors may be used to endorse or promote products derived from
|
|
33
|
+
this software without specific prior written permission.
|
|
34
|
+
|
|
35
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
36
|
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
37
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
38
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
39
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
40
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
41
|
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
42
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
43
|
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
44
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## Other Dependencies
|
|
50
|
+
|
|
51
|
+
This project also depends on the following open-source libraries. Please refer to their respective repositories for detailed license information:
|
|
52
|
+
|
|
53
|
+
- **NumPy** - BSD License
|
|
54
|
+
- **Pandas** - BSD License
|
|
55
|
+
- **SciPy** - BSD License
|
|
56
|
+
- **Matplotlib** - PSF-based License
|
|
57
|
+
- **h5py** - BSD License
|
|
58
|
+
- **Bokeh** - BSD License
|
|
59
|
+
- **Panel** - BSD License
|
|
60
|
+
- **Polars** - MIT License
|
|
61
|
+
- **scikit-learn** - BSD License
|
|
62
|
+
- **and others** - See pyproject.toml for complete dependency list
|
|
63
|
+
|
|
64
|
+
For the most up-to-date license information for these dependencies, please refer to their official repositories and documentation.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
|
|
2
2
|
[project]
|
|
3
3
|
name = "masster"
|
|
4
|
-
version = "0.5.
|
|
4
|
+
version = "0.5.27"
|
|
5
5
|
description = "Mass spectrometry data analysis package"
|
|
6
6
|
authors = [
|
|
7
7
|
{ name = "Zamboni Lab" }
|
|
@@ -25,6 +25,7 @@ classifiers = [
|
|
|
25
25
|
urls.homepage = "https://github.com/zamboni-lab/masster"
|
|
26
26
|
urls.repository = "https://github.com/zamboni-lab/masster"
|
|
27
27
|
urls.documentation = "https://github.com/zamboni-lab/masster#readme"
|
|
28
|
+
urls."Third-Party Licenses" = "https://github.com/zamboni-lab/masster/blob/main/THIRD_PARTY_NOTICES.md"
|
|
28
29
|
dependencies = [
|
|
29
30
|
"alpharaw>=0.4.8",
|
|
30
31
|
"bokeh>=3.7.3",
|
|
@@ -83,6 +84,23 @@ masster-version = "masster._version:main"
|
|
|
83
84
|
requires = ["hatchling>=1.18.0"]
|
|
84
85
|
build-backend = "hatchling.build"
|
|
85
86
|
|
|
87
|
+
# Hatchling configuration - include additional files in distribution
|
|
88
|
+
[tool.hatch.build.targets.sdist]
|
|
89
|
+
include = [
|
|
90
|
+
"/src",
|
|
91
|
+
"/tests",
|
|
92
|
+
"/LICENSE",
|
|
93
|
+
"/README.md",
|
|
94
|
+
"/THIRD_PARTY_NOTICES.md",
|
|
95
|
+
"/pyproject.toml",
|
|
96
|
+
]
|
|
97
|
+
|
|
98
|
+
[tool.hatch.build.targets.wheel]
|
|
99
|
+
packages = ["src/masster"]
|
|
100
|
+
include = [
|
|
101
|
+
"/THIRD_PARTY_NOTICES.md",
|
|
102
|
+
]
|
|
103
|
+
|
|
86
104
|
# Testing configuration
|
|
87
105
|
[tool.pytest.ini_options]
|
|
88
106
|
testpaths = ["tests"]
|
|
@@ -132,18 +150,18 @@ exclude_lines = [
|
|
|
132
150
|
line-length = 88
|
|
133
151
|
target-version = ['py311']
|
|
134
152
|
include = '\.pyi?$'
|
|
135
|
-
extend-exclude = '''
|
|
136
|
-
/(
|
|
137
|
-
# directories
|
|
138
|
-
\.eggs
|
|
139
|
-
| \.git
|
|
140
|
-
| \.hg
|
|
141
|
-
| \.mypy_cache
|
|
142
|
-
| \.tox
|
|
143
|
-
| \.venv
|
|
144
|
-
| build
|
|
145
|
-
| dist
|
|
146
|
-
)/
|
|
153
|
+
extend-exclude = '''
|
|
154
|
+
/(
|
|
155
|
+
# directories
|
|
156
|
+
\.eggs
|
|
157
|
+
| \.git
|
|
158
|
+
| \.hg
|
|
159
|
+
| \.mypy_cache
|
|
160
|
+
| \.tox
|
|
161
|
+
| \.venv
|
|
162
|
+
| build
|
|
163
|
+
| dist
|
|
164
|
+
)/
|
|
147
165
|
'''
|
|
148
166
|
|
|
149
167
|
# MyPy configuration
|
|
@@ -1,174 +0,0 @@
|
|
|
1
|
-
name: Create release and Publish to PyPI
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
workflow_dispatch:
|
|
5
|
-
inputs:
|
|
6
|
-
version:
|
|
7
|
-
description: 'Version to release (e.g., v1.0.0)'
|
|
8
|
-
required: true
|
|
9
|
-
type: string
|
|
10
|
-
test_pypi:
|
|
11
|
-
description: 'Publish to Test PyPI instead of PyPI'
|
|
12
|
-
required: false
|
|
13
|
-
default: false
|
|
14
|
-
type: boolean
|
|
15
|
-
|
|
16
|
-
jobs:
|
|
17
|
-
create-release:
|
|
18
|
-
runs-on: ubuntu-latest
|
|
19
|
-
steps:
|
|
20
|
-
- uses: actions/checkout@v4
|
|
21
|
-
with:
|
|
22
|
-
fetch-depth: 0
|
|
23
|
-
|
|
24
|
-
- name: Set up Python
|
|
25
|
-
uses: actions/setup-python@v5
|
|
26
|
-
with:
|
|
27
|
-
python-version: "3.11"
|
|
28
|
-
|
|
29
|
-
- name: Update version in pyproject.toml
|
|
30
|
-
run: |
|
|
31
|
-
# Remove 'v' prefix if present
|
|
32
|
-
VERSION="${{ github.event.inputs.version }}"
|
|
33
|
-
VERSION=${VERSION#v}
|
|
34
|
-
|
|
35
|
-
# Update version in pyproject.toml
|
|
36
|
-
sed -i "s/^version = \".*\"/version = \"$VERSION\"/" pyproject.toml
|
|
37
|
-
|
|
38
|
-
# Verify the change
|
|
39
|
-
echo "Updated pyproject.toml version:"
|
|
40
|
-
grep "^version = " pyproject.toml
|
|
41
|
-
|
|
42
|
-
- name: Update version in _version.py
|
|
43
|
-
run: |
|
|
44
|
-
# Remove 'v' prefix if present
|
|
45
|
-
VERSION="${{ github.event.inputs.version }}"
|
|
46
|
-
VERSION=${VERSION#v}
|
|
47
|
-
|
|
48
|
-
# Update version in _version.py
|
|
49
|
-
sed -i "s/__version__ = \".*\"/__version__ = \"$VERSION\"/" src/masster/_version.py
|
|
50
|
-
|
|
51
|
-
# Verify the change
|
|
52
|
-
echo "Updated _version.py:"
|
|
53
|
-
grep "__version__ = " src/masster/_version.py
|
|
54
|
-
|
|
55
|
-
- name: Commit version updates
|
|
56
|
-
run: |
|
|
57
|
-
git config --local user.email "action@github.com"
|
|
58
|
-
git config --local user.name "GitHub Action"
|
|
59
|
-
git add pyproject.toml src/masster/_version.py
|
|
60
|
-
git commit -m "Update version to ${{ github.event.inputs.version }}" || echo "No changes to commit"
|
|
61
|
-
git push
|
|
62
|
-
|
|
63
|
-
- name: Create Release
|
|
64
|
-
id: create-release
|
|
65
|
-
uses: softprops/action-gh-release@v1
|
|
66
|
-
with:
|
|
67
|
-
tag_name: ${{ github.event.inputs.version }}
|
|
68
|
-
name: Release ${{ github.event.inputs.version }}
|
|
69
|
-
draft: false
|
|
70
|
-
prerelease: false
|
|
71
|
-
generate_release_notes: true
|
|
72
|
-
env:
|
|
73
|
-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
74
|
-
|
|
75
|
-
build:
|
|
76
|
-
needs: create-release
|
|
77
|
-
runs-on: ubuntu-latest
|
|
78
|
-
steps:
|
|
79
|
-
- uses: actions/checkout@v4
|
|
80
|
-
with:
|
|
81
|
-
fetch-depth: 0
|
|
82
|
-
|
|
83
|
-
- name: Pull latest changes
|
|
84
|
-
run: git pull origin ${{ github.ref_name }}
|
|
85
|
-
|
|
86
|
-
- name: Verify version synchronization
|
|
87
|
-
run: |
|
|
88
|
-
echo "Checking version synchronization..."
|
|
89
|
-
PYPROJECT_VERSION=$(grep "^version = " pyproject.toml | sed 's/version = "\(.*\)"/\1/')
|
|
90
|
-
VERSION_PY=$(grep "__version__ = " src/masster/_version.py | sed 's/__version__ = "\(.*\)"/\1/')
|
|
91
|
-
INPUT_VERSION="${{ github.event.inputs.version }}"
|
|
92
|
-
INPUT_VERSION=${INPUT_VERSION#v}
|
|
93
|
-
|
|
94
|
-
echo "Input version: $INPUT_VERSION"
|
|
95
|
-
echo "pyproject.toml version: $PYPROJECT_VERSION"
|
|
96
|
-
echo "_version.py version: $VERSION_PY"
|
|
97
|
-
|
|
98
|
-
if [ "$PYPROJECT_VERSION" != "$INPUT_VERSION" ] || [ "$VERSION_PY" != "$INPUT_VERSION" ]; then
|
|
99
|
-
echo "Version mismatch detected!"
|
|
100
|
-
exit 1
|
|
101
|
-
fi
|
|
102
|
-
echo "All versions synchronized correctly!"
|
|
103
|
-
|
|
104
|
-
- name: Set up Python
|
|
105
|
-
uses: actions/setup-python@v5
|
|
106
|
-
with:
|
|
107
|
-
python-version: "3.11"
|
|
108
|
-
|
|
109
|
-
- name: Install UV
|
|
110
|
-
uses: astral-sh/setup-uv@v3
|
|
111
|
-
|
|
112
|
-
- name: Install dependencies
|
|
113
|
-
run: |
|
|
114
|
-
uv sync --all-extras --dev
|
|
115
|
-
|
|
116
|
-
- name: Run tests
|
|
117
|
-
run: |
|
|
118
|
-
uv run pytest tests/ -v
|
|
119
|
-
|
|
120
|
-
- name: Build package
|
|
121
|
-
run: |
|
|
122
|
-
uv build
|
|
123
|
-
|
|
124
|
-
- name: Check package
|
|
125
|
-
run: |
|
|
126
|
-
uv run twine check dist/*
|
|
127
|
-
|
|
128
|
-
- name: Upload build artifacts
|
|
129
|
-
uses: actions/upload-artifact@v4
|
|
130
|
-
with:
|
|
131
|
-
name: dist
|
|
132
|
-
path: dist/
|
|
133
|
-
|
|
134
|
-
publish-test-pypi:
|
|
135
|
-
needs: build
|
|
136
|
-
runs-on: ubuntu-latest
|
|
137
|
-
if: github.event.inputs.test_pypi == 'true'
|
|
138
|
-
environment:
|
|
139
|
-
name: testpypi
|
|
140
|
-
url: https://test.pypi.org/p/masster
|
|
141
|
-
permissions:
|
|
142
|
-
id-token: write
|
|
143
|
-
|
|
144
|
-
steps:
|
|
145
|
-
- name: Download build artifacts
|
|
146
|
-
uses: actions/download-artifact@v4
|
|
147
|
-
with:
|
|
148
|
-
name: dist
|
|
149
|
-
path: dist/
|
|
150
|
-
|
|
151
|
-
- name: Publish to Test PyPI
|
|
152
|
-
uses: pypa/gh-action-pypi-publish@release/v1
|
|
153
|
-
with:
|
|
154
|
-
repository-url: https://test.pypi.org/legacy/
|
|
155
|
-
|
|
156
|
-
publish-pypi:
|
|
157
|
-
needs: build
|
|
158
|
-
runs-on: ubuntu-latest
|
|
159
|
-
if: github.event.inputs.test_pypi != 'true'
|
|
160
|
-
environment:
|
|
161
|
-
name: pypi
|
|
162
|
-
url: https://pypi.org/p/masster
|
|
163
|
-
permissions:
|
|
164
|
-
id-token: write
|
|
165
|
-
|
|
166
|
-
steps:
|
|
167
|
-
- name: Download build artifacts
|
|
168
|
-
uses: actions/download-artifact@v4
|
|
169
|
-
with:
|
|
170
|
-
name: dist
|
|
171
|
-
path: dist/
|
|
172
|
-
|
|
173
|
-
- name: Publish to PyPI
|
|
174
|
-
uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
name: Security Scan
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
workflow_dispatch:
|
|
5
|
-
inputs:
|
|
6
|
-
scan_type:
|
|
7
|
-
description: 'Type of security scan to run'
|
|
8
|
-
required: false
|
|
9
|
-
default: 'all'
|
|
10
|
-
type: choice
|
|
11
|
-
options:
|
|
12
|
-
- all
|
|
13
|
-
- safety-only
|
|
14
|
-
- bandit-only
|
|
15
|
-
upload_reports:
|
|
16
|
-
description: 'Upload security reports as artifacts'
|
|
17
|
-
required: false
|
|
18
|
-
default: true
|
|
19
|
-
type: boolean
|
|
20
|
-
schedule:
|
|
21
|
-
- cron: '0 3 * * 1' # Weekly on Monday at 3 AM UTC
|
|
22
|
-
|
|
23
|
-
jobs:
|
|
24
|
-
security:
|
|
25
|
-
runs-on: ubuntu-latest
|
|
26
|
-
steps:
|
|
27
|
-
- uses: actions/checkout@v4
|
|
28
|
-
|
|
29
|
-
- name: Set up Python
|
|
30
|
-
uses: actions/setup-python@v5
|
|
31
|
-
with:
|
|
32
|
-
python-version: "3.11"
|
|
33
|
-
|
|
34
|
-
- name: Install UV
|
|
35
|
-
uses: astral-sh/setup-uv@v3
|
|
36
|
-
|
|
37
|
-
- name: Install dependencies
|
|
38
|
-
run: |
|
|
39
|
-
uv sync --all-extras --dev
|
|
40
|
-
|
|
41
|
-
- name: Run safety check
|
|
42
|
-
if: github.event_name == 'schedule' || github.event.inputs.scan_type == 'all' || github.event.inputs.scan_type == 'safety-only'
|
|
43
|
-
run: |
|
|
44
|
-
echo "Running Safety security scan..."
|
|
45
|
-
uv run safety check --json --output safety-report.json || true
|
|
46
|
-
echo "Safety scan completed. Check safety-report.json for results."
|
|
47
|
-
|
|
48
|
-
- name: Run bandit security check
|
|
49
|
-
if: github.event_name == 'schedule' || github.event.inputs.scan_type == 'all' || github.event.inputs.scan_type == 'bandit-only'
|
|
50
|
-
run: |
|
|
51
|
-
echo "Running Bandit security scan..."
|
|
52
|
-
uv run bandit -r src/masster -f json -o bandit-report.json || true
|
|
53
|
-
echo "Bandit scan completed. Check bandit-report.json for results."
|
|
54
|
-
|
|
55
|
-
- name: Display scan summary
|
|
56
|
-
run: |
|
|
57
|
-
echo "=== Security Scan Summary ==="
|
|
58
|
-
if [ "${{ github.event_name }}" = "schedule" ]; then
|
|
59
|
-
echo "Scan type: all (scheduled run)"
|
|
60
|
-
else
|
|
61
|
-
echo "Scan type: ${{ github.event.inputs.scan_type || 'all' }}"
|
|
62
|
-
fi
|
|
63
|
-
|
|
64
|
-
if [[ ("${{ github.event_name }}" == "schedule") || ("${{ github.event.inputs.scan_type }}" == "all" || "${{ github.event.inputs.scan_type }}" == "safety-only") ]] && [ -f safety-report.json ]; then
|
|
65
|
-
echo "Safety report generated: safety-report.json"
|
|
66
|
-
# Show summary if available
|
|
67
|
-
if command -v jq &> /dev/null && [ -s safety-report.json ]; then
|
|
68
|
-
echo "Safety vulnerabilities found: $(jq '.vulnerabilities | length' safety-report.json 2>/dev/null || echo 'Unable to parse')"
|
|
69
|
-
fi
|
|
70
|
-
fi
|
|
71
|
-
|
|
72
|
-
if [[ ("${{ github.event_name }}" == "schedule") || ("${{ github.event.inputs.scan_type }}" == "all" || "${{ github.event.inputs.scan_type }}" == "bandit-only") ]] && [ -f bandit-report.json ]; then
|
|
73
|
-
echo "Bandit report generated: bandit-report.json"
|
|
74
|
-
# Show summary if available
|
|
75
|
-
if command -v jq &> /dev/null && [ -s bandit-report.json ]; then
|
|
76
|
-
echo "Bandit issues found: $(jq '.results | length' bandit-report.json 2>/dev/null || echo 'Unable to parse')"
|
|
77
|
-
fi
|
|
78
|
-
fi
|
|
79
|
-
|
|
80
|
-
- name: Upload security reports
|
|
81
|
-
if: github.event_name == 'schedule' || github.event.inputs.upload_reports == 'true'
|
|
82
|
-
uses: actions/upload-artifact@v4
|
|
83
|
-
with:
|
|
84
|
-
name: security-reports-${{ github.run_number }}
|
|
85
|
-
path: |
|
|
86
|
-
safety-report.json
|
|
87
|
-
bandit-report.json
|
|
88
|
-
retention-days: 30
|
|
@@ -1,164 +0,0 @@
|
|
|
1
|
-
name: Test Suite
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
workflow_dispatch:
|
|
5
|
-
inputs:
|
|
6
|
-
run_all_tests:
|
|
7
|
-
description: 'Run tests on all OS and Python versions'
|
|
8
|
-
required: false
|
|
9
|
-
default: true
|
|
10
|
-
type: boolean
|
|
11
|
-
target_os:
|
|
12
|
-
description: 'Target OS for testing (if not running all)'
|
|
13
|
-
required: false
|
|
14
|
-
default: 'ubuntu-latest'
|
|
15
|
-
type: choice
|
|
16
|
-
options:
|
|
17
|
-
- ubuntu-latest
|
|
18
|
-
- windows-latest
|
|
19
|
-
- macos-latest
|
|
20
|
-
python_version:
|
|
21
|
-
description: 'Python version for testing (if not running all)'
|
|
22
|
-
required: false
|
|
23
|
-
default: '3.11'
|
|
24
|
-
type: choice
|
|
25
|
-
options:
|
|
26
|
-
- '3.11'
|
|
27
|
-
- '3.12'
|
|
28
|
-
- '3.13'
|
|
29
|
-
schedule:
|
|
30
|
-
- cron: '0 2 * * 1' # Weekly on Monday at 2 AM UTC
|
|
31
|
-
|
|
32
|
-
jobs:
|
|
33
|
-
test-all:
|
|
34
|
-
if: github.event_name == 'schedule' || github.event.inputs.run_all_tests == 'true'
|
|
35
|
-
runs-on: ${{ matrix.os }}
|
|
36
|
-
strategy:
|
|
37
|
-
fail-fast: false
|
|
38
|
-
matrix:
|
|
39
|
-
os: [ubuntu-latest, windows-latest, macos-latest]
|
|
40
|
-
python-version: ["3.11", "3.12", "3.13"]
|
|
41
|
-
exclude:
|
|
42
|
-
# Exclude macOS with Python 3.11 and 3.12 to reduce CI costs
|
|
43
|
-
- os: macos-latest
|
|
44
|
-
python-version: "3.11"
|
|
45
|
-
- os: macos-latest
|
|
46
|
-
python-version: "3.12"
|
|
47
|
-
# Exclude Windows with Python 3.12 to reduce CI costs
|
|
48
|
-
- os: windows-latest
|
|
49
|
-
python-version: "3.12"
|
|
50
|
-
|
|
51
|
-
steps:
|
|
52
|
-
- uses: actions/checkout@v4
|
|
53
|
-
|
|
54
|
-
- name: Set up Python ${{ matrix.python-version }}
|
|
55
|
-
uses: actions/setup-python@v5
|
|
56
|
-
with:
|
|
57
|
-
python-version: ${{ matrix.python-version }}
|
|
58
|
-
|
|
59
|
-
- name: Install UV
|
|
60
|
-
uses: astral-sh/setup-uv@v3
|
|
61
|
-
with:
|
|
62
|
-
enable-cache: true
|
|
63
|
-
cache-dependency-glob: "uv.lock"
|
|
64
|
-
|
|
65
|
-
- name: Install dependencies
|
|
66
|
-
run: |
|
|
67
|
-
uv sync --all-extras --dev
|
|
68
|
-
|
|
69
|
-
- name: Lint with flake8
|
|
70
|
-
run: |
|
|
71
|
-
uv run flake8 src/masster tests --count --select=E9,F63,F7,F82 --show-source --statistics
|
|
72
|
-
uv run flake8 src/masster tests --count --exit-zero --max-complexity=10 --max-line-length=88 --statistics
|
|
73
|
-
|
|
74
|
-
- name: Type check with mypy
|
|
75
|
-
run: |
|
|
76
|
-
uv run mypy src/masster --ignore-missing-imports --no-strict-optional
|
|
77
|
-
|
|
78
|
-
- name: Test with pytest
|
|
79
|
-
run: |
|
|
80
|
-
uv run pytest tests/ -v --cov=masster --cov-report=xml --cov-report=term-missing
|
|
81
|
-
|
|
82
|
-
- name: Upload coverage to Codecov
|
|
83
|
-
if: matrix.os == 'ubuntu-latest' && matrix.python-version == '3.11'
|
|
84
|
-
uses: codecov/codecov-action@v3
|
|
85
|
-
with:
|
|
86
|
-
file: ./coverage.xml
|
|
87
|
-
flags: unittests
|
|
88
|
-
name: codecov-umbrella
|
|
89
|
-
|
|
90
|
-
test-selective:
|
|
91
|
-
if: github.event_name == 'workflow_dispatch' && github.event.inputs.run_all_tests != 'true'
|
|
92
|
-
runs-on: ${{ github.event.inputs.target_os || 'ubuntu-latest' }}
|
|
93
|
-
|
|
94
|
-
steps:
|
|
95
|
-
- uses: actions/checkout@v4
|
|
96
|
-
|
|
97
|
-
- name: Set up Python ${{ github.event.inputs.python_version || '3.11' }}
|
|
98
|
-
uses: actions/setup-python@v5
|
|
99
|
-
with:
|
|
100
|
-
python-version: ${{ github.event.inputs.python_version || '3.11' }}
|
|
101
|
-
|
|
102
|
-
- name: Install UV
|
|
103
|
-
uses: astral-sh/setup-uv@v3
|
|
104
|
-
with:
|
|
105
|
-
enable-cache: true
|
|
106
|
-
cache-dependency-glob: "uv.lock"
|
|
107
|
-
|
|
108
|
-
- name: Install dependencies
|
|
109
|
-
run: |
|
|
110
|
-
uv sync --all-extras --dev
|
|
111
|
-
|
|
112
|
-
- name: Lint with flake8
|
|
113
|
-
run: |
|
|
114
|
-
uv run flake8 src/masster tests --count --select=E9,F63,F7,F82 --show-source --statistics
|
|
115
|
-
uv run flake8 src/masster tests --count --exit-zero --max-complexity=10 --max-line-length=88 --statistics
|
|
116
|
-
|
|
117
|
-
- name: Type check with mypy
|
|
118
|
-
run: |
|
|
119
|
-
uv run mypy src/masster --ignore-missing-imports --no-strict-optional
|
|
120
|
-
|
|
121
|
-
- name: Test with pytest
|
|
122
|
-
run: |
|
|
123
|
-
uv run pytest tests/ -v --cov=masster --cov-report=xml --cov-report=term-missing
|
|
124
|
-
|
|
125
|
-
- name: Upload coverage to Codecov
|
|
126
|
-
if: github.event.inputs.target_os == 'ubuntu-latest' && github.event.inputs.python_version == '3.11'
|
|
127
|
-
uses: codecov/codecov-action@v3
|
|
128
|
-
with:
|
|
129
|
-
file: ./coverage.xml
|
|
130
|
-
flags: unittests
|
|
131
|
-
name: codecov-umbrella
|
|
132
|
-
|
|
133
|
-
build:
|
|
134
|
-
needs: [test-all, test-selective]
|
|
135
|
-
if: always() && (needs.test-all.result == 'success' || needs.test-selective.result == 'success')
|
|
136
|
-
runs-on: ubuntu-latest
|
|
137
|
-
steps:
|
|
138
|
-
- uses: actions/checkout@v4
|
|
139
|
-
|
|
140
|
-
- name: Set up Python
|
|
141
|
-
uses: actions/setup-python@v5
|
|
142
|
-
with:
|
|
143
|
-
python-version: "3.11"
|
|
144
|
-
|
|
145
|
-
- name: Install UV
|
|
146
|
-
uses: astral-sh/setup-uv@v3
|
|
147
|
-
|
|
148
|
-
- name: Install dependencies
|
|
149
|
-
run: |
|
|
150
|
-
uv sync --all-extras --dev
|
|
151
|
-
|
|
152
|
-
- name: Build package
|
|
153
|
-
run: |
|
|
154
|
-
uv build
|
|
155
|
-
|
|
156
|
-
- name: Check package
|
|
157
|
-
run: |
|
|
158
|
-
uv run twine check dist/*
|
|
159
|
-
|
|
160
|
-
- name: Upload build artifacts
|
|
161
|
-
uses: actions/upload-artifact@v4
|
|
162
|
-
with:
|
|
163
|
-
name: dist
|
|
164
|
-
path: dist/
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
repos:
|
|
3
|
-
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
4
|
-
rev: v5.0.0
|
|
5
|
-
hooks:
|
|
6
|
-
- id: check-added-large-files
|
|
7
|
-
- id: check-ast
|
|
8
|
-
- id: check-builtin-literals
|
|
9
|
-
- id: check-case-conflict
|
|
10
|
-
- id: check-docstring-first
|
|
11
|
-
- id: check-executables-have-shebangs
|
|
12
|
-
- id: check-illegal-windows-names
|
|
13
|
-
- id: check-merge-conflict
|
|
14
|
-
- id: check-symlinks
|
|
15
|
-
- id: check-shebang-scripts-are-executable
|
|
16
|
-
- id: check-symlinks
|
|
17
|
-
- id: check-toml
|
|
18
|
-
- id: check-xml
|
|
19
|
-
- id: check-yaml
|
|
20
|
-
- id: check-json
|
|
21
|
-
exclude: ^.devcontainer/devcontainer.json
|
|
22
|
-
- id: pretty-format-json
|
|
23
|
-
exclude: ^.devcontainer/devcontainer.json
|
|
24
|
-
args:
|
|
25
|
-
- --autofix
|
|
26
|
-
- id: debug-statements
|
|
27
|
-
- id: end-of-file-fixer
|
|
28
|
-
- id: mixed-line-ending
|
|
29
|
-
- id: pretty-format-json
|
|
30
|
-
- id: trailing-whitespace
|
|
31
|
-
# - repo: https://github.com/openstack/bashate
|
|
32
|
-
# rev: 2.1.1
|
|
33
|
-
# hooks:
|
|
34
|
-
# - id: bashate
|
|
35
|
-
- repo: https://github.com/fpgmaas/deptry
|
|
36
|
-
rev: 0.23.1
|
|
37
|
-
hooks:
|
|
38
|
-
- id: deptry
|
|
39
|
-
language: python
|
|
40
|
-
additional_dependencies: [deptry]
|
|
41
|
-
- repo: https://github.com/python-jsonschema/check-jsonschema
|
|
42
|
-
rev: 0.33.2
|
|
43
|
-
hooks:
|
|
44
|
-
- id: check-github-workflows
|
|
45
|
-
- id: check-taskfile
|
|
46
|
-
# - repo: https://github.com/mrtazz/checkmake.git
|
|
47
|
-
# rev: 0.2.2
|
|
48
|
-
# hooks:
|
|
49
|
-
# - id: checkmake
|
|
50
|
-
# - repo: https://github.com/hukkin/mdformat
|
|
51
|
-
# rev: 0.7.22
|
|
52
|
-
# hooks:
|
|
53
|
-
# - id: mdformat
|
|
54
|
-
# - repo: https://github.com/markdownlint/markdownlint
|
|
55
|
-
# rev: v0.12.0
|
|
56
|
-
# hooks:
|
|
57
|
-
# - id: markdownlint
|
|
58
|
-
# - repo: https://github.com/shssoichiro/oxipng
|
|
59
|
-
# rev: v9.1.5
|
|
60
|
-
# hooks:
|
|
61
|
-
# - id: oxipng
|
|
62
|
-
- repo: https://github.com/asottile/pyupgrade
|
|
63
|
-
rev: v3.20.0
|
|
64
|
-
hooks:
|
|
65
|
-
- id: pyupgrade
|
|
66
|
-
- repo: https://github.com/asottile/add-trailing-comma
|
|
67
|
-
rev: v3.2.0
|
|
68
|
-
hooks:
|
|
69
|
-
- id: add-trailing-comma
|
|
70
|
-
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
71
|
-
rev: v0.12.7
|
|
72
|
-
hooks:
|
|
73
|
-
- id: ruff-check
|
|
74
|
-
args:
|
|
75
|
-
- --fix
|
|
76
|
-
- id: ruff-format
|
|
77
|
-
- repo: https://github.com/crate-ci/typos
|
|
78
|
-
rev: v1.34.0
|
|
79
|
-
hooks:
|
|
80
|
-
- id: typos
|
|
81
|
-
# - repo: https://github.com/shellcheck-py/shellcheck-py
|
|
82
|
-
# rev: v0.10.0.1
|
|
83
|
-
# hooks:
|
|
84
|
-
# - id: shellcheck
|
|
85
|
-
# - repo: https://github.com/sqlfluff/sqlfluff
|
|
86
|
-
# rev: 3.4.2
|
|
87
|
-
# hooks:
|
|
88
|
-
# - id: sqlfluff-fix
|
|
89
|
-
# - id: sqlfluff-lint
|
|
90
|
-
- repo: local
|
|
91
|
-
hooks:
|
|
92
|
-
- id: ty-check
|
|
93
|
-
name: ty-check
|
|
94
|
-
language: python
|
|
95
|
-
entry: ty check
|
|
96
|
-
additional_dependencies: [ty]
|