diff --git a/.agents/skills/git-workflow/SKILL.md b/.agents/skills/git-workflow/SKILL.md index 8c1db881..19478689 100644 --- a/.agents/skills/git-workflow/SKILL.md +++ b/.agents/skills/git-workflow/SKILL.md @@ -45,9 +45,10 @@ ______________________________________________________________________ Based on the user's request, load exactly one workflow doc: | User intent | Load | -| ----------------------------------------------- | -------------------------------- | +|-------------------------------------------------|----------------------------------| | Commit work, save changes, stage and commit | [docs/commit.md](docs/commit.md) | | Create a branch, start a feature branch | [docs/branch.md](docs/branch.md) | | Create/open/draft a PR, submit the current work | [docs/pr.md](docs/pr.md) | -When intent is ambiguous, prefer the more complete workflow. If the user says "commit and open a PR", load `docs/pr.md` — it covers the full lifecycle including commit and branch. +When intent is ambiguous, prefer the more complete workflow. If the user says "commit and open a +PR", load `docs/pr.md` — it covers the full lifecycle including commit and branch. diff --git a/.agents/skills/git-workflow/docs/branch.md b/.agents/skills/git-workflow/docs/branch.md index 77641a69..149f1d68 100644 --- a/.agents/skills/git-workflow/docs/branch.md +++ b/.agents/skills/git-workflow/docs/branch.md @@ -12,7 +12,8 @@ ______________________________________________________________________ ## Goal -Create a properly named branch for the current work based on inferred change intent, then switch to it. +Create a properly named branch for the current work based on inferred change intent, then switch to +it. ## Branch naming format @@ -51,7 +52,8 @@ Examples: ## Branch-specific safety -If a branch with the same name already exists, append a short numeric suffix (e.g. `-2`) rather than overwriting it. +If a branch with the same name already exists, append a short numeric suffix (e.g. `-2`) rather than +overwriting it. See also [Safety Rules](../shared/safety-rules.md) for general constraints. diff --git a/.agents/skills/git-workflow/docs/commit.md b/.agents/skills/git-workflow/docs/commit.md index 07785f7c..7685161d 100644 --- a/.agents/skills/git-workflow/docs/commit.md +++ b/.agents/skills/git-workflow/docs/commit.md @@ -25,9 +25,11 @@ Create a commit representing the user's current working changes using a conventi [optional footer(s)] ``` -The description must immediately follow the colon and space. Scope is wrapped in parentheses when present: `feat(parser): add CSV support`. +The description must immediately follow the colon and space. Scope is wrapped in parentheses when +present: `feat(parser): add CSV support`. -For breaking changes, append `!` after the type/scope and/or include a `BREAKING CHANGE:` footer. See [Conventional Types](../shared/conventional-types.md) for details. +For breaking changes, append `!` after the type/scope and/or include a `BREAKING CHANGE:` footer. +See [Conventional Types](../shared/conventional-types.md) for details. ## Workflow @@ -35,7 +37,8 @@ For breaking changes, append `!` after the type/scope and/or include a `BREAKING 2. Identify all modified files 3. Stage all user-modified files (see [File Inclusion Policy](../shared/file-inclusion-policy.md)) 4. Exclude only obvious junk artifacts -5. Infer `` and `` (see [Conventional Types](../shared/conventional-types.md) and [Scope Detection](../shared/scope-detection.md)) +5. Infer `` and `` (see [Conventional Types](../shared/conventional-types.md) + and [Scope Detection](../shared/scope-detection.md)) 6. Generate and create the commit ## Output diff --git a/.agents/skills/git-workflow/docs/pr.md b/.agents/skills/git-workflow/docs/pr.md index a88e3416..142d3970 100644 --- a/.agents/skills/git-workflow/docs/pr.md +++ b/.agents/skills/git-workflow/docs/pr.md @@ -45,7 +45,8 @@ Create a new branch if: If already on a feature branch, use the current branch. -Branch naming follows `/-` (or `/` when no scope applies). See [Branch Workflow](branch.md) for full naming rules. +Branch naming follows `/-` (or `/` when no +scope applies). See [Branch Workflow](branch.md) for full naming rules. ______________________________________________________________________ @@ -53,7 +54,8 @@ ______________________________________________________________________ ### 1 — Inspect repository -Determine: current branch, whether HEAD is detached, git status, modified files, diff summary, and commit history against the base branch. +Determine: current branch, whether HEAD is detached, git status, modified files, diff summary, and +commit history against the base branch. ### 2 — Infer metadata @@ -61,11 +63,13 @@ Determine: PR type, optional scope, short description, PR title, branch name. ### 3 — Prepare branch -If on `main` or detached `HEAD`, create a new branch and switch to it. Otherwise stay on the current branch. +If on `main` or detached `HEAD`, create a new branch and switch to it. Otherwise stay on the current +branch. ### 4 — Commit work -Stage all user-modified files per [File Inclusion Policy](../shared/file-inclusion-policy.md). Exclude only obvious junk. Create commit. Skip if nothing to commit. +Stage all user-modified files per [File Inclusion Policy](../shared/file-inclusion-policy.md). +Exclude only obvious junk. Create commit. Skip if nothing to commit. ### 5 — Push branch @@ -75,7 +79,8 @@ Push to origin. Set upstream if necessary. Load `../templates/pull-request-template.md` and adapt it to the actual change. -Treat the template as a default outline, not a rigid contract. Prioritize reviewer scanability and signal quality over filling every heading. +Treat the template as a default outline, not a rigid contract. Prioritize reviewer scanability and +signal quality over filling every heading. Required information: @@ -86,16 +91,19 @@ Required information: Default outline (adapt as needed): - Summary - 2-4 sentences covering what changed and why -- Changes - grouped in the way that makes the diff easiest to review (for example by concern, subsystem, workflow, or user impact) +- Changes - grouped in the way that makes the diff easiest to review (for example by concern, + subsystem, workflow, or user impact) - Validation - concrete tests, manual verification, and confidence signals - Breaking Changes - include only when applicable - Related Issues - include only when applicable; do not invent issue numbers - Release Notes - include only for user-visible or package-relevant changes -- Notes for Reviewers - include when review guidance, risks, tradeoffs, follow-up context, or requested feedback focus would help; for UI changes, include screenshots/video links when useful +- Notes for Reviewers - include when review guidance, risks, tradeoffs, follow-up context, or + requested feedback focus would help; for UI changes, include screenshots/video links when useful Review mode: -- open as draft when implementation is incomplete, checks are pending, or early feedback is requested +- open as draft when implementation is incomplete, checks are pending, or early feedback is + requested - when draft, state what is incomplete and what feedback is being requested Rules: @@ -107,7 +115,8 @@ Rules: ### 7 — Create PR -Create the pull request using the generated title and body, as draft or ready-for-review based on the review mode rules above. +Create the pull request using the generated title and body, as draft or ready-for-review based on +the review mode rules above. ______________________________________________________________________ diff --git a/.agents/skills/git-workflow/examples/feature-example.md b/.agents/skills/git-workflow/examples/feature-example.md index 1cd8a990..29ebe879 100644 --- a/.agents/skills/git-workflow/examples/feature-example.md +++ b/.agents/skills/git-workflow/examples/feature-example.md @@ -22,7 +22,9 @@ Current work adds automatic PR template loading and branch creation when running ## 📋 Summary -> Adds automation for branch preparation and PR generation when opening a pull request from the current repository state. This removes manual branch setup when starting from `main` and keeps PR metadata generation consistent with inferred change intent. +> Adds automation for branch preparation and PR generation when opening a pull request from the +> current repository state. This removes manual branch setup when starting from `main` and keeps PR +> metadata generation consistent with inferred change intent. ______________________________________________________________________ @@ -42,11 +44,13 @@ ______________________________________________________________________ ## 🧪 Validation - Build/test status: Not explicitly verified by the agent -- Manual verification performed: Reviewed repository status, branch behavior, and generated PR content paths +- Manual verification performed: Reviewed repository status, branch behavior, and generated PR + content paths - Edge cases checked: Existing feature branch path and detached `HEAD` path ______________________________________________________________________ ## 💬 Notes for Reviewers -> Please focus on branch creation guardrails and metadata inference fallbacks, especially when repository state is ambiguous. +> Please focus on branch creation guardrails and metadata inference fallbacks, especially when +> repository state is ambiguous. diff --git a/.agents/skills/git-workflow/shared/conventional-types.md b/.agents/skills/git-workflow/shared/conventional-types.md index e1d40033..76a0bd25 100644 --- a/.agents/skills/git-workflow/shared/conventional-types.md +++ b/.agents/skills/git-workflow/shared/conventional-types.md @@ -3,7 +3,7 @@ Valid `` values: | Type | Description | SemVer impact | -| ---------- | ----------------------------------------------------------------- | ------------- | +|------------|-------------------------------------------------------------------|---------------| | `feat` | Introduces a new feature | MINOR | | `fix` | Patches a bug | PATCH | | `build` | Changes to the build system or external dependencies | — | diff --git a/.agents/skills/git-workflow/shared/scope-detection.md b/.agents/skills/git-workflow/shared/scope-detection.md index 95df6d0a..6bb4c29c 100644 --- a/.agents/skills/git-workflow/shared/scope-detection.md +++ b/.agents/skills/git-workflow/shared/scope-detection.md @@ -3,7 +3,7 @@ Infer scope from the folder containing the majority of the changes. | Folder | Scope | -| ----------------------------- | ------------------- | +|-------------------------------|---------------------| | `.github/workflows` | `github` | | `src/Core` | `core` | | `src/Abstractions` | `abstractions` | diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 4ffaa8e3..ed8d1d6e 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -2,6 +2,8 @@ version: 2 updates: - package-ecosystem: "nuget" directory: "/" + labels: + - "dependabot" schedule: interval: "weekly" open-pull-requests-limit: 10 @@ -32,7 +34,9 @@ updates: - "5.3.0" - package-ecosystem: "github-actions" - directoSystem.Text.Jsonry: "/" + directory: "/" + labels: + - "dependabot" schedule: interval: "weekly" open-pull-requests-limit: 10 @@ -50,6 +54,8 @@ updates: - package-ecosystem: "npm" directory: "/" + labels: + - "dependabot" schedule: interval: "weekly" open-pull-requests-limit: 10 @@ -65,6 +71,8 @@ updates: - package-ecosystem: "dotnet-sdk" directory: "/" + labels: + - "dependabot" schedule: interval: "weekly" commit-message: @@ -74,6 +82,8 @@ updates: - package-ecosystem: "pip" directory: "/" + labels: + - "dependabot" schedule: interval: "weekly" open-pull-requests-limit: 10 @@ -85,4 +95,4 @@ updates: minor-and-patch: update-types: - "minor" - - "patch" \ No newline at end of file + - "patch" diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml index 02d10ea1..66183668 100644 --- a/.github/release-drafter.yml +++ b/.github/release-drafter.yml @@ -4,82 +4,73 @@ tag-template: 'v$RESOLVED_VERSION' autolabeler: - label: 'type: feat' title: - - '/feat(\([^)]*\))?:/i' + - '/^feat(\([^)]*\))?:/i' - label: 'type: fix' title: - - '/fix(\([^)]*\))?:/i' + - '/^fix(\([^)]*\))?:/i' - label: 'type: docs' title: - - '/docs(\([^)]*\))?:/i' + - '/^docs(\([^)]*\))?:/i' - label: 'type: refactor' title: - - '/refactor(\([^)]*\))?:/i' + - '/^refactor(\([^)]*\))?:/i' - label: 'type: test' title: - - '/test(\([^)]*\))?:/i' + - '/^test(\([^)]*\))?:/i' - label: 'type: chore' title: - - '/chore(\([^)]*\))?:/i' + - '/^chore(\([^)]*\))?:/i' - label: 'type: ci' title: - - '/ci(\([^)]*\))?:/i' + - '/^ci(\([^)]*\))?:/i' + - label: 'type: revert' + title: + - '/^revert(\([^)]*\))?:/i' - label: 'breaking-change' - body: - - '/BREAKING CHANGE/i' + title: + - '/^(feat|fix|docs|refactor|test|chore|ci|revert)(\([^)]*\))?!:/i' categories: - title: '🚀 Features' labels: - 'type: feat' - - 'feature' - title: '🐛 Bug Fixes' labels: - 'type: fix' - - 'bug' - - 'bugfix' - title: '📚 Documentation' labels: - 'type: docs' - - 'documentation' - - title: '⚡ Performance' - labels: - - 'type: perf' - - 'performance' - title: '🔄 Refactoring' labels: - 'type: refactor' - - 'refactor' - title: '✅ Tests' labels: - 'type: test' - - 'test' - title: '🔧 Maintenance' labels: - 'type: chore' - 'type: ci' - - 'chore' - - 'ci' + - 'type: revert' - title: '⚠️ Breaking Changes' labels: - - 'breaking' - 'breaking-change' version-resolver: major: labels: - - 'breaking' - 'breaking-change' minor: labels: - 'type: feat' - - 'feature' patch: labels: - 'type: fix' - 'type: docs' + - 'type: refactor' + - 'type: test' - 'type: chore' - 'type: ci' - - 'bug' + - 'type: revert' default: patch template: | @@ -99,9 +90,7 @@ include-labels: - 'type: test' - 'type: chore' - 'type: ci' - - 'feature' - - 'bug' - - 'breaking' + - 'type: revert' - 'breaking-change' exclude-labels: diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml index 252ecc29..1b0fab4d 100644 --- a/.github/workflows/docs.yaml +++ b/.github/workflows/docs.yaml @@ -10,7 +10,7 @@ on: - 'pyproject.toml' - 'uv.lock' pull_request: - types: [opened, synchronize, reopened, ready_for_review] + types: [ opened, synchronize, reopened, ready_for_review ] branches: [ main ] paths: - 'docs/**' @@ -38,7 +38,7 @@ jobs: uses: actions/checkout@v6 with: fetch-depth: 0 - + - name: Install pngquant run: sudo apt-get update && sudo apt-get install -y pngquant @@ -46,14 +46,14 @@ jobs: uses: actions/setup-python@v6 with: python-version-file: "pyproject.toml" - + - name: Install uv uses: astral-sh/setup-uv@v7 with: enable-cache: true - + - name: Install the project - run: uv sync --locked --all-extras --dev + run: uv sync --all-extras --dev - name: Setup Pages id: pages diff --git a/.github/workflows/update-changelog.yaml b/.github/workflows/update-changelog.yaml deleted file mode 100644 index 20948f9f..00000000 --- a/.github/workflows/update-changelog.yaml +++ /dev/null @@ -1,72 +0,0 @@ -name: "Update Changelog" - -on: - release: - types: [released] - workflow_dispatch: - -jobs: - update: - runs-on: ubuntu-latest - - permissions: - # Give the default GITHUB_TOKEN write permission to commit and push the - # updated CHANGELOG back to the repository. - # https://github.blog/changelog/2023-02-02-github-actions-updating-the-default-github_token-permissions-to-read-only/ - contents: write - pull-requests: write - - steps: - - name: Generate GitHub App token - uses: actions/create-github-app-token@v3 - id: app-token - with: - app-id: ${{ secrets.CHANGELOG_UPDATE_ID }} - private-key: ${{ secrets.CHANGELOG_UPDATE_PRIVATE_KEY }} - - - name: Checkout code - uses: actions/checkout@v6 - with: - token: ${{ steps.app-token.outputs.token }} - ref: ${{ github.event.release.target_commitish }} - - - name: Update Changelog - uses: stefanzweifel/changelog-updater-action@v1 - with: - latest-version: ${{ github.event.release.tag_name }} - release-notes: ${{ github.event.release.body }} - - - name: Remove header and summary from CHANGELOG - run: perl -i -pe 'BEGIN{undef $/} s/(## (?:\[)?v[\d.]+(?:\](?:\([^)]+\))?)? - \d{4}-\d{2}-\d{2}\n)[\s\S]*?### Changes\n+/$1\n/g' CHANGELOG.md - - - name: Create Pull Request - id: cpr - uses: peter-evans/create-pull-request@v8 - with: - token: ${{ steps.app-token.outputs.token }} - branch: changelog/${{ github.event.release.tag_name }} - base: ${{ github.event.release.target_commitish }} - title: "chore: update changelog for ${{ github.event.release.tag_name }}" - body: | - ## Automated Changelog Update - - This PR updates the CHANGELOG.md file with entries from the release: ${{ github.event.release.tag_name }} - - The changelog was automatically updated by the release workflow. - commit-message: "chore: update changelog for ${{ github.event.release.tag_name }}" - labels: "automated,changelog,chore" - delete-branch: true - - - name: Approve PR - if: steps.cpr.outputs.pull-request-number - run: gh pr review --approve "$PR_URL" - env: - PR_URL: ${{ steps.cpr.outputs.pull-request-url }} - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - name: Enable Auto-merge - if: steps.cpr.outputs.pull-request-number - run: gh pr merge --auto --squash "$PR_URL" - env: - PR_URL: ${{ steps.cpr.outputs.pull-request-url }} - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/validate-pr-title.yaml b/.github/workflows/validate-pr-title.yaml index 39a2c76b..4ecc0a64 100644 --- a/.github/workflows/validate-pr-title.yaml +++ b/.github/workflows/validate-pr-title.yaml @@ -2,7 +2,7 @@ name: Validate PR Title on: pull_request: - types: [opened, edited, synchronize] + types: [ opened, edited, synchronize ] branches: - main @@ -33,20 +33,9 @@ jobs: test chore ci - scopes: | - host - envelopes - abstractions - opentelemetry - source-generators - deps - build - ci - github - core - docs - testing - tests + revert requireScope: false - subjectPattern: ^[a-z].* + subjectPattern: ^[a-z].*$ subjectPatternError: Subject must start with lowercase letter + scopePattern: ^[a-z0-9-]+$ + scopePatternError: Scope must be lowercase (letters, numbers, hyphens) diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index 67d235d1..00000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,312 +0,0 @@ -# Changelog - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## [Unreleased](https://github.com/j-d-ha/minimal-lambda/compare/v2.3.1...HEAD) - -## [v2.3.1](https://github.com/j-d-ha/minimal-lambda/compare/v2.3.0...v2.3.1) - 2026-03-23 - -### 🐛 Bug Fixes - -* fix(deps): downgrade Microsoft.CodeAnalysis packages to 5.0.0 (#316) @j-d-ha -* fix(ci): use GitHub App token in changelog update workflow (#312) @j-d-ha - -### 🔧 Maintenance - -* chore(deps): Bump go-task/setup-task from 1 to 2 (#313) @dependabot -* chore(deps): Bump actions/create-github-app-token from 2 to 3 (#314) @dependabot - -## [v2.3.0](https://github.com/j-d-ha/minimal-lambda/compare/v2.2.0...v2.3.0) - 2026-03-20 - -## 🚀 Features - -* feat(testing): migrate test infrastructure to Microsoft Testing Platform (#288) @j-d-ha - -## 🐛 Bug Fixes - -* fix(deps): switch xunit to mtp-v2 and fix Scriban build error (#309) @j-d-ha - -## 🔄 Refactoring - -* refactor: consolidate code style and improve readability (#291) @j-d-ha - -## ✅ Tests - -* github: rewrite PR guide for clarity and detail (#294) @j-d-ha - -## 🔧 Maintenance - -* chore: Bump the minor-and-patch group with 20 updates (#307) @dependabot -* chore: Bump jetbrains.resharper.globaltools from 2025.3.1 to 2025.3.3 (#310) @dependabot -* chore(deps-dev): bump the minor-and-patch group with 2 updates (#299) @dependabot -* chore(deps): bump dotnet-sdk from 10.0.101 to 10.0.201 (#306) @dependabot -* chore(deps-dev): bump the minor-and-patch group with 2 updates (#296) @dependabot -* chore: bump urllib3 from 2.5.0 to 2.6.3 in the uv group across 1 directory (#286) @dependabot -* chore: Bump the minor-and-patch group with 16 updates (#287) @dependabot -* chore(deps): bump dotnet-sdk from 10.0.101 to 10.0.102 (#285) @dependabot - -## [v2.2.0](https://github.com/j-d-ha/minimal-lambda/compare/v2.1.1...v2.2.0) - 2026-01-12 - -### 🚀 Features - -* feat(ci): add auto-approval to automated PR workflows (#283) @j-d-ha -* feat(tests): add multi-targeting and source generator improvements (#274) @j-d-ha -* feat(tests): add scrubbers for dynamic snapshot values (#273) @j-d-ha - -### 🔄 Refactoring - -* refactor(source-generators): modularize code generation and improve generated file organization ( - #280) @j-d-ha -* refactor(source-generators): simplify and restructure code generation logic (#279) @j-d-ha - -### 🔧 Maintenance - -* chore: bump the minor-and-patch group with 6 updates (#281) @dependabot -* chore(deps-dev): Bump the minor-and-patch group with 2 updates (#277) @dependabot -* chore: Bump the minor-and-patch group with 4 updates (#275) @dependabot - -## [v2.1.1](https://github.com/j-d-ha/minimal-lambda/compare/v2.0.0...v2.1.1) - 2025-12-22 - -### 🚀 Features - -* feat(build): add comprehensive AOT compatibility support (#267) @j-d-ha -* feat(host): add factory-based middleware creation support (#266) @j-d-ha -* feat(source-generators): add class-based middleware support with UseMiddleware() (#257) @j-d-ha - -### 🐛 Bug Fixes - -* fix: prevent validation project from being packaged (#270) @j-d-ha -* fix(ci): add Task installation step to main-build pipeline (#268) @j-d-ha - -### 🔧 Maintenance - -* fix(ci): add Task installation step to main-build pipeline (#268) @j-d-ha -* chore: migrate InternalsVisibleTo declarations to project files (#265) @j-d-ha -* chore(deps): migrate to LayeredCraft.SourceGeneratorTools.Generator v0.1.0-beta.10 (#264) @j-d-ha -* chore: update changelog for v2.0.0 (#256) @github-actions - -## [v2.0.0](https://github.com/j-d-ha/minimal-lambda/compare/v1.3.1...v2.0.0) - 2025-12-18 - -### 🚀 Features - -* feat(host): add ILambdaLifecycleContext for lifecycle handlers (#252) @j-d-ha -* feat(testing): add customizable JSON serializer options to LambdaTestServer (#251) @j-d-ha -* feat(envelopes): support multiple response types with shared extension methods (#213) @j-d-ha -* feat(testing): add MinimalLambda.Testing package (#233) @j-d-ha -* feat(docs): refine messaging to emphasize Lambda-first design (#228) @j-d-ha - -### 🐛 Bug Fixes - -* fix(testing): prevent DI container disposal during test execution (#234) @j-d-ha -* fix(build): add build targets for packaging (#231) @j-d-ha -* fix(core): adjust default timeout values and update documentation (#226) @j-d-ha - -### 📚 Documentation - -* docs: document MinimalLambda.Testing package and enhance testing guide (#235) @j-d-ha - -### 🔄 Refactoring - -* refactor(source-generators): improve type casting and output generation (#254) @j-d-ha -* refactor(abstractions): rename ILambdaHostContext to ILambdaInvocationContext (#253) @j-d-ha -* refactor(core): replace [Event] attribute with [FromEvent] (#250) @j-d-ha -* refactor: rename framework from AwsLambda.Host to MinimalLambda (#227) @j-d-ha - -### 🔧 Maintenance - -* chore(deps): bump dotnet-sdk from 10.0.100 to 10.0.101 (#239) @dependabot -* chore(deps): bump actions/checkout from 4 to 6 (#241) @dependabot -* chore(deps): bump the minor-and-patch group with 2 updates (#242) @dependabot -* chore(deps): bump actions/setup-python from 5 to 6 (#245) @dependabot -* chore(deps): bump actions/upload-pages-artifact from 3 to 4 (#246) @dependabot -* chore(github): add pip ecosystem and ignore release-drafter (#248) @j-d-ha -* chore(deps): Bump the minor-and-patch group with 12 updates (#247) @dependabot -* chore(deps): update Microsoft.Extensions.Hosting from RC to stable (#232) @j-d-ha -* chore: remove obsolete code and deprecated features (#229) @j-d-ha - -### ⚠️ Breaking Changes - -* refactor(abstractions): rename ILambdaHostContext to ILambdaInvocationContext (#253) @j-d-ha -* feat(host): add ILambdaLifecycleContext for lifecycle handlers (#252) @j-d-ha -* refactor: rename framework from AwsLambda.Host to MinimalLambda (#227) @j-d-ha - -## [v1.3.1](https://github.com/j-d-ha/minimal-lambda/compare/v1.3.0...v1.3.1) - 2025-12-10 - -### 🐛 Bug Fixes - -* fix(core): add missing TenantId and TraceId properties to DefaultLambdaHostContext (#224) @j-d-ha -* fix(ci): remove sign-commits from changelog workflow (#223) @j-d-ha - -## [v1.3.0](https://github.com/j-d-ha/minimal-lambda/compare/v1.2.1...v1.3.0) - 2025-12-10 - -## 🚀 Features - -* feat(source-generators): support multiple MapHandler invocations with custom feature providers ( - #214) @j-d-ha -* docs: update MkDocs palette toggle configuration (#211) @j-d-ha - -## 🐛 Bug Fixes - -* fix: update third-party license attributions (#217) @j-d-ha - -## 📚 Documentation - -* docs: add comprehensive getting started guide and restructure documentation (#209) @j-d-ha - -## 🔄 Refactoring - -* refactor(host): migrate BootstrapHttpClient from options to dependency injection (#219) @j-d-ha -* refactor(docs): replace ASPNETCORE_ENVIRONMENT with DOTNET_ENVIRONMENT (#216) @j-d-ha - -## 🔧 Maintenance - -* ci(github): optimize workflow triggers for draft PRs (#215) @j-d-ha - -## [v1.2.1](https://github.com/j-d-ha/minimal-lambda/compare/v1.2.0...v1.2.1) - 2025-11-30 - -## 🐛 Bug Fixes - -* fix: update build versioning (#206) @j-d-ha -* feat(ci): fixed interceptor namespace (#205) @ncipollina -* feat(ci): add transitive builds (#202) @ncipollina - -## 📚 Documentation - -* docs: add GitHub Pages landing page with MkDocs (#203) @j-d-ha - -## 🔧 Maintenance - -* ci: skip build workflows for docs-only changes (#204) @j-d-ha -* chore(github): enhance changelog update workflow (#201) @j-d-ha - -## [v1.2.0](https://github.com/j-d-ha/minimal-lambda/compare/v1.1.0...v1.2.0) - 2025-11-29 - -## 🚀 Features - -* feat(envelopes): add SqsSnsEnvelope for SNS-to-SQS subscription pattern (#196) @j-d-ha -* feat(envelopes): add CloudWatch Logs envelope support (#195) @j-d-ha -* feat(envelopes): add Kafka envelope support (#194) @j-d-ha -* feat(envelopes): add Kinesis Firehose envelope support (#193) @j-d-ha -* feat(envelopes): add Kinesis envelope for strongly-typed message handling (#192) @j-d-ha -* feat(envelopes): add Application Load Balancer envelope support (#187) @j-d-ha -* feat(envelopes): expand envelope options for multiple serialization formats (#184) @j-d-ha - -## 🐛 Bug Fixes - -* fix(ci): add explicit token to checkout and create-pull-request actions (#183) @j-d-ha - -## 📚 Documentation - -* docs: standardize README documentation across all packages (#200) @j-d-ha -* feat(envelopes): add SNS envelope for strongly-typed message handling (#190) @j-d-ha - -## 🔄 Refactoring - -* refactor(abstractions): replace Lazy implementation with property for JSON options (#199) @j-d-ha - -## 🔧 Maintenance - -* chore: cleanup repository formatting and documentation (#197) @j-d-ha -* chore(ci): pinned release-drafter action to 6.0.0 (#182) @j-d-ha - -## [v1.1.0](https://github.com/j-d-ha/minimal-lambda/compare/v1.0.0...v1.1.0) - 2025-11-27 - -## 🚀 Features - -* feat(host): add stream feature abstraction layer (#181) @j-d-ha -* feat(core): add ILambdaHostContextAccessor and context factory integration (#178) @j-d-ha -* feat(source-generators): add GeneratedCodeAttribute to all generated code classes (#174) @j-d-ha - -## 🐛 Bug Fixes - -* fix(ci): update changelog workflow to create pull request instead of direct commit (#172) @j-d-ha -* fix(ci): add write permissions for release asset uploads (#171) @j-d-ha - -## 📚 Documentation - -* docs: add GitHub issue and discussion templates (#176) @j-d-ha - -## 🔧 Maintenance - -* chore(github): update changelog for v1.0.0 release (#170) @j-d-ha - -## [v1.0.0](https://github.com/j-d-ha/minimal-lambda/compare/v0.1.3...v1.0.0) - 2025-11-24 - -## 🚀 Features - -* feat(host): refactor builder entrypoint and improve configuration (#166) @j-d-ha -* test(source-generators): add comprehensive tests for `HashCode` type (#153) @j-d-ha -* feat(envelopes): add modular envelope system for Lambda event handling (#131) @j-d-ha - -## 🐛 Bug Fixes - -* fix: resolve Sonar findings in tests and runtime code (#147) @j-d-ha - -## 📚 Documentation - -* docs: enhance package README overviews with detailed feature descriptions (#124) @j-d-ha - -## 🔄 Refactoring - -* refactor(core): refactor lambda application and builder (#163) @j-d-ha -* refactor(host): reorganize folder structure with hierarchical layers (#146) @j-d-ha - -## ✅ Tests - -* test(source-generators): add comprehensive tests for `HashCode` type (#153) @j-d-ha - -## 🔧 Maintenance - -* chore(deps): Bump the minor-and-patch group with 1 update ( - #165) @[dependabot[bot]](https://github.com/apps/dependabot) -* chore(github): configure Dependabot to use conventional commits (#164) @j-d-ha -* chore(deps): bump actions/checkout from 5 to 6 ( - #158) @[dependabot[bot]](https://github.com/apps/dependabot) -* chore(deps-dev): bump husky from 8.0.3 to 9.1.7 ( - #149) @[dependabot[bot]](https://github.com/apps/dependabot) -* chore(deps-dev): bump @commitlint/cli from 18.6.1 to 20.1.0 ( - #150) @[dependabot[bot]](https://github.com/apps/dependabot) -* chore(deps-dev): bump @commitlint/config-conventional from 18.6.3 to 20.0.0 ( - #151) @[dependabot[bot]](https://github.com/apps/dependabot) -* feat(opentelemetry): add OpenTelemetry unit tests and update dependencies (#148) @j-d-ha -* chore(deps-dev): bump js-yaml from 4.1.0 to 4.1.1 in the npm_and_yarn group across 1 directory ( - #132) @[dependabot[bot]](https://github.com/apps/dependabot) -* ci: skip workflows for draft pull requests (#127) @j-d-ha -* ci: skip pr build for draft pull requests (#126) @j-d-ha -* ci(github): replace softprops action with gh release upload command (#123) @j-d-ha -* chore(deps): bump amannn/action-semantic-pull-request from 5.4.0 to 6.1.1 ( - #121) @[dependabot[bot]](https://github.com/apps/dependabot) -* chore(deps): bump peter-evans/create-pull-request from 5 to 7 ( - #119) @[dependabot[bot]](https://github.com/apps/dependabot) -* chore(deps): bump actions/checkout from 4 to 5 ( - #118) @[dependabot[bot]](https://github.com/apps/dependabot) -* chore(deps): bump stefanzweifel/git-auto-commit-action from 5 to 7 ( - #117) @[dependabot[bot]](https://github.com/apps/dependabot) -* chore(deps): bump release-drafter/release-drafter from 6.0.0 to 6.1.0 in the minor-and-patch - group (#116) @[dependabot[bot]](https://github.com/apps/dependabot) - -## ⚠️ Breaking Changes - -* feat(host): refactor builder entrypoint and improve configuration (#166) @j-d-ha -* refactor(core): refactor lambda application and builder (#163) @j-d-ha -* refactor(host): reorganize folder structure with hierarchical layers (#146) @j-d-ha -* feat(envelopes): add modular envelope system for Lambda event handling (#131) @j-d-ha - -## [v0.1.3](https://github.com/j-d-ha/minimal-lambda/compare/v0.1.2...v0.1.3) - 2025-11-10 - -### 🐛 Bug Fixes - -* fix: prevent example projects from being packed during release (#115) @j-d-ha - -## [v0.1.2](https://github.com/j-d-ha/minimal-lambda/compare/v0.1.1...v0.1.2) - 2025-11-10 - -### 🔧 Maintenance - -* ci(github): get NuGet package version from release tag (#113) @j-d-ha - -## [v0.1.1](https://github.com/j-d-ha/minimal-lambda/compare/v0.1.1) - 2025-11-09 - -### 🔧 Maintenance - -* chore(ci): replace release notes workflow with changelog updater (#112) @j-d-ha diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 482713cd..9aa01d71 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -57,6 +57,9 @@ We are committed to providing a welcoming and inclusive environment for all cont # Install Node dependencies (commitlint & husky for commit validation) npm install +# Set up git commit hooks (commit-msg validation) +task local:setup-git-hooks + # Restore dependencies dotnet restore diff --git a/MinimalLambda.sln b/MinimalLambda.sln index 717b3c4a..1143161b 100644 --- a/MinimalLambda.sln +++ b/MinimalLambda.sln @@ -22,7 +22,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution mkdocs.yml = mkdocs.yml .editorconfig = .editorconfig .csharpierignore = .csharpierignore - CHANGELOG.md = CHANGELOG.md EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{827E0CD3-B72D-47B6-A68D-7590B98EB39B}" diff --git a/commitlint.config.js b/commitlint.config.js index f4803dbf..e82473a4 100644 --- a/commitlint.config.js +++ b/commitlint.config.js @@ -1,8 +1,9 @@ module.exports = { extends: ['@commitlint/config-conventional'], rules: { - 'type-enum': [2, 'always', ['feat', 'fix', 'docs', 'refactor', 'test', 'chore', 'ci']], - 'subject-case': [2, 'never', ['start-case', 'pascal-case', 'upper-case']], + 'type-enum': [2, 'always', ['feat', 'fix', 'docs', 'refactor', 'test', 'chore', 'ci', 'revert', 'cr']], + 'subject-case': [2, 'never', ['sentence-case', 'start-case', 'pascal-case', 'upper-case']], + 'scope-case': [2, 'always', 'lower-case'], 'subject-empty': [2, 'never'], 'subject-full-stop': [2, 'never', '.'], 'type-case': [2, 'always', 'lowercase'], diff --git a/tasks/LocalDevTasks.yml b/tasks/LocalDevTasks.yml index ea6a1a03..26150a19 100644 --- a/tasks/LocalDevTasks.yml +++ b/tasks/LocalDevTasks.yml @@ -26,6 +26,15 @@ tasks: - dotnet tool restore - echo "✅ Tools restored" + setup-git-hooks: + desc: Install git commit hooks with Husky + silent: true + cmds: + - echo "🪝 Setting up git commit hooks" + - npm install + - npm run prepare + - echo "✅ Git commit hooks are ready" + clean-all: desc: Clean all build artifacts and packages silent: true @@ -54,4 +63,4 @@ tasks: silent: true cmds: - uv sync - - uv run mkdocs serve --livereload \ No newline at end of file + - uv run mkdocs serve --livereload