diff --git a/.gitattributes b/.gitattributes
index 7c375796..4f891486 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1,24 +1,8 @@
-# sln, csproj files (and friends) are always CRLF, even on linux
-*.sln text eol=crlf
-*.proj text eol=crlf
-*.csproj text eol=crlf
+# normalize by default
+* text=auto encoding=UTF-8
+*.sh text eol=lf
# These are windows specific files which we may as well ensure are
# always crlf on checkout
*.bat text eol=crlf
*.cmd text eol=crlf
-
-# Opt in known filetypes to always normalize line endings on checkin
-# and always use native endings on checkout
-*.c text
-*.config text
-*.h text
-*.cs text
-*.md text
-*.tt text
-*.txt text
-
-# Some must always be checked out as lf so enforce that for those files
-# If these are not lf then bash/cygwin on windows will not be able to
-# excute the files
-*.sh text eol=lf
\ No newline at end of file
diff --git a/.github/release.yml b/.github/release.yml
index 9a018cd4..c178589b 100644
--- a/.github/release.yml
+++ b/.github/release.yml
@@ -8,7 +8,6 @@ changelog:
- invalid
- wontfix
- need info
- - docs
- techdebt
authors:
- devlooped-bot
@@ -24,6 +23,7 @@ changelog:
- title: 📝 Documentation updates
labels:
- docs
+ - documentation
- title: 🔨 Other
labels:
- '*'
diff --git a/.github/workflows/changelog.config b/.github/workflows/changelog.config
index cd34ee75..e47bccdc 100644
--- a/.github/workflows/changelog.config
+++ b/.github/workflows/changelog.config
@@ -1,7 +1,7 @@
usernames-as-github-logins=true
issues_wo_labels=true
pr_wo_labels=true
-exclude-labels=bydesign,dependencies,duplicate,question,invalid,wontfix,need info,docs
+exclude-labels=bydesign,dependencies,duplicate,discussion,question,invalid,wontfix,need info,docs
enhancement-label=:sparkles: Implemented enhancements:
bugs-label=:bug: Fixed bugs:
issues-label=:hammer: Other:
diff --git a/.github/workflows/triage.yml b/.github/workflows/triage.yml
new file mode 100644
index 00000000..56ff299a
--- /dev/null
+++ b/.github/workflows/triage.yml
@@ -0,0 +1,103 @@
+name: 'triage'
+on:
+ schedule:
+ - cron: '42 0 * * *'
+
+ workflow_dispatch:
+ # Manual triggering through the GitHub UI, API, or CLI
+ inputs:
+ daysBeforeClose:
+ description: "Days before closing stale or need info issues"
+ required: true
+ default: "30"
+ daysBeforeStale:
+ description: "Days before labeling stale"
+ required: true
+ default: "180"
+ daysSinceClose:
+ description: "Days since close to lock"
+ required: true
+ default: "30"
+ daysSinceUpdate:
+ description: "Days since update to lock"
+ required: true
+ default: "30"
+
+permissions:
+ actions: write # For managing the operation state cache
+ issues: write
+ contents: read
+
+jobs:
+ stale:
+ # Do not run on forks
+ if: github.repository_owner == 'devlooped'
+ runs-on: ubuntu-latest
+ steps:
+ - name: ⌛ rate
+ shell: pwsh
+ if: github.event_name != 'workflow_dispatch'
+ env:
+ GH_TOKEN: ${{ secrets.DEVLOOPED_TOKEN }}
+ run: |
+ # add random sleep since we run on fixed schedule
+ $wait = get-random -max 180
+ echo "Waiting random $wait seconds to start"
+ sleep $wait
+ # get currently authenticated user rate limit info
+ $rate = gh api rate_limit | convertfrom-json | select -expandproperty rate
+ # if we don't have at least 100 requests left, wait until reset
+ if ($rate.remaining -lt 100) {
+ $wait = ($rate.reset - (Get-Date (Get-Date).ToUniversalTime() -UFormat %s))
+ echo "Rate limit remaining is $($rate.remaining), waiting for $($wait / 1000) seconds to reset"
+ sleep $wait
+ $rate = gh api rate_limit | convertfrom-json | select -expandproperty rate
+ echo "Rate limit has reset to $($rate.remaining) requests"
+ }
+
+ - name: ✏️ stale labeler
+ # pending merge: https://github.com/actions/stale/pull/1176
+ uses: kzu/stale@c8450312ba97b204bf37545cb249742144d6ca69
+ with:
+ ascending: true # Process the oldest issues first
+ stale-issue-label: 'stale'
+ stale-issue-message: |
+ Due to lack of recent activity, this issue has been labeled as 'stale'.
+ It will be closed if no further activity occurs within ${{ fromJson(inputs.daysBeforeClose || 30 ) }} more days.
+ Any new comment will remove the label.
+ close-issue-message: |
+ This issue will now be closed since it has been labeled 'stale' without activity for ${{ fromJson(inputs.daysBeforeClose || 30 ) }} days.
+ days-before-stale: ${{ fromJson(inputs.daysBeforeStale || 180) }}
+ days-before-close: ${{ fromJson(inputs.daysBeforeClose || 30 ) }}
+ days-before-pr-close: -1 # Do not close PRs labeled as 'stale'
+ exempt-all-milestones: true
+ exempt-all-assignees: true
+ exempt-issue-labels: priority,sponsor,backed
+ exempt-authors: kzu
+
+ - name: 🤘 checkout actions
+ uses: actions/checkout@v4
+ with:
+ repository: 'microsoft/vscode-github-triage-actions'
+ ref: v42
+
+ - name: ⚙ install actions
+ run: npm install --production
+
+ - name: 🔒 issues locker
+ uses: ./locker
+ with:
+ token: ${{ secrets.DEVLOOPED_TOKEN }}
+ ignoredLabel: priority
+ daysSinceClose: ${{ fromJson(inputs.daysSinceClose || 30) }}
+ daysSinceUpdate: ${{ fromJson(inputs.daysSinceUpdate || 30) }}
+
+ - name: 🔒 need info closer
+ uses: ./needs-more-info-closer
+ with:
+ token: ${{ secrets.DEVLOOPED_TOKEN }}
+ label: 'need info'
+ closeDays: ${{ fromJson(inputs.daysBeforeClose || 30) }}
+ closeComment: "This issue has been closed automatically because it needs more information and has not had recent activity.\n\nHappy Coding!"
+ pingDays: 80
+ pingComment: "Hey @${assignee}, this issue might need further attention.\n\n@${author}, you can help us out by closing this issue if the problem no longer exists, or adding more information."
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 66394586..2ac54a72 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,6 +8,7 @@ BenchmarkDotNet.Artifacts
/app
.vs
.vscode
+.genaiscript
.idea
local.settings.json
diff --git a/.netconfig b/.netconfig
index ed1d7516..78190703 100644
--- a/.netconfig
+++ b/.netconfig
@@ -22,9 +22,9 @@
sha = c779d3d4e468358106dea03e93ba2cd35bb01ecb
[file ".gitattributes"]
url = https://github.com/devlooped/oss/blob/main/.gitattributes
- etag = 7acb32f5fa6d4ccd9c824605a7c2b8538497f0068c165567807d393dcf4d6bb7
+ etag = 338ba6d92c8d1774363396739c2be4257bfc58026f4b0fe92cb0ae4460e1eff7
weak
- sha = 0683ee777d7d878d4bf013d7deea352685135a05
+ sha = 5f92a68e302bae675b394ef343114139c075993e
[file ".github/dependabot.yml"]
url = https://github.com/devlooped/oss/blob/main/.github/dependabot.yml
etag = c147ea2f3431ca0338c315c4a45b56ee233c4d30f8d6ab698d0e1980a257fd6a
@@ -32,9 +32,9 @@
sha = 49661dbf0720cde93eb5569be7523b5912351560
[file ".gitignore"]
url = https://github.com/devlooped/oss/blob/main/.gitignore
- etag = a9c37ae312afac14b78436a7d018af4483d88736b5f780576f2c5a0b3f14998c
+ etag = c449ec6f76803e1891357ca2b8b4fcb5b2e5deeff8311622fd92ca9fbf1e6575
weak
- sha = 02811fa23b0a102b9b33048335d41e515bf75737
+ sha = e0be248fff1d39133345283b8227372b36574b75
[file "Directory.Build.rsp"]
url = https://github.com/devlooped/oss/blob/main/Directory.Build.rsp
etag = 0ccae83fc51f400bfd7058170bfec7aba11455e24a46a0d7e6a358da6486e255
@@ -55,9 +55,9 @@
sha = b76de49afb376aa48eb172963ed70663b59b31d3
[file "src/Directory.Build.targets"]
url = https://github.com/devlooped/oss/blob/main/src/Directory.Build.targets
- etag = 1a3a0151b5771ee97ed8351254ff4c18a0ff568e0df5c33c6830f069bfbb067b
+ etag = 19087699f05396205e6b050d999a43b175bd242f6e8fac86f6df936310178b03
weak
- sha = 33a20db26e47589769284817b271ce67ea9ccfd8
+ sha = a8b208093599263b7f2d1fe3854634c588ea5199
[file "src/kzu.snk"]
url = https://github.com/devlooped/oss/blob/main/src/kzu.snk
etag = b8d789b5b6bea017cdcc8badcea888ad78de3e34298efca922054e9fb0e7b6b9
@@ -94,13 +94,13 @@
weak
[file ".github/workflows/changelog.config"]
url = https://github.com/devlooped/oss/blob/main/.github/workflows/changelog.config
- sha = 055a8b7c94b74ae139cce919d60b83976d2a9942
- etag = ddb17acb5872e9e69a76f9dec0ca590f25382caa2ccf750df058dcabb674db2b
+ sha = 08d83cb510732f861416760d37702f9f55bd7f9e
+ etag = 556a28914eeeae78ca924b1105726cdaa211af365671831887aec81f5f4301b4
weak
[file ".github/release.yml"]
url = https://github.com/devlooped/oss/blob/main/.github/release.yml
- sha = 1afd173fe8f81b510c597737b0d271218e81fa73
- etag = 482dc2c892fc7ce0cb3a01eb5d9401bee50ddfb067d8cb85873555ce63cf5438
+ sha = 0c23e24704625cf75b2cb1fdc566cef7e20af313
+ etag = 310df162242c95ed19ed12e3c96a65f77e558b46dced676ad5255eb12caafe75
weak
[file "src/dotnet-nugetize/System/Base62.cs"]
url = https://github.com/devlooped/catbag/blob/main/System/Base62.cs
@@ -112,3 +112,8 @@
sha = 8cfabc25a6e5d58aedf59364d1d8c26e64024dd2
etag = 2067e8993f995b6627a93438e0d97f8a6daa59bc2b3a2b0216899525c9c43edd
weak
+[file ".github/workflows/triage.yml"]
+ url = https://github.com/devlooped/oss/blob/main/.github/workflows/triage.yml
+ sha = 33000c0c4ab4eb4e0e142fa54515b811a189d55c
+ etag = 013a47739e348f06891f37c45164478cca149854e6cd5c5158e6f073f852b61a
+ weak
diff --git a/monolyth.md b/monolyth.md
index 422f5aed..d1b5cd61 100644
--- a/monolyth.md
+++ b/monolyth.md
@@ -548,15 +548,12 @@ packing on CI, since at that point all that's run are the P2P protocol involving
[![Clarius Org](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/clarius.png "Clarius Org")](https://github.com/clarius)
[![Kirill Osenkov](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/KirillOsenkov.png "Kirill Osenkov")](https://github.com/KirillOsenkov)
[![MFB Technologies, Inc.](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/MFB-Technologies-Inc.png "MFB Technologies, Inc.")](https://github.com/MFB-Technologies-Inc)
-[![Stephen Shaw](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/decriptor.png "Stephen Shaw")](https://github.com/decriptor)
[![Torutek](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/torutek-gh.png "Torutek")](https://github.com/torutek-gh)
[![DRIVE.NET, Inc.](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/drivenet.png "DRIVE.NET, Inc.")](https://github.com/drivenet)
-[![Ashley Medway](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/AshleyMedway.png "Ashley Medway")](https://github.com/AshleyMedway)
[![Keith Pickford](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/Keflon.png "Keith Pickford")](https://github.com/Keflon)
[![Thomas Bolon](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/tbolon.png "Thomas Bolon")](https://github.com/tbolon)
[![Kori Francis](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/kfrancis.png "Kori Francis")](https://github.com/kfrancis)
[![Toni Wenzel](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/twenzel.png "Toni Wenzel")](https://github.com/twenzel)
-[![Giorgi Dalakishvili](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/Giorgi.png "Giorgi Dalakishvili")](https://github.com/Giorgi)
[![Uno Platform](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/unoplatform.png "Uno Platform")](https://github.com/unoplatform)
[![Dan Siegel](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/dansiegel.png "Dan Siegel")](https://github.com/dansiegel)
[![Reuben Swartz](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/rbnswartz.png "Reuben Swartz")](https://github.com/rbnswartz)
@@ -566,10 +563,8 @@ packing on CI, since at that point all that's run are the P2P protocol involving
[![Ix Technologies B.V.](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/IxTechnologies.png "Ix Technologies B.V.")](https://github.com/IxTechnologies)
[![David JENNI](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/davidjenni.png "David JENNI")](https://github.com/davidjenni)
[![Jonathan ](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/Jonathan-Hickey.png "Jonathan ")](https://github.com/Jonathan-Hickey)
-[![Oleg Kyrylchuk](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/okyrylchuk.png "Oleg Kyrylchuk")](https://github.com/okyrylchuk)
[![Charley Wu](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/akunzai.png "Charley Wu")](https://github.com/akunzai)
[![Jakob Tikjøb Andersen](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/jakobt.png "Jakob Tikjøb Andersen")](https://github.com/jakobt)
-[![Seann Alexander](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/seanalexander.png "Seann Alexander")](https://github.com/seanalexander)
[![Tino Hager](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/tinohager.png "Tino Hager")](https://github.com/tinohager)
[![Mark Seemann](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/ploeh.png "Mark Seemann")](https://github.com/ploeh)
[![Ken Bonny](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/KenBonny.png "Ken Bonny")](https://github.com/KenBonny)
@@ -580,6 +575,9 @@ packing on CI, since at that point all that's run are the P2P protocol involving
[![Vezel](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/vezel-dev.png "Vezel")](https://github.com/vezel-dev)
[![ChilliCream](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/ChilliCream.png "ChilliCream")](https://github.com/ChilliCream)
[![4OTC](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/4OTC.png "4OTC")](https://github.com/4OTC)
+[![Vincent Limo](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/v-limo.png "Vincent Limo")](https://github.com/v-limo)
+[![Jordan S. Jones](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/jordansjones.png "Jordan S. Jones")](https://github.com/jordansjones)
+[![domischell](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/DominicSchell.png "domischell")](https://github.com/DominicSchell)
diff --git a/readme.md b/readme.md
index 0dbd969d..d0c282f0 100644
--- a/readme.md
+++ b/readme.md
@@ -582,15 +582,12 @@ You can turn this off by setting the following property at the project level:
[![Clarius Org](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/clarius.png "Clarius Org")](https://github.com/clarius)
[![Kirill Osenkov](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/KirillOsenkov.png "Kirill Osenkov")](https://github.com/KirillOsenkov)
[![MFB Technologies, Inc.](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/MFB-Technologies-Inc.png "MFB Technologies, Inc.")](https://github.com/MFB-Technologies-Inc)
-[![Stephen Shaw](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/decriptor.png "Stephen Shaw")](https://github.com/decriptor)
[![Torutek](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/torutek-gh.png "Torutek")](https://github.com/torutek-gh)
[![DRIVE.NET, Inc.](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/drivenet.png "DRIVE.NET, Inc.")](https://github.com/drivenet)
-[![Ashley Medway](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/AshleyMedway.png "Ashley Medway")](https://github.com/AshleyMedway)
[![Keith Pickford](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/Keflon.png "Keith Pickford")](https://github.com/Keflon)
[![Thomas Bolon](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/tbolon.png "Thomas Bolon")](https://github.com/tbolon)
[![Kori Francis](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/kfrancis.png "Kori Francis")](https://github.com/kfrancis)
[![Toni Wenzel](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/twenzel.png "Toni Wenzel")](https://github.com/twenzel)
-[![Giorgi Dalakishvili](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/Giorgi.png "Giorgi Dalakishvili")](https://github.com/Giorgi)
[![Uno Platform](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/unoplatform.png "Uno Platform")](https://github.com/unoplatform)
[![Dan Siegel](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/dansiegel.png "Dan Siegel")](https://github.com/dansiegel)
[![Reuben Swartz](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/rbnswartz.png "Reuben Swartz")](https://github.com/rbnswartz)
@@ -600,10 +597,8 @@ You can turn this off by setting the following property at the project level:
[![Ix Technologies B.V.](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/IxTechnologies.png "Ix Technologies B.V.")](https://github.com/IxTechnologies)
[![David JENNI](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/davidjenni.png "David JENNI")](https://github.com/davidjenni)
[![Jonathan ](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/Jonathan-Hickey.png "Jonathan ")](https://github.com/Jonathan-Hickey)
-[![Oleg Kyrylchuk](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/okyrylchuk.png "Oleg Kyrylchuk")](https://github.com/okyrylchuk)
[![Charley Wu](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/akunzai.png "Charley Wu")](https://github.com/akunzai)
[![Jakob Tikjøb Andersen](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/jakobt.png "Jakob Tikjøb Andersen")](https://github.com/jakobt)
-[![Seann Alexander](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/seanalexander.png "Seann Alexander")](https://github.com/seanalexander)
[![Tino Hager](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/tinohager.png "Tino Hager")](https://github.com/tinohager)
[![Mark Seemann](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/ploeh.png "Mark Seemann")](https://github.com/ploeh)
[![Ken Bonny](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/KenBonny.png "Ken Bonny")](https://github.com/KenBonny)
@@ -614,6 +609,9 @@ You can turn this off by setting the following property at the project level:
[![Vezel](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/vezel-dev.png "Vezel")](https://github.com/vezel-dev)
[![ChilliCream](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/ChilliCream.png "ChilliCream")](https://github.com/ChilliCream)
[![4OTC](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/4OTC.png "4OTC")](https://github.com/4OTC)
+[![Vincent Limo](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/v-limo.png "Vincent Limo")](https://github.com/v-limo)
+[![Jordan S. Jones](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/jordansjones.png "Jordan S. Jones")](https://github.com/jordansjones)
+[![domischell](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/DominicSchell.png "domischell")](https://github.com/DominicSchell)
diff --git a/src/Directory.Build.targets b/src/Directory.Build.targets
index 20d7f0bf..6232750f 100644
--- a/src/Directory.Build.targets
+++ b/src/Directory.Build.targets
@@ -34,23 +34,28 @@
+
@@ -101,19 +106,17 @@
$(BUDDY_EXECUTION_BRANCH)
-
-
- PrepareResources;$(CoreCompileDependsOn)
+
+
+ CoreResGen;$(CoreCompileDependsOn)
-
+
-
-
-
+
+
- MSBuild:Compile
$(IntermediateOutputPath)\$([MSBuild]::ValueOrDefault('%(RelativeDir)', '').Replace('\', '.').Replace('/', '.'))%(Filename).g$(DefaultLanguageSourceExtension)
$(Language)
$(RootNamespace)