From 41d8ac6f2ee0f0e083639e25aa22a5b273325a34 Mon Sep 17 00:00:00 2001 From: Stephen Lautier Date: Fri, 11 Sep 2026 15:32:45 +0200 Subject: [PATCH 1/6] ci(release)!: adopt the simplified shared release contract BREAKING CHANGE: require the new shared release contract, fixed v-prefixed tags, repository-wide publication serialization and PR-only main/stable CI. Keep feature-branch references until integrated validation and merge. --- .github/workflows/cd.yml | 25 ++++++++++++++----------- .github/workflows/ci.yml | 4 +--- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index 5e9a5b4..027d352 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -28,14 +28,20 @@ permissions: packages: write # required for package publish pull-requests: write # required for release PR creation +concurrency: + group: package-release-${{ github.repository }} + cancel-in-progress: false + queue: max + jobs: publish: name: Publish if: | - contains(fromJSON('["main", "workflow"]'), github.ref_name) || - startsWith(github.ref_name, 'v') || - github.event.inputs.publish == 'true' - uses: sketch7/.github/.github/workflows/dotnet-publish.yml@dotnet-libs-v2 + (github.event_name != 'push' || github.event.created == false) && + (contains(fromJSON('["main", "workflow"]'), github.ref_name) || + startsWith(github.ref_name, 'v') || + github.event.inputs.publish == 'true') + uses: sketch7/.github/.github/workflows/dotnet-publish.yml@feature/promotable-app-release-cycle with: force-preid: ${{ github.event.inputs.force-prerelease == 'true' }} secrets: @@ -49,7 +55,7 @@ jobs: needs.publish.result == 'success' && github.event_name == 'push' && github.ref_name == 'main' - uses: sketch7/.github/.github/workflows/prepare-release.yml@release-v1 + uses: sketch7/.github/.github/workflows/prepare-release.yml@feature/promotable-app-release-cycle with: base-version: ${{ needs.publish.outputs.baseVersion }} secrets: @@ -58,11 +64,8 @@ jobs: release: name: Release needs: publish - # Only when a stable (non-prerelease) version was published — i.e. on push to v* branches - if: | - needs.publish.result == 'success' && - !fromJSON(needs.publish.outputs.isPrerelease) - uses: sketch7/.github/.github/workflows/create-release.yml@release-v1 + if: needs.publish.result == 'success' + uses: sketch7/.github/.github/workflows/create-release.yml@feature/promotable-app-release-cycle with: version: ${{ needs.publish.outputs.version }} @@ -74,6 +77,6 @@ jobs: needs.release.result == 'success' && needs.release.outputs.is-latest == 'true' && github.event_name == 'push' - uses: sketch7/.github/.github/workflows/node-bump-main.yml@release-v1 + uses: sketch7/.github/.github/workflows/node-bump-main.yml@feature/promotable-app-release-cycle with: released-version: ${{ needs.publish.outputs.version }} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 25dcf01..d52e297 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -3,8 +3,6 @@ name: CI on: push: branches: - - main - - "v*" - "workflow" paths-ignore: - "**.md" @@ -25,4 +23,4 @@ permissions: jobs: ci: name: dotnet ci - uses: sketch7/.github/.github/workflows/dotnet-ci.yml@dotnet-libs-v2 + uses: sketch7/.github/.github/workflows/dotnet-ci.yml@feature/promotable-app-release-cycle From 88072e9ae314b42e558f85f19a030fcd2cb39b39 Mon Sep 17 00:00:00 2001 From: Stephen Lautier Date: Sat, 12 Sep 2026 11:22:59 +0200 Subject: [PATCH 2/6] ci(release): pass token to main version bump --- .github/workflows/cd.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index 027d352..2ea4b6b 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -80,3 +80,5 @@ jobs: uses: sketch7/.github/.github/workflows/node-bump-main.yml@feature/promotable-app-release-cycle with: released-version: ${{ needs.publish.outputs.version }} + secrets: + token: ${{ secrets.GH_PAT }} From 8c13d30804c0a901f6457972ff3a9613b8504395 Mon Sep 17 00:00:00 2001 From: Stephen Lautier Date: Thu, 17 Sep 2026 20:34:07 +0200 Subject: [PATCH 3/6] ci(release): consume stable workflow refs --- .github/workflows/cd.yml | 8 ++++---- .github/workflows/ci.yml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index 2ea4b6b..e20d0c7 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -41,7 +41,7 @@ jobs: (contains(fromJSON('["main", "workflow"]'), github.ref_name) || startsWith(github.ref_name, 'v') || github.event.inputs.publish == 'true') - uses: sketch7/.github/.github/workflows/dotnet-publish.yml@feature/promotable-app-release-cycle + uses: sketch7/.github/.github/workflows/dotnet-publish.yml@dotnet-libs-v3 with: force-preid: ${{ github.event.inputs.force-prerelease == 'true' }} secrets: @@ -55,7 +55,7 @@ jobs: needs.publish.result == 'success' && github.event_name == 'push' && github.ref_name == 'main' - uses: sketch7/.github/.github/workflows/prepare-release.yml@feature/promotable-app-release-cycle + uses: sketch7/.github/.github/workflows/prepare-release.yml@release-v2 with: base-version: ${{ needs.publish.outputs.baseVersion }} secrets: @@ -65,7 +65,7 @@ jobs: name: Release needs: publish if: needs.publish.result == 'success' - uses: sketch7/.github/.github/workflows/create-release.yml@feature/promotable-app-release-cycle + uses: sketch7/.github/.github/workflows/create-release.yml@release-v2 with: version: ${{ needs.publish.outputs.version }} @@ -77,7 +77,7 @@ jobs: needs.release.result == 'success' && needs.release.outputs.is-latest == 'true' && github.event_name == 'push' - uses: sketch7/.github/.github/workflows/node-bump-main.yml@feature/promotable-app-release-cycle + uses: sketch7/.github/.github/workflows/node-bump-main.yml@release-v2 with: released-version: ${{ needs.publish.outputs.version }} secrets: diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d52e297..f56ae11 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -23,4 +23,4 @@ permissions: jobs: ci: name: dotnet ci - uses: sketch7/.github/.github/workflows/dotnet-ci.yml@feature/promotable-app-release-cycle + uses: sketch7/.github/.github/workflows/dotnet-ci.yml@dotnet-libs-v3 From 4225ed53db8aee9c7484cfc743a93754368f980b Mon Sep 17 00:00:00 2001 From: Stephen Lautier Date: Fri, 18 Sep 2026 07:31:08 +0200 Subject: [PATCH 4/6] chore: update paths-ignore in CI and CD workflows to exclude additional directories --- .github/workflows/cd.yml | 4 ++++ .github/workflows/ci.yml | 9 +++++++++ 2 files changed, 13 insertions(+) diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index e20d0c7..7ccb2f2 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -8,6 +8,10 @@ on: - "workflow" paths-ignore: - "**.md" + - ".agents/**" + - ".claude/**" + - ".codex/**" + - "skills-lock.json" workflow_dispatch: inputs: diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f56ae11..75a8807 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,13 +6,22 @@ on: - "workflow" paths-ignore: - "**.md" + - ".agents/**" + - ".claude/**" + - ".codex/**" + - "skills-lock.json" pull_request: + types: [opened, synchronize, reopened, ready_for_review] branches: - main - "v*" paths-ignore: - "**.md" + - ".agents/**" + - ".claude/**" + - ".codex/**" + - "skills-lock.json" permissions: contents: read From a7b198b4498d0f27859616866fb17b34bd9edd41 Mon Sep 17 00:00:00 2001 From: Stephen Lautier Date: Fri, 18 Sep 2026 07:34:14 +0200 Subject: [PATCH 5/6] add sln resolve --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index c1418d4..3c42c16 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,7 @@ { "name": "@sketch7/fluently-http-client", "version": "5.1.0", + "dotnetBuildSln": "./FluentlyHttpClient.slnx", "scripts": { "pack": "bash ./tools/pack.sh", "prepublish:dev": "npm run pack", From 7d347f4bb7bd71000ca32ccb9051f3b787ff34dd Mon Sep 17 00:00:00 2001 From: Stephen Lautier Date: Fri, 18 Sep 2026 07:44:56 +0200 Subject: [PATCH 6/6] chore: update .gitattributes and .gitignore for improved line ending handling and ignore patterns fix: bump MessagePack package version to 3.1.9 refactor: clean up solution file by removing unnecessary tool files --- .gitattributes | 67 +----------- .gitignore | 224 +++++++++++++-------------------------- Directory.Packages.props | 2 +- FluentlyHttpClient.slnx | 2 - 4 files changed, 79 insertions(+), 216 deletions(-) diff --git a/.gitattributes b/.gitattributes index 1ff0c42..9cc14f1 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,63 +1,6 @@ -############################################################################### -# Set default behavior to automatically normalize line endings. -############################################################################### -* text=auto +# Enforce LF line endings everywhere — oxfmt writes LF and is not configurable. +# This prevents CRLF/LF churn on Windows checkouts. +* text=auto eol=lf -############################################################################### -# Set default behavior for command prompt diff. -# -# This is need for earlier builds of msysgit that does not have it on by -# default for csharp files. -# Note: This is only used by command line -############################################################################### -#*.cs diff=csharp - -############################################################################### -# Set the merge driver for project and solution files -# -# Merging from the command prompt will add diff markers to the files if there -# are conflicts (Merging from VS is not affected by the settings below, in VS -# the diff markers are never inserted). Diff markers may cause the following -# file extensions to fail to load in VS. An alternative would be to treat -# these files as binary and thus will always conflict and require user -# intervention with every merge. To do so, just uncomment the entries below -############################################################################### -#*.sln merge=binary -#*.csproj merge=binary -#*.vbproj merge=binary -#*.vcxproj merge=binary -#*.vcproj merge=binary -#*.dbproj merge=binary -#*.fsproj merge=binary -#*.lsproj merge=binary -#*.wixproj merge=binary -#*.modelproj merge=binary -#*.sqlproj merge=binary -#*.wwaproj merge=binary - -############################################################################### -# behavior for image files -# -# image files are treated as binary by default. -############################################################################### -#*.jpg binary -#*.png binary -#*.gif binary - -############################################################################### -# diff behavior for common document formats -# -# Convert binary document formats to text before diffing them. This feature -# is only available from the command line. Turn it on by uncommenting the -# entries below. -############################################################################### -#*.doc diff=astextplain -#*.DOC diff=astextplain -#*.docx diff=astextplain -#*.DOCX diff=astextplain -#*.dot diff=astextplain -#*.DOT diff=astextplain -#*.pdf diff=astextplain -#*.PDF diff=astextplain -#*.rtf diff=astextplain -#*.RTF diff=astextplain +# Lockfiles — keep LF, mark as generated for diff/PR collapsing +pnpm-lock.yaml -diff linguist-generated=true \ No newline at end of file diff --git a/.gitignore b/.gitignore index 7d492c7..fec8a88 100644 --- a/.gitignore +++ b/.gitignore @@ -1,16 +1,12 @@ -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. +# See http://help.github.com/ignore-files/ for more about ignoring files. + +# repo -BenchmarkDotNet.Artifacts/ # User-specific files *.suo *.user *.userosscache -*.sln.docstates - -# User-specific files (MonoDevelop/Xamarin Studio) -*.userprefs # Build results [Dd]ebug/ @@ -19,15 +15,71 @@ BenchmarkDotNet.Artifacts/ [Rr]eleases/ x64/ x86/ +build/ bld/ [Bb]in/ [Oo]bj/ [Ll]og/ +dist/ +dist-server/ + +# sourcegen files +**/Views/Home/Index.cshtml +svg.config.g.ts +# /wwwroot/dist/ +# /apps/**/dist/ +# apps/**/libraries/* +publish/ +*.g.cs + + +# Orleans +orleans.codegen.cs -# Visual Studio 2015 cache/options directory + +# Node +node_modules +npm-debug.log +.nx/cache +.nx/polygraph +.nx/workspace-data +.nx/self-healing +.nx/migrate-runs +.sass-cache/ +.eslintcache +.angular + +# IDEs and editors +.idea/ +.project +.classpath +*.launch +.settings/ .vs/ -# Uncomment if you have tasks that create the project's static files in wwwroot -#wwwroot/ + + +# AI +.cursor\rules\nx-rules.mdc +.github\instructions\nx.instructions.md +.worktrees/ +.claude/worktrees +.claude/settings.local.json +# Skills CLI derived/machine-local output (regenerate with: npx skills experimental_install) +.claude/skills/ +.codebase-memory/ +agent/ +.superpowers +.playwright-mcp + + +# Visual Studio Code +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +!.vscode/mcp.json +.history/* # MSTest test Results [Tt]est[Rr]esult*/ @@ -42,11 +94,6 @@ TestResult.xml [Rr]eleasePS/ dlldata.c -# DNX -project.lock.json -project.fragment.lock.json -artifacts/ - *_i.c *_p.c *_i.h @@ -72,117 +119,42 @@ artifacts/ *.svclog *.scc -# Chutzpah Test files -_Chutzpah* - -# Visual C++ cache files -ipch/ -*.aps -*.ncb -*.opendb -*.opensdf -*.sdf -*.cachefile -*.VC.db -*.VC.VC.opendb - # Visual Studio profiler *.psess *.vsp *.vspx *.sap -# TFS 2012 Local Workspace -$tf/ - -# Guidance Automation Toolkit -*.gpState - # ReSharper is a .NET coding add-in _ReSharper*/ *.[Rr]e[Ss]harper *.DotSettings.user -# JustCode is a .NET coding add-in -.JustCode - -# TeamCity is a build add-in -_TeamCity* - # DotCover is a Code Coverage Tool *.dotCover -# NCrunch -_NCrunch_* -.*crunch*.local.xml -nCrunchTemp_* - -# MightyMoose -*.mm.* -AutoTest.Net/ - -# Web workbench (sass) -.sass-cache/ - -# Installshield output folder -[Ee]xpress/ - -# DocProject is a documentation generator add-in -DocProject/buildhelp/ -DocProject/Help/*.HxT -DocProject/Help/*.HxC -DocProject/Help/*.hhc -DocProject/Help/*.hhk -DocProject/Help/*.hhp -DocProject/Help/Html2 -DocProject/Help/html - -# Click-Once directory -publish/ - # Publish Web Output *.[Pp]ublish.xml *.azurePubxml # TODO: Comment the next line if you want to checkin your web deploy settings # but database connection strings (with potential passwords) will be unencrypted -#*.pubxml +*.pubxml *.publishproj -# Microsoft Azure Web App publish settings. Comment the next line if you want to -# checkin your Azure Web App publish settings, but sensitive information contained -# in these scripts will be unencrypted -PublishScripts/ - # NuGet Packages *.nupkg -*.snupkg -# The packages folder can be ignored because of Package Restore -**/packages/* -# except build/, which is used as an MSBuild target. !**/packages/build/ -# Uncomment if necessary however generally it will be regenerated when needed -#!**/packages/repositories.config -# NuGet v3's project.json files produces more ignoreable files -*.nuget.props -*.nuget.targets - -# Microsoft Azure Build Output -csx/ -*.build.csdef -# Microsoft Azure Emulator -ecf/ -rcf/ +# Published artifacts (Aspire) +artifacts/ -# Windows Store app package directories and files -AppPackages/ -BundleArtifacts/ -Package.StoreAssociation.xml -_pkginfo.txt +# BenchmarkDotNet generated output +BenchmarkDotNet.Artifacts/ # Visual Studio cache files # files ending in .cache can be ignored *.[Cc]ache +*.lscache # but keep track of directories ending in .cache !*.[Cc]ache/ @@ -192,18 +164,9 @@ ClientBin/ *~ *.dbmdl *.dbproj.schemaview -*.jfm *.pfx *.publishsettings -node_modules/ -orleans.codegen.cs - -# Since there are multiple workflows, uncomment next line to ignore bower_components -# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) -#bower_components/ - -# RIA/Silverlight projects -Generated_Code/ +project.lock.json # Backup & report files from converting an old project file # to a newer Visual Studio version. Backup files are not needed, @@ -217,48 +180,7 @@ UpgradeLog*.htm *.mdf *.ldf -# Business Intelligence projects -*.rdl.data -*.bim.layout -*.bim_*.settings - -# Microsoft Fakes -FakesAssemblies/ - -# GhostDoc plugin setting file -*.GhostDoc.xml - -# Node.js Tools for Visual Studio -.ntvs_analysis.dat - -# Visual Studio 6 build log -*.plg - -# Visual Studio 6 workspace options file -*.opt - -# Visual Studio LightSwitch build output -**/*.HTMLClient/GeneratedArtifacts -**/*.DesktopClient/GeneratedArtifacts -**/*.DesktopClient/ModelManifest.xml -**/*.Server/GeneratedArtifacts -**/*.Server/ModelManifest.xml -_Pvt_Extensions - -# Paket dependency manager -.paket/paket.exe -paket-files/ - -# FAKE - F# Make -.fake/ - -# JetBrains Rider -.idea/ -*.sln.iml - -# CodeRush -.cr/ - -# Python Tools for Visual Studio (PTVS) -__pycache__/ -*.pyc \ No newline at end of file +# System files +.DS_Store +Thumbs.db +nul diff --git a/Directory.Packages.props b/Directory.Packages.props index d92e5be..40b43f8 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -19,7 +19,7 @@ - + diff --git a/FluentlyHttpClient.slnx b/FluentlyHttpClient.slnx index b4f6c02..1468200 100644 --- a/FluentlyHttpClient.slnx +++ b/FluentlyHttpClient.slnx @@ -17,8 +17,6 @@ - -