Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
149 changes: 148 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1 +1,148 @@
慮敭›䥃ਊ湥㩶 䘠剏䕃䩟噁十剃偉彔䍁䥔乏当佔也䑏㉅㨴琠畲੥漊㩮 瀠獵㩨 †戠慲据敨㩳嬠慭湩੝†異汬牟煥敵瑳਺††牢湡档獥›浛楡嵮 眠牯晫潬彷楤灳瑡档਺瀊牥業獳潩獮਺†潣瑮湥獴›敲摡ਊ潣据牵敲据㩹 朠潲灵›楣␭筻朠瑩畨⹢潷歲汦睯素⵽笤⁻楧桴扵爮晥素੽†慣据汥椭⵮牰杯敲獳›牴敵ਊ潪獢਺†畢汩ⵤ整瑳਺††畲獮漭㩮甠畢瑮⵵慬整瑳 †猠整獰਺†††‭獵獥›捡楴湯⽳档捥潫瑵癀਴ ††ⴠ渠浡㩥匠瑥灵⸠䕎⁔䑓ੋ††††獵獥›捡楴湯⽳敳畴⵰潤湴瑥癀਴††††楷桴਺†††††潤湴瑥瘭牥楳湯›〱〮砮ਊ†††‭慮敭›慃档⁥畎敇⁴慰正条獥 †††甠敳㩳愠瑣潩獮振捡敨癀਴††††楷桴਺†††††慰桴›⽾渮杵瑥瀯捡慫敧ੳ†††††敫㩹␠筻爠湵敮⹲獯素⵽畮敧⵴笤⁻慨桳楆敬⡳⨧⼪⸪獣牰橯Ⱗ✠⨪术潬慢⹬獪湯Ⱗ✠⨪⨯献湬❸
絽 ††††爠獥潴敲欭祥㩳簠 †††††␠筻爠湵敮⹲獯素⵽畮敧⵴ਊ†††‭慮敭›畒䥃瘠慩丠歵੥††††畲㩮搠瑯敮⁴畲ⴭ牰橯捥⁴畢汩⽤扟極摬挮灳潲ⴭⴠ爭潯⁴‮ⴭ慴杲瑥䌠⁩ⴭ潣普杩牵瑡潩敒敬獡੥ ††ⴠ渠浡㩥唠汰慯⁤整瑳爠獥汵獴 †††椠㩦愠睬祡⡳਩††††獵獥›捡楴湯⽳灵潬摡愭瑲晩捡䁴㑶 †††眠瑩㩨 ††††渠浡㩥琠獥⵴敲畳瑬ੳ†††††慰桴›敔瑳敒畳瑬⽳ ††††椠ⵦ潮昭汩獥昭畯摮›慷湲ਊ†††‭慮敭›灕潬摡挠摯⁥潣敶慲敧 †††椠㩦愠睬祡⡳਩††††獵獥›捡楴湯⽳灵潬摡愭瑲晩捡䁴㑶 †††眠瑩㩨 ††††渠浡㩥挠摯ⵥ潣敶慲敧 ††††瀠瑡㩨吠獥剴獥汵獴⨯⼪潣敶慲敧挮扯牥畴慲砮汭 ††††椠ⵦ潮昭汩獥昭畯摮›慷湲ਊ†慳灭敬㩳 †爠湵⵳湯›扵湵畴氭瑡獥ੴ††瑳灥㩳 ††ⴠ渠浡㩥䌠敨正畯⁴敄楳湧慐瑴牥獮 †††甠敳㩳愠瑣潩獮振敨正畯䁴㑶 †††眠瑩㩨 ††††瀠瑡㩨䐠獥杩偮瑡整湲ੳ ††ⴠ渠浡㩥䌠敨正畯⁴敄楳湧慐瑴牥獮匮浡汰獥 †††甠敳㩳愠瑣潩獮振敨正畯䁴㑶 †††眠瑩㩨 ††††爠灥獯瑩牯㩹匠祫汭⽹敄楳湧慐瑴牥獮匮浡汰獥 ††††瀠瑡㩨䐠獥杩偮瑡整湲⹳慓灭敬ੳ ††ⴠ渠浡㩥匠瑥灵⸠䕎⁔䑓ੋ††††獵獥›捡楴湯⽳敳畴⵰潤湴瑥癀਴††††楷桴਺†††††潤湴瑥瘭牥楳湯›〱〮砮ਊ†††‭慮敭›慃档⁥畎敇⁴慰正条獥 †††甠敳㩳愠瑣潩獮振捡敨癀਴††††楷桴਺†††††慰桴›⽾渮杵瑥瀯捡慫敧ੳ†††††敫㩹␠筻爠湵敮⹲獯素⵽畮敧⵴灤猭浡汰獥␭筻栠獡䙨汩獥✨敄楳湧慐瑴牥獮匮浡汰獥⨯⼪⸪獣牰橯Ⱗ✠敄楳湧慐瑴牥獮匮浡汰獥术潬慢⹬獪湯Ⱗ✠敄楳湧慐瑴牥獮⨯⼪⸪獣牰橯⤧素੽†††††敲瑳牯ⵥ敫獹›੼††††††笤⁻畲湮牥漮⁳絽渭杵瑥搭⵰慳灭敬⵳ †††††␠筻爠湵敮⹲獯素⵽畮敧⵴ਊ†††‭慮敭›畒楳汢湩⁧慳灭敬⁳楶⁡畎敫 †††眠牯楫杮搭物捥潴祲›敄楳湧慐瑴牥獮匮浡汰獥 †††爠湵›潤湴瑥爠湵ⴠ瀭潲敪瑣戠極摬弯畢汩⹤獣牰橯ⴠ‭ⴭ潲瑯⸠ⴠ琭牡敧⁴楃ⴠ挭湯楦畧慲楴湯删汥慥敳ਊ†畢汩ⵤ整瑳渭瑥㠴਺††畲獮漭㩮眠湩潤獷氭瑡獥ੴ††瑳灥㩳 ††ⴠ甠敳㩳愠瑣潩獮振敨正畯䁴㑶ਊ†††‭慮敭›敓畴⁰丮呅匠䭄 †††甠敳㩳愠瑣潩獮猯瑥灵搭瑯敮䁴㑶 †††眠瑩㩨 ††††搠瑯敮⵴敶獲潩㩮ㄠ⸰⸰੸ ††ⴠ渠浡㩥䌠捡敨丠䝵瑥瀠捡慫敧ੳ††††獵獥›捡楴湯⽳慣档䁥㑶 †††眠瑩㩨 ††††瀠瑡㩨縠ⸯ畮敧⽴慰正条獥 ††††欠祥›笤⁻畲湮牥漮⁳絽渭杵瑥␭筻栠獡䙨汩獥✨⨪⨯挮灳潲❪‬⨧⼪汧扯污樮潳❮‬⨧⼪⸪汳确⤧素੽†††††敲瑳牯ⵥ敫獹›੼††††††笤⁻畲湮牥漮⁳絽渭杵瑥ਭ ††ⴠ渠浡㩥删湵渠瑥㠴琠獥獴瘠慩丠歵੥††††畲㩮搠瑯敮⁴畲ⴭ牰橯捥⁴畢汩⽤扟極摬挮灳潲ⴭⴠ爭潯⁴‮ⴭ慴杲瑥䌠乩瑥㠴ⴠ挭湯楦畧慲楴湯删汥慥敳ਊ†††‭慮敭›灕潬摡渠瑥㠴琠獥⁴敲畳瑬ੳ††††晩›污慷獹⤨ †††甠敳㩳愠瑣潩獮甯汰慯ⵤ牡楴慦瑣癀਴††††楷桴਺†††††慮敭›整瑳爭獥汵獴渭瑥㠴 ††††瀠瑡㩨吠獥剴獥汵獴ਯ†††††晩渭ⵯ楦敬⵳潦湵㩤眠牡੮ 瀠捡㩫 †爠湵⵳湯›扵湵畴氭瑡獥ੴ††敮摥㩳嬠畢汩ⵤ整瑳‬畢汩ⵤ整瑳渭瑥㠴‬慳灭敬嵳 †猠整獰਺†††‭獵獥›捡楴湯⽳档捥潫瑵癀਴ ††ⴠ渠浡㩥匠瑥灵⸠䕎⁔䑓ੋ††††獵獥›捡楴湯⽳敳畴⵰潤湴瑥癀਴††††楷桴਺†††††潤湴瑥瘭牥楳湯›〱〮砮ਊ†††‭慮敭›慃档⁥畎敇⁴慰正条獥 †††甠敳㩳愠瑣潩獮振捡敨癀਴††††楷桴਺†††††慰桴›⽾渮杵瑥瀯捡慫敧ੳ†††††敫㩹␠筻爠湵敮⹲獯素⵽畮敧⵴笤⁻慨桳楆敬⡳⨧⼪⸪獣牰橯Ⱗ✠⨪术潬慢⹬獪湯Ⱗ✠⨪⨯献湬❸
絽 ††††爠獥潴敲欭祥㩳簠 †††††␠筻爠湵敮⹲獯素⵽畮敧⵴ਊ†††‭慮敭›慐正愠摮瘠牥晩⁹楶⁡畎敫 †††爠湵›潤湴瑥爠湵ⴠ瀭潲敪瑣戠極摬弯畢汩⹤獣牰橯ⴠ‭ⴭ潲瑯⸠ⴠ琭牡敧⁴楃慐正ⴠ挭湯楦畧慲楴湯删汥慥敳ਊ†††‭慮敭›灕潬摡瀠捡慫敧ੳ††††獵獥›捡楴湯⽳灵潬摡愭瑲晩捡䁴㑶 †††眠瑩㩨 ††††渠浡㩥渠杵瑥瀭捡慫敧ੳ†††††慰桴›牡楴慦瑣⽳慰正条⽥⸪畮歰੧†††††晩渭ⵯ楦敬⵳潦湵㩤攠牲牯�
name: CI

env:
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true

on:
push:
branches: [main]
pull_request:
branches: [main]
workflow_dispatch:

permissions:
contents: read

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

jobs:
build-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Setup .NET SDK
uses: actions/setup-dotnet@v4
with:
dotnet-version: 10.0.x

- name: Cache NuGet packages
uses: actions/cache@v4
with:
path: ~/.nuget/packages
key: ${{ runner.os }}-nuget-${{ hashFiles('**/*.csproj', '**/global.json', '**/*.slnx') }}
restore-keys: |
${{ runner.os }}-nuget-

- name: Run CI via Nuke
run: dotnet run --project build/_build.csproj -- --root . --target Ci --configuration Release

- name: Upload test results
if: always()
uses: actions/upload-artifact@v4
with:
name: test-results
path: TestResults/
if-no-files-found: warn

- name: Upload code coverage
if: always()
uses: actions/upload-artifact@v4
with:
name: code-coverage
path: TestResults/**/coverage.cobertura.xml
if-no-files-found: warn

samples:
runs-on: ubuntu-latest
steps:
- name: Checkout DesignPatterns
uses: actions/checkout@v4
with:
path: DesignPatterns

- name: Checkout DesignPatterns.Samples
uses: actions/checkout@v4
with:
repository: Skymly/DesignPatterns.Samples
# Paired PR branches share a name; main pushes use main.
ref: ${{ github.head_ref || github.ref_name }}
path: DesignPatterns.Samples

- name: Setup .NET SDK
uses: actions/setup-dotnet@v4
with:
dotnet-version: 10.0.x

- name: Cache NuGet packages
uses: actions/cache@v4
with:
path: ~/.nuget/packages
key: ${{ runner.os }}-nuget-dp-samples-${{ hashFiles('DesignPatterns.Samples/**/*.csproj', 'DesignPatterns.Samples/global.json', 'DesignPatterns/**/*.csproj') }}
restore-keys: |
${{ runner.os }}-nuget-dp-samples-
${{ runner.os }}-nuget-

- name: Run sibling samples via Nuke
working-directory: DesignPatterns.Samples
run: dotnet run --project build/_build.csproj -- --root . --target Ci --configuration Release

build-test-net48:
runs-on: windows-latest
steps:
- uses: actions/checkout@v4

- name: Setup .NET SDK
uses: actions/setup-dotnet@v4
with:
dotnet-version: 10.0.x

- name: Cache NuGet packages
uses: actions/cache@v4
with:
path: ~/.nuget/packages
key: ${{ runner.os }}-nuget-${{ hashFiles('**/*.csproj', '**/global.json', '**/*.slnx') }}
restore-keys: |
${{ runner.os }}-nuget-

- name: Run net48 tests via Nuke
run: dotnet run --project build/_build.csproj -- --root . --target CiNet48 --configuration Release

- name: Upload net48 test results
if: always()
uses: actions/upload-artifact@v4
with:
name: test-results-net48
path: TestResults/
if-no-files-found: warn

pack:
runs-on: ubuntu-latest
needs: [build-test, build-test-net48, samples]
steps:
- uses: actions/checkout@v4

- name: Setup .NET SDK
uses: actions/setup-dotnet@v4
with:
dotnet-version: 10.0.x

- name: Cache NuGet packages
uses: actions/cache@v4
with:
path: ~/.nuget/packages
key: ${{ runner.os }}-nuget-${{ hashFiles('**/*.csproj', '**/global.json', '**/*.slnx') }}
restore-keys: |
${{ runner.os }}-nuget-

- name: Pack and verify via Nuke
run: dotnet run --project build/_build.csproj -- --root . --target CiPack --configuration Release

- name: Upload packages
uses: actions/upload-artifact@v4
with:
name: nuget-packages
path: artifacts/package/*.nupkg
if-no-files-found: error
91 changes: 90 additions & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -1 +1,90 @@
慮敭›畐汢獩⁨畎敇ੴ攊癮਺†但䍒彅䅊䅖䍓䥒呐䅟呃佉华呟彏低䕄㐲›牴敵ਊ湯਺†異桳਺††慴獧਺†††‭瘢∪ 眠牯晫潬彷楤灳瑡档਺††湩異獴਺†††敶獲潩㩮 †††搠獥牣灩楴湯›倢捡慫敧瘠牥楳湯⠠⹥⹧〠ㄮ〮瀭敲楶睥⤱ਢ††††敲畱物摥›牴敵ਊ数浲獩楳湯㩳 挠湯整瑮㩳爠慥੤†慰正条獥›牷瑩੥樊扯㩳 瀠扵楬桳਺††晩›潣瑮楡獮昨潲䩭潳⡮嬧匢祫汭≹∬祷びㄶ∰❝Ⱙ朠瑩畨⹢捡潴⥲ †爠湵⵳湯›扵湵畴氭瑡獥ੴ †猠整獰਺†††‭獵獥›捡楴湯⽳档捥潫瑵癀਴ ††ⴠ渠浡㩥匠瑥灵⸠䕎⁔䑓ੋ††††獵獥›捡楴湯⽳敳畴⵰潤湴瑥癀਴††††楷桴਺†††††潤湴瑥瘭牥楳湯›〱〮砮ਊ†††‭慮敭›敒潳癬⁥敶獲潩੮††††桳汥㩬戠獡੨††††畲㩮簠 ††††椠⁦孛∠笤䥇䡔䉕䕟䕖呎也䵁絅•㴽∠潷歲汦睯摟獩慰捴≨崠㭝琠敨੮††††††䕖卒佉㵎␢筻朠瑩畨⹢癥湥⹴湩異獴瘮牥楳湯素≽ ††††攠楬⁦孛∠笤䥇䡔䉕剟䙅也䵁絅•㴽瘠‪嵝※桴湥 †††††嘠剅䥓乏∽笤䥇䡔䉕剟䙅也䵁⍅絶ਢ†††††汥敳 †††††攠档䔢牲牯›慴⁧畭瑳猠慴瑲眠瑩⁨瘧⸧䌠牵敲瑮爠晥›笤䥇䡔䉕剟䙅也䵁絅ਢ††††††硥瑩ㄠ ††††映੩ ††††椠⁦孛ⴠ⁺␢噻剅䥓乏≽崠㭝琠敨੮††††††捥潨∠牅潲㩲嘠剅䥓乏椠⁳浥瑰≹ †††††攠楸⁴਱†††††楦ਊ†††††捥潨∠畐汢獩楨杮瘠牥楳湯›笤䕖卒佉絎ਢ†††††捥潨∠䕖卒佉㵎笤䕖卒佉絎•㸾∠䜤呉啈彂久≖ਊ†††‭慮敭›慐正‬敶楲祦‬湡⁤異汢獩⁨楶⁡畎敫 †††攠癮਺†††††䕖卒佉㩎␠筻攠癮嘮剅䥓乏素੽†††††啎䕇彔偁彉䕋㩙␠筻猠捥敲獴丮䝕呅䅟䥐䭟奅素੽†††††䥇䡔䉕呟䭏久›笤⁻敳牣瑥⹳䥇䡔䉕呟䭏久素੽††††畲㩮簠 ††††猠瑥ⴠ略楰数慦汩 ††††搠瑯敮⁴畲ⴭ牰橯捥⁴畢汩⽤扟極摬挮灳潲ⴭⴠ爭潯⁴‮ⴭ慴杲瑥倠扵楬桳ⴠ挭湯楦畧慲楴湯删汥慥敳㈠☾‱⁼整⁥異汢獩⹨潬੧ ††ⴠ渠浡㩥唠汰慯⁤異汢獩⁨潬੧††††晩›污慷獹⤨ †††甠敳㩳愠瑣潩獮甯汰慯ⵤ牡楴慦瑣癀਴††††楷桴਺†††††慮敭›畮敧⵴異汢獩⵨潬੧†††††慰桴›異汢獩⹨潬੧†††††晩渭ⵯ楦敬⵳潦湵㩤眠牡੮ ††ⴠ渠浡㩥唠汰慯⁤慰正条⁥牡楴慦瑣ੳ††††晩›污慷獹⤨ †††甠敳㩳愠瑣潩獮甯汰慯ⵤ牡楴慦瑣癀਴††††楷桴਺†††††慮敭›畮敧⵴慰正条獥 ††††瀠瑡㩨愠瑲晩捡獴瀯捡慫敧⨯渮灵杫 ††††椠ⵦ潮昭汩獥昭畯摮›慷湲ਊ†††‭慮敭›牗瑩⁥異汢獩⁨畳浭牡੹††††晩›污慷獹⤨ †††猠敨汬›慢桳 †††爠湵›੼†††††੻††††††捥潨∠⌣丠䝵瑥倠扵楬桳匠浵慭祲ਢ††††††捥潨∠ਢ††††††捥潨∠‭敖獲潩㩮尠①噻剅䥓乏ⴺ湵湫睯絮恜ਢ††††††捥潨∠‭牔杩敧㩲尠①䝻呉啈彂噅久彔䅎䕍屽≠ †††††攠档ⴢ删晥›恜笤䥇䡔䉕剟䙅屽≠ †††††攠档ⴢ䄠瑣牯›恜笤䥇䡔䉕䅟呃剏屽≠ †††††攠档ⴢ䨠扯猠慴畴㩳尠①筻樠扯献慴畴⁳絽恜ਢ†††††⁽㸾∠䜤呉啈彂呓偅卟䵕䅍奒ਢ
name: Publish NuGet

env:
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true

on:
push:
tags:
- "v*"
workflow_dispatch:
inputs:
version:
description: "Package version (e.g. 0.1.0-preview1)"
required: true

permissions:
contents: read
packages: write

jobs:
publish:
if: contains(fromJson('["Skymly","wys0610"]'), github.actor)
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- name: Setup .NET SDK
uses: actions/setup-dotnet@v4
with:
dotnet-version: 10.0.x

- name: Resolve version
shell: bash
run: |
if [[ "${GITHUB_EVENT_NAME}" == "workflow_dispatch" ]]; then
VERSION="${{ github.event.inputs.version }}"
elif [[ "${GITHUB_REF_NAME}" == v* ]]; then
VERSION="${GITHUB_REF_NAME#v}"
else
echo "Error: tag must start with 'v'. Current ref: ${GITHUB_REF_NAME}"
exit 1
fi

if [[ -z "${VERSION}" ]]; then
echo "Error: VERSION is empty"
exit 1
fi

echo "Publishing version: ${VERSION}"
echo "VERSION=${VERSION}" >> "$GITHUB_ENV"

- name: Pack, verify, and publish via Nuke
env:
VERSION: ${{ env.VERSION }}
NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
set -euo pipefail
dotnet run --project build/_build.csproj -- --root . --target Publish --configuration Release 2>&1 | tee publish.log

- name: Upload publish log
if: always()
uses: actions/upload-artifact@v4
with:
name: nuget-publish-log
path: publish.log
if-no-files-found: warn

- name: Upload package artifacts
if: always()
uses: actions/upload-artifact@v4
with:
name: nuget-packages
path: artifacts/package/*.nupkg
if-no-files-found: warn

- name: Write publish summary
if: always()
shell: bash
run: |
{
echo "## NuGet Publish Summary"
echo ""
echo "- Version: \`${VERSION:-unknown}\`"
echo "- Trigger: \`${GITHUB_EVENT_NAME}\`"
echo "- Ref: \`${GITHUB_REF}\`"
echo "- Actor: \`${GITHUB_ACTOR}\`"
echo "- Job status: \`${{ job.status }}\`"
} >> "$GITHUB_STEP_SUMMARY"
4 changes: 2 additions & 2 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
| **远端** | https://github.com/Skymly/DesignPatterns(**公开**);文件夹名 `DesignPatterns` = 仓库名 |
| **许可证** | [MIT](LICENSE) |
| **阶段** | **早期预览**:公共 API、生成器产出与 `DP###` 诊断**尚未稳定**(见 [README.md](README.md)) |
| **NuGet** | 元包 **`Skymly.DesignPatterns`**;当前 **`0.2.3-preview1`**;`release.yml` + Nuke `Publish` → nuget.org + GitHub Packages |
| **NuGet** | 元包 **`Skymly.DesignPatterns`**;当前 **`0.2.3-preview2`**;`release.yml` + Nuke `Publish` → nuget.org + GitHub Packages |
| **Sibling 仓库** | [DesignPatterns.Samples](https://github.com/Skymly/DesignPatterns.Samples)、[DesignPatterns.Docs](https://github.com/Skymly/DesignPatterns.Docs) — 工作区路径 `Skymly/DesignPatterns/DesignPatterns.Samples/`、`Skymly/DesignPatterns/DesignPatterns.Docs/` |

## 项目是什么
Expand Down Expand Up @@ -258,7 +258,7 @@ git push origin v0.1.0-preview3

版本与变更记录:

- 版本号:`VersionPrefix` + `VersionSuffix`(当前 `0.2.3-preview1`),单一真相源为 [`Directory.Build.props`](Directory.Build.props);发版时可通过环境变量 `VERSION` 覆盖。
- 版本号:`VersionPrefix` + `VersionSuffix`(当前 `0.2.3-preview2`),单一真相源为 [`Directory.Build.props`](Directory.Build.props);发版时可通过环境变量 `VERSION` 覆盖。
- 变更记录:[`CHANGELOG.md`](CHANGELOG.md)(Keep a Changelog 风格)。

---
Expand Down
9 changes: 9 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

## [0.2.3-preview2] - 2026-07-20

### Changed

- **Removed AppSettings extension**: deleted the non-packable `DesignPatterns.Extensions.AppSettings` project. Use `Skymly.DesignPatterns.Extensions.Configuration` with an `IConfiguration` adapter for legacy `App.config` hosts.
- **Configuration extension packable**: `DesignPatterns.Extensions.Configuration` now ships as `Skymly.DesignPatterns.Extensions.Configuration`.
- **Encoding fix**: restored UTF-8 content for files previously corrupted by the Nuke upgrade API push / bad re-encode (`Directory.Packages.props`, `global.json`, build project, CI workflows).

## [0.2.3-preview1] - 2026-07-18

### Added
Expand Down Expand Up @@ -130,6 +138,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Added `WithTrackingName` to generator pipelines and added cache-hit regression tests.
- Migrated analyzer tests to Verify snapshots for consistency with generator tests.

[0.2.3-preview2]: https://github.com/Skymly/DesignPatterns/releases/tag/v0.2.3-preview2
[0.2.3-preview1]: https://github.com/Skymly/DesignPatterns/releases/tag/v0.2.3-preview1
[0.2.0-preview1]: https://github.com/Skymly/DesignPatterns/releases/tag/v0.2.0-preview1
[0.1.0-preview7]: https://github.com/Skymly/DesignPatterns/releases/tag/v0.1.0-preview7
Expand Down
Loading
Loading