osslag 1.0.0__tar.gz → 1.0.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 (38) hide show
  1. osslag-1.0.1/.github/workflows/publish-pypi.yml +54 -0
  2. osslag-1.0.1/.gitignore +42 -0
  3. osslag-1.0.1/.python-version +1 -0
  4. osslag-1.0.1/.vscode/launch.json +17 -0
  5. osslag-1.0.1/.vscode/settings.json +25 -0
  6. osslag-1.0.1/LICENSE +21 -0
  7. osslag-1.0.1/Makefile +52 -0
  8. {osslag-1.0.0 → osslag-1.0.1}/PKG-INFO +14 -8
  9. {osslag-1.0.0 → osslag-1.0.1}/README.md +4 -0
  10. osslag-1.0.1/docs/RELEASING.md +95 -0
  11. osslag-1.0.1/env.template +13 -0
  12. {osslag-1.0.0 → osslag-1.0.1}/pyproject.toml +12 -4
  13. osslag-1.0.1/setup.cfg +4 -0
  14. osslag-1.0.1/src/osslag/__init__.py +9 -0
  15. {osslag-1.0.0 → osslag-1.0.1}/src/osslag/cli.py +100 -243
  16. {osslag-1.0.0 → osslag-1.0.1}/src/osslag/distro/debian.py +13 -41
  17. {osslag-1.0.0 → osslag-1.0.1}/src/osslag/distro/fedora.py +1 -3
  18. osslag-1.0.1/src/osslag/metrics/malta.py +872 -0
  19. {osslag-1.0.0 → osslag-1.0.1}/src/osslag/metrics/pvac.py +2 -6
  20. {osslag-1.0.0 → osslag-1.0.1}/src/osslag/utils/github_helper.py +7 -23
  21. {osslag-1.0.0 → osslag-1.0.1}/src/osslag/utils/vcs.py +16 -49
  22. osslag-1.0.1/src/osslag.egg-info/PKG-INFO +52 -0
  23. osslag-1.0.1/src/osslag.egg-info/SOURCES.txt +35 -0
  24. osslag-1.0.1/src/osslag.egg-info/dependency_links.txt +1 -0
  25. osslag-1.0.1/src/osslag.egg-info/entry_points.txt +2 -0
  26. osslag-1.0.1/src/osslag.egg-info/requires.txt +10 -0
  27. osslag-1.0.1/src/osslag.egg-info/top_level.txt +1 -0
  28. osslag-1.0.1/tests/distro/test_debian.py +265 -0
  29. osslag-1.0.1/tests/metrics/__init__.py +0 -0
  30. osslag-1.0.1/tests/metrics/test_malta.py +1053 -0
  31. osslag-1.0.1/tests/utils/__init__.py +0 -0
  32. osslag-1.0.1/tests/utils/test_vcs.py +822 -0
  33. osslag-1.0.1/uv.lock +712 -0
  34. osslag-1.0.0/src/osslag/metrics/malta.py +0 -585
  35. {osslag-1.0.0/src/osslag → osslag-1.0.1/src/osslag/distro}/__init__.py +0 -0
  36. {osslag-1.0.0/src/osslag/distro → osslag-1.0.1/src/osslag/metrics}/__init__.py +0 -0
  37. {osslag-1.0.0/src/osslag/metrics → osslag-1.0.1/src/osslag/utils}/__init__.py +0 -0
  38. {osslag-1.0.0/src/osslag/utils → osslag-1.0.1/tests/distro}/__init__.py +0 -0
@@ -0,0 +1,54 @@
1
+ name: Upload Python Package
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+
7
+ permissions:
8
+ contents: read
9
+
10
+ jobs:
11
+ release-build:
12
+ runs-on: ubuntu-latest
13
+
14
+ steps:
15
+ - uses: actions/checkout@v4
16
+
17
+ - uses: actions/setup-python@v5
18
+ with:
19
+ python-version: "3.x"
20
+
21
+ - name: Install uv
22
+ uses: astral-sh/setup-uv@v7
23
+
24
+ - name: Build release distributions
25
+ run: make build
26
+
27
+ - name: Upload distributions
28
+ uses: actions/upload-artifact@v4
29
+ with:
30
+ name: release-dists
31
+ path: dist/
32
+
33
+ pypi-publish:
34
+ runs-on: ubuntu-latest
35
+ needs:
36
+ - release-build
37
+ permissions:
38
+ id-token: write
39
+
40
+ environment:
41
+ name: pypi
42
+ url: https://pypi.org/p/osslag
43
+
44
+ steps:
45
+ - name: Retrieve release distributions
46
+ uses: actions/download-artifact@v4
47
+ with:
48
+ name: release-dists
49
+ path: dist/
50
+
51
+ - name: Publish release distributions to PyPI
52
+ uses: pypa/gh-action-pypi-publish@release/v1
53
+ with:
54
+ packages-dir: dist/
@@ -0,0 +1,42 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+ *.so
6
+ .Python
7
+ build/
8
+ develop-eggs/
9
+ dist/
10
+ downloads/
11
+ eggs/
12
+ .eggs/
13
+ lib/
14
+ lib64/
15
+ parts/
16
+ sdist/
17
+ var/
18
+ wheels/
19
+ *.egg-info/
20
+ .installed.cfg
21
+ *.egg
22
+
23
+ # Virtual environments
24
+ venv/
25
+ env/
26
+ ENV/
27
+ .venv/
28
+
29
+ # Project specific
30
+ cache/
31
+ *.log.*
32
+
33
+ # Environment variables
34
+ .env
35
+ .env.local
36
+
37
+ # OS
38
+ .DS_Store
39
+ Thumbs.db
40
+ github_debug.log
41
+ osslag.log
42
+ CLAUDE.md
@@ -0,0 +1 @@
1
+ 3.14
@@ -0,0 +1,17 @@
1
+ {
2
+ "version": "0.2.0",
3
+ "configurations": [
4
+ {
5
+ "name": "Python: My Module with Args",
6
+ "type": "debugpy",
7
+ "request": "launch",
8
+ "module": "osslag.cli",
9
+ "console": "integratedTerminal",
10
+ "justMyCode": false,
11
+ "args": [
12
+ "get-metadata",
13
+ "https://github.com/shanep/demo"
14
+ ]
15
+ }
16
+ ]
17
+ }
@@ -0,0 +1,25 @@
1
+ {
2
+ "python.testing.pytestEnabled": true,
3
+ "python.testing.unittestEnabled": false,
4
+ "cSpell.words": [
5
+ "checkpointed",
6
+ "creds",
7
+ "dateutil",
8
+ "dotenv",
9
+ "mrsc",
10
+ "osslag",
11
+ "relativedelta",
12
+ "revparse",
13
+ "rmvconstants",
14
+ "rmvs",
15
+ "sboudrias",
16
+ "snoyberg",
17
+ "trixie",
18
+ "venv"
19
+ ],
20
+ "outline.collapseItems": "alwaysCollapse",
21
+ "outline.problems.enabled": true,
22
+ "python.testing.pytestArgs": [
23
+ "tests"
24
+ ],
25
+ }
osslag-1.0.1/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Shane K. Panter
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
osslag-1.0.1/Makefile ADDED
@@ -0,0 +1,52 @@
1
+ VENV ?= .venv
2
+
3
+ .PHONY: bootstrap install lint fmt typecheck test clean help
4
+
5
+ help:
6
+ @echo "Makefile commands:"
7
+ @echo " bootstrap - Check uv installation and sync dependencies"
8
+ @echo " install - Install the package in editable mode"
9
+ @echo " lint - Lint the code using ruff"
10
+ @echo " fmt - Format the code using ruff"
11
+ @echo " typecheck - Type check the code using pyright"
12
+ @echo " test - Run tests using pytest"
13
+ @echo " clean - Clean up build artifacts and caches"
14
+
15
+ bootstrap:
16
+ @echo "check the uv installation..."
17
+ @if ! command -v uv >/dev/null 2>&1; then \
18
+ echo "uv not found."; \
19
+ echo "Check https://github.com/astral-sh/uv for installation instructions."; \
20
+ exit 1; \
21
+ else \
22
+ echo "uv is installed: $$(uv --version)"; \
23
+ fi
24
+ @echo "Syncing dependencies using uv..."
25
+ @uv sync
26
+
27
+ lint:
28
+ uv run ruff check .
29
+
30
+ fmt:
31
+ uv run ruff format .
32
+
33
+ typecheck:
34
+ uv run pyright src tests
35
+
36
+ test:
37
+ uv run pytest
38
+
39
+ install:
40
+ uv tool install . -e
41
+
42
+ build:
43
+ uv build
44
+
45
+ clean:
46
+ uv cache clean
47
+ rm -rf $(VENV)
48
+ rm -rf *.egg-info
49
+ find . -type d -name "__pycache__" -exec rm -rf {} +
50
+ find . -type d -name ".ruff_cache" -exec rm -rf {} +
51
+ find . -type d -name ".uv" -exec rm -rf {} +
52
+ find . -type d -name ".pytest_cache" -exec rm -rf {} +
@@ -1,16 +1,21 @@
1
- Metadata-Version: 2.3
1
+ Metadata-Version: 2.4
2
2
  Name: osslag
3
- Version: 1.0.0
3
+ Version: 1.0.1
4
4
  Summary: Technical Lag tools for Open Source Software Projects
5
- Keywords: oss,open source,technical lag,software lag,software maintenance
6
- Author: Shane Panter
7
5
  Author-email: Shane Panter <shanepanter@boisestate.edu>
8
6
  License: MIT
7
+ Project-URL: Homepage, https://github.com/shanep/osslag
8
+ Project-URL: Issues, https://github.com/shanep/osslag/issues
9
+ Keywords: oss,open source,technical lag,software lag,software maintenance
9
10
  Classifier: Intended Audience :: Science/Research
10
11
  Classifier: License :: OSI Approved :: MIT License
11
12
  Classifier: Programming Language :: Python :: 3.14
13
+ Requires-Python: >=3.14
14
+ Description-Content-Type: text/markdown
15
+ License-File: LICENSE
12
16
  Requires-Dist: dotenv>=0.9.9
13
17
  Requires-Dist: pandas>=3.0.0
18
+ Requires-Dist: pyarrow>=23.0.0
14
19
  Requires-Dist: pygit2>=1.19.1
15
20
  Requires-Dist: pygithub>=2.8.1
16
21
  Requires-Dist: python-dateutil>=2.9.0.post0
@@ -18,16 +23,17 @@ Requires-Dist: python-debian>=1.0.1
18
23
  Requires-Dist: requests>=2.32.5
19
24
  Requires-Dist: rich>=14.3.1
20
25
  Requires-Dist: typer>=0.21.1
21
- Requires-Python: >=3.14
22
- Project-URL: Homepage, https://github.com/shanep/osslag
23
- Project-URL: Issues, https://github.com/shanep/osslag/issues
24
- Description-Content-Type: text/markdown
26
+ Dynamic: license-file
25
27
 
26
28
  # OSS-Lag: Open Source Software Lag Dataset
27
29
 
28
30
  This repository contains code to build a dataset measuring technical lag and
29
31
  abandonment of open source packages across multiple Linux distributions.
30
32
 
33
+ The algorithms implemented here are described in the following paper:
34
+
35
+ - [docs/Paper.pdf](docs/Paper.pdf)
36
+
31
37
 
32
38
  ## Installation
33
39
 
@@ -3,6 +3,10 @@
3
3
  This repository contains code to build a dataset measuring technical lag and
4
4
  abandonment of open source packages across multiple Linux distributions.
5
5
 
6
+ The algorithms implemented here are described in the following paper:
7
+
8
+ - [docs/Paper.pdf](docs/Paper.pdf)
9
+
6
10
 
7
11
  ## Installation
8
12
 
@@ -0,0 +1,95 @@
1
+ # Releasing osslag
2
+
3
+ This document describes how to release a new version of osslag.
4
+
5
+ ## Versioning
6
+
7
+ This project uses [setuptools-scm](https://github.com/pypa/setuptools-scm) for automatic versioning based on git tags. The version is derived directly from git tags at build time.
8
+
9
+ ### Version Format
10
+
11
+ - **Release versions**: `1.0.0`, `1.1.0`, `2.0.0` (from tags like `v1.0.0`)
12
+ - **Development versions**: `1.0.1.dev6+gde04e13` (6 commits after v1.0.0, at commit de04e13)
13
+ - **Dirty versions**: `1.0.1.dev6+gde04e13.d20260204` (uncommitted changes present)
14
+
15
+ ## Release Process
16
+
17
+ ### 1. Prepare the Release
18
+
19
+ Ensure all changes are committed and tests pass:
20
+
21
+ ```bash
22
+ # Run tests
23
+ uv run pytest
24
+
25
+ # Run linting
26
+ uv run ruff check src/ tests/
27
+
28
+ # Run type checking
29
+ uv run pyright
30
+ ```
31
+
32
+ ### 2. Create the Release
33
+
34
+ Choose the appropriate version number following [Semantic Versioning](https://semver.org/):
35
+
36
+ - **MAJOR** (1.0.0 → 2.0.0): Breaking API changes
37
+ - **MINOR** (1.0.0 → 1.1.0): New features, backwards compatible
38
+ - **PATCH** (1.0.0 → 1.0.1): Bug fixes, backwards compatible
39
+
40
+ Create and push the tag:
41
+
42
+ ```bash
43
+ # Create an annotated tag
44
+ git tag -a v1.1.0 -m "Release v1.1.0"
45
+
46
+ # Push the tag
47
+ git push origin v1.1.0
48
+ ```
49
+
50
+ ### 3. Create GitHub Release
51
+
52
+ 1. Go to the [GitHub Releases page](https://github.com/shanep/osslag/releases)
53
+ 2. Click "Draft a new release"
54
+ 3. Select the tag you just created (e.g., `v1.1.0`)
55
+ 4. Set the release title (e.g., "v1.1.0")
56
+ 5. Add release notes describing changes
57
+ 6. Click "Publish release"
58
+
59
+ ## Verifying the Release
60
+
61
+ After releasing, verify the version is correct:
62
+
63
+ ```bash
64
+ # Install the released version
65
+ pip install osslag==1.1.0
66
+
67
+ # Check the version
68
+ python -c "from osslag import get_version; print(get_version())"
69
+ ```
70
+
71
+ ## Troubleshooting
72
+
73
+ ### Version shows `.dev` suffix after tagging
74
+
75
+ Make sure you're on the tagged commit:
76
+
77
+ ```bash
78
+ git checkout v1.1.0
79
+ uv pip install -e .
80
+ ```
81
+
82
+ ### Version not updating
83
+
84
+ Reinstall the package to pick up the new version:
85
+
86
+ ```bash
87
+ uv pip install -e . --force-reinstall
88
+ ```
89
+
90
+ ### Checking what version will be generated
91
+
92
+ ```bash
93
+ # See what version setuptools-scm will generate
94
+ python -m setuptools_scm
95
+ ```
@@ -0,0 +1,13 @@
1
+
2
+ # ====== GitHub configuration ======
3
+ GITHUB_USERNAME=john
4
+ GITHUB_TOKEN=tbd
5
+
6
+ # ====== Other configuration ======
7
+ MAX_WORKERS=10
8
+ CACHE_DIR=$HOME/cache
9
+ REPOS_CACHE_DIR=$HOME/cache/repos
10
+
11
+ # Logging
12
+ LOG_LEVEL=INFO
13
+ LOG_FILE=osslag.log
@@ -1,13 +1,13 @@
1
1
  [build-system]
2
- requires = ["uv_build>=0.9.28,<0.10.0"]
3
- build-backend = "uv_build"
2
+ requires = ["setuptools>=64", "setuptools-scm>=8"]
3
+ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project.scripts]
6
6
  osslag = "osslag.cli:main"
7
7
 
8
8
  [project]
9
9
  name = "osslag"
10
- version = "1.0.0"
10
+ dynamic = ["version"]
11
11
  description = "Technical Lag tools for Open Source Software Projects"
12
12
  readme = "README.md"
13
13
  authors = [
@@ -25,6 +25,7 @@ classifiers = [
25
25
  dependencies = [
26
26
  "dotenv>=0.9.9",
27
27
  "pandas>=3.0.0",
28
+ "pyarrow>=23.0.0",
28
29
  "pygit2>=1.19.1",
29
30
  "pygithub>=2.8.1",
30
31
  "python-dateutil>=2.9.0.post0",
@@ -63,8 +64,15 @@ dev = [
63
64
  ]
64
65
 
65
66
 
67
+ [tool.setuptools_scm]
68
+ # Version is derived from git tags (e.g., v1.0.2 -> 1.0.2)
69
+ # For development builds, adds .devN+gHASH suffix
70
+
71
+ [tool.setuptools.packages.find]
72
+ where = ["src"]
73
+
66
74
  [tool.ruff]
67
- line-length = 88
75
+ line-length = 120
68
76
  indent-width = 4
69
77
 
70
78
 
osslag-1.0.1/setup.cfg ADDED
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,9 @@
1
+ from importlib.metadata import version
2
+
3
+ __version__ = version("osslag")
4
+ __all__ = ["__version__", "get_version"]
5
+
6
+
7
+ def get_version() -> str:
8
+ """Return the current version of osslag."""
9
+ return __version__