gitpulse-analytics 0.2.0__tar.gz → 0.2.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.
- {gitpulse_analytics-0.2.0 → gitpulse_analytics-0.2.1}/.gitignore +1 -0
- gitpulse_analytics-0.2.1/CHANGELOG.md +59 -0
- {gitpulse_analytics-0.2.0 → gitpulse_analytics-0.2.1}/PKG-INFO +16 -5
- {gitpulse_analytics-0.2.0 → gitpulse_analytics-0.2.1}/README.md +14 -3
- {gitpulse_analytics-0.2.0 → gitpulse_analytics-0.2.1}/pyproject.toml +2 -2
- {gitpulse_analytics-0.2.0 → gitpulse_analytics-0.2.1}/src/gitpulse/__init__.py +1 -1
- {gitpulse_analytics-0.2.0 → gitpulse_analytics-0.2.1}/LICENSE +0 -0
- {gitpulse_analytics-0.2.0 → gitpulse_analytics-0.2.1}/src/gitpulse/cli.py +0 -0
- {gitpulse_analytics-0.2.0 → gitpulse_analytics-0.2.1}/src/gitpulse/github_api.py +0 -0
- {gitpulse_analytics-0.2.0 → gitpulse_analytics-0.2.1}/src/gitpulse/org.py +0 -0
- {gitpulse_analytics-0.2.0 → gitpulse_analytics-0.2.1}/src/gitpulse/report.py +0 -0
- {gitpulse_analytics-0.2.0 → gitpulse_analytics-0.2.1}/src/gitpulse/storage.py +0 -0
- {gitpulse_analytics-0.2.0 → gitpulse_analytics-0.2.1}/tests/test_cli.py +0 -0
- {gitpulse_analytics-0.2.0 → gitpulse_analytics-0.2.1}/tests/test_org.py +0 -0
- {gitpulse_analytics-0.2.0 → gitpulse_analytics-0.2.1}/tests/test_storage.py +0 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to GitPulse are documented here. The format is based on
|
|
4
|
+
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project follows
|
|
5
|
+
[Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
|
+
|
|
7
|
+
## [Unreleased]
|
|
8
|
+
|
|
9
|
+
## [0.2.1] - 2026-11-03
|
|
10
|
+
|
|
11
|
+
### Security
|
|
12
|
+
|
|
13
|
+
- The Docker image is now built on the Alpine variant of
|
|
14
|
+
[Docker Hardened Images](https://dhi.io) for Python instead of `python:3.13-slim`.
|
|
15
|
+
Trivy findings drop from 193 (50 High, none fixable in Debian) to 0.
|
|
16
|
+
- The runtime image has no shell or package manager. GitPulse runs from its own
|
|
17
|
+
virtualenv containing only GitPulse and its dependencies, with no pip.
|
|
18
|
+
- `urllib3` is 2.8.0 in the Docker image and the Homebrew formula, fixing
|
|
19
|
+
CVE-2026-97687, CVE-2026-97688, and CVE-2026-97689.
|
|
20
|
+
|
|
21
|
+
### Changed
|
|
22
|
+
|
|
23
|
+
- The container runs as the non-root UID 65532 instead of 1000.
|
|
24
|
+
- The Docker image is 105 MB, down from 227 MB.
|
|
25
|
+
|
|
26
|
+
### Upgrading
|
|
27
|
+
|
|
28
|
+
If you kept snapshot history in a Docker volume or bind mount with 0.2.0, its files
|
|
29
|
+
belong to UID 1000. Saving with 0.2.1 then fails with
|
|
30
|
+
`attempt to write a readonly database`. Give the files to the new user once; your
|
|
31
|
+
history is kept:
|
|
32
|
+
|
|
33
|
+
```sh
|
|
34
|
+
docker run --rm -v gitpulse-data:/data alpine chown -R 65532:65532 /data
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
For a bind mount, run `sudo chown -R 65532:65532 DIR` on the host, or keep the old UID
|
|
38
|
+
with `--user 1000:1000`.
|
|
39
|
+
|
|
40
|
+
## [0.2.0] - 2026-11-03
|
|
41
|
+
|
|
42
|
+
First public release.
|
|
43
|
+
|
|
44
|
+
### Added
|
|
45
|
+
|
|
46
|
+
- `gitpulse org ORG` builds a dashboard for a whole organization or user account. It
|
|
47
|
+
prints a Rich summary in the terminal and writes a self-contained HTML dashboard
|
|
48
|
+
with daily traffic, the most viewed and most starred repositories, languages,
|
|
49
|
+
referrers, release downloads, and a sortable, filterable table of every repository.
|
|
50
|
+
- Per-repository commands: `repos`, `traffic`, `snapshot`, `history`, and `downloads`.
|
|
51
|
+
- Local SQLite snapshots to keep traffic history beyond GitHub's 14-day window.
|
|
52
|
+
- `gitpulse --version`.
|
|
53
|
+
- Releases on PyPI as `gitpulse-analytics`, in the
|
|
54
|
+
[`fullstackspectrum/gitpulse`](https://github.com/fullstackspectrum/homebrew-gitpulse)
|
|
55
|
+
Homebrew tap, and as the multi-arch `fullstackspectrum/gitpulse` Docker image.
|
|
56
|
+
|
|
57
|
+
[Unreleased]: https://github.com/fullstackspectrum/gitpulse/compare/v0.2.1...HEAD
|
|
58
|
+
[0.2.1]: https://github.com/fullstackspectrum/gitpulse/compare/v0.2.0...v0.2.1
|
|
59
|
+
[0.2.0]: https://github.com/fullstackspectrum/gitpulse/releases/tag/v0.2.0
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: gitpulse-analytics
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.1
|
|
4
4
|
Summary: GitHub traffic, clones, referrers, and release downloads in your terminal, with org-wide HTML dashboards
|
|
5
5
|
Project-URL: Homepage, https://github.com/fullstackspectrum/gitpulse
|
|
6
6
|
Project-URL: Issues, https://github.com/fullstackspectrum/gitpulse/issues
|
|
7
|
-
Project-URL: Changelog, https://github.com/fullstackspectrum/gitpulse/
|
|
7
|
+
Project-URL: Changelog, https://github.com/fullstackspectrum/gitpulse/blob/main/CHANGELOG.md
|
|
8
8
|
Author-email: FullStackSpectrum <dev@fullstackspectrum.com>
|
|
9
9
|
License-Expression: MIT
|
|
10
10
|
License-File: LICENSE
|
|
@@ -32,6 +32,16 @@ Description-Content-Type: text/markdown
|
|
|
32
32
|
|
|
33
33
|
# GitPulse
|
|
34
34
|
|
|
35
|
+
[](https://github.com/fullstackspectrum/gitpulse/actions/workflows/ci.yml)
|
|
36
|
+
[](https://pypi.org/project/gitpulse-analytics/)
|
|
37
|
+
[](https://pypi.org/project/gitpulse-analytics/)
|
|
38
|
+
[](https://github.com/fullstackspectrum/homebrew-gitpulse)
|
|
39
|
+
[](https://hub.docker.com/r/fullstackspectrum/gitpulse)
|
|
40
|
+
[](LICENSE)
|
|
41
|
+
<br>
|
|
42
|
+
[](https://pepy.tech/projects/gitpulse-analytics)
|
|
43
|
+
[](https://hub.docker.com/r/fullstackspectrum/gitpulse)
|
|
44
|
+
|
|
35
45
|
A local Python CLI for GitHub repository traffic and release asset download stats. GitPulse can build a dashboard for a whole organization, and it keeps SQLite snapshots so you have history beyond GitHub's short traffic window.
|
|
36
46
|
|
|
37
47
|
> **What GitHub can tell you:** aggregate daily views and clones, unique counts, popular paths, referrers, and release-asset download totals. It does **not** identify individual visitors or people who cloned a repository. GitHub's traffic data is generally available for the most recent 14 days. Release asset downloads are not Homebrew formula install counts.
|
|
@@ -75,7 +85,7 @@ python -m pip install gitpulse-analytics
|
|
|
75
85
|
docker run --rm -e GITHUB_TOKEN -v "$PWD:/data" fullstackspectrum/gitpulse org ORG
|
|
76
86
|
```
|
|
77
87
|
|
|
78
|
-
The
|
|
88
|
+
The image is built on a [Docker Hardened Image](https://dhi.io) (Alpine), so it has no shell or package manager and runs as the non-root UID 65532. On Linux, if that UID can't write the mounted directory, add `--user "$(id -u):$(id -g)"`.
|
|
79
89
|
|
|
80
90
|
**From source**, for development:
|
|
81
91
|
|
|
@@ -167,7 +177,8 @@ Run tests with `pytest` and lint with `ruff check .`.
|
|
|
167
177
|
|
|
168
178
|
### Releasing
|
|
169
179
|
|
|
170
|
-
1. Bump `__version__` in `src/gitpulse/__init__.py
|
|
171
|
-
2.
|
|
180
|
+
1. Bump `__version__` in `src/gitpulse/__init__.py`.
|
|
181
|
+
2. In [CHANGELOG.md](CHANGELOG.md), move the `Unreleased` entries under a new `X.Y.Z` heading with the date, and update the comparison links at the bottom. Merge to `main`.
|
|
182
|
+
3. Publish a GitHub release with the tag `vX.Y.Z` matching that version, using that version's changelog section as the release notes.
|
|
172
183
|
|
|
173
184
|
The `Release` workflow checks that the tag matches the version, then publishes to PyPI. After that it pushes the multi-arch Docker image and updates the formula in [homebrew-gitpulse](https://github.com/fullstackspectrum/homebrew-gitpulse). A release marked as a pre-release goes to PyPI and to Docker Hub under its exact version tag only, without moving `latest` or the Homebrew formula. The formula template lives in `packaging/homebrew/`; edit it there, not in the tap.
|
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# GitPulse
|
|
2
2
|
|
|
3
|
+
[](https://github.com/fullstackspectrum/gitpulse/actions/workflows/ci.yml)
|
|
4
|
+
[](https://pypi.org/project/gitpulse-analytics/)
|
|
5
|
+
[](https://pypi.org/project/gitpulse-analytics/)
|
|
6
|
+
[](https://github.com/fullstackspectrum/homebrew-gitpulse)
|
|
7
|
+
[](https://hub.docker.com/r/fullstackspectrum/gitpulse)
|
|
8
|
+
[](LICENSE)
|
|
9
|
+
<br>
|
|
10
|
+
[](https://pepy.tech/projects/gitpulse-analytics)
|
|
11
|
+
[](https://hub.docker.com/r/fullstackspectrum/gitpulse)
|
|
12
|
+
|
|
3
13
|
A local Python CLI for GitHub repository traffic and release asset download stats. GitPulse can build a dashboard for a whole organization, and it keeps SQLite snapshots so you have history beyond GitHub's short traffic window.
|
|
4
14
|
|
|
5
15
|
> **What GitHub can tell you:** aggregate daily views and clones, unique counts, popular paths, referrers, and release-asset download totals. It does **not** identify individual visitors or people who cloned a repository. GitHub's traffic data is generally available for the most recent 14 days. Release asset downloads are not Homebrew formula install counts.
|
|
@@ -43,7 +53,7 @@ python -m pip install gitpulse-analytics
|
|
|
43
53
|
docker run --rm -e GITHUB_TOKEN -v "$PWD:/data" fullstackspectrum/gitpulse org ORG
|
|
44
54
|
```
|
|
45
55
|
|
|
46
|
-
The
|
|
56
|
+
The image is built on a [Docker Hardened Image](https://dhi.io) (Alpine), so it has no shell or package manager and runs as the non-root UID 65532. On Linux, if that UID can't write the mounted directory, add `--user "$(id -u):$(id -g)"`.
|
|
47
57
|
|
|
48
58
|
**From source**, for development:
|
|
49
59
|
|
|
@@ -135,7 +145,8 @@ Run tests with `pytest` and lint with `ruff check .`.
|
|
|
135
145
|
|
|
136
146
|
### Releasing
|
|
137
147
|
|
|
138
|
-
1. Bump `__version__` in `src/gitpulse/__init__.py
|
|
139
|
-
2.
|
|
148
|
+
1. Bump `__version__` in `src/gitpulse/__init__.py`.
|
|
149
|
+
2. In [CHANGELOG.md](CHANGELOG.md), move the `Unreleased` entries under a new `X.Y.Z` heading with the date, and update the comparison links at the bottom. Merge to `main`.
|
|
150
|
+
3. Publish a GitHub release with the tag `vX.Y.Z` matching that version, using that version's changelog section as the release notes.
|
|
140
151
|
|
|
141
152
|
The `Release` workflow checks that the tag matches the version, then publishes to PyPI. After that it pushes the multi-arch Docker image and updates the formula in [homebrew-gitpulse](https://github.com/fullstackspectrum/homebrew-gitpulse). A release marked as a pre-release goes to PyPI and to Docker Hub under its exact version tag only, without moving `latest` or the Homebrew formula. The formula template lives in `packaging/homebrew/`; edit it there, not in the tap.
|
|
@@ -38,7 +38,7 @@ dev = ["pytest>=8,<9", "ruff>=0.6,<1"]
|
|
|
38
38
|
[project.urls]
|
|
39
39
|
Homepage = "https://github.com/fullstackspectrum/gitpulse"
|
|
40
40
|
Issues = "https://github.com/fullstackspectrum/gitpulse/issues"
|
|
41
|
-
Changelog = "https://github.com/fullstackspectrum/gitpulse/
|
|
41
|
+
Changelog = "https://github.com/fullstackspectrum/gitpulse/blob/main/CHANGELOG.md"
|
|
42
42
|
|
|
43
43
|
[project.scripts]
|
|
44
44
|
gitpulse = "gitpulse.cli:app"
|
|
@@ -50,7 +50,7 @@ path = "src/gitpulse/__init__.py"
|
|
|
50
50
|
packages = ["src/gitpulse"]
|
|
51
51
|
|
|
52
52
|
[tool.hatch.build.targets.sdist]
|
|
53
|
-
include = ["src", "tests", "README.md", "LICENSE"]
|
|
53
|
+
include = ["src", "tests", "README.md", "LICENSE", "CHANGELOG.md"]
|
|
54
54
|
|
|
55
55
|
[tool.pytest.ini_options]
|
|
56
56
|
pythonpath = ["src"]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|