Skip to content
Merged
Show file tree
Hide file tree
Changes from 13 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
9 changes: 5 additions & 4 deletions .github/ISSUE_TEMPLATE/01-bug-report.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
name: 🐞 Bug Report
description: File a bug report.
title: '[Bug] '
labels: ['bug', 'triage']
assignees: ['benhigham']
title: "[Bug] "
labels: ["bug", "triage"]
assignees: ["benhigham"]
body:
- type: markdown
attributes:
Expand All @@ -24,7 +24,8 @@ body:
attributes:
label: Description
description: |
Describe in detail what's happening, the context in which the bug occurs, and any troubleshooting steps you've already taken.
Describe in detail what's happening, the context in which the bug occurs, and any troubleshooting steps
you've already taken.
validations:
required: true

Expand Down
7 changes: 5 additions & 2 deletions .github/ISSUE_TEMPLATE/03-codebase-improvement.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,9 @@ body:
id: benefits
attributes:
label: Benefits
description: What are the benefits of this improvement? (e.g., better performance, cleaner code, better maintainability)
description: >-
What are the benefits of this improvement?
(e.g., better performance, cleaner code, better maintainability)
validations:
required: true

Expand Down Expand Up @@ -106,7 +108,8 @@ body:
id: additional-information
attributes:
label: Additional Information
description: Provide any additional context, code examples, links to resources, or other information that might be helpful
description: >-
Provide any additional context, code examples, links to resources, or other information that might be helpful
validations:
required: false

Expand Down
134 changes: 67 additions & 67 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -1,118 +1,118 @@
version: 2

updates:
- package-ecosystem: 'github-actions'
directory: '/'
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: 'weekly'
interval: "weekly"
assignees:
- 'benhigham'
- "benhigham"
labels:
- 'dependencies'
- 'github-actions'
- "dependencies"
- "github-actions"
commit-message:
prefix: 'chore'
include: 'scope'
prefix: "chore"
include: "scope"
groups:
github-actions:
patterns:
- '*'
- "*"
update-types:
- 'minor'
- 'patch'
- "minor"
- "patch"

- package-ecosystem: 'npm'
directory: '/'
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: 'weekly'
interval: "weekly"
assignees:
- 'benhigham'
- "benhigham"
labels:
- 'dependencies'
- 'npm'
- "dependencies"
- "npm"
commit-message:
prefix: 'chore'
include: 'scope'
prefix: "chore"
include: "scope"
groups:
development-dependencies:
dependency-type: 'development'
dependency-type: "development"
update-types:
- 'minor'
- 'patch'
- "minor"
- "patch"
production-dependencies:
dependency-type: 'production'
dependency-type: "production"
update-types:
- 'patch'
- "patch"
versioning-strategy: increase

- package-ecosystem: 'docker'
directory: '/'
- package-ecosystem: "docker"
directory: "/"
schedule:
interval: 'weekly'
interval: "weekly"
assignees:
- 'benhigham'
- "benhigham"
labels:
- 'dependencies'
- 'docker'
- "dependencies"
- "docker"
commit-message:
prefix: 'chore'
include: 'scope'
prefix: "chore"
include: "scope"

- package-ecosystem: 'terraform'
directory: '/'
- package-ecosystem: "terraform"
directory: "/"
schedule:
interval: 'weekly'
interval: "weekly"
assignees:
- 'benhigham'
- "benhigham"
labels:
- 'dependencies'
- 'terraform'
- "dependencies"
- "terraform"
commit-message:
prefix: 'chore'
include: 'scope'
prefix: "chore"
include: "scope"

- package-ecosystem: 'devcontainers'
directory: '/'
- package-ecosystem: "devcontainers"
directory: "/"
schedule:
interval: 'weekly'
interval: "weekly"
assignees:
- 'benhigham'
- "benhigham"
labels:
- 'dependencies'
- 'devcontainers'
- "dependencies"
- "devcontainers"
commit-message:
prefix: 'chore'
include: 'scope'
prefix: "chore"
include: "scope"

- package-ecosystem: 'gitsubmodule'
directory: '/'
- package-ecosystem: "gitsubmodule"
directory: "/"
schedule:
interval: 'weekly'
interval: "weekly"
assignees:
- 'benhigham'
- "benhigham"
labels:
- 'dependencies'
- 'git-submodules'
- "dependencies"
- "git-submodules"
commit-message:
prefix: 'chore'
include: 'scope'
prefix: "chore"
include: "scope"

- package-ecosystem: 'gomod'
directory: '/'
- package-ecosystem: "gomod"
directory: "/"
schedule:
interval: 'weekly'
interval: "weekly"
assignees:
- 'benhigham'
- "benhigham"
labels:
- 'dependencies'
- 'go'
- "dependencies"
- "go"
commit-message:
prefix: 'chore'
include: 'scope'
prefix: "chore"
include: "scope"
groups:
go-dependencies:
patterns:
- '*'
- "*"
update-types:
- 'minor'
- 'patch'
- "minor"
- "patch"
5 changes: 5 additions & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
## Related Issue

<!-- Link to the related issue -->

## Description

<!-- Describe the changes in this PR -->

## Type of Change

<!-- Mark the appropriate option with an [x] -->

- [ ] Bug fix
- [ ] New feature
- [ ] Documentation update
Expand All @@ -17,6 +21,7 @@
- [ ] Other (please describe):

## Testing

<!-- Describe the testing done -->

## Checklist
Expand Down
14 changes: 9 additions & 5 deletions .github/workflows/auto-merge-dependabot.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# Automatically approves and merges Dependabot PRs based on semantic versioning rules.
# Supports configurable merge methods. Patch and minor auto-merge enabled by default; major updates require manual review.
# Supports configurable merge methods. Patch and minor auto-merge enabled by default; major updates require manual
# review.
#
# Note: The concurrency group uses the caller's workflow name (not this reusable workflow's name),
# so each caller gets its own concurrency scope.
Expand All @@ -14,7 +15,7 @@ on:
default: true
required: false
merge-method:
description: 'The merge method to use. Valid values: merge, squash, rebase'
description: "The merge method to use. Valid values: merge, squash, rebase"
type: string
default: squash
required: false
Expand Down Expand Up @@ -67,7 +68,8 @@ jobs:
- name: Verify metadata extraction
if: steps.metadata.outputs.update-type == ''
run: |
echo "::error::Failed to extract Dependabot metadata — update-type is empty. The dependabot/fetch-metadata action may have failed silently."
echo "::error::Failed to extract Dependabot metadata — update-type is empty." \
"The dependabot/fetch-metadata action may have failed silently."
exit 1

- name: Check merge conditions
Expand All @@ -86,7 +88,8 @@ jobs:
exit 1
fi
if [ "$AUTO_MERGE" != "true" ]; then
echo "::error::Auto-merge is not enabled for this repository. Enable it in Settings > General > Pull Requests > Allow auto-merge."
echo "::error::Auto-merge is not enabled for this repository." \
"Enable it in Settings > General > Pull Requests > Allow auto-merge."
exit 1
fi
env:
Expand Down Expand Up @@ -119,5 +122,6 @@ jobs:
env:
UPDATE_TYPE: ${{ steps.metadata.outputs.update-type }}
run: |
echo "::error::No auto-merge condition matched. update-type=${UPDATE_TYPE}. PR left unapproved and without auto-merge; manual review required."
echo "::error::No auto-merge condition matched. update-type=${UPDATE_TYPE}." \
"PR left unapproved and without auto-merge; manual review required."
exit 1
31 changes: 31 additions & 0 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
name: Lint

on:
push:
branches: [main]
pull_request:

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

permissions:
contents: read

jobs:
lint:
name: Lint
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: Checkout repository
uses: actions/checkout@v6

- name: Setup mise
uses: jdx/mise-action@v2

- name: Check formatting
run: mise run fmt:check

- name: Run linters
run: mise run lint
2 changes: 1 addition & 1 deletion .github/workflows/release-changesets.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ jobs:
with:
node-version-file: package.json
cache: pnpm
cache-dependency-path: '**/pnpm-lock.yaml'
cache-dependency-path: "**/pnpm-lock.yaml"

- name: Install dependencies
run: pnpm install
Expand Down
15 changes: 15 additions & 0 deletions .markdownlint-cli2.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
config:
MD013:
line_length: 120
MD033:
allowed_elements:
- "details"
- "summary"

ignores:
# Legal text — do not reformat
- "LICENSE.md"
# PR templates don't need an H1 heading
- ".github/pull_request_template.md"
# Planning/spec docs are agentic artifacts with long lines and loose formatting
- "docs/**/*.md"

Copilot AI Mar 30, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The markdownlint config ignores docs/**/*.md, which means the newly added planning/spec docs won’t be linted in CI. This conflicts with the PR description claim that existing lint violations were fixed “across all YAML and Markdown files”; either lint docs as well, or update the PR description/tooling docs to clarify that docs/ is intentionally excluded from markdownlint.

Copilot uses AI. Check for mistakes.
38 changes: 38 additions & 0 deletions .mise.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
[tools]
actionlint = "latest"
lefthook = "latest"
"npm:markdownlint-cli2" = "latest"
"npm:prettier" = "latest"
"pipx:yamllint" = "latest"

[tasks.lint]
description = "Run all linters"
depends = ["lint:actions", "lint:yaml", "lint:markdown"]

[tasks."lint:actions"]
description = "Lint GitHub Actions workflows"
run = "actionlint"

[tasks."lint:yaml"]
description = "Lint YAML files"
run = "yamllint ."

[tasks."lint:markdown"]
description = "Lint Markdown files"
run = "markdownlint-cli2 '**/*.md'"

[tasks.fmt]
description = "Format YAML and Markdown files"
run = "prettier --write '**/*.{yml,yaml,md}'"

[tasks."fmt:check"]
description = "Check formatting (no writes)"
run = "prettier --check '**/*.{yml,yaml,md}'"

[tasks."fix:markdown"]
description = "Auto-fix Markdown lint violations"
run = "markdownlint-cli2 --fix '**/*.md'"

[tasks.check]
description = "Run all checks (format + lint)"
depends = ["fmt:check", "lint"]
3 changes: 3 additions & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
LICENSE.md
CHANGELOG.md
pnpm-lock.yaml
1 change: 1 addition & 0 deletions .prettierrc.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
proseWrap: preserve
Loading
Loading