Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .markdownlint-cli2.jsonc
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@
// Prose paragraphs and data-heavy tables/URLs are intentionally long.
// Reflowing at 80 cols hurts readability and churns diffs.
"MD013": false,
// MD033 (inline HTML) stays enabled: HTML comments (reference-link dividers) pass it, and elements are flagged so native markdown wins.
// MD033 (inline HTML) stays enabled so native markdown wins - HTML comments (reference-link dividers) pass it, and details/summary are allowed for GitHub collapsibles, which have no markdown equivalent. Every other element still flags.
"MD033": { "allowed_elements": ["details", "summary"] },
// Require fenced code blocks over the legacy 4-space-indented style.
"MD046": { "style": "fenced" },
// MD060 (table column style) is not enforced - allow both compact
Expand Down
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ A state-changing GitHub call is the highest-blast-radius thing an agent does her

## Release Model

The **two-phase model is the default**: PRs build fast, publishing is batched. See [README "Release Distribution Model"](./WORKFLOW.md) for the full rationale. The load-bearing rules follow. The auto-publish paths (bot push, schedule) apply to `release` repos. **Operational** repos differ - dispatch-only release, no auto-publish - see "Operational Repositories".
The **two-phase model is the default**: PRs build fast, publishing is batched. See [`WORKFLOW.md`](./WORKFLOW.md) for the full rationale. The load-bearing rules follow. The auto-publish paths (bot push, schedule) apply to `release` repos. **Operational** repos differ - dispatch-only release, no auto-publish - see "Operational Repositories".

- **PRs smoke-test only.** [`test-pull-request.yml`](./.github/workflows/test-pull-request.yml) always runs unit tests, then a `dorny/paths-filter` `changes` job gates a **reduced** build of only the changed targets (Docker `linux/amd64` only, executable on a representative runtime subset), never pushing. Build-workflow files are intentionally not in the path filters - a filter can't tell a logic change from an action-version bump - so a workflow-only change isn't smoke-built; the reusable workflows are exercised by the next run that uses them (a later code PR's smoke build, or the scheduled/publish run). Workflow YAML is still linted in CI by the lint job's `actionlint` step; also run `actionlint` locally before pushing to catch issues early.
- **A human merge never auto-publishes.** [`publish-release.yml`](./.github/workflows/publish-release.yml) is the sole publisher; each run builds the **single trigger branch** (`main` a release, `develop` a prerelease). A first `plan` job decides once whether the run publishes and every other job gates on its output. It publishes on a **`workflow_dispatch`** of `main`/`develop` (the human-initiated release), a **code-affecting bot push to `main`** (the codegen App merges every Dependabot/codegen PR, so `github.actor` is the gate - a human merge/promotion to `main` skips), or a **weekly `schedule`** (Docker only, to refresh the base image). The `push` is main-only and paths-filtered, so a develop bot merge and an Actions-only bump publish nothing. A source-only repo publishes on dispatch only.
Expand Down
3 changes: 3 additions & 0 deletions catalog/snippets/configs/vscode-tasks-python.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@
// `ruff format` -> `ruff check` -> the type checker. A repo whose CI type checker is mypy (pyright
// editor-only) swaps the "Python Types" command to `uv run mypy src`; a pyright-strict repo keeps it
// as `uv run pyright`. Adapt the target paths to the repo's package layout.
// A lint-only Scripts-profile subtree (no uv project, no `uv.lock`) runs every tool via `uvx <tool>`
// instead of `uv run <tool>` - the type-checker swap above composes with it (`uvx mypy src` for a mypy repo,
// `uvx pyright` otherwise) - and omits the pytest, coverage, and `uv sync` tasks (CODESTYLE.md Python 'Two profiles').
Comment thread
ptr727 marked this conversation as resolved.
Outdated
{
"label": "Ruff Format",
"type": "process",
Expand Down
2 changes: 1 addition & 1 deletion registry/repos.json
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,7 @@
"requiredSecrets": [],
"consumerModel": "pull",
"releaseTrigger": "dispatch-only",
"driftNotes": ["ESPHome device config YAML consumed by the cataloged ESPHome-NonRoot image at runtime. Distinct from that Docker repo.", "First repo with a lint-only python codegen subtree (easystart/python: ruff/mypy config only, no tests, no uv.lock) and lint-only cpp (committed custom-component and template headers). A shared clang-format config for the cpp style is not yet added."]
"driftNotes": ["ESPHome device config YAML consumed by the cataloged ESPHome-NonRoot image at runtime. Distinct from that Docker repo.", "First repo with a lint-only python codegen subtree (easystart/python: ruff and pyright config only, no tests, no uv.lock) and lint-only cpp (committed custom-component and template headers, formatted by a shared clang-format config)."]
},
{
"name": "HomeAssistant-Config",
Expand Down
1 change: 1 addition & 0 deletions repo-config/configure.sh
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,7 @@ gh_ok() { gh api "$@" >/dev/null 2>&1; }

check_ruleset() { # payload-file - the live ruleset must match the committed policy, driven by the payload
local file="$1" rname id live t want got wantc gotc want_enf
if [ ! -e "$file" ]; then fail "ruleset payload $file missing"; return; fi
rname="$(jq -r '.name // empty' "$file")"
if [ -z "$rname" ]; then fail "ruleset payload $file has no name"; return; fi
if ! id="$(ruleset_id "$rname")"; then fail "ruleset '$rname' - could not resolve id"; return; fi
Expand Down