github-agent-cli 1.2.2__tar.gz → 1.3.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.
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/.ghagent.json +2 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/.github/workflows/ci.yml +85 -0
- github_agent_cli-1.3.0/.github/workflows/codeql.yml +32 -0
- github_agent_cli-1.3.0/.github/workflows/docs.yml +65 -0
- github_agent_cli-1.3.0/.github/workflows/release-draft.yml +81 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/.gitignore +5 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/AGENTS.md +3 -1
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/AGENTS.ru.md +3 -1
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/CHANGELOG.md +67 -1
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/CHANGELOG.ru.md +25 -1
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/CITATION.cff +2 -2
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/CONTRIBUTING.md +1 -1
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/CONTRIBUTING.ru.md +1 -1
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/PKG-INFO +62 -17
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/README.de.md +51 -15
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/README.es.md +52 -16
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/README.hi.md +50 -15
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/README.md +61 -16
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/README.ru.md +57 -15
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/README.zh.md +46 -15
- github_agent_cli-1.3.0/assets/demo.gif +0 -0
- github_agent_cli-1.3.0/docs/FIELD-NOTES.md +150 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/docs/PACKAGING.md +68 -46
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/docs/RULES.md +67 -7
- github_agent_cli-1.3.0/docs/index.md +52 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/examples/ci-usage.md +5 -5
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/examples/docker.md +1 -1
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/examples/pre-commit-config.yaml +1 -1
- github_agent_cli-1.3.0/hooks/repo_links.py +41 -0
- github_agent_cli-1.3.0/mkdocs.yml +77 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/pyproject.toml +34 -3
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/tests/run_tests.py +183 -10
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/tools/ghagent.py +66 -31
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/tools/ghalib/assets.py +46 -16
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/tools/ghalib/audit.py +7 -2
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/tools/ghalib/changelog.py +53 -8
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/tools/ghalib/config.py +7 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/tools/ghalib/mdcheck.py +67 -12
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/tools/ghalib/meta.py +0 -1
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/tools/ghalib/report.py +1 -1
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/tools/ghalib/util.py +28 -3
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/tools/ghalib/wiki.py +38 -3
- github_agent_cli-1.3.0/tools/make_demo.py +145 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/wiki/04-Wiki-Workflow.md +3 -1
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/wiki/04-Wiki-Workflow.ru.md +3 -1
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/wiki/06-Traps.md +17 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/wiki/06-Traps.ru.md +16 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/.dockerignore +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/.editorconfig +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/.gitattributes +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/.github/CODEOWNERS +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/.github/ISSUE_TEMPLATE/feature-request.yml +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/.github/ISSUE_TEMPLATE/repository-audit.yml +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/.github/dependabot.yml +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/.github/release.yml +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/.github/workflows/publish.yml +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/.pre-commit-hooks.yaml +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/CODE_OF_CONDUCT.md +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/CODE_OF_CONDUCT.ru.md +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/Dockerfile +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/GOVERNANCE.md +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/GOVERNANCE.ru.md +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/LICENSE +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/SECURITY.md +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/SECURITY.ru.md +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/SUPPORT.md +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/SUPPORT.ru.md +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/action.yml +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/assets/social-preview.png +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/assets/social-preview.svg +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/docs/ARCHITECTURE.md +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/docs/IMPORT.md +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/docs/IMPORT.ru.md +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/docs/PROCEDURES.md +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/docs/PROCEDURES.ru.md +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/docs/WIKI.md +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/reference/agents-template.md +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/reference/agents-template.ru.md +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/reference/changelog-template.md +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/reference/changelog-template.ru.md +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/reference/checklists.md +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/reference/checklists.ru.md +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/reference/contributing-template.md +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/reference/contributing-template.ru.md +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/reference/issue-form-template.yml +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/reference/readme-template.md +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/reference/readme-template.ru.md +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/reference/style-guide.md +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/reference/style-guide.ru.md +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/reference/wiki-home-template.md +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/reference/wiki-home-template.ru.md +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/reference/wiki-manifest-template.json +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/scripts/build_and_check.ps1 +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/scripts/build_and_check.sh +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/skills/changelog-release/SKILL.md +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/skills/changelog-release/SKILL.ru.md +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/skills/contributing-and-community/SKILL.md +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/skills/contributing-and-community/SKILL.ru.md +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/skills/github-repo/SKILL.md +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/skills/github-repo/SKILL.ru.md +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/skills/github-wiki/SKILL.md +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/skills/github-wiki/SKILL.ru.md +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/skills/import-to-agents/SKILL.md +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/skills/import-to-agents/SKILL.ru.md +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/skills/repo-images/SKILL.md +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/skills/repo-images/SKILL.ru.md +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/tools/ghalib/__init__.py +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/tools/ghalib/install.py +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/wiki/01-Why.md +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/wiki/01-Why.ru.md +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/wiki/02-Install.md +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/wiki/02-Install.ru.md +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/wiki/03-Repository-Contract.md +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/wiki/03-Repository-Contract.ru.md +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/wiki/05-Release.md +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/wiki/05-Release.ru.md +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/wiki/07-Import.md +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/wiki/07-Import.ru.md +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/wiki/Home.md +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/wiki/Home.ru.md +0 -0
- {github_agent_cli-1.2.2 → github_agent_cli-1.3.0}/wiki/wiki.json +0 -0
|
@@ -10,6 +10,8 @@
|
|
|
10
10
|
"wiki_manifest": "wiki/wiki.json",
|
|
11
11
|
"ci_workflow": ".github/workflows/ci.yml",
|
|
12
12
|
"require_files": ["AGENTS.md", "LICENSE", "pyproject.toml", "tests/run_tests.py", "tools/ghagent.py"],
|
|
13
|
+
"exclude_dirs": ["site"],
|
|
14
|
+
"safe_email_domains": [],
|
|
13
15
|
"ignore_rules": [],
|
|
14
16
|
"topic_min": 8,
|
|
15
17
|
"topic_max": 20,
|
|
@@ -30,6 +30,25 @@ jobs:
|
|
|
30
30
|
- name: The CLI answers
|
|
31
31
|
run: python tools/ghagent.py --version
|
|
32
32
|
|
|
33
|
+
lint:
|
|
34
|
+
name: Static analysis (ruff, mypy)
|
|
35
|
+
runs-on: ubuntu-latest
|
|
36
|
+
steps:
|
|
37
|
+
- uses: actions/checkout@v7
|
|
38
|
+
|
|
39
|
+
- uses: actions/setup-python@v7
|
|
40
|
+
with:
|
|
41
|
+
python-version: '3.13'
|
|
42
|
+
|
|
43
|
+
- name: Install the analysers (development only)
|
|
44
|
+
run: python -m pip install --disable-pip-version-check ruff mypy
|
|
45
|
+
|
|
46
|
+
- name: ruff
|
|
47
|
+
run: python -m ruff check .
|
|
48
|
+
|
|
49
|
+
- name: mypy
|
|
50
|
+
run: python -m mypy
|
|
51
|
+
|
|
33
52
|
documents:
|
|
34
53
|
name: Documents and repository contracts
|
|
35
54
|
runs-on: ubuntu-latest
|
|
@@ -170,3 +189,69 @@ jobs:
|
|
|
170
189
|
|
|
171
190
|
- name: The image lints the documents
|
|
172
191
|
run: docker run --rm --volume "$PWD:/repo" ghagent:ci doc --root .
|
|
192
|
+
manifests:
|
|
193
|
+
name: Package-manager manifests
|
|
194
|
+
runs-on: ubuntu-latest
|
|
195
|
+
steps:
|
|
196
|
+
- uses: actions/checkout@v7
|
|
197
|
+
|
|
198
|
+
- uses: actions/setup-python@v7
|
|
199
|
+
with:
|
|
200
|
+
python-version: '3.13'
|
|
201
|
+
|
|
202
|
+
- name: Homebrew formula syntax
|
|
203
|
+
run: ruby -c packaging/homebrew/github-agent-cli.rb
|
|
204
|
+
|
|
205
|
+
- name: Homebrew formula downloads and verifies
|
|
206
|
+
run: |
|
|
207
|
+
set -euo pipefail
|
|
208
|
+
python - <<'PY'
|
|
209
|
+
import hashlib
|
|
210
|
+
import json
|
|
211
|
+
import pathlib
|
|
212
|
+
import re
|
|
213
|
+
import urllib.request
|
|
214
|
+
|
|
215
|
+
text = pathlib.Path("packaging/homebrew/github-agent-cli.rb").read_text(encoding="utf-8")
|
|
216
|
+
url = re.search(r'^\s*url "([^"]+)"', text, re.M).group(1)
|
|
217
|
+
expected = re.search(r'^\s*sha256 "([0-9a-f]{64})"', text, re.M).group(1)
|
|
218
|
+
with urllib.request.urlopen(url, timeout=60) as response:
|
|
219
|
+
data = response.read()
|
|
220
|
+
actual = hashlib.sha256(data).hexdigest()
|
|
221
|
+
print(f"downloaded {url} ({len(data)} bytes), sha256 {actual}")
|
|
222
|
+
if actual != expected:
|
|
223
|
+
raise SystemExit("formula sha256 does not match the downloaded sdist")
|
|
224
|
+
version = re.search(r"github_agent_cli-([0-9.]+)\.tar\.gz", url).group(1)
|
|
225
|
+
pypi = json.load(urllib.request.urlopen("https://pypi.org/pypi/github-agent-cli/json", timeout=60))
|
|
226
|
+
if pypi["info"]["version"] != version:
|
|
227
|
+
raise SystemExit(f"formula pins {version}, PyPI serves {pypi['info']['version']}")
|
|
228
|
+
print(f"formula pins the current PyPI version {version}")
|
|
229
|
+
PY
|
|
230
|
+
|
|
231
|
+
- name: Scoop manifest downloads and verifies
|
|
232
|
+
run: |
|
|
233
|
+
set -euo pipefail
|
|
234
|
+
python - <<'PY'
|
|
235
|
+
import hashlib
|
|
236
|
+
import io
|
|
237
|
+
import json
|
|
238
|
+
import pathlib
|
|
239
|
+
import urllib.request
|
|
240
|
+
import zipfile
|
|
241
|
+
|
|
242
|
+
manifest = json.loads(pathlib.Path("packaging/scoop/github-agent-cli.json").read_text(encoding="utf-8"))
|
|
243
|
+
with urllib.request.urlopen(manifest["url"], timeout=60) as response:
|
|
244
|
+
data = response.read()
|
|
245
|
+
actual = hashlib.sha256(data).hexdigest()
|
|
246
|
+
print(f"downloaded {manifest['url']} ({len(data)} bytes), sha256 {actual}")
|
|
247
|
+
if actual != manifest["hash"]:
|
|
248
|
+
raise SystemExit("scoop hash does not match the downloaded bundle")
|
|
249
|
+
with zipfile.ZipFile(io.BytesIO(data)) as archive:
|
|
250
|
+
names = archive.namelist()
|
|
251
|
+
required = f"{manifest['extract_dir']}/{manifest['bin']}"
|
|
252
|
+
if required not in names:
|
|
253
|
+
raise SystemExit(f"the bundle has no {required}")
|
|
254
|
+
if not any(name.startswith(f"{manifest['extract_dir']}/lib/ghagent.py") for name in names):
|
|
255
|
+
raise SystemExit("the bundle has no lib/ghagent.py")
|
|
256
|
+
print(f"bundle layout is valid, {len(names)} entries")
|
|
257
|
+
PY
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
name: CodeQL
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main]
|
|
8
|
+
schedule:
|
|
9
|
+
- cron: "23 4 * * 1"
|
|
10
|
+
|
|
11
|
+
permissions:
|
|
12
|
+
contents: read
|
|
13
|
+
|
|
14
|
+
jobs:
|
|
15
|
+
analyze:
|
|
16
|
+
name: CodeQL (python)
|
|
17
|
+
runs-on: ubuntu-latest
|
|
18
|
+
permissions:
|
|
19
|
+
actions: read
|
|
20
|
+
contents: read
|
|
21
|
+
security-events: write
|
|
22
|
+
steps:
|
|
23
|
+
- uses: actions/checkout@v7
|
|
24
|
+
|
|
25
|
+
- name: Initialize CodeQL
|
|
26
|
+
uses: github/codeql-action/init@v4
|
|
27
|
+
with:
|
|
28
|
+
languages: python
|
|
29
|
+
queries: security-and-quality
|
|
30
|
+
|
|
31
|
+
- name: Analyze
|
|
32
|
+
uses: github/codeql-action/analyze@v4
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
name: Docs
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
paths:
|
|
7
|
+
- "docs/**"
|
|
8
|
+
- "mkdocs.yml"
|
|
9
|
+
- ".github/workflows/docs.yml"
|
|
10
|
+
- "README.md"
|
|
11
|
+
pull_request:
|
|
12
|
+
paths:
|
|
13
|
+
- "docs/**"
|
|
14
|
+
- "mkdocs.yml"
|
|
15
|
+
- ".github/workflows/docs.yml"
|
|
16
|
+
workflow_dispatch:
|
|
17
|
+
|
|
18
|
+
permissions:
|
|
19
|
+
contents: read
|
|
20
|
+
|
|
21
|
+
concurrency:
|
|
22
|
+
group: docs-${{ github.ref }}
|
|
23
|
+
cancel-in-progress: true
|
|
24
|
+
|
|
25
|
+
jobs:
|
|
26
|
+
build:
|
|
27
|
+
name: Build the site
|
|
28
|
+
runs-on: ubuntu-latest
|
|
29
|
+
steps:
|
|
30
|
+
- uses: actions/checkout@v7
|
|
31
|
+
|
|
32
|
+
- uses: actions/setup-python@v7
|
|
33
|
+
with:
|
|
34
|
+
python-version: "3.13"
|
|
35
|
+
|
|
36
|
+
- name: Install MkDocs Material
|
|
37
|
+
run: python -m pip install --disable-pip-version-check "mkdocs-material>=9.6,<10"
|
|
38
|
+
|
|
39
|
+
- name: Build
|
|
40
|
+
run: python -m mkdocs build --verbose
|
|
41
|
+
|
|
42
|
+
- name: Upload the artifact
|
|
43
|
+
uses: actions/upload-pages-artifact@v5
|
|
44
|
+
with:
|
|
45
|
+
path: site
|
|
46
|
+
|
|
47
|
+
deploy:
|
|
48
|
+
name: Deploy to GitHub Pages
|
|
49
|
+
# A pull request must build the site but never publish it.
|
|
50
|
+
if: github.event_name != 'pull_request'
|
|
51
|
+
needs: build
|
|
52
|
+
runs-on: ubuntu-latest
|
|
53
|
+
permissions:
|
|
54
|
+
pages: write
|
|
55
|
+
id-token: write
|
|
56
|
+
environment:
|
|
57
|
+
name: github-pages
|
|
58
|
+
url: ${{ steps.deployment.outputs.page_url }}
|
|
59
|
+
steps:
|
|
60
|
+
- name: Configure Pages
|
|
61
|
+
uses: actions/configure-pages@v6
|
|
62
|
+
|
|
63
|
+
- name: Deploy
|
|
64
|
+
id: deployment
|
|
65
|
+
uses: actions/deploy-pages@v5
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
name: Release draft
|
|
2
|
+
|
|
3
|
+
# The recommendation was "automate releases with release-please or semantic-release". This
|
|
4
|
+
# project cannot take either: the CHANGELOG is hand-written and machine-verified (Keep a
|
|
5
|
+
# Changelog 2.0.0 with `[Unreleased]`), and release-please would own the file and rewrite the
|
|
6
|
+
# history of the entries. What is left is the mechanical part — the release body — and that is
|
|
7
|
+
# what this workflow automates, as a DRAFT release:
|
|
8
|
+
#
|
|
9
|
+
# * a draft is not published, so `publish.yml` (triggered by `release: published`) does not
|
|
10
|
+
# fire and nothing reaches PyPI by accident;
|
|
11
|
+
# * the body is generated by `ghagent changelog notes <version>` from the CHANGELOG, so it
|
|
12
|
+
# cannot drift from the file;
|
|
13
|
+
# * a human reads the draft and presses Publish, which is the irreversible step.
|
|
14
|
+
#
|
|
15
|
+
# Signed commits are a repository setting (`git commit -S` + a key); automation cannot grant it,
|
|
16
|
+
# so it stays a documented requirement in docs/PACKAGING.md rather than a workflow step.
|
|
17
|
+
|
|
18
|
+
on:
|
|
19
|
+
workflow_dispatch:
|
|
20
|
+
inputs:
|
|
21
|
+
tag:
|
|
22
|
+
description: "Existing tag to build the draft for (for example v1.3.0)"
|
|
23
|
+
required: true
|
|
24
|
+
prerelease:
|
|
25
|
+
description: "Mark as a pre-release"
|
|
26
|
+
type: boolean
|
|
27
|
+
default: false
|
|
28
|
+
|
|
29
|
+
permissions:
|
|
30
|
+
contents: write
|
|
31
|
+
|
|
32
|
+
jobs:
|
|
33
|
+
draft:
|
|
34
|
+
name: Draft the release notes from CHANGELOG
|
|
35
|
+
runs-on: ubuntu-latest
|
|
36
|
+
steps:
|
|
37
|
+
- uses: actions/checkout@v7
|
|
38
|
+
with:
|
|
39
|
+
fetch-depth: 0
|
|
40
|
+
|
|
41
|
+
- uses: actions/setup-python@v7
|
|
42
|
+
with:
|
|
43
|
+
python-version: "3.13"
|
|
44
|
+
|
|
45
|
+
- name: Check out the tag
|
|
46
|
+
run: git checkout "${{ inputs.tag }}"
|
|
47
|
+
|
|
48
|
+
- name: The CHANGELOG knows this version
|
|
49
|
+
run: python tools/ghagent.py changelog check
|
|
50
|
+
|
|
51
|
+
- name: Render the body
|
|
52
|
+
run: |
|
|
53
|
+
set -euo pipefail
|
|
54
|
+
VERSION="${TAG#v}"
|
|
55
|
+
python tools/ghagent.py changelog notes "$VERSION" > release-notes.md
|
|
56
|
+
test -s release-notes.md
|
|
57
|
+
{
|
|
58
|
+
echo "## What changed"
|
|
59
|
+
echo
|
|
60
|
+
cat release-notes.md
|
|
61
|
+
echo
|
|
62
|
+
echo "## Verification"
|
|
63
|
+
echo
|
|
64
|
+
echo '```bash'
|
|
65
|
+
echo "ghagent --version # github-agent $VERSION"
|
|
66
|
+
echo "python tests/run_tests.py"
|
|
67
|
+
echo '```'
|
|
68
|
+
} > body.md
|
|
69
|
+
env:
|
|
70
|
+
TAG: ${{ inputs.tag }}
|
|
71
|
+
|
|
72
|
+
- name: Create the draft release
|
|
73
|
+
env:
|
|
74
|
+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
75
|
+
run: |
|
|
76
|
+
set -euo pipefail
|
|
77
|
+
FLAGS=""
|
|
78
|
+
if [ "${{ inputs.prerelease }}" = "true" ]; then FLAGS="--prerelease"; fi
|
|
79
|
+
gh release create "${{ inputs.tag }}" --draft $FLAGS \
|
|
80
|
+
--title "${{ inputs.tag }}" --notes-file body.md
|
|
81
|
+
echo "::notice::Draft created. Read it, then press Publish to start publish.yml (PyPI)."
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# agent work directories
|
|
2
2
|
.ghagent/
|
|
3
3
|
.install.json
|
|
4
|
+
.ragraf/
|
|
4
5
|
|
|
5
6
|
# python
|
|
6
7
|
__pycache__/
|
|
@@ -14,6 +15,10 @@ build/
|
|
|
14
15
|
.venv/
|
|
15
16
|
.venv-*/
|
|
16
17
|
|
|
18
|
+
# documentation site (mkdocs build)
|
|
19
|
+
site/
|
|
20
|
+
.cache/
|
|
21
|
+
|
|
17
22
|
# editors and OS
|
|
18
23
|
.vscode/
|
|
19
24
|
.idea/
|
|
@@ -23,7 +23,9 @@ uv tool install github-agent-cli # recommended: isolated CLI
|
|
|
23
23
|
pipx install github-agent-cli # alternative
|
|
24
24
|
pip install github-agent-cli # Python 3.11+
|
|
25
25
|
pip install "github-agent-cli[png]" # optional Pillow: PNG banner output only
|
|
26
|
-
|
|
26
|
+
brew install paulmann/homebrew-github-agent-cli/github-agent-cli
|
|
27
|
+
scoop bucket add github-agent-cli https://github.com/paulmann/scoop-github-agent-cli && scoop install github-agent-cli
|
|
28
|
+
ghagent --version # github-agent 1.3.0
|
|
27
29
|
```
|
|
28
30
|
|
|
29
31
|
The wheel ships the CLI only. The pack — `skills/`, `tools/`, `tests/`, `reference/`, `wiki/`,
|
|
@@ -26,7 +26,9 @@ uv tool install github-agent-cli # рекомендуется: изо
|
|
|
26
26
|
pipx install github-agent-cli # альтернатива
|
|
27
27
|
pip install github-agent-cli # Python 3.11+
|
|
28
28
|
pip install "github-agent-cli[png]" # необязательный Pillow: только PNG
|
|
29
|
-
|
|
29
|
+
brew install paulmann/homebrew-github-agent-cli/github-agent-cli
|
|
30
|
+
scoop bucket add github-agent-cli https://github.com/paulmann/scoop-github-agent-cli && scoop install github-agent-cli
|
|
31
|
+
ghagent --version # github-agent 1.3.0
|
|
30
32
|
```
|
|
31
33
|
|
|
32
34
|
Wheel содержит только CLI. Пакет — `skills/`, `tools/`, `tests/`, `reference/`, `wiki/`,
|
|
@@ -6,6 +6,71 @@ All notable changes to this project are documented here. The format is
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [1.3.0] - 2026-11-01
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- `docs/FIELD-NOTES.md`: ten defects that real repositories found, anonymised — the symptom, the
|
|
14
|
+
cause, the rule that changed and the fixture that now holds it. Published as a page of the
|
|
15
|
+
documentation site.
|
|
16
|
+
- A documentation site on GitHub Pages: `mkdocs.yml` (Material), `docs/index.md`,
|
|
17
|
+
`.github/workflows/docs.yml` (build on every pull request, deploy from `main`) and
|
|
18
|
+
`hooks/repo_links.py`, which points a link that leaves `docs/` at the repository instead of at a
|
|
19
|
+
page that does not exist.
|
|
20
|
+
- `.github/workflows/codeql.yml` (CodeQL, security-and-quality queries) and a `lint` job in CI:
|
|
21
|
+
`ruff` and `mypy` with their configuration in `pyproject.toml`. Both are development tools — the
|
|
22
|
+
runtime dependency count stays zero.
|
|
23
|
+
- `.github/workflows/release-draft.yml`: a manual workflow that renders the release body from the
|
|
24
|
+
CHANGELOG (`changelog notes`) and creates a **draft** release. A draft does not trigger
|
|
25
|
+
`publish.yml`, so nothing reaches PyPI before a human presses Publish.
|
|
26
|
+
- `tools/make_demo.py` and `assets/demo.gif`: the README animation is rendered from the real
|
|
27
|
+
output of three commands, so it cannot show anything the tool did not print.
|
|
28
|
+
- README sections **Why this exists** and **How it compares** (with `markdownlint`, `vale`,
|
|
29
|
+
`action-gh-release`, pre-commit, `release-please` and the community-health files) in all six
|
|
30
|
+
languages.
|
|
31
|
+
- `.ghagent.json` keys `exclude_dirs` (build output whose name the pack cannot know, e.g. `site`)
|
|
32
|
+
and `safe_email_domains` (role domains of this repository).
|
|
33
|
+
- `packaging/homebrew/github-agent-cli.rb`: a Homebrew formula that installs the PyPI sdist
|
|
34
|
+
`github_agent_cli-1.2.2.tar.gz` (sha256 `f60d17b1…e14ae`) into a virtualenv with `python@3.13`,
|
|
35
|
+
with `livecheck` reading the PyPI JSON API. Canonical copy: `paulmann/homebrew-github-agent-cli`.
|
|
36
|
+
- `packaging/scoop/github-agent-cli.json`: a Scoop manifest for the Windows bundle
|
|
37
|
+
`github-agent-cli-1.2.2-windows-x64.zip` (sha256 `2676f33b…c85a4`), `depends: python`,
|
|
38
|
+
`checkver`/`autoupdate` from the PyPI JSON API and the release `SHA256SUMS.txt`. Canonical copy:
|
|
39
|
+
`paulmann/scoop-github-agent-cli`.
|
|
40
|
+
- A Windows bundle in the release assets: `ghagent.cmd` plus the wheel contents under `lib/`. It was
|
|
41
|
+
executed on Windows before upload (`--version`, `audit . --min-score 90`).
|
|
42
|
+
- CI job `manifests`: `ruby -c` for the formula, a real download of both URLs with the SHA-256
|
|
43
|
+
compared against the manifest, and a layout check of the bundle. A wrong hash or a stale version
|
|
44
|
+
fails the pull request.
|
|
45
|
+
- `packaging/README.md`: what each manifest installs, where the canonical copy lives and the bump
|
|
46
|
+
procedure for both.
|
|
47
|
+
|
|
48
|
+
### Changed
|
|
49
|
+
|
|
50
|
+
- `md.link-local`: inside a wiki checkout — detected from `_Sidebar.md` or `_Footer.md` — a page
|
|
51
|
+
name resolves to `Page.md`, including names with dots (`Migration-3.x-to-4.0`). In an ordinary
|
|
52
|
+
repository the same link stays an error, because there it is a 404.
|
|
53
|
+
- `md.h1`: `_Sidebar.md`, `_Footer.md` and `_Header.md` are wiki furniture and are reported as a
|
|
54
|
+
note, not as a document without a title.
|
|
55
|
+
- `doc` and `privacy` share one walker, which skips every dot-directory except `.github/` and
|
|
56
|
+
`.well-known/`; `doc` also honours `ignore_rules` from `.ghagent.json`, which only `audit` read
|
|
57
|
+
before.
|
|
58
|
+
- `changelog.link-refs`: missing link references are a warning, not an error — Keep a Changelog
|
|
59
|
+
makes them optional. `changelog.types`: a grouping subtitle is dropped before the lookup, so
|
|
60
|
+
`### Added — template language` is `Added`.
|
|
61
|
+
- `assets render`: chips come from the declared keywords (languages are the fallback), emoji are
|
|
62
|
+
stripped from the title, and a title or tagline that would be cut is a warning that names the
|
|
63
|
+
limit.
|
|
64
|
+
- `meta check --repo <slug>` reads the repository through `gh api` instead of validating the empty
|
|
65
|
+
arguments it was given.
|
|
66
|
+
- `audit`: `wiki-source` is skipped, not failed, when the tree has no `wiki/` directory.
|
|
67
|
+
- `wiki verify`: the target is an explicit `--out`, then a `--wiki-dir` that already looks like a
|
|
68
|
+
wiki checkout, then the build; the header names the directory that was read, and a repository
|
|
69
|
+
with neither sources nor a build gets one note instead of an error.
|
|
70
|
+
- `docs/PACKAGING.md`: the Homebrew and Scoop section is no longer "deferred" — it lists both
|
|
71
|
+
manifests, the measured hashes and how the CI job verifies them.
|
|
72
|
+
- The six READMEs and `AGENTS.md` gained the `brew` and `scoop` install commands.
|
|
73
|
+
|
|
9
74
|
## [1.2.2] - 2026-10-30
|
|
10
75
|
|
|
11
76
|
### Changed
|
|
@@ -135,7 +200,8 @@ All notable changes to this project are documented here. The format is
|
|
|
135
200
|
|
|
136
201
|
- The pack ships without tokens, absolute machine paths or personal addresses; the privacy rule fails the build if one appears, and a self-test enforces it on the pack itself.
|
|
137
202
|
|
|
138
|
-
[Unreleased]: https://github.com/paulmann/github-agent/compare/v1.
|
|
203
|
+
[Unreleased]: https://github.com/paulmann/github-agent/compare/v1.3.0...HEAD
|
|
204
|
+
[1.3.0]: https://github.com/paulmann/github-agent/compare/v1.2.2...v1.3.0
|
|
139
205
|
[1.2.2]: https://github.com/paulmann/github-agent/compare/v1.2.1...v1.2.2
|
|
140
206
|
[1.2.1]: https://github.com/paulmann/github-agent/compare/v1.2.0...v1.2.1
|
|
141
207
|
[1.2.0]: https://github.com/paulmann/github-agent/compare/v1.1.0...v1.2.0
|
|
@@ -6,6 +6,29 @@
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [1.3.0] - 2026-11-01
|
|
10
|
+
|
|
11
|
+
### Добавлено
|
|
12
|
+
|
|
13
|
+
- `packaging/homebrew/github-agent-cli.rb`: формула Homebrew, которая ставит sdist с PyPI
|
|
14
|
+
`github_agent_cli-1.2.2.tar.gz` (sha256 `f60d17b1…e14ae`) в virtualenv с `python@3.13`,
|
|
15
|
+
`livecheck` читает JSON API PyPI. Каноническая копия: `paulmann/homebrew-github-agent-cli`.
|
|
16
|
+
- `packaging/scoop/github-agent-cli.json`: манифест Scoop для Windows-бандла
|
|
17
|
+
`github-agent-cli-1.2.2-windows-x64.zip` (sha256 `2676f33b…c85a4`), `depends: python`,
|
|
18
|
+
`checkver`/`autoupdate` из JSON API PyPI и `SHA256SUMS.txt` релиза. Каноническая копия:
|
|
19
|
+
`paulmann/scoop-github-agent-cli`.
|
|
20
|
+
- Windows-бандл в ассетах релиза: `ghagent.cmd` плюс содержимое колеса в `lib/`. Перед загрузкой
|
|
21
|
+
он был запущен на Windows (`--version`, `audit . --min-score 90`).
|
|
22
|
+
- CI-job `manifests`: `ruby -c` для формулы, реальная загрузка обоих URL со сверкой SHA-256 и
|
|
23
|
+
проверка раскладки бандла. Неверный хэш или устаревшая версия валят pull request.
|
|
24
|
+
- `packaging/README.md`: что ставит каждый манифест, где каноническая копия и как обновлять.
|
|
25
|
+
|
|
26
|
+
### Изменено
|
|
27
|
+
|
|
28
|
+
- `docs/PACKAGING.md`: раздел про Homebrew и Scoop больше не «отложенный» — там оба манифеста,
|
|
29
|
+
измеренные хэши и проверка в CI.
|
|
30
|
+
- В шесть README и `AGENTS.md` добавлены команды установки через `brew` и `scoop`.
|
|
31
|
+
|
|
9
32
|
## [1.2.2] - 2026-10-30
|
|
10
33
|
|
|
11
34
|
### Изменено
|
|
@@ -135,7 +158,8 @@
|
|
|
135
158
|
|
|
136
159
|
- Пакет поставляется без токенов, абсолютных путей машины и личных адресов; правило приватности роняет сборку, если такое появится, а самопроверка следит за самим пакетом.
|
|
137
160
|
|
|
138
|
-
[Unreleased]: https://github.com/paulmann/github-agent/compare/v1.
|
|
161
|
+
[Unreleased]: https://github.com/paulmann/github-agent/compare/v1.3.0...HEAD
|
|
162
|
+
[1.3.0]: https://github.com/paulmann/github-agent/compare/v1.2.2...v1.3.0
|
|
139
163
|
[1.2.2]: https://github.com/paulmann/github-agent/compare/v1.2.1...v1.2.2
|
|
140
164
|
[1.2.1]: https://github.com/paulmann/github-agent/compare/v1.2.0...v1.2.1
|
|
141
165
|
[1.2.0]: https://github.com/paulmann/github-agent/compare/v1.1.0...v1.2.0
|
|
@@ -5,8 +5,8 @@ abstract: "Repository and wiki steward for AI agents: audits README, CHANGELOG a
|
|
|
5
5
|
type: software
|
|
6
6
|
authors:
|
|
7
7
|
- name: "github-agent contributors"
|
|
8
|
-
version: 1.
|
|
9
|
-
date-released: 2026-
|
|
8
|
+
version: 1.3.0
|
|
9
|
+
date-released: 2026-11-01
|
|
10
10
|
license: MIT
|
|
11
11
|
repository-code: "https://github.com/paulmann/github-agent"
|
|
12
12
|
keywords:
|
|
@@ -27,7 +27,7 @@ for the map, [docs/RULES.md](docs/RULES.md) for the rule catalogue and
|
|
|
27
27
|
git clone https://github.com/paulmann/github-agent.git
|
|
28
28
|
cd github-agent
|
|
29
29
|
pip install -e .
|
|
30
|
-
ghagent --version # github-agent 1.
|
|
30
|
+
ghagent --version # github-agent 1.3.0
|
|
31
31
|
ghagent selftest # must print PASS
|
|
32
32
|
python tests/run_tests.py # the same suite, full output
|
|
33
33
|
```
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
git clone https://github.com/paulmann/github-agent.git
|
|
28
28
|
cd github-agent
|
|
29
29
|
pip install -e .
|
|
30
|
-
ghagent --version # github-agent 1.
|
|
30
|
+
ghagent --version # github-agent 1.3.0
|
|
31
31
|
ghagent selftest # должно напечатать PASS
|
|
32
32
|
python tests/run_tests.py # тот же набор тестов, полный вывод
|
|
33
33
|
```
|