quick-status 0.6.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.
- quick_status-0.6.0/.github/PULL_REQUEST_TEMPLATE.md +33 -0
- quick_status-0.6.0/.github/workflows/ci.yml +141 -0
- quick_status-0.6.0/.github/workflows/release.yml +36 -0
- quick_status-0.6.0/.gitignore +27 -0
- quick_status-0.6.0/.pre-commit-config.yaml +39 -0
- quick_status-0.6.0/.python-version +1 -0
- quick_status-0.6.0/AGENTS.md +22 -0
- quick_status-0.6.0/PKG-INFO +296 -0
- quick_status-0.6.0/README.md +269 -0
- quick_status-0.6.0/docs/api.md +223 -0
- quick_status-0.6.0/docs/repo_overview.md +88 -0
- quick_status-0.6.0/pyproject.toml +148 -0
- quick_status-0.6.0/src/quick_status/__init__.py +7 -0
- quick_status-0.6.0/src/quick_status/ci_models.py +181 -0
- quick_status-0.6.0/src/quick_status/ci_render.py +197 -0
- quick_status-0.6.0/src/quick_status/ci_snapshot.py +955 -0
- quick_status-0.6.0/src/quick_status/cli.py +459 -0
- quick_status-0.6.0/src/quick_status/commands.py +91 -0
- quick_status-0.6.0/src/quick_status/env_render.py +535 -0
- quick_status-0.6.0/src/quick_status/env_snapshot.py +383 -0
- quick_status-0.6.0/src/quick_status/formatting.py +270 -0
- quick_status-0.6.0/src/quick_status/git_snapshot.py +514 -0
- quick_status-0.6.0/src/quick_status/github.py +423 -0
- quick_status-0.6.0/src/quick_status/models.py +311 -0
- quick_status-0.6.0/src/quick_status/py.typed +0 -0
- quick_status-0.6.0/src/quick_status/repo_render.py +580 -0
- quick_status-0.6.0/tests/test_ci_snapshot.py +615 -0
- quick_status-0.6.0/tests/test_cli.py +552 -0
- quick_status-0.6.0/tests/test_env_snapshot.py +142 -0
- quick_status-0.6.0/tests/test_git_snapshot.py +354 -0
- quick_status-0.6.0/tests/test_github.py +322 -0
- quick_status-0.6.0/tests/test_performance.py +67 -0
- quick_status-0.6.0/uv.lock +443 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
One sentence explaining what this PR does.
|
|
2
|
+
|
|
3
|
+
Follow this format by default, but you can deviate if that makes the PR
|
|
4
|
+
clearer, for example for an unusually large PR.
|
|
5
|
+
|
|
6
|
+
## Related:
|
|
7
|
+
Optional. Use only if truly needed. Link related issues, docs, PRs, or
|
|
8
|
+
discussion.
|
|
9
|
+
- ...
|
|
10
|
+
|
|
11
|
+
## Changes:
|
|
12
|
+
What changed in the final state of the PR. Describe the current behavior the
|
|
13
|
+
reader needs to know. Do not narrate the whole implementation history of the PR.
|
|
14
|
+
Be concise.
|
|
15
|
+
- ...
|
|
16
|
+
- ...
|
|
17
|
+
|
|
18
|
+
## Why:
|
|
19
|
+
What problem this solves and why the changes were needed.
|
|
20
|
+
Be concise.
|
|
21
|
+
- ...
|
|
22
|
+
- ...
|
|
23
|
+
|
|
24
|
+
## Details:
|
|
25
|
+
Optional. Use only if truly needed. Use this for important details or gotchas
|
|
26
|
+
that would clutter the changes section.
|
|
27
|
+
- ...
|
|
28
|
+
|
|
29
|
+
## How To Try It:
|
|
30
|
+
Optional. Use only if truly needed. Use this when a reviewer would benefit
|
|
31
|
+
from commands, paths, task ids, or links to inspect the change directly. Do
|
|
32
|
+
not repeat generic CI or test output.
|
|
33
|
+
- ...
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
name: Checks
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
push:
|
|
6
|
+
branches: [main]
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
|
|
9
|
+
concurrency:
|
|
10
|
+
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
|
|
11
|
+
cancel-in-progress: true
|
|
12
|
+
|
|
13
|
+
permissions:
|
|
14
|
+
contents: read
|
|
15
|
+
|
|
16
|
+
jobs:
|
|
17
|
+
ruff:
|
|
18
|
+
name: Ruff
|
|
19
|
+
runs-on: ubuntu-latest
|
|
20
|
+
timeout-minutes: 5
|
|
21
|
+
|
|
22
|
+
steps:
|
|
23
|
+
- name: Check out repository
|
|
24
|
+
uses: actions/checkout@v6
|
|
25
|
+
|
|
26
|
+
- name: Set up Python
|
|
27
|
+
uses: actions/setup-python@v6
|
|
28
|
+
with:
|
|
29
|
+
python-version: "3.11"
|
|
30
|
+
cache: pip
|
|
31
|
+
cache-dependency-path: pyproject.toml
|
|
32
|
+
|
|
33
|
+
- name: Install Ruff
|
|
34
|
+
run: python -m pip install ruff==0.15.9
|
|
35
|
+
|
|
36
|
+
- name: Ruff format
|
|
37
|
+
run: python -m ruff format --check --diff .
|
|
38
|
+
|
|
39
|
+
- name: Ruff lint
|
|
40
|
+
run: python -m ruff check --output-format=full .
|
|
41
|
+
|
|
42
|
+
python-checks:
|
|
43
|
+
name: Ruff + Mypy + Pytest
|
|
44
|
+
runs-on: ubuntu-latest
|
|
45
|
+
timeout-minutes: 10
|
|
46
|
+
strategy:
|
|
47
|
+
fail-fast: false
|
|
48
|
+
matrix:
|
|
49
|
+
python-version: ["3.11", "3.12", "3.13"]
|
|
50
|
+
|
|
51
|
+
steps:
|
|
52
|
+
- name: Check out repository
|
|
53
|
+
uses: actions/checkout@v6
|
|
54
|
+
|
|
55
|
+
- name: Set up Python
|
|
56
|
+
uses: actions/setup-python@v6
|
|
57
|
+
with:
|
|
58
|
+
python-version: ${{ matrix.python-version }}
|
|
59
|
+
cache: pip
|
|
60
|
+
cache-dependency-path: pyproject.toml
|
|
61
|
+
|
|
62
|
+
- name: Install Python dependencies
|
|
63
|
+
run: |
|
|
64
|
+
python -m pip install --upgrade pip
|
|
65
|
+
python -m pip install -e ".[dev]"
|
|
66
|
+
|
|
67
|
+
- name: Ruff format
|
|
68
|
+
run: python -m ruff format --check --diff .
|
|
69
|
+
|
|
70
|
+
- name: Ruff lint
|
|
71
|
+
run: python -m ruff check --output-format=full .
|
|
72
|
+
|
|
73
|
+
- name: Mypy static type checks
|
|
74
|
+
run: python -m mypy
|
|
75
|
+
|
|
76
|
+
- name: Pytest tests
|
|
77
|
+
run: python -m pytest
|
|
78
|
+
|
|
79
|
+
package-pip:
|
|
80
|
+
name: Package Build (pip)
|
|
81
|
+
runs-on: ubuntu-latest
|
|
82
|
+
timeout-minutes: 10
|
|
83
|
+
|
|
84
|
+
steps:
|
|
85
|
+
- name: Check out repository
|
|
86
|
+
uses: actions/checkout@v6
|
|
87
|
+
|
|
88
|
+
- name: Set up Python
|
|
89
|
+
uses: actions/setup-python@v6
|
|
90
|
+
with:
|
|
91
|
+
python-version: "3.11"
|
|
92
|
+
cache: pip
|
|
93
|
+
cache-dependency-path: pyproject.toml
|
|
94
|
+
|
|
95
|
+
- name: Install Python dependencies
|
|
96
|
+
run: |
|
|
97
|
+
python -m pip install --upgrade pip
|
|
98
|
+
python -m pip install -e ".[dev]"
|
|
99
|
+
|
|
100
|
+
- name: Build package
|
|
101
|
+
run: python -m build
|
|
102
|
+
|
|
103
|
+
- name: Install built wheel
|
|
104
|
+
run: python -m pip install --force-reinstall dist/*.whl
|
|
105
|
+
|
|
106
|
+
- name: Smoke test installed package
|
|
107
|
+
run: |
|
|
108
|
+
python -c "import quick_status; print(quick_status.__version__)"
|
|
109
|
+
quick-status --version
|
|
110
|
+
|
|
111
|
+
package-uv:
|
|
112
|
+
name: Package Build (uv)
|
|
113
|
+
runs-on: ubuntu-latest
|
|
114
|
+
timeout-minutes: 10
|
|
115
|
+
|
|
116
|
+
steps:
|
|
117
|
+
- name: Check out repository
|
|
118
|
+
uses: actions/checkout@v6
|
|
119
|
+
|
|
120
|
+
- name: Set up uv
|
|
121
|
+
uses: astral-sh/setup-uv@v6
|
|
122
|
+
with:
|
|
123
|
+
enable-cache: true
|
|
124
|
+
cache-dependency-glob: uv.lock
|
|
125
|
+
|
|
126
|
+
- name: Set up Python
|
|
127
|
+
run: uv python install 3.11
|
|
128
|
+
|
|
129
|
+
- name: Install Python dependencies
|
|
130
|
+
run: uv sync --extra dev --locked
|
|
131
|
+
|
|
132
|
+
- name: Build package
|
|
133
|
+
run: uv build
|
|
134
|
+
|
|
135
|
+
- name: Install built wheel
|
|
136
|
+
run: uv pip install --force-reinstall dist/*.whl
|
|
137
|
+
|
|
138
|
+
- name: Smoke test installed package
|
|
139
|
+
run: |
|
|
140
|
+
uv run --no-sync python -c "import quick_status; print(quick_status.__version__)"
|
|
141
|
+
uv run --no-sync quick-status --version
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
release:
|
|
5
|
+
types: [published]
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
publish:
|
|
13
|
+
name: Publish to PyPI
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
environment: pypi
|
|
16
|
+
permissions:
|
|
17
|
+
contents: read
|
|
18
|
+
id-token: write
|
|
19
|
+
|
|
20
|
+
steps:
|
|
21
|
+
- name: Check out repository
|
|
22
|
+
uses: actions/checkout@v6
|
|
23
|
+
|
|
24
|
+
- name: Set up Python
|
|
25
|
+
uses: actions/setup-python@v6
|
|
26
|
+
with:
|
|
27
|
+
python-version: "3.11"
|
|
28
|
+
|
|
29
|
+
- name: Build package
|
|
30
|
+
run: |
|
|
31
|
+
python -m pip install --upgrade pip
|
|
32
|
+
python -m pip install build
|
|
33
|
+
python -m build
|
|
34
|
+
|
|
35
|
+
- name: Publish package distributions to PyPI
|
|
36
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
__pycache__/
|
|
2
|
+
*.py[cod]
|
|
3
|
+
*$py.class
|
|
4
|
+
|
|
5
|
+
.Python
|
|
6
|
+
.venv/
|
|
7
|
+
venv/
|
|
8
|
+
env/
|
|
9
|
+
ENV/
|
|
10
|
+
|
|
11
|
+
build/
|
|
12
|
+
dist/
|
|
13
|
+
*.egg-info/
|
|
14
|
+
.eggs/
|
|
15
|
+
|
|
16
|
+
.pytest_cache/
|
|
17
|
+
.mypy_cache/
|
|
18
|
+
.ruff_cache/
|
|
19
|
+
.coverage
|
|
20
|
+
htmlcov/
|
|
21
|
+
|
|
22
|
+
.env
|
|
23
|
+
.env.*
|
|
24
|
+
|
|
25
|
+
.DS_Store
|
|
26
|
+
.idea/
|
|
27
|
+
.vscode/
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
repos:
|
|
2
|
+
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
3
|
+
rev: v0.15.9
|
|
4
|
+
hooks:
|
|
5
|
+
- id: ruff
|
|
6
|
+
- id: ruff-format
|
|
7
|
+
args: ["--check"]
|
|
8
|
+
|
|
9
|
+
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
10
|
+
rev: v6.0.0
|
|
11
|
+
hooks:
|
|
12
|
+
- id: trailing-whitespace
|
|
13
|
+
- id: check-symlinks
|
|
14
|
+
- id: destroyed-symlinks
|
|
15
|
+
- id: end-of-file-fixer
|
|
16
|
+
- id: check-yaml
|
|
17
|
+
- id: check-toml
|
|
18
|
+
- id: check-merge-conflict
|
|
19
|
+
- id: check-case-conflict
|
|
20
|
+
- id: check-executables-have-shebangs
|
|
21
|
+
- id: check-added-large-files
|
|
22
|
+
args: ["--maxkb=2000"]
|
|
23
|
+
- id: check-shebang-scripts-are-executable
|
|
24
|
+
- id: detect-private-key
|
|
25
|
+
- id: debug-statements
|
|
26
|
+
|
|
27
|
+
- repo: https://github.com/codespell-project/codespell
|
|
28
|
+
rev: v2.4.1
|
|
29
|
+
hooks:
|
|
30
|
+
- id: codespell
|
|
31
|
+
additional_dependencies:
|
|
32
|
+
- tomli
|
|
33
|
+
|
|
34
|
+
- repo: https://github.com/pre-commit/pygrep-hooks
|
|
35
|
+
rev: v1.10.0
|
|
36
|
+
hooks:
|
|
37
|
+
- id: rst-backticks
|
|
38
|
+
- id: rst-directive-colons
|
|
39
|
+
- id: rst-inline-touching-normal
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.11
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# AGENTS.md
|
|
2
|
+
|
|
3
|
+
Repo-specific instructions for agents working with the `quick-status` package.
|
|
4
|
+
|
|
5
|
+
## Package Conventions
|
|
6
|
+
|
|
7
|
+
- Keep importable package code under `src/quick_status/`.
|
|
8
|
+
- Put CLI entrypoint behavior in `src/quick_status/cli.py`.
|
|
9
|
+
|
|
10
|
+
## Validation
|
|
11
|
+
|
|
12
|
+
- Run checks relevant to the files changed.
|
|
13
|
+
- For README/docs-only changes, run formatting and pre-commit hygiene.
|
|
14
|
+
- For Python or packaging changes, also run Ruff, mypy, pytest, and build
|
|
15
|
+
checks.
|
|
16
|
+
|
|
17
|
+
## Pull Requests
|
|
18
|
+
|
|
19
|
+
- Use `.github/PULL_REQUEST_TEMPLATE.md` for PR descriptions.
|
|
20
|
+
- Do not commit secrets, credentials, local runtime config, or scratch notes.
|
|
21
|
+
- Keep `AGENTS.md` updated when recurring agent instructions become
|
|
22
|
+
repo-specific.
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: quick-status
|
|
3
|
+
Version: 0.6.0
|
|
4
|
+
Summary: Quick local status snapshots for developer workspaces.
|
|
5
|
+
Project-URL: Homepage, https://github.com/alik-git/quick-status
|
|
6
|
+
Project-URL: Repository, https://github.com/alik-git/quick-status
|
|
7
|
+
Project-URL: Issues, https://github.com/alik-git/quick-status/issues
|
|
8
|
+
Author-email: Ali K <alikgithb@gmail.com>
|
|
9
|
+
Maintainer-email: Ali K <alikgithb@gmail.com>
|
|
10
|
+
Keywords: cli,developer-tools,git,status
|
|
11
|
+
Classifier: Development Status :: 3 - Alpha
|
|
12
|
+
Classifier: Environment :: Console
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
18
|
+
Classifier: Typing :: Typed
|
|
19
|
+
Requires-Python: >=3.11
|
|
20
|
+
Provides-Extra: dev
|
|
21
|
+
Requires-Dist: build>=1.2; extra == 'dev'
|
|
22
|
+
Requires-Dist: mypy>=1.15; extra == 'dev'
|
|
23
|
+
Requires-Dist: pre-commit>=4.0; extra == 'dev'
|
|
24
|
+
Requires-Dist: pytest>=8.0; extra == 'dev'
|
|
25
|
+
Requires-Dist: ruff>=0.11; extra == 'dev'
|
|
26
|
+
Description-Content-Type: text/markdown
|
|
27
|
+
|
|
28
|
+
# quick-status
|
|
29
|
+
|
|
30
|
+
Quick local status snapshots for developer workspaces.
|
|
31
|
+
|
|
32
|
+
## Installation
|
|
33
|
+
|
|
34
|
+
Recommended with `uv`:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
uv sync --extra dev
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Standard Python fallback:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
python -m pip install -e ".[dev]"
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Usage
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
quick-status
|
|
50
|
+
quick-status repo
|
|
51
|
+
quick-status repo --json
|
|
52
|
+
quick-status repo --github
|
|
53
|
+
quick-status repo --cwd /path/to/repo
|
|
54
|
+
quick-status repo --verbose
|
|
55
|
+
quick-status repo --plain
|
|
56
|
+
quick-status repo --non-compact
|
|
57
|
+
quick-status repo --worktrees
|
|
58
|
+
quick-status repo --stashes --stash-limit 5
|
|
59
|
+
quick-status repo --color=always
|
|
60
|
+
quick-status env
|
|
61
|
+
quick-status env --cwd /path/to/project
|
|
62
|
+
quick-status env --json
|
|
63
|
+
quick-status ci
|
|
64
|
+
quick-status ci --json
|
|
65
|
+
quick-status ci --cwd /path/to/repo
|
|
66
|
+
quick-status ci --log-tail 40
|
|
67
|
+
quick-status --version
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
`quick-status` is an alias for `quick-status repo`. By default it performs a fast local
|
|
71
|
+
Git snapshot only. It does not fetch, push, pull, run tests, run builds, or call
|
|
72
|
+
network services.
|
|
73
|
+
|
|
74
|
+
Example human output:
|
|
75
|
+
|
|
76
|
+
```text
|
|
77
|
+
REPO quick-status /home/ali/Projects/quick-status
|
|
78
|
+
BRANCH main 6acc81f origin/main synced ahead=0 behind=0
|
|
79
|
+
STATE clean staged=0 unstaged=0 untracked=0 conflicts=0 stash=0
|
|
80
|
+
REMOTE origin git@github.com:alik-git/quick-status.git
|
|
81
|
+
SUBMODULES none
|
|
82
|
+
PR not-requested
|
|
83
|
+
CI not-requested
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Repo output is compact by default. Use `--non-compact` when you want the
|
|
87
|
+
sectioned human summary.
|
|
88
|
+
|
|
89
|
+
Use `--worktrees` when you want the linked worktree map for the current repo
|
|
90
|
+
family:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
quick-status repo --worktrees
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Use `--stashes` when you need bounded stash details in addition to the normal
|
|
97
|
+
stash count:
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
quick-status repo --stashes
|
|
101
|
+
quick-status repo --stashes --stash-limit 10
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
These are read-only inventory flags. They do not create, prune, apply, drop, or
|
|
105
|
+
repair anything.
|
|
106
|
+
|
|
107
|
+
Use `--json` when another tool or agent should consume the snapshot:
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
quick-status repo --json
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Use `--github` only when you want read-only GitHub context through the `gh` CLI:
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
quick-status repo --github
|
|
117
|
+
quick-status repo --json --github
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
GitHub mode reports PR, CI/check, and package-release facts when available. If
|
|
121
|
+
`gh` is missing, unauthenticated, offline, or rate-limited, the local snapshot
|
|
122
|
+
still succeeds and the GitHub section is marked unavailable.
|
|
123
|
+
|
|
124
|
+
For human output, `--github` prints and flushes the local Git facts before
|
|
125
|
+
running GitHub checks, then appends PR, CI, and release facts when they are
|
|
126
|
+
ready. JSON output remains a single complete object printed at the end.
|
|
127
|
+
|
|
128
|
+
`quick-status` reports facts and neutral summaries only. It intentionally does not
|
|
129
|
+
decide whether a repo is ready to commit, push, merge, or release.
|
|
130
|
+
|
|
131
|
+
## CI Snapshots
|
|
132
|
+
|
|
133
|
+
Use `quick-status ci` when you need the deeper GitHub CI facts behind a branch or
|
|
134
|
+
PR:
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
quick-status ci
|
|
138
|
+
quick-status ci --cwd ~/Projects/worksets/devpy_work/devpy-runner
|
|
139
|
+
quick-status ci --json
|
|
140
|
+
quick-status ci --verbose
|
|
141
|
+
quick-status ci --log-tail 40
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
`quick-status ci` is read-only. It does not fetch, push, rerun workflows, cancel
|
|
145
|
+
runs, or open a browser. It reports local `HEAD`, worktree cleanliness, the
|
|
146
|
+
current PR when one exists, expected SHA, current/stale/absent CI evidence,
|
|
147
|
+
check buckets, workflow run URLs, and failed job URLs.
|
|
148
|
+
|
|
149
|
+
Example no-PR output:
|
|
150
|
+
|
|
151
|
+
```text
|
|
152
|
+
CI quick-status alik-git/quick-status
|
|
153
|
+
BRANCH main local=4955870 upstream=origin/main synced
|
|
154
|
+
STATE clean staged=0 unstaged=0 untracked=0 conflicts=0
|
|
155
|
+
PR none
|
|
156
|
+
CURRENT current expected=4955870 checked=4955870 source=run-list-commit reason=run-exists-for-expected-sha
|
|
157
|
+
RUNS success total=1 pass=1 fail=0 pending=0 running=0 skipped=0 cancel=0 unknown=0 applies_to_head=yes
|
|
158
|
+
RUN Checks success id=26352434014 sha=4955870 currentness=current url=https://github.com/alik-git/quick-status/actions/runs/26352434014
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
`--log-tail N` is intentionally simple and opt-in. For failed current GitHub
|
|
162
|
+
Actions runs, it prints the last `N` non-empty lines from `gh run view
|
|
163
|
+
--log-failed`. If log fetching is unavailable, the snapshot still succeeds and
|
|
164
|
+
prints `LOG unavailable`.
|
|
165
|
+
|
|
166
|
+
Human output uses color automatically when stdout is an interactive terminal.
|
|
167
|
+
Machine-readable JSON is never colorized. To control ANSI color explicitly:
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
quick-status repo --plain # no ANSI color
|
|
171
|
+
quick-status repo --color=never # no ANSI color
|
|
172
|
+
quick-status repo --color=always # force ANSI color
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
`--plain` overrides `--color`. Automatic color also honors the standard
|
|
176
|
+
`NO_COLOR` environment variable and disables color when `TERM=dumb`.
|
|
177
|
+
|
|
178
|
+
## Environment Snapshots
|
|
179
|
+
|
|
180
|
+
Use `quick-status env` to inspect Python, conda, venv, devpy, uv, and py_runner facts
|
|
181
|
+
without activating or modifying anything:
|
|
182
|
+
|
|
183
|
+
```bash
|
|
184
|
+
quick-status env
|
|
185
|
+
quick-status env --cwd ~/Projects/motion_data_processing_worktree1
|
|
186
|
+
quick-status env --show-all
|
|
187
|
+
quick-status env --show-tools --show-hints
|
|
188
|
+
quick-status env --abs-paths
|
|
189
|
+
quick-status env --compact
|
|
190
|
+
quick-status env --json
|
|
191
|
+
quick-status env --verbose
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
Example for a normal Python project:
|
|
195
|
+
|
|
196
|
+
```text
|
|
197
|
+
SHELL
|
|
198
|
+
cwd ~/Projects/quick-status
|
|
199
|
+
kind=neutral conda=none venv=none
|
|
200
|
+
PYTHON
|
|
201
|
+
runtime ~/.local/share/uv/tools/quick-status/bin/python3
|
|
202
|
+
python missing
|
|
203
|
+
python3 /usr/bin/python3
|
|
204
|
+
version=3.14.4 venv_like=yes
|
|
205
|
+
PROJECT
|
|
206
|
+
root ~/Projects/quick-status
|
|
207
|
+
pyproject=ok uv.lock=yes devpy=no .venv=yes
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
Example for a `devpy`-backed worktree:
|
|
211
|
+
|
|
212
|
+
```text
|
|
213
|
+
PROJECT
|
|
214
|
+
root ~/Projects/motion_data_processing_worktree1
|
|
215
|
+
name=motion-data-processing pyproject=ok uv.lock=yes devpy=yes .venv=yes
|
|
216
|
+
DEVPY
|
|
217
|
+
venv ~/Projects/motion_data_processing_worktree1/.venv
|
|
218
|
+
base=mdp_shared status=ok venv_python=yes editables=3
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
Use `--show-all`, `--show-tools`, `--show-hints`, or `--show-home` when you need
|
|
222
|
+
those extra sections:
|
|
223
|
+
|
|
224
|
+
```text
|
|
225
|
+
TOOLS
|
|
226
|
+
uv ~/.local/bin/uv
|
|
227
|
+
conda ~/miniconda3/condabin/conda
|
|
228
|
+
devpy ~/.local/bin/devpy
|
|
229
|
+
py_runner ~/.agent_files/py_runner/run
|
|
230
|
+
HINTS devpy_python=devpy python
|
|
231
|
+
py_runner_overlay:
|
|
232
|
+
~/.agent_files/py_runner/run \
|
|
233
|
+
--env mdp_shared \
|
|
234
|
+
--python .venv/bin/python
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
`quick-status env` treats tools like `python`, `python3`, `pip`, `conda`, `devpy`,
|
|
238
|
+
`uv`, and `py_runner` as optional facts. Missing tools are reported as missing
|
|
239
|
+
instead of crashing the command. Human output compacts home-relative paths with
|
|
240
|
+
`~`; pass `--abs-paths` when exact absolute paths are more useful. Default env
|
|
241
|
+
collection is path-based and avoids slow `--version` subprocesses; use
|
|
242
|
+
`--verbose` when you want those command records and version probes. `quick-status
|
|
243
|
+
repo` still requires `git`, but reports a missing Git executable directly
|
|
244
|
+
instead of confusing it with a non-repository path.
|
|
245
|
+
|
|
246
|
+
## Development
|
|
247
|
+
|
|
248
|
+
Read these docs first when changing the package:
|
|
249
|
+
|
|
250
|
+
- [Repo Overview](docs/repo_overview.md): mental model, public surface, module
|
|
251
|
+
ownership, and design rules
|
|
252
|
+
- [API](docs/api.md): command surface, JSON schemas, exit codes, GitHub mode,
|
|
253
|
+
and env snapshot behavior
|
|
254
|
+
|
|
255
|
+
Run the standard checks before opening a PR:
|
|
256
|
+
|
|
257
|
+
```bash
|
|
258
|
+
uv run ruff format --check .
|
|
259
|
+
uv run ruff check .
|
|
260
|
+
uv run mypy
|
|
261
|
+
uv run pytest
|
|
262
|
+
uv build
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
If you are using standard Python tools instead of uv:
|
|
266
|
+
|
|
267
|
+
```bash
|
|
268
|
+
python -m ruff format --check .
|
|
269
|
+
python -m ruff check .
|
|
270
|
+
python -m mypy
|
|
271
|
+
python -m pytest
|
|
272
|
+
python -m build
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
## Publishing
|
|
276
|
+
|
|
277
|
+
This repo publishes to PyPI through GitHub Actions Trusted Publishing. The
|
|
278
|
+
release workflow is [`.github/workflows/release.yml`](.github/workflows/release.yml).
|
|
279
|
+
|
|
280
|
+
Use these values in PyPI's pending trusted publisher form:
|
|
281
|
+
|
|
282
|
+
```text
|
|
283
|
+
PyPI project name: quick-status
|
|
284
|
+
Owner: alik-git
|
|
285
|
+
Repository name: quick-status
|
|
286
|
+
Workflow name: release.yml
|
|
287
|
+
Environment name: pypi
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
The workflow filename is `release.yml`; the display name inside that file is
|
|
291
|
+
`Release`, but PyPI wants the filename. The `pypi` environment should also exist
|
|
292
|
+
under the GitHub repository's environment settings.
|
|
293
|
+
|
|
294
|
+
Publishing is release-driven: normal pushes and pull requests build and test the
|
|
295
|
+
package, but publishing happens when a GitHub Release is published or the release
|
|
296
|
+
workflow is manually dispatched.
|