iseewhatyoudid 0.1.0__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.
- iseewhatyoudid-0.1.0/AI_POLICY.md +15 -0
- iseewhatyoudid-0.1.0/CHANGELOG.md +43 -0
- iseewhatyoudid-0.1.0/CODE_OF_CONDUCT.md +84 -0
- iseewhatyoudid-0.1.0/CONTRIBUTING.md +112 -0
- iseewhatyoudid-0.1.0/LICENSE +15 -0
- iseewhatyoudid-0.1.0/PKG-INFO +309 -0
- iseewhatyoudid-0.1.0/README.md +277 -0
- iseewhatyoudid-0.1.0/config/.ruff_cache/.gitignore +2 -0
- iseewhatyoudid-0.1.0/config/.ruff_cache/CACHEDIR.TAG +1 -0
- iseewhatyoudid-0.1.0/config/coverage.ini +25 -0
- iseewhatyoudid-0.1.0/config/git-changelog.toml +9 -0
- iseewhatyoudid-0.1.0/config/pytest.ini +16 -0
- iseewhatyoudid-0.1.0/config/ruff.toml +76 -0
- iseewhatyoudid-0.1.0/config/ty.toml +6 -0
- iseewhatyoudid-0.1.0/config/vscode/launch.json +56 -0
- iseewhatyoudid-0.1.0/config/vscode/settings.json +31 -0
- iseewhatyoudid-0.1.0/config/vscode/tasks.json +97 -0
- iseewhatyoudid-0.1.0/config/zed/debug.json +44 -0
- iseewhatyoudid-0.1.0/config/zed/settings.json +43 -0
- iseewhatyoudid-0.1.0/config/zed/tasks.json +72 -0
- iseewhatyoudid-0.1.0/docs/.overrides/main.html +18 -0
- iseewhatyoudid-0.1.0/docs/.overrides/partials/comments.html +57 -0
- iseewhatyoudid-0.1.0/docs/changelog.md +5 -0
- iseewhatyoudid-0.1.0/docs/code_of_conduct.md +5 -0
- iseewhatyoudid-0.1.0/docs/contributing.md +5 -0
- iseewhatyoudid-0.1.0/docs/credits.md +9 -0
- iseewhatyoudid-0.1.0/docs/css/apidocs.css +21 -0
- iseewhatyoudid-0.1.0/docs/index.md +7 -0
- iseewhatyoudid-0.1.0/docs/js/feedback.js +14 -0
- iseewhatyoudid-0.1.0/docs/license.md +11 -0
- iseewhatyoudid-0.1.0/docs/reference/api.md +7 -0
- iseewhatyoudid-0.1.0/duties.py +248 -0
- iseewhatyoudid-0.1.0/pyproject.toml +110 -0
- iseewhatyoudid-0.1.0/scripts/gen_credits.py +190 -0
- iseewhatyoudid-0.1.0/scripts/get_version.py +49 -0
- iseewhatyoudid-0.1.0/scripts/make +1 -0
- iseewhatyoudid-0.1.0/scripts/make.py +255 -0
- iseewhatyoudid-0.1.0/src/iseewhatyoudid/__init__.py +28 -0
- iseewhatyoudid-0.1.0/src/iseewhatyoudid/__main__.py +32 -0
- iseewhatyoudid-0.1.0/src/iseewhatyoudid/_internal/__init__.py +17 -0
- iseewhatyoudid-0.1.0/src/iseewhatyoudid/_internal/activity.py +197 -0
- iseewhatyoudid-0.1.0/src/iseewhatyoudid/_internal/cache.py +98 -0
- iseewhatyoudid-0.1.0/src/iseewhatyoudid/_internal/cli.py +301 -0
- iseewhatyoudid-0.1.0/src/iseewhatyoudid/_internal/commit_analysis.py +492 -0
- iseewhatyoudid-0.1.0/src/iseewhatyoudid/_internal/debug.py +130 -0
- iseewhatyoudid-0.1.0/src/iseewhatyoudid/_internal/github_api.py +1164 -0
- iseewhatyoudid-0.1.0/src/iseewhatyoudid/_internal/html_render.py +751 -0
- iseewhatyoudid-0.1.0/src/iseewhatyoudid/_internal/local_git.py +512 -0
- iseewhatyoudid-0.1.0/src/iseewhatyoudid/py.typed +0 -0
- iseewhatyoudid-0.1.0/tests/__init__.py +25 -0
- iseewhatyoudid-0.1.0/tests/conftest.py +19 -0
- iseewhatyoudid-0.1.0/tests/test_activity.py +49 -0
- iseewhatyoudid-0.1.0/tests/test_api.py +221 -0
- iseewhatyoudid-0.1.0/tests/test_cache.py +42 -0
- iseewhatyoudid-0.1.0/tests/test_cli.py +175 -0
- iseewhatyoudid-0.1.0/tests/test_commit_analysis.py +175 -0
- iseewhatyoudid-0.1.0/tests/test_github_api.py +824 -0
- iseewhatyoudid-0.1.0/tests/test_html_render.py +223 -0
- iseewhatyoudid-0.1.0/tests/test_local_git.py +218 -0
- iseewhatyoudid-0.1.0/zensical.toml +186 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# AI Contribution Policy
|
|
2
|
+
|
|
3
|
+
We accept AI-*assisted* contributions, both for code and documentation, with the following expectations:
|
|
4
|
+
|
|
5
|
+
- AI-assisted contributions must disclaim their use of AI.
|
|
6
|
+
- Contributors must fully understand the proposed changes and be able to explain why they are the correct approach.
|
|
7
|
+
- Issues must be created before creating pull requests (unless there is already a relevant issue).
|
|
8
|
+
- Issue and pull request templates must be followed.
|
|
9
|
+
- Comments (including bodies) in issues and pull requests must be written by humans. If you use LLMs to translate from one language to another, please include your original comment and the translated one.
|
|
10
|
+
- Git commits must be authored by humans, not AI/bot accounts or identities.
|
|
11
|
+
- Git commit messages must be written by humans, in English. If you cannot write English, please state so in the pull request body and we will write the commit messages ourselves.
|
|
12
|
+
|
|
13
|
+
Failure to comply with any of these requirements will result in issues or pull requests being closed immediately without comment. Repeated violations of this policy will result in a ban of the offending accounts/identities from contributing to this project and any related project from the same author/organization.
|
|
14
|
+
|
|
15
|
+
We do not accept AI-generated content in community spaces we maintain or moderate, such as GitHub discussions or Matrix rooms.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
|
|
6
|
+
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
<!-- insertion marker -->
|
|
9
|
+
## [0.1.0](https://github.com/pawamoy/iseewhatyoudid/releases/tag/0.1.0) - 2026-10-06
|
|
10
|
+
|
|
11
|
+
<small>[Compare with first commit](https://github.com/pawamoy/iseewhatyoudid/compare/f9a5664bcecb539cc2f3278626f2120c3a64e3c4...0.1.0)</small>
|
|
12
|
+
|
|
13
|
+
### Build
|
|
14
|
+
|
|
15
|
+
- Drop support for Python 3.10 ([6e2997e](https://github.com/pawamoy/iseewhatyoudid/commit/6e2997e46d9a53bcd6382eee418ee2c25108f433) by Timothée Mazzucotelli).
|
|
16
|
+
|
|
17
|
+
### Features
|
|
18
|
+
|
|
19
|
+
- Initial implementation ([f9a5664](https://github.com/pawamoy/iseewhatyoudid/commit/f9a5664bcecb539cc2f3278626f2120c3a64e3c4) by Timothée Mazzucotelli).
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
## Unreleased
|
|
23
|
+
|
|
24
|
+
### Added
|
|
25
|
+
|
|
26
|
+
- Add repeatable `--repos-dir` and `--commit-author-email` options to analyze
|
|
27
|
+
extensive public default-branch commit history from local clones.
|
|
28
|
+
- Disclose full-clone local, shallow local, and bounded GitHub commit-summary
|
|
29
|
+
sources in the HTML dashboard.
|
|
30
|
+
|
|
31
|
+
### Changed
|
|
32
|
+
|
|
33
|
+
- Prefer incrementally cached local Git history over GitHub commit-summary
|
|
34
|
+
requests for matched, confirmed-public repositories.
|
|
35
|
+
- Limit local history to the newest 2,000 matching commits per repository.
|
|
36
|
+
- Discover all scoped GitHub clones instead of restricting local history to
|
|
37
|
+
repositories present in GitHub's contribution groups.
|
|
38
|
+
- Continue clone discovery below a selected directory that is itself a Git
|
|
39
|
+
repository, and report progress while inspecting local remotes.
|
|
40
|
+
- Restrict local clone mapping to `origin`, ignoring contributor and pull-request
|
|
41
|
+
remotes.
|
|
42
|
+
- Remove the commit-scope chart and exclude merge commits with default subjects
|
|
43
|
+
from commit-summary analysis.
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# Contributor Covenant Code of Conduct
|
|
2
|
+
|
|
3
|
+
## Our Pledge
|
|
4
|
+
|
|
5
|
+
We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.
|
|
6
|
+
|
|
7
|
+
We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.
|
|
8
|
+
|
|
9
|
+
## Our Standards
|
|
10
|
+
|
|
11
|
+
Examples of behavior that contributes to a positive environment for our community include:
|
|
12
|
+
|
|
13
|
+
* Demonstrating empathy and kindness toward other people
|
|
14
|
+
* Being respectful of differing opinions, viewpoints, and experiences
|
|
15
|
+
* Giving and gracefully accepting constructive feedback
|
|
16
|
+
* Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
|
|
17
|
+
* Focusing on what is best not just for us as individuals, but for the overall community
|
|
18
|
+
|
|
19
|
+
Examples of unacceptable behavior include:
|
|
20
|
+
|
|
21
|
+
* The use of sexualized language or imagery, and sexual attention or advances of any kind
|
|
22
|
+
* Trolling, insulting or derogatory comments, and personal or political attacks
|
|
23
|
+
* Public or private harassment
|
|
24
|
+
* Publishing others' private information, such as a physical or email address, without their explicit permission
|
|
25
|
+
* Other conduct which could reasonably be considered inappropriate in a professional setting
|
|
26
|
+
|
|
27
|
+
## Enforcement Responsibilities
|
|
28
|
+
|
|
29
|
+
Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.
|
|
30
|
+
|
|
31
|
+
Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.
|
|
32
|
+
|
|
33
|
+
## Scope
|
|
34
|
+
|
|
35
|
+
This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.
|
|
36
|
+
|
|
37
|
+
## Enforcement
|
|
38
|
+
|
|
39
|
+
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at dev@pawamoy.fr. All complaints will be reviewed and investigated promptly and fairly.
|
|
40
|
+
|
|
41
|
+
All community leaders are obligated to respect the privacy and security of the reporter of any incident.
|
|
42
|
+
|
|
43
|
+
## Enforcement Guidelines
|
|
44
|
+
|
|
45
|
+
Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:
|
|
46
|
+
|
|
47
|
+
### 1. Correction
|
|
48
|
+
|
|
49
|
+
**Community Impact**: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.
|
|
50
|
+
|
|
51
|
+
**Consequence**: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.
|
|
52
|
+
|
|
53
|
+
### 2. Warning
|
|
54
|
+
|
|
55
|
+
**Community Impact**: A violation through a single incident or series of actions.
|
|
56
|
+
|
|
57
|
+
**Consequence**: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.
|
|
58
|
+
|
|
59
|
+
### 3. Temporary Ban
|
|
60
|
+
|
|
61
|
+
**Community Impact**: A serious violation of community standards, including sustained inappropriate behavior.
|
|
62
|
+
|
|
63
|
+
**Consequence**: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.
|
|
64
|
+
|
|
65
|
+
### 4. Permanent Ban
|
|
66
|
+
|
|
67
|
+
**Community Impact**: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.
|
|
68
|
+
|
|
69
|
+
**Consequence**: A permanent ban from any sort of public interaction within the community.
|
|
70
|
+
|
|
71
|
+
## Attribution
|
|
72
|
+
|
|
73
|
+
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.1, available at [https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
|
|
74
|
+
|
|
75
|
+
Community Impact Guidelines were inspired by [Mozilla's code of conduct enforcement ladder][Mozilla CoC].
|
|
76
|
+
|
|
77
|
+
For answers to common questions about this code of conduct, see the FAQ at [https://www.contributor-covenant.org/faq][FAQ]. Translations are available at [https://www.contributor-covenant.org/translations][translations].
|
|
78
|
+
|
|
79
|
+
[homepage]: https://www.contributor-covenant.org
|
|
80
|
+
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
|
|
81
|
+
[Mozilla CoC]: https://github.com/mozilla/diversity
|
|
82
|
+
[FAQ]: https://www.contributor-covenant.org/faq
|
|
83
|
+
[translations]: https://www.contributor-covenant.org/translations
|
|
84
|
+
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
# Contributing
|
|
2
|
+
|
|
3
|
+
Contributions are welcome, and they are greatly appreciated. Every little bit helps, and credit will always be given.
|
|
4
|
+
|
|
5
|
+
**Please always create an issue before working on a new feature or a bug fix, so that we can discuss the implementation and make sure that your work will be merged.**
|
|
6
|
+
|
|
7
|
+
## Environment setup
|
|
8
|
+
|
|
9
|
+
Install [uv](https://github.com/astral-sh/uv) and [direnv](https://direnv.net/), fork and clone the repository, then:
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
cd iseewhatyoudid
|
|
13
|
+
direnv allow
|
|
14
|
+
make setup
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
You now have the dependencies installed.
|
|
18
|
+
|
|
19
|
+
You can run the application with `make run iseewhatyoudid [ARGS...]`.
|
|
20
|
+
|
|
21
|
+
Run `make help` to see all the available actions!
|
|
22
|
+
|
|
23
|
+
## Tasks
|
|
24
|
+
|
|
25
|
+
The entry-point to run commands and tasks is the `make` Python script, located in the `scripts` directory. Try running `make` to show the available commands and tasks. The *commands* do not need the Python dependencies to be installed, while the *tasks* do. The cross-platform tasks are written in Python, thanks to [duty](https://github.com/pawamoy/duty).
|
|
26
|
+
|
|
27
|
+
If you work in VSCode, we provide [an action to configure VSCode](https://pawamoy.github.io/copier-uv/work/#vscode-setup) for the project.
|
|
28
|
+
|
|
29
|
+
## Development
|
|
30
|
+
|
|
31
|
+
As usual:
|
|
32
|
+
|
|
33
|
+
1. create a new branch: `git switch -c feature-or-bugfix-name`
|
|
34
|
+
1. edit the code and/or the documentation
|
|
35
|
+
|
|
36
|
+
**Before committing:**
|
|
37
|
+
|
|
38
|
+
1. run `make format` to auto-format the code
|
|
39
|
+
1. run `make check` to check everything (fix any warning)
|
|
40
|
+
1. run `make test` to run the tests (fix any issue)
|
|
41
|
+
1. if you updated the documentation or the project dependencies:
|
|
42
|
+
1. run `make docs`
|
|
43
|
+
1. go to http://localhost:8000 and check that everything looks good
|
|
44
|
+
1. follow our [commit message convention](#commit-message-convention)
|
|
45
|
+
|
|
46
|
+
If you are unsure about how to fix or ignore a warning, just let the continuous integration fail, and we will help you during review.
|
|
47
|
+
|
|
48
|
+
Don't bother updating the changelog, we will take care of this.
|
|
49
|
+
|
|
50
|
+
## Commit message convention
|
|
51
|
+
|
|
52
|
+
Commit messages must follow our convention based on the [Angular style](https://gist.github.com/stephenparish/9941e89d80e2bc58a153#format-of-the-commit-message) or the [Karma convention](https://karma-runner.github.io/4.0/dev/git-commit-msg.html):
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
<type>[(scope)]: Subject
|
|
56
|
+
|
|
57
|
+
[Body]
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
**Subject and body must be valid Markdown.** Subject must have proper casing (uppercase for first letter if it makes sense), but no dot at the end, and no punctuation in general.
|
|
61
|
+
|
|
62
|
+
Scope and body are optional. Type can be:
|
|
63
|
+
|
|
64
|
+
- `build`: About packaging, building wheels, etc.
|
|
65
|
+
- `chore`: About packaging or repo/files management.
|
|
66
|
+
- `ci`: About Continuous Integration.
|
|
67
|
+
- `deps`: Dependencies update.
|
|
68
|
+
- `docs`: About documentation.
|
|
69
|
+
- `feat`: New feature.
|
|
70
|
+
- `fix`: Bug fix.
|
|
71
|
+
- `perf`: About performance.
|
|
72
|
+
- `refactor`: Changes that are not features or bug fixes.
|
|
73
|
+
- `style`: A change in code style/format.
|
|
74
|
+
- `tests`: About tests.
|
|
75
|
+
|
|
76
|
+
If you write a body, please add trailers at the end (for example issues and PR references, or co-authors), without relying on GitHub's flavored Markdown:
|
|
77
|
+
|
|
78
|
+
```
|
|
79
|
+
Body.
|
|
80
|
+
|
|
81
|
+
Issue #10: https://github.com/namespace/project/issues/10
|
|
82
|
+
Related to PR namespace/other-project#15: https://github.com/namespace/other-project/pull/15
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
These "trailers" must appear at the end of the body, without any blank lines between them. The trailer title can contain any character except colons `:`. We expect a full URI for each trailer, not just GitHub autolinks (for example, full GitHub URLs for commits and issues, not the hash or the #issue-number).
|
|
86
|
+
|
|
87
|
+
We do not enforce a line length on commit messages summary and body, but please avoid very long summaries, and very long lines in the body, unless they are part of code blocks that must not be wrapped.
|
|
88
|
+
|
|
89
|
+
## Pull requests guidelines
|
|
90
|
+
|
|
91
|
+
Link to any related issue in the Pull Request message.
|
|
92
|
+
|
|
93
|
+
During the review, we recommend using fixups:
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
# SHA is the SHA of the commit you want to fix
|
|
97
|
+
git commit --fixup=SHA
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Once all the changes are approved, you can squash your commits:
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
git rebase -i --autosquash main
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
And force-push:
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
git push -f
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
If this seems all too complicated, you can push or force-push each new commit, and we will squash them ourselves if needed, before merging.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
ISC License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026, Timothée Mazzucotelli and contributors
|
|
4
|
+
|
|
5
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
|
6
|
+
purpose with or without fee is hereby granted, provided that the above
|
|
7
|
+
copyright notice and this permission notice appear in all copies.
|
|
8
|
+
|
|
9
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
10
|
+
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
11
|
+
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
12
|
+
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
13
|
+
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
14
|
+
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
15
|
+
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: iseewhatyoudid
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Overview of what you achieved.
|
|
5
|
+
Author-Email: Timothée Mazzucotelli <dev@pawamoy.fr>
|
|
6
|
+
License-Expression: ISC
|
|
7
|
+
License-File: LICENSE
|
|
8
|
+
Classifier: Development Status :: 4 - Beta
|
|
9
|
+
Classifier: Intended Audience :: Developers
|
|
10
|
+
Classifier: Programming Language :: Python
|
|
11
|
+
Classifier: Programming Language :: Python :: 3
|
|
12
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.15
|
|
18
|
+
Classifier: Topic :: Documentation
|
|
19
|
+
Classifier: Topic :: Software Development
|
|
20
|
+
Classifier: Topic :: Utilities
|
|
21
|
+
Classifier: Typing :: Typed
|
|
22
|
+
Project-URL: Homepage, https://pawamoy.github.io/iseewhatyoudid
|
|
23
|
+
Project-URL: Documentation, https://pawamoy.github.io/iseewhatyoudid
|
|
24
|
+
Project-URL: Changelog, https://pawamoy.github.io/iseewhatyoudid/changelog
|
|
25
|
+
Project-URL: Repository, https://github.com/pawamoy/iseewhatyoudid
|
|
26
|
+
Project-URL: Issues, https://github.com/pawamoy/iseewhatyoudid/issues
|
|
27
|
+
Project-URL: Discussions, https://github.com/pawamoy/iseewhatyoudid/discussions
|
|
28
|
+
Project-URL: Gitter, https://gitter.im/iseewhatyoudid/community
|
|
29
|
+
Project-URL: Funding, https://github.com/sponsors/pawamoy
|
|
30
|
+
Requires-Python: >=3.11
|
|
31
|
+
Description-Content-Type: text/markdown
|
|
32
|
+
|
|
33
|
+
# iseewhatyoudid
|
|
34
|
+
|
|
35
|
+
[](https://github.com/pawamoy/iseewhatyoudid/actions?query=workflow%3Aci)
|
|
36
|
+
[](https://pawamoy.github.io/iseewhatyoudid/)
|
|
37
|
+
[](https://pypi.org/project/iseewhatyoudid/)
|
|
38
|
+
[](https://app.gitter.im/#/room/#iseewhatyoudid:gitter.im)
|
|
39
|
+
|
|
40
|
+
`iseewhatyoudid` is a small reminder that your work adds up. When you are
|
|
41
|
+
feeling as though you have not done enough, it lets you look back over the
|
|
42
|
+
issues and pull requests you have contributed, step by step and over time.
|
|
43
|
+
|
|
44
|
+
It creates an interactive HTML dashboard of a GitHub user's activity: issues
|
|
45
|
+
and pull requests they opened, status changes on those items, issue and pull
|
|
46
|
+
request comments they wrote, and commit contributions. Activity is grouped by
|
|
47
|
+
year, month, week, and day across every visible repository by default.
|
|
48
|
+
|
|
49
|
+
## A gentle reminder, not a scorecard
|
|
50
|
+
|
|
51
|
+
This tool is intentionally a double-edged one. Seeing your past activity can
|
|
52
|
+
help you recognise work that was easy to forget. It can also reinforce a sense
|
|
53
|
+
of being unproductive when activity is low, when GitHub does not capture the
|
|
54
|
+
work you did, or when you are simply going through a quieter period.
|
|
55
|
+
|
|
56
|
+
Take the dashboard with a grain of salt. GitHub activity does not measure a
|
|
57
|
+
person's worth, pleasure, or happiness—and it is not a complete measure of
|
|
58
|
+
their work or impact. Rest, learning, care, conversations, planning, and work
|
|
59
|
+
away from GitHub all matter too.
|
|
60
|
+
|
|
61
|
+
## Installation
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
pip install iseewhatyoudid
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
With [`uv`](https://docs.astral.sh/uv/):
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
uv tool install iseewhatyoudid
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Python 3.10 or later is required.
|
|
74
|
+
|
|
75
|
+
## Usage
|
|
76
|
+
|
|
77
|
+
By default, the dashboard shows all activity for the GitHub account
|
|
78
|
+
authenticated in `gh`.
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
iseewhatyoudid dashboard
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Pass `--user` to inspect a different GitHub user. Repository scopes are
|
|
85
|
+
optional filters: an organization (`--org`) or an individual repository
|
|
86
|
+
(`--include-repo`).
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
iseewhatyoudid dashboard --user octocat --include-repo octo-org/example
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
To inspect all repositories in an organization:
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
iseewhatyoudid dashboard --user octocat --org octo-org
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
The command writes `iseewhatyoudid.html` in the current directory. Open it in a
|
|
99
|
+
browser to explore a personal history of how your work accumulated:
|
|
100
|
+
|
|
101
|
+
- a cumulative chart that only moves forward, with contribution milestones;
|
|
102
|
+
- a one-square-per-day activity tapestry;
|
|
103
|
+
- active-time, repository, conversation, and return-after-a-break insights;
|
|
104
|
+
- issue and pull-request lifecycle views;
|
|
105
|
+
- contribution variety, repository stewardship, and project exploration;
|
|
106
|
+
- personal records, first contributions, and yearly chapter cards;
|
|
107
|
+
- a long-term monthly rhythm; and
|
|
108
|
+
- links that help rediscover older issues and pull requests;
|
|
109
|
+
- commit-summary work types, including features, fixes, documentation, tests,
|
|
110
|
+
refactoring, security, accessibility, CI, maintenance, and more;
|
|
111
|
+
- commit composition and cumulative work-type charts, a filterable commit
|
|
112
|
+
heatmap, repository/type matrix, and project-role views;
|
|
113
|
+
- care-work summaries, milestones, maintenance seasons, recurring topics, and
|
|
114
|
+
conventional-prefix coverage; and
|
|
115
|
+
- a searchable, linked commit-summary gallery plus locally derived personal
|
|
116
|
+
insights.
|
|
117
|
+
|
|
118
|
+
The detailed stacked views for years, recent months, weeks, and days remain
|
|
119
|
+
available near the end of the report.
|
|
120
|
+
|
|
121
|
+
### Authentication
|
|
122
|
+
|
|
123
|
+
The command uses the [GitHub CLI](https://cli.github.com/) for authentication
|
|
124
|
+
and GraphQL requests. Install `gh` and sign in once before running the
|
|
125
|
+
dashboard. Its browser-based sign-in flow stores the credential in your system
|
|
126
|
+
credential store when one is available.
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
gh auth login
|
|
130
|
+
iseewhatyoudid dashboard --org my-organization
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
When no `--user` is given, the account authenticated in `gh` is used. Make
|
|
134
|
+
sure that account can access the repositories you include.
|
|
135
|
+
|
|
136
|
+
### Scoping and filtering
|
|
137
|
+
|
|
138
|
+
`--org`, `--include-repo`, and `--exclude-repo` can each be repeated. Without
|
|
139
|
+
an organization or included repository, all repositories are included.
|
|
140
|
+
Otherwise, included repositories are combined with organization repositories;
|
|
141
|
+
exclusions always take precedence.
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
# Activity in two organizations, plus one standalone repository.
|
|
145
|
+
iseewhatyoudid dashboard \
|
|
146
|
+
--user octocat \
|
|
147
|
+
--org octo-org \
|
|
148
|
+
--org another-org \
|
|
149
|
+
--include-repo someone/project \
|
|
150
|
+
--exclude-repo octo-org/archived-project
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
Run `iseewhatyoudid dashboard --help` to see every option. While GitHub data
|
|
154
|
+
is loading, the command displays a progress bar with fetched and total page
|
|
155
|
+
counts. Logging is disabled by default. Add `-v` for Rich-formatted API logging,
|
|
156
|
+
`-vv` for debug logging, or use `--log-level` to enable an explicit logging
|
|
157
|
+
level. Add `--refresh` to bypass the short-lived cache when you need the very
|
|
158
|
+
latest data.
|
|
159
|
+
|
|
160
|
+
### Using local clones for deeper commit history
|
|
161
|
+
|
|
162
|
+
If your public repositories are already cloned below one or more directories,
|
|
163
|
+
point the dashboard at them with `--repos-dir`:
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
iseewhatyoudid dashboard --repos-dir ~/dev
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
The option can be repeated. The command recursively discovers Git clones,
|
|
170
|
+
normalizes each `origin` remote that points to `github.com` in the selected
|
|
171
|
+
scope, and asks GitHub for only its canonical repository name, privacy status,
|
|
172
|
+
and default-branch name. Other remotes—such as contributor forks added while
|
|
173
|
+
reviewing pull requests—are ignored. Repositories do not need to appear in
|
|
174
|
+
GitHub's contribution list to qualify.
|
|
175
|
+
Discovery continues into the selected directory when that directory is itself
|
|
176
|
+
a Git repository, so a Git-backed container of nested clones works as expected.
|
|
177
|
+
The command then reads the local default branch without fetching, checking out,
|
|
178
|
+
or changing the clone. Matched local histories replace commit-summary API
|
|
179
|
+
requests; unmatched repositories keep the bounded GitHub fallback.
|
|
180
|
+
|
|
181
|
+
For the authenticated user, commits match the repository's configured Git
|
|
182
|
+
email, GitHub's `<login>@users.noreply.github.com` forms, and mailmap aliases.
|
|
183
|
+
Add old or additional identities explicitly when needed:
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
iseewhatyoudid dashboard \
|
|
187
|
+
--repos-dir ~/work \
|
|
188
|
+
--repos-dir ~/projects \
|
|
189
|
+
--commit-author-email old-address@example.com
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
`--commit-author-email` can also be repeated. When `--user` selects another
|
|
193
|
+
person, local Git configuration is deliberately not assumed to belong to that
|
|
194
|
+
person; pass their known author emails explicitly. GitHub noreply addresses
|
|
195
|
+
matching the selected login continue to work automatically.
|
|
196
|
+
|
|
197
|
+
### HTML dashboard
|
|
198
|
+
|
|
199
|
+
Use `--output-html` to choose a different destination for the dashboard.
|
|
200
|
+
|
|
201
|
+
```bash
|
|
202
|
+
iseewhatyoudid dashboard --output-html activity.html
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
The report uses [Chart.js](https://www.chartjs.org/) from its CDN, so opening
|
|
206
|
+
it requires network access. Hover over bars to inspect values or click legend
|
|
207
|
+
entries to show and hide activity categories. Summary cards show totals and
|
|
208
|
+
yearly/monthly averages, while a GitHub-style grid shows daily activity over
|
|
209
|
+
the last year.
|
|
210
|
+
|
|
211
|
+
### Cache
|
|
212
|
+
|
|
213
|
+
Activity is cached in the operating system's user cache directory, as resolved
|
|
214
|
+
by [`platformdirs`](https://platformdirs.readthedocs.io/). After the initial
|
|
215
|
+
history fetch, later runs request only the newest issue, pull request, and
|
|
216
|
+
comment pages, refresh items that are still open or were closed recently, reuse
|
|
217
|
+
completed commit years, and update the current year's commits. Merged pull
|
|
218
|
+
requests and items closed for more than 30 days are treated as stable. Results
|
|
219
|
+
fetched during the last 15 minutes are reused entirely, making quick dashboard
|
|
220
|
+
reruns local-only after the authenticated username has been resolved.
|
|
221
|
+
|
|
222
|
+
The cache stores only the GitHub IDs, timestamps, states, repository names,
|
|
223
|
+
titles, URLs, numbers, author logins, commit SHAs, and single-line commit
|
|
224
|
+
summaries needed to rebuild the dashboard and its rediscovery links. It does
|
|
225
|
+
not store comment bodies, issue descriptions, multi-line commit messages,
|
|
226
|
+
patches, file contents, credentials, or local filesystem paths. For a matched
|
|
227
|
+
local clone it additionally stores the repository's last inspected commit,
|
|
228
|
+
reference name, shallow status, and a one-way fingerprint of the author
|
|
229
|
+
identities so unchanged histories require no commit scan on the next run.
|
|
230
|
+
|
|
231
|
+
### Commit-summary collection
|
|
232
|
+
|
|
233
|
+
Local clones are the preferred source when `--repos-dir` is used. Full clones
|
|
234
|
+
provide up to the newest 2,000 matching commits from the locally available
|
|
235
|
+
default-branch history per repository. Shallow clones provide only the history
|
|
236
|
+
present on disk and are labeled as shallow in the dashboard. New descendants
|
|
237
|
+
are scanned incrementally from the previously cached head. Rewritten histories
|
|
238
|
+
and changed author identities are rescanned; unchanged shallow clones are
|
|
239
|
+
reused, while deepened clones are detected and rescanned. Commit records remain
|
|
240
|
+
cached by immutable SHA, and older records are trimmed when a repository
|
|
241
|
+
exceeds the 2,000-commit limit.
|
|
242
|
+
|
|
243
|
+
For repositories without a usable local clone, commit-summary analysis is
|
|
244
|
+
deliberately bounded so it does not turn dashboard generation into a remote
|
|
245
|
+
repository crawl. Within the selected dashboard scope, the collector ranks
|
|
246
|
+
public repositories using the contribution counts already available and
|
|
247
|
+
samples at most 20 repositories. Repositories are batched ten at a time in
|
|
248
|
+
GraphQL requests. The first import retrieves only the newest 100 default-branch
|
|
249
|
+
commits attributed to the selected GitHub user in each sampled repository.
|
|
250
|
+
|
|
251
|
+
Commits are cached by immutable SHA. A normal refresh requests the newest page
|
|
252
|
+
and stops as soon as it sees a cached SHA. If more than a full page of new
|
|
253
|
+
commits appeared since the previous run, it can follow at most three pages per
|
|
254
|
+
repository. The dashboard reports how many histories came from local clones,
|
|
255
|
+
how many were shallow, and how many used the bounded GitHub sample.
|
|
256
|
+
|
|
257
|
+
The classifier recognizes forgiving Conventional Commit-style prefixes such
|
|
258
|
+
as `feat`, `feature`, `fix`, `docs`, `test`, `tests`, `refactor`, `perf`,
|
|
259
|
+
`security`, `a11y`, `i18n`, `deps`, `ci`, `build`, `chore`, and `revert`, with
|
|
260
|
+
optional scopes such as `feat(parser): ...`. Unrecognized summaries stay in a
|
|
261
|
+
normal “Other” category; they are not treated as malformed.
|
|
262
|
+
|
|
263
|
+
Default merge subjects such as `Merge branch ...` and
|
|
264
|
+
`Merge pull request ...` are excluded from commit-summary analysis so routine
|
|
265
|
+
integration commits do not dominate work types or recurring themes. Custom
|
|
266
|
+
merge commit subjects remain part of the analysis.
|
|
267
|
+
|
|
268
|
+
Private repositories are excluded from the cache and dashboard. GitHub's
|
|
269
|
+
complete user-wide issue, pull-request, and comment connections do not support
|
|
270
|
+
a public-only filter, so an authenticated response can transiently contain
|
|
271
|
+
private nodes. The collector checks each repository's `isPrivate` flag and
|
|
272
|
+
discards those nodes before adding anything to its history maps or writing a
|
|
273
|
+
cache checkpoint. Private commit-contribution groups are discarded in the same
|
|
274
|
+
way. Older cache schemas are invalidated and overwritten before collection
|
|
275
|
+
starts.
|
|
276
|
+
|
|
277
|
+
## Current limitations
|
|
278
|
+
|
|
279
|
+
Closed and merged dates describe status changes on issues and pull requests
|
|
280
|
+
authored by the selected user; GitHub does not expose a global stream of items
|
|
281
|
+
that the user personally closed or merged. Comments include issue comments and
|
|
282
|
+
top-level pull-request conversation comments, but not inline review comments.
|
|
283
|
+
|
|
284
|
+
GitHub's contribution API returns commit activity from at most 100 repositories
|
|
285
|
+
per year. For unusually active single repositories, the dashboard combines the
|
|
286
|
+
first and last 100 commit-days returned by GitHub and warns when the API still
|
|
287
|
+
truncates the year.
|
|
288
|
+
|
|
289
|
+
Commit-summary analysis covers only public default branches. Local clones can
|
|
290
|
+
be stale until they are updated outside this program, and shallow clones omit
|
|
291
|
+
history that is absent from disk. The GitHub fallback can omit older commits
|
|
292
|
+
beyond its initial sample. Both sources omit unmerged branch commits and
|
|
293
|
+
commits no longer reachable after rebases or force-pushes. Commits whose author
|
|
294
|
+
email does not match a configured identity can also be absent, and squashed
|
|
295
|
+
commits may not correspond one-to-one with the user's original commits.
|
|
296
|
+
|
|
297
|
+
## Troubleshooting
|
|
298
|
+
|
|
299
|
+
- Install [GitHub CLI](https://cli.github.com/) and run `gh auth login` before
|
|
300
|
+
using the dashboard.
|
|
301
|
+
- Check repository names use the `owner/name` form.
|
|
302
|
+
- If GitHub returns a rate-limit or permission error, check `gh auth status`
|
|
303
|
+
and make sure the authenticated account can access the selected repositories.
|
|
304
|
+
- Run `iseewhatyoudid --debug-info` when reporting an environment issue.
|
|
305
|
+
|
|
306
|
+
## Sponsors
|
|
307
|
+
|
|
308
|
+
<!-- sponsors-start -->
|
|
309
|
+
<!-- sponsors-end -->
|