pup-down 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.
- pup_down-0.1.0/.gitignore +198 -0
- pup_down-0.1.0/CHANGELOG.md +113 -0
- pup_down-0.1.0/CITATION.cff +43 -0
- pup_down-0.1.0/LICENSE +21 -0
- pup_down-0.1.0/PKG-INFO +171 -0
- pup_down-0.1.0/README.md +144 -0
- pup_down-0.1.0/pyproject.toml +172 -0
- pup_down-0.1.0/src/pup_down/__init__.py +1 -0
- pup_down-0.1.0/src/pup_down/__main__.py +6 -0
- pup_down-0.1.0/src/pup_down/_version.py +24 -0
- pup_down-0.1.0/src/pup_down/base/errors.py +22 -0
- pup_down-0.1.0/src/pup_down/base/types.py +47 -0
- pup_down-0.1.0/src/pup_down/cli.py +87 -0
- pup_down-0.1.0/src/pup_down/commands/__init__.py +11 -0
- pup_down-0.1.0/src/pup_down/commands/update.py +65 -0
- pup_down-0.1.0/src/pup_down/compare.py +137 -0
- pup_down-0.1.0/src/pup_down/git_history.py +96 -0
- pup_down-0.1.0/src/pup_down/py.typed +0 -0
- pup_down-0.1.0/src/pup_down/templates/baseline.py +104 -0
- pup_down-0.1.0/src/pup_down/templates/baseline_utils.py +103 -0
- pup_down-0.1.0/src/pup_down/templates/data/defaults.toml +8 -0
- pup_down-0.1.0/src/pup_down/templates/fetch.py +306 -0
- pup_down-0.1.0/src/pup_down/templates/render.py +69 -0
- pup_down-0.1.0/src/pup_down/templates/types.py +38 -0
- pup_down-0.1.0/src/pup_down/templates/zensical.py +37 -0
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
# ============================================================
|
|
2
|
+
# .gitignore (ALL-REPOS)
|
|
3
|
+
# ============================================================
|
|
4
|
+
# Updated: 2026-08-04
|
|
5
|
+
#
|
|
6
|
+
# REQ: All professional GitHub project repositories MUST include .gitignore.
|
|
7
|
+
# WHY: Keep generated artifacts, local state, secrets, and OS-specific files
|
|
8
|
+
# out of the repository.
|
|
9
|
+
# ALT: Repository may customize ignores, but MUST preserve universal safety rules.
|
|
10
|
+
|
|
11
|
+
# === pup-down fragments ===
|
|
12
|
+
|
|
13
|
+
# WHY: The pup-down (professional Python project updater) may provide temporary configuration fragments for manual merging.
|
|
14
|
+
# WHY: Ruff settings belong in the repository's authoritative pyproject.toml.
|
|
15
|
+
/pyproject.toml.ruff
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
# === Logs and generated runtime output ===
|
|
19
|
+
|
|
20
|
+
# WHY: Ignore logs and runtime output by default; share only project.log for evidence.
|
|
21
|
+
*.log
|
|
22
|
+
logs/
|
|
23
|
+
!/project.log
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
# === Private notes and local-only files ===
|
|
27
|
+
|
|
28
|
+
PRIVATE-NOTES.md
|
|
29
|
+
PRIVATE_NOTES.md
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
# === Environment variables and secrets ===
|
|
33
|
+
|
|
34
|
+
# WHY: Never commit credentials or environment-specific configuration.
|
|
35
|
+
*.env
|
|
36
|
+
.env
|
|
37
|
+
.env.*
|
|
38
|
+
|
|
39
|
+
# WHY: Commit .env.example as a template showing which variables to set.
|
|
40
|
+
# Copy this file to .env and customize.
|
|
41
|
+
!.env.example
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
# === Operating-system files ===
|
|
45
|
+
|
|
46
|
+
# WHY: OS-generated metadata files should never be tracked.
|
|
47
|
+
.AppleDouble
|
|
48
|
+
.DS_Store
|
|
49
|
+
.LSOverride
|
|
50
|
+
.Spotlight-V100/
|
|
51
|
+
.Trashes
|
|
52
|
+
._*
|
|
53
|
+
Icon\r
|
|
54
|
+
Thumbs.db
|
|
55
|
+
desktop.ini
|
|
56
|
+
ehthumbs.db
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
# === Editors and IDEs ===
|
|
60
|
+
|
|
61
|
+
# WHY: IDE metadata is machine-local and should not be tracked.
|
|
62
|
+
*.code-workspace
|
|
63
|
+
.idea/
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
# === VS Code ===
|
|
67
|
+
|
|
68
|
+
# WHY: Ignore editor state by default; share only project-level config.
|
|
69
|
+
# NOTE: Use .vscode/* (contents), not .vscode/ (directory). Git will not
|
|
70
|
+
# re-include a file whose parent directory is excluded.
|
|
71
|
+
.vscode/*
|
|
72
|
+
!.vscode/ABOUT_THIS_FOLDER.md
|
|
73
|
+
!.vscode/extensions.json
|
|
74
|
+
!.vscode/settings.json
|
|
75
|
+
!.vscode/launch.json
|
|
76
|
+
!.vscode/tasks.json
|
|
77
|
+
!.vscode/*.code-snippets
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
# === Temporary and swap files ===
|
|
81
|
+
|
|
82
|
+
# WHY: Temporary and swap files are machine-local noise and create meaningless diffs.
|
|
83
|
+
*.swo
|
|
84
|
+
*.swp
|
|
85
|
+
*.tmp
|
|
86
|
+
*~
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
# === Markup and documentation ===
|
|
90
|
+
|
|
91
|
+
# WHY: Static site build output is generated.
|
|
92
|
+
site/
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
# === Generic caches ===
|
|
96
|
+
|
|
97
|
+
# WHY: Generic caches are machine-local and should not be tracked.
|
|
98
|
+
.cache/
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
# === Node dependencies ===
|
|
102
|
+
|
|
103
|
+
# WHY: Node dependencies are restored from package-lock.json with npm ci.
|
|
104
|
+
node_modules/
|
|
105
|
+
|
|
106
|
+
# REQ.NODE: Do NOT git ignore package-lock.json. Commit it and use it in CI/CD pipelines.
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
# === Node package-manager caches ===
|
|
110
|
+
|
|
111
|
+
# WHY: Package-manager caches are machine-local and should not be tracked.
|
|
112
|
+
.npm/
|
|
113
|
+
.pnpm-store/
|
|
114
|
+
.yarn/cache/
|
|
115
|
+
.yarn/unplugged/
|
|
116
|
+
.yarn/build-state.yml
|
|
117
|
+
.yarn/install-state.gz
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
# === TypeScript and JavaScript build output ===
|
|
121
|
+
|
|
122
|
+
# WHY: Compiled JavaScript output is generated from TypeScript source.
|
|
123
|
+
out/
|
|
124
|
+
|
|
125
|
+
# WHY: Distribution/build output is generated.
|
|
126
|
+
build/
|
|
127
|
+
dist/
|
|
128
|
+
|
|
129
|
+
# WHY: TypeScript incremental build metadata is generated.
|
|
130
|
+
*.tsbuildinfo
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
# === TypeScript and JavaScript tooling caches ===
|
|
134
|
+
|
|
135
|
+
# WHY: Tooling caches are generated and machine-local.
|
|
136
|
+
.eslintcache
|
|
137
|
+
.nyc_output/
|
|
138
|
+
coverage/
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
# === VS Code extension test and package output ===
|
|
142
|
+
|
|
143
|
+
# WHY: VS Code extension test host files are generated by @vscode/test-electron.
|
|
144
|
+
.vscode-test/
|
|
145
|
+
|
|
146
|
+
# WHY: VSIX packages are generated release artifacts.
|
|
147
|
+
*.vsix
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
# === Python environments ===
|
|
151
|
+
|
|
152
|
+
# WHY: Virtual environments are machine-local and reproducible.
|
|
153
|
+
.venv/
|
|
154
|
+
venv/
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
# === Python version files ===
|
|
158
|
+
|
|
159
|
+
# REQ.PYTHON: Do NOT git ignore uv.lock. Commit it and use it in CI/CD pipelines.
|
|
160
|
+
|
|
161
|
+
# WHY: Python version when using scm matches any repo depth and any package name.
|
|
162
|
+
**/src/**/_version.py
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
# === Python bytecode ===
|
|
166
|
+
|
|
167
|
+
# WHY: Python bytecode is generated.
|
|
168
|
+
*.pyc
|
|
169
|
+
*.pyd
|
|
170
|
+
*.pyo
|
|
171
|
+
__pycache__/
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
# === Python build and packaging artifacts ===
|
|
175
|
+
|
|
176
|
+
# WHY: Build and packaging artifacts are generated.
|
|
177
|
+
*.egg
|
|
178
|
+
*.egg-info/
|
|
179
|
+
*.whl
|
|
180
|
+
.eggs/
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
# === Python tooling caches ===
|
|
184
|
+
|
|
185
|
+
# WHY: Tooling caches should not be tracked.
|
|
186
|
+
.coverage
|
|
187
|
+
.coverage.*
|
|
188
|
+
.mypy_cache/
|
|
189
|
+
.pytest_cache/
|
|
190
|
+
.pytype/
|
|
191
|
+
.ruff_cache/
|
|
192
|
+
.tox/
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
# === Notebooks ===
|
|
196
|
+
|
|
197
|
+
# WHY: Notebook checkpoint state is generated.
|
|
198
|
+
.ipynb_checkpoints/
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
<!-- markdownlint-disable MD024 -->
|
|
4
|
+
|
|
5
|
+
All notable changes to this project will be documented in this file.
|
|
6
|
+
|
|
7
|
+
The format is based on **[Keep a Changelog](https://keepachangelog.com/en/1.1.0/)**
|
|
8
|
+
and this project adheres to **[Semantic Versioning](https://semver.org/spec/v2.0.0.html)**.
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## [Unreleased]
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## [0.1.0] - 2026-08-25
|
|
17
|
+
|
|
18
|
+
### Added
|
|
19
|
+
|
|
20
|
+
- Read-only comparison of repository scaffolding against canonical templates.
|
|
21
|
+
- Automatic repository detection and additive template-layer inference.
|
|
22
|
+
- Reporting for current, different, repository-newer, template-newer,
|
|
23
|
+
added, and deleted scaffolding files.
|
|
24
|
+
- Git history comparison for determining which differing file was changed
|
|
25
|
+
more recently.
|
|
26
|
+
- Canonical template fetching from **pup-pack/templates** with support for
|
|
27
|
+
local template paths.
|
|
28
|
+
- Repository-specific template rendering using detected project metadata.
|
|
29
|
+
- Existing Zensical template handling and layered template architecture.
|
|
30
|
+
- Direct command-line execution with **uvx pup-down**.
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Notes on Versioning and Releases
|
|
35
|
+
|
|
36
|
+
- We use **SemVer**:
|
|
37
|
+
- **MAJOR** - breaking changes
|
|
38
|
+
- **MINOR** - backward-compatible additions
|
|
39
|
+
- **PATCH** - fixes, documentation, tooling
|
|
40
|
+
- Versions are driven by git tags.
|
|
41
|
+
- Tag `vX.Y.Z` to release.
|
|
42
|
+
- Docs are deployed per version tag and aliased to **latest**.
|
|
43
|
+
|
|
44
|
+
## Release Procedure
|
|
45
|
+
|
|
46
|
+
Follow these steps when creating a new release.
|
|
47
|
+
|
|
48
|
+
### Task 1. Update release metadata
|
|
49
|
+
|
|
50
|
+
1. Update `CITATION.cff`: change `version` and `date-released`
|
|
51
|
+
2. Update `CHANGELOG.md`: move from unreleased, add entry, update links
|
|
52
|
+
3. Update `pyproject.toml`: update `[tool.hatch.version] fallback-version`
|
|
53
|
+
|
|
54
|
+
### Task 2. Validate
|
|
55
|
+
|
|
56
|
+
```shell
|
|
57
|
+
uv self update
|
|
58
|
+
uv python install
|
|
59
|
+
uv lock --upgrade
|
|
60
|
+
uv sync
|
|
61
|
+
|
|
62
|
+
uv run pre-commit install
|
|
63
|
+
uv run pre-commit autoupdate
|
|
64
|
+
|
|
65
|
+
uv run pup-down
|
|
66
|
+
|
|
67
|
+
git add -A
|
|
68
|
+
uv run pre-commit run --all-files
|
|
69
|
+
# rerun if changes made
|
|
70
|
+
uv run pre-commit run --all-files
|
|
71
|
+
|
|
72
|
+
uv run python -m pytest
|
|
73
|
+
uv run ty check
|
|
74
|
+
uv run python -m zensical build
|
|
75
|
+
|
|
76
|
+
<!-- markdownlint-disable MD013 -->
|
|
77
|
+
|
|
78
|
+
uv run python -c "import shutil; from pathlib import Path; shutil.rmtree(Path('dist'), ignore_errors=True)"
|
|
79
|
+
|
|
80
|
+
<!-- markdownlint-enable MD013 -->
|
|
81
|
+
|
|
82
|
+
uv build
|
|
83
|
+
uvx twine check dist/*
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### Task 3. Commit, push, tag
|
|
87
|
+
|
|
88
|
+
```shell
|
|
89
|
+
git add -A
|
|
90
|
+
git commit -m "Prepare X.Y.Z"
|
|
91
|
+
git push -u origin main
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Verify actions run on GitHub. After success:
|
|
95
|
+
|
|
96
|
+
```shell
|
|
97
|
+
git tag vX.Y.Z -m "X.Y.Z"
|
|
98
|
+
git push origin vX.Y.Z
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Only As Needed (delete a tag)
|
|
102
|
+
|
|
103
|
+
```shell
|
|
104
|
+
git tag -d vX.Z.Y
|
|
105
|
+
git push origin :refs/tags/vX.Z.Y
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## Links
|
|
109
|
+
|
|
110
|
+
[Unreleased]: https://github.com/pup-pack/pup-down/compare/v0.1.0...HEAD
|
|
111
|
+
[0.1.0]: https://github.com/pup-pack/pup-down/releases/tag/v0.1.0
|
|
112
|
+
|
|
113
|
+
<!-- markdownlint-enable MD024 -->
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# ============================================================
|
|
2
|
+
# CITATION.cff (How to cite this project)
|
|
3
|
+
# ============================================================
|
|
4
|
+
|
|
5
|
+
# REQ.UNIVERSAL: Professional open projects SHOULD include this file.
|
|
6
|
+
# USAGE: See https://citation-file-format.github.io/ for details.
|
|
7
|
+
|
|
8
|
+
cff-version: "1.2.0"
|
|
9
|
+
message: "If you use this work, please cite it using the metadata in this file."
|
|
10
|
+
type: software
|
|
11
|
+
|
|
12
|
+
title: "pup-down"
|
|
13
|
+
# Set version and date-released to match latest git tag or release.
|
|
14
|
+
version: "0.1.0"
|
|
15
|
+
date-released: "2026-08-25"
|
|
16
|
+
|
|
17
|
+
authors:
|
|
18
|
+
- family-names: Case
|
|
19
|
+
given-names: Denise M.
|
|
20
|
+
orcid: "https://orcid.org/0000-0001-6165-7389"
|
|
21
|
+
affiliation: "Northwest Missouri State University, School of Computer Science and Information Systems, Maryville, MO, USA"
|
|
22
|
+
|
|
23
|
+
repository-code: "https://github.com/pup-pack/pup-down"
|
|
24
|
+
url: "https://github.com/pup-pack/pup-down"
|
|
25
|
+
|
|
26
|
+
license: MIT
|
|
27
|
+
|
|
28
|
+
abstract: >
|
|
29
|
+
Read-only command-line tool for comparing professional Python repository
|
|
30
|
+
infrastructure with canonical templates and identifying scaffolding changes
|
|
31
|
+
that may need to be incorporated into the maintained templates.
|
|
32
|
+
|
|
33
|
+
keywords:
|
|
34
|
+
- repository-baseline
|
|
35
|
+
- repository-templates
|
|
36
|
+
- template-management
|
|
37
|
+
- developer-tooling
|
|
38
|
+
- command-line-tool
|
|
39
|
+
- python
|
|
40
|
+
- uvx
|
|
41
|
+
- automation
|
|
42
|
+
- software-architecture
|
|
43
|
+
- accountable-repositories
|
pup_down-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Denise Case
|
|
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.
|
pup_down-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: pup-down
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Read-only command-line tool for identifying repository infrastructure changes that may belong in canonical project templates.
|
|
5
|
+
Project-URL: Homepage, https://github.com/pup-pack/pup-down
|
|
6
|
+
Project-URL: Repository, https://github.com/pup-pack/pup-down
|
|
7
|
+
Project-URL: Documentation, https://pup-pack.github.io/pup-down/
|
|
8
|
+
Project-URL: Issues, https://github.com/pup-pack/pup-down/issues
|
|
9
|
+
Project-URL: Changelog, https://github.com/pup-pack/pup-down/blob/main/CHANGELOG.md
|
|
10
|
+
Author: Denise Case
|
|
11
|
+
License-File: LICENSE
|
|
12
|
+
Keywords: automation,command-line-tool,developer-tooling,python,repository-baseline,repository-templates,software-architecture,template-management,uvx
|
|
13
|
+
Classifier: Development Status :: 4 - Beta
|
|
14
|
+
Classifier: Environment :: Console
|
|
15
|
+
Classifier: Intended Audience :: Developers
|
|
16
|
+
Classifier: Operating System :: OS Independent
|
|
17
|
+
Classifier: Programming Language :: Python :: 3
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.15
|
|
19
|
+
Classifier: Topic :: Software Development
|
|
20
|
+
Classifier: Topic :: Software Development :: Build Tools
|
|
21
|
+
Classifier: Topic :: Software Development :: Quality Assurance
|
|
22
|
+
Classifier: Topic :: Utilities
|
|
23
|
+
Classifier: Typing :: Typed
|
|
24
|
+
Requires-Python: >=3.15
|
|
25
|
+
Requires-Dist: pup-core>=0.1.3
|
|
26
|
+
Description-Content-Type: text/markdown
|
|
27
|
+
|
|
28
|
+
# pup-down: Professional Python Project Updater (Move Updates Down to Templates)
|
|
29
|
+
|
|
30
|
+
[](https://pypi.org/project/pup-down/)
|
|
31
|
+
[](https://pup-pack.github.io/pup-down/)
|
|
32
|
+
[](https://github.com/pup-pack/pup-down)
|
|
33
|
+
[](https://github.com/pup-pack/pup-down/blob/main/pyproject.toml)
|
|
34
|
+
[](https://docs.astral.sh/uv/)
|
|
35
|
+
[](https://docs.astral.sh/ty/)
|
|
36
|
+
[](https://zensical.org/)
|
|
37
|
+
[](https://github.com/pup-pack/pup-down/blob/main/LICENSE)
|
|
38
|
+
|
|
39
|
+
[](https://github.com/pup-pack/pup-down/actions/workflows/ci-python-zensical.yml)
|
|
40
|
+
[](https://github.com/pup-pack/pup-down/actions/workflows/deploy-zensical.yml)
|
|
41
|
+
[](https://github.com/pup-pack/pup-down/actions/workflows/pre-release.yml)
|
|
42
|
+
[](https://github.com/pup-pack/pup-down/actions/workflows/release-pypi.yml)
|
|
43
|
+
[](https://github.com/pup-pack/pup-down/actions/workflows/links.yml)
|
|
44
|
+
[](https://github.com/pup-pack/pup-down/security)
|
|
45
|
+
|
|
46
|
+
<img
|
|
47
|
+
src="https://raw.githubusercontent.com/pup-pack/pup-down/main/docs/images/pup.png"
|
|
48
|
+
alt="pup logo"
|
|
49
|
+
width="110">
|
|
50
|
+
|
|
51
|
+
> Opinionated professional Python project template comparison tool.
|
|
52
|
+
> Shows when the active repo has more recent infrastructure files that
|
|
53
|
+
> should possibly be copied to the canonical templates.
|
|
54
|
+
|
|
55
|
+
## Purpose
|
|
56
|
+
|
|
57
|
+
Professional Python repositories commonly share infrastructure such as:
|
|
58
|
+
|
|
59
|
+
- editor and Git configuration
|
|
60
|
+
- ignore and line-ending rules
|
|
61
|
+
- Markdown, YAML, and link checking
|
|
62
|
+
- formatting, linting, type checking, and testing
|
|
63
|
+
- documentation tooling
|
|
64
|
+
- continuous integration
|
|
65
|
+
- package and release validation
|
|
66
|
+
|
|
67
|
+
`pup-down` makes it easy to identify infrastructure improvements made
|
|
68
|
+
during recent work that should possibly be copied back to the canonical
|
|
69
|
+
templates.
|
|
70
|
+
|
|
71
|
+
## Benefits
|
|
72
|
+
|
|
73
|
+
`pup-down` is **report-only**.
|
|
74
|
+
Each repository fetches the current baseline and compares it with its
|
|
75
|
+
own infrastructure.
|
|
76
|
+
Nothing reaches in from a central place, so:
|
|
77
|
+
|
|
78
|
+
- **Repo owner is in control.** Run it when you choose.
|
|
79
|
+
No files are updated. A list of changes to possibly copy to the
|
|
80
|
+
canonical template files is provided.
|
|
81
|
+
|
|
82
|
+
Templates are fetched by **immutable commit SHA**,
|
|
83
|
+
so an update always reflects the latest push to the template repository
|
|
84
|
+
and every run is pinned to an exact template commit.
|
|
85
|
+
|
|
86
|
+
Repo type is inferred from the presence of key files
|
|
87
|
+
so no extensive configuration is needed.
|
|
88
|
+
For example:
|
|
89
|
+
|
|
90
|
+
- ALL REPOS
|
|
91
|
+
- `pyproject.toml` indicates ALL PY REPOS
|
|
92
|
+
- `pyproject.toml` + `src` indicates ALL PY SRC REPOS
|
|
93
|
+
|
|
94
|
+
## Template Source
|
|
95
|
+
|
|
96
|
+
- [templates](https://github.com/pup-pack/templates)
|
|
97
|
+
|
|
98
|
+
## Compare a Repo with Templates
|
|
99
|
+
|
|
100
|
+
```shell
|
|
101
|
+
# compare with canonical templates
|
|
102
|
+
uvx pup-down
|
|
103
|
+
|
|
104
|
+
# compare using the latest published pup-down version
|
|
105
|
+
uvx pup-down@latest
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## Developer Command Reference
|
|
109
|
+
|
|
110
|
+
<details>
|
|
111
|
+
<summary>Show command reference</summary>
|
|
112
|
+
|
|
113
|
+
### In a machine terminal
|
|
114
|
+
|
|
115
|
+
Open a machine terminal where you want the project:
|
|
116
|
+
|
|
117
|
+
```shell
|
|
118
|
+
git clone https://github.com/pup-pack/pup-down
|
|
119
|
+
|
|
120
|
+
cd pup-down
|
|
121
|
+
code .
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### In a VS Code terminal
|
|
125
|
+
|
|
126
|
+
```shell
|
|
127
|
+
uv self update
|
|
128
|
+
uv python pin 3.15
|
|
129
|
+
uv python install
|
|
130
|
+
uv lock --upgrade
|
|
131
|
+
uv sync
|
|
132
|
+
|
|
133
|
+
uv run pre-commit install
|
|
134
|
+
uv run pre-commit autoupdate
|
|
135
|
+
|
|
136
|
+
git add -A
|
|
137
|
+
uv run pre-commit run --all-files
|
|
138
|
+
# repeat if changes were made
|
|
139
|
+
uv run pre-commit run --all-files
|
|
140
|
+
|
|
141
|
+
# run locally to test
|
|
142
|
+
uv run pup-down
|
|
143
|
+
|
|
144
|
+
# types, tests, docs
|
|
145
|
+
uv run ty check
|
|
146
|
+
uv run python -m pytest
|
|
147
|
+
uv run python -m zensical build
|
|
148
|
+
|
|
149
|
+
# save progress
|
|
150
|
+
git add -A
|
|
151
|
+
git commit -m "update"
|
|
152
|
+
git push -u origin main
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
</details>
|
|
156
|
+
|
|
157
|
+
## Documentation
|
|
158
|
+
|
|
159
|
+
- [Documentation](https://pup-pack.github.io/pup-down/)
|
|
160
|
+
|
|
161
|
+
## Annotations
|
|
162
|
+
|
|
163
|
+
[.annotations/annotations.md](https://github.com/pup-pack/pup-down/blob/main/.annotations/annotations.md)
|
|
164
|
+
|
|
165
|
+
## Citation
|
|
166
|
+
|
|
167
|
+
[CITATION.cff](https://github.com/pup-pack/pup-down/blob/main/CITATION.cff)
|
|
168
|
+
|
|
169
|
+
## License
|
|
170
|
+
|
|
171
|
+
[MIT](https://github.com/pup-pack/pup-down/blob/main/LICENSE)
|
pup_down-0.1.0/README.md
ADDED
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
# pup-down: Professional Python Project Updater (Move Updates Down to Templates)
|
|
2
|
+
|
|
3
|
+
[](https://pypi.org/project/pup-down/)
|
|
4
|
+
[](https://pup-pack.github.io/pup-down/)
|
|
5
|
+
[](https://github.com/pup-pack/pup-down)
|
|
6
|
+
[](https://github.com/pup-pack/pup-down/blob/main/pyproject.toml)
|
|
7
|
+
[](https://docs.astral.sh/uv/)
|
|
8
|
+
[](https://docs.astral.sh/ty/)
|
|
9
|
+
[](https://zensical.org/)
|
|
10
|
+
[](https://github.com/pup-pack/pup-down/blob/main/LICENSE)
|
|
11
|
+
|
|
12
|
+
[](https://github.com/pup-pack/pup-down/actions/workflows/ci-python-zensical.yml)
|
|
13
|
+
[](https://github.com/pup-pack/pup-down/actions/workflows/deploy-zensical.yml)
|
|
14
|
+
[](https://github.com/pup-pack/pup-down/actions/workflows/pre-release.yml)
|
|
15
|
+
[](https://github.com/pup-pack/pup-down/actions/workflows/release-pypi.yml)
|
|
16
|
+
[](https://github.com/pup-pack/pup-down/actions/workflows/links.yml)
|
|
17
|
+
[](https://github.com/pup-pack/pup-down/security)
|
|
18
|
+
|
|
19
|
+
<img
|
|
20
|
+
src="https://raw.githubusercontent.com/pup-pack/pup-down/main/docs/images/pup.png"
|
|
21
|
+
alt="pup logo"
|
|
22
|
+
width="110">
|
|
23
|
+
|
|
24
|
+
> Opinionated professional Python project template comparison tool.
|
|
25
|
+
> Shows when the active repo has more recent infrastructure files that
|
|
26
|
+
> should possibly be copied to the canonical templates.
|
|
27
|
+
|
|
28
|
+
## Purpose
|
|
29
|
+
|
|
30
|
+
Professional Python repositories commonly share infrastructure such as:
|
|
31
|
+
|
|
32
|
+
- editor and Git configuration
|
|
33
|
+
- ignore and line-ending rules
|
|
34
|
+
- Markdown, YAML, and link checking
|
|
35
|
+
- formatting, linting, type checking, and testing
|
|
36
|
+
- documentation tooling
|
|
37
|
+
- continuous integration
|
|
38
|
+
- package and release validation
|
|
39
|
+
|
|
40
|
+
`pup-down` makes it easy to identify infrastructure improvements made
|
|
41
|
+
during recent work that should possibly be copied back to the canonical
|
|
42
|
+
templates.
|
|
43
|
+
|
|
44
|
+
## Benefits
|
|
45
|
+
|
|
46
|
+
`pup-down` is **report-only**.
|
|
47
|
+
Each repository fetches the current baseline and compares it with its
|
|
48
|
+
own infrastructure.
|
|
49
|
+
Nothing reaches in from a central place, so:
|
|
50
|
+
|
|
51
|
+
- **Repo owner is in control.** Run it when you choose.
|
|
52
|
+
No files are updated. A list of changes to possibly copy to the
|
|
53
|
+
canonical template files is provided.
|
|
54
|
+
|
|
55
|
+
Templates are fetched by **immutable commit SHA**,
|
|
56
|
+
so an update always reflects the latest push to the template repository
|
|
57
|
+
and every run is pinned to an exact template commit.
|
|
58
|
+
|
|
59
|
+
Repo type is inferred from the presence of key files
|
|
60
|
+
so no extensive configuration is needed.
|
|
61
|
+
For example:
|
|
62
|
+
|
|
63
|
+
- ALL REPOS
|
|
64
|
+
- `pyproject.toml` indicates ALL PY REPOS
|
|
65
|
+
- `pyproject.toml` + `src` indicates ALL PY SRC REPOS
|
|
66
|
+
|
|
67
|
+
## Template Source
|
|
68
|
+
|
|
69
|
+
- [templates](https://github.com/pup-pack/templates)
|
|
70
|
+
|
|
71
|
+
## Compare a Repo with Templates
|
|
72
|
+
|
|
73
|
+
```shell
|
|
74
|
+
# compare with canonical templates
|
|
75
|
+
uvx pup-down
|
|
76
|
+
|
|
77
|
+
# compare using the latest published pup-down version
|
|
78
|
+
uvx pup-down@latest
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Developer Command Reference
|
|
82
|
+
|
|
83
|
+
<details>
|
|
84
|
+
<summary>Show command reference</summary>
|
|
85
|
+
|
|
86
|
+
### In a machine terminal
|
|
87
|
+
|
|
88
|
+
Open a machine terminal where you want the project:
|
|
89
|
+
|
|
90
|
+
```shell
|
|
91
|
+
git clone https://github.com/pup-pack/pup-down
|
|
92
|
+
|
|
93
|
+
cd pup-down
|
|
94
|
+
code .
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### In a VS Code terminal
|
|
98
|
+
|
|
99
|
+
```shell
|
|
100
|
+
uv self update
|
|
101
|
+
uv python pin 3.15
|
|
102
|
+
uv python install
|
|
103
|
+
uv lock --upgrade
|
|
104
|
+
uv sync
|
|
105
|
+
|
|
106
|
+
uv run pre-commit install
|
|
107
|
+
uv run pre-commit autoupdate
|
|
108
|
+
|
|
109
|
+
git add -A
|
|
110
|
+
uv run pre-commit run --all-files
|
|
111
|
+
# repeat if changes were made
|
|
112
|
+
uv run pre-commit run --all-files
|
|
113
|
+
|
|
114
|
+
# run locally to test
|
|
115
|
+
uv run pup-down
|
|
116
|
+
|
|
117
|
+
# types, tests, docs
|
|
118
|
+
uv run ty check
|
|
119
|
+
uv run python -m pytest
|
|
120
|
+
uv run python -m zensical build
|
|
121
|
+
|
|
122
|
+
# save progress
|
|
123
|
+
git add -A
|
|
124
|
+
git commit -m "update"
|
|
125
|
+
git push -u origin main
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
</details>
|
|
129
|
+
|
|
130
|
+
## Documentation
|
|
131
|
+
|
|
132
|
+
- [Documentation](https://pup-pack.github.io/pup-down/)
|
|
133
|
+
|
|
134
|
+
## Annotations
|
|
135
|
+
|
|
136
|
+
[.annotations/annotations.md](https://github.com/pup-pack/pup-down/blob/main/.annotations/annotations.md)
|
|
137
|
+
|
|
138
|
+
## Citation
|
|
139
|
+
|
|
140
|
+
[CITATION.cff](https://github.com/pup-pack/pup-down/blob/main/CITATION.cff)
|
|
141
|
+
|
|
142
|
+
## License
|
|
143
|
+
|
|
144
|
+
[MIT](https://github.com/pup-pack/pup-down/blob/main/LICENSE)
|