From cb19545b1e51d4b680e726197c0c6a5d53997d0f Mon Sep 17 00:00:00 2001 From: Kevin Weiss Date: Tue, 29 Sep 2026 10:43:08 +0200 Subject: [PATCH 1/2] chore: Update copier template to v0.1.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Also drops two files the template stopped generating after the tag: - `.github/agents/pr-review.agent.md` - `.github/copilot-instructions.md` Copilot is used for PR review on GitHub, not locally, and the copilot file held no content of its own — only a pointer, and a broken one: from inside `.github/` the link resolved to `.github/.github/instructions/...`. The dangling "## Agents" section that pointed at the deleted agent file is removed from `.github/instructions/lobaro-template.instructions.md` with it. Co-Authored-By: Claude Opus 5 (1M context) --- .copier-answers.yml | 2 +- .github/agents/pr-review.agent.md | 68 ------------------- .github/copilot-instructions.md | 15 ---- .../lobaro-template.instructions.md | 6 +- .github/workflows/ci.yml | 19 +++--- pyproject.toml | 6 +- ruff.toml | 2 +- tox.ini | 3 +- 8 files changed, 18 insertions(+), 103 deletions(-) delete mode 100644 .github/agents/pr-review.agent.md delete mode 100644 .github/copilot-instructions.md diff --git a/.copier-answers.yml b/.copier-answers.yml index 051054d..49ffd72 100644 --- a/.copier-answers.yml +++ b/.copier-answers.yml @@ -1,5 +1,5 @@ # Changes here will be overwritten by Copier -_commit: v0.0.6 +_commit: v0.1.1 _src_path: ../template-python/ author: Kevin Weiss author_email: weiss.kevin604@gmail.com diff --git a/.github/agents/pr-review.agent.md b/.github/agents/pr-review.agent.md deleted file mode 100644 index e7c7a2f..0000000 --- a/.github/agents/pr-review.agent.md +++ /dev/null @@ -1,68 +0,0 @@ ---- -description: Review PR commits against master — check architecture, bugs, test coverage and commit messages, apply fixup commits, then propose a PR title and summary. ---- - -You are a thorough PR reviewer for Lobaro Python projects. Work through the -steps below in order. Be specific about problems and their locations. Do not -skip a step even if the previous one passed cleanly. - -## Step 1 — Map the branch - -``` -git log master..HEAD --oneline -``` - -List every commit on the branch. Then for each commit, run `git show ` to -read its diff in full before forming any opinion. - -## Step 2 — Review each commit - -For each commit evaluate the four areas below. Collect all findings before -making any changes. - -**Architecture / intent** -Does the change make sense at the design level? Is the approach sound? Does it -fit the project structure and direction? - -**Bugs** -Any logic errors, off-by-ones, unhandled edge-cases, thread-safety issues, or -resource leaks? Would the code fail for any valid input? - -**Test coverage** -Are the changed code paths exercised by tests? Are edge-cases and error paths -covered? New behaviour without tests is a finding. - -**Commit message** -Must be a valid [Conventional Commit](https://www.conventionalcommits.org/): -`type(scope): description` — lower-case description, no trailing period. -Common types: `feat`, `fix`, `refactor`, `test`, `docs`, `chore`, `build`. -Check that the type, scope, and description accurately reflect the diff. - -Present a summary of all findings before moving on. - -## Step 3 — Fix problems one by one - -For each finding, in order: - -1. Apply the fix to the source files. -2. Run `tox -e lint` — fix any issues and repeat until it passes cleanly. -3. Run `tox` — fix any failures and repeat until it passes cleanly. -4. Create the smallest accurate commit: - - If the fix belongs squarely to an existing commit: `git commit --fixup=` - - If it is genuinely new work (e.g. additional tests, a separate bug): - use a new conventional commit message. - -**Never amend or rebase the user's existing commits. Only add new commits.** - -Iterate through all findings until all are resolved. - -## Step 4 — Propose a PR summary - -Once all findings are addressed, output: - -1. The updated commit list: `git log master..HEAD --oneline` -2. A recommended PR title in conventional commit format. -3. A short PR body (3–8 sentences) explaining what changed, why, and any - migration or review notes. - -Pause here and wait for the user to review each commit before they squash. diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md deleted file mode 100644 index f4c02a9..0000000 --- a/.github/copilot-instructions.md +++ /dev/null @@ -1,15 +0,0 @@ -# GitHub Copilot Instructions — helpers - - - -Simple python based helpers for lobaro tools. -This is a Lobaro Python library (`lob-hlpr`), module `lob_hlpr`. - -Instructions generic information based off the -[Lobaro Python template](https://github.com/lobaro/template-python) -(layout, patterns, workflow, CLI) is defined in -[lobaro-template.instructions.md](.github/instructions/lobaro-template.instructions.md). - diff --git a/.github/instructions/lobaro-template.instructions.md b/.github/instructions/lobaro-template.instructions.md index 9a9aacb..909244c 100644 --- a/.github/instructions/lobaro-template.instructions.md +++ b/.github/instructions/lobaro-template.instructions.md @@ -13,7 +13,7 @@ applyTo: "**" ## Python version -Python ≥ 3.10. Always use built-in generics — `list[X]`, `dict[K, V]`, `X | None` — never `typing.List` etc. +Python ≥ 3.11. Always use built-in generics — `list[X]`, `dict[K, V]`, `X | None` — never `typing.List` etc. ## Validation workflow @@ -34,7 +34,3 @@ If lint passes but tests fail, diagnose the test failure — do not bypass check - Follow PEP 8 and PEP 257 - Type-hint all public functions and methods - Try not to add third-party dependencies unless necessary — prefer built-in features - -## Agents - -- PR review agent: [instructions](../agents/pr-review.agent.md) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d7ff92e..7484143 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,12 +20,12 @@ env: TOX_VERSION: "4.49.1" TOX_UV_VERSION: "1.33.4" UV_VERSION: "0.10.11" - MIN_PYTHON_VERSION: "3.10" - MAX_PYTHON_VERSION: "3.13" + MIN_PYTHON_VERSION: "3.11" + MAX_PYTHON_VERSION: "3.14" jobs: check-commits: - runs-on: ubuntu-24.04 + runs-on: [self-hosted, uv] steps: - uses: actions/checkout@v6 with: @@ -36,7 +36,7 @@ jobs: git log $BASE_SHA..HEAD --pretty=%s | grep -E '^(fixup!|squash!|WIP|wip)' && exit 1 || echo "✅ ok" prepare: - runs-on: ubuntu-24.04 + runs-on: [self-hosted, uv] outputs: wheel-distribution: ${{ steps.wheel-distribution.outputs.path }} VERSION: ${{ steps.get_version.outputs.VERSION }} @@ -83,10 +83,10 @@ jobs: strategy: matrix: python: - - "3.10" - - "3.13" + - "3.11" + - "3.14" platform: - - ubuntu-24.04 + - [self-hosted, uv] runs-on: ${{ matrix.platform }} steps: - uses: actions/checkout@v6 @@ -110,7 +110,10 @@ jobs: release: if: startsWith(github.ref, 'refs/tags/') needs: [test, prepare] - runs-on: ubuntu-24.04 + # `uv`, not `k8s`: the bare `k8s` label is also answered by the preliumtarn + # scale set, which runs the upstream actions-runner image and has no `zip`. + # Only the Lobaro-built images carry `uv`. + runs-on: [self-hosted, uv] steps: - name: Release uses: softprops/action-gh-release@v2 diff --git a/pyproject.toml b/pyproject.toml index 0581bd7..02f5ba6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -13,15 +13,15 @@ license-files = [ "LICENSE" ] authors = [ { name = "Kevin Weiss", email = "weiss.kevin604@gmail.com" }, ] -requires-python = ">=3.10" +requires-python = ">=3.11" classifiers = [ "Development Status :: 5 - Production/Stable", "Programming Language :: Python", "Programming Language :: Python :: 3 :: Only", - "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", ] dynamic = [ "version" ] dependencies = [ @@ -45,4 +45,4 @@ packages.find.where = [ "src" ] version_scheme = "no-guess-dev" [tool.pyproject-fmt] -max_supported_python = "3.13" +max_supported_python = "3.14" diff --git a/ruff.toml b/ruff.toml index bba48ee..c4b1805 100644 --- a/ruff.toml +++ b/ruff.toml @@ -1,4 +1,4 @@ -target-version = "py310" +target-version = "py311" src = [ "examples", diff --git a/tox.ini b/tox.ini index 3d2b607..5cc5949 100644 --- a/tox.ini +++ b/tox.ini @@ -2,9 +2,8 @@ # Read more under https://tox.wiki/ [tox] -minversion = 3.24 +minversion = 4 envlist = default -isolated_build = True [testenv] From 862becdea682278d710b676812d728be31307238 Mon Sep 17 00:00:00 2001 From: Kevin Weiss Date: Tue, 29 Sep 2026 12:10:55 +0200 Subject: [PATCH 2/2] ci: keep this public repo on GitHub-hosted runners MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit python-lob-helpers is the only public repository in the set; every other repo the template feeds is private. GitHub's self-hosted runner groups do not allow public repositories by default, so the jobs the template generates simply queue forever — two runs sat at `queued` with labels ["self-hosted","uv"] and an empty runner_group_name for ~40 minutes while seven private repos with identical labels started in seconds. Enabling public repos on the runner group would be the wrong fix: a pull request from any fork would then run arbitrary code on our infrastructure. GitHub-hosted runners are the right answer for a public repo. The template gets a `self_hosted_runners` answer so this stops being a local edit; until that lands and is tagged, this file diverges from the template by these four lines. Co-Authored-By: Claude Opus 5 (1M context) --- .github/workflows/ci.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7484143..9ca7a38 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -25,7 +25,7 @@ env: jobs: check-commits: - runs-on: [self-hosted, uv] + runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v6 with: @@ -36,7 +36,7 @@ jobs: git log $BASE_SHA..HEAD --pretty=%s | grep -E '^(fixup!|squash!|WIP|wip)' && exit 1 || echo "✅ ok" prepare: - runs-on: [self-hosted, uv] + runs-on: ubuntu-24.04 outputs: wheel-distribution: ${{ steps.wheel-distribution.outputs.path }} VERSION: ${{ steps.get_version.outputs.VERSION }} @@ -86,7 +86,7 @@ jobs: - "3.11" - "3.14" platform: - - [self-hosted, uv] + - ubuntu-24.04 runs-on: ${{ matrix.platform }} steps: - uses: actions/checkout@v6 @@ -113,7 +113,7 @@ jobs: # `uv`, not `k8s`: the bare `k8s` label is also answered by the preliumtarn # scale set, which runs the upstream actions-runner image and has no `zip`. # Only the Lobaro-built images carry `uv`. - runs-on: [self-hosted, uv] + runs-on: ubuntu-24.04 steps: - name: Release uses: softprops/action-gh-release@v2