diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a109549..6653044 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -64,6 +64,14 @@ jobs: submodules: recursive fetch-depth: 0 + - name: βš™ dotnet + uses: actions/setup-dotnet@v4 + with: + dotnet-version: | + 6.x + 8.x + 9.x + - name: πŸ™ build run: dotnet build -m:1 -bl:build.binlog @@ -73,7 +81,7 @@ jobs: dotnet retest -- --no-build - name: πŸ› logs - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 if: runner.debug && always() with: name: logs diff --git a/.github/workflows/dotnet-file-core.yml b/.github/workflows/dotnet-file-core.yml new file mode 100644 index 0000000..1230687 --- /dev/null +++ b/.github/workflows/dotnet-file-core.yml @@ -0,0 +1,88 @@ +# Synchronizes .netconfig-configured files with dotnet-file +name: dotnet-file-core +on: + workflow_call: + +env: + DOTNET_NOLOGO: true + +defaults: + run: + shell: pwsh + +jobs: + sync: + runs-on: ubuntu-latest + continue-on-error: true + steps: + - name: πŸ€– defaults + uses: devlooped/actions-bot@v1 + with: + name: ${{ secrets.BOT_NAME }} + email: ${{ secrets.BOT_EMAIL }} + gh_token: ${{ secrets.GH_TOKEN }} + github_token: ${{ secrets.GITHUB_TOKEN }} + + - name: 🀘 checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + ref: main + token: ${{ env.GH_TOKEN }} + + - name: βŒ› rate + if: github.event_name != 'workflow_dispatch' + run: | + # add random sleep since we run on fixed schedule + sleep (get-random -max 60) + # 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 10) { + $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: πŸ”„ sync + run: | + dotnet tool update -g dotnet-gcm + # store credentials in plaintext for linux compat + git config --local credential.credentialStore plaintext + dotnet gcm store --protocol=https --host=github.com --username=$env:GITHUB_ACTOR --password=$env:GH_TOKEN + gh auth status + + dotnet tool update -g dotnet-file + $changelog = "$([System.IO.Path]::GetTempPath())dotnet-file.md" + dotnet file sync -c:$changelog + if (test-path $changelog) { + echo 'CHANGES<> $env:GITHUB_ENV + cat $changelog >> $env:GITHUB_ENV + echo 'EOF' >> $env:GITHUB_ENV + cat $changelog + } else { + echo 'No changelog was generated' + } + + - name: +Mᐁ includes + uses: devlooped/actions-includes@v1 + with: + validate: false + + - name: ✍ pull request + uses: peter-evans/create-pull-request@v7 + with: + base: main + branch: dotnet-file-sync + delete-branch: true + labels: dependencies + author: ${{ env.BOT_AUTHOR }} + committer: ${{ env.BOT_AUTHOR }} + commit-message: ⬆️ Bump files with dotnet-file sync + + ${{ env.CHANGES }} + title: "⬆️ Bump files with dotnet-file sync" + body: ${{ env.CHANGES }} + token: ${{ env.GH_TOKEN }} diff --git a/.github/workflows/includes.yml b/.github/workflows/includes.yml index 15a781e..d787ccb 100644 --- a/.github/workflows/includes.yml +++ b/.github/workflows/includes.yml @@ -11,6 +11,9 @@ on: jobs: includes: runs-on: ubuntu-latest + permissions: + contents: write + pull-requests: write steps: - name: πŸ€– defaults uses: devlooped/actions-bot@v1 diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index ae4240f..8b065d7 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -26,6 +26,14 @@ jobs: submodules: recursive fetch-depth: 0 + - name: βš™ dotnet + uses: actions/setup-dotnet@v4 + with: + dotnet-version: | + 6.x + 8.x + 9.x + - name: πŸ™ build run: dotnet build -m:1 -bl:build.binlog @@ -35,7 +43,7 @@ jobs: dotnet retest -- --no-build - name: πŸ› logs - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 if: runner.debug && always() with: name: logs diff --git a/.netconfig b/.netconfig index 5369de1..b4cae96 100644 --- a/.netconfig +++ b/.netconfig @@ -49,9 +49,9 @@ weak [file ".github/workflows/build.yml"] url = https://github.com/devlooped/oss/blob/main/.github/workflows/build.yml - sha = 5e17ad62ebb5241555a7a4d29e3ab15e5ba120d2 + sha = 06e898ccba692566ebf845fa7c8833ac6c318c0a - etag = f358acb1e45596bf0aad49996017da44939de30b805289c4ad205a7ccb6f99cb + etag = 0a4b3f0a875cd8c9434742b4046558aecf610d3fa3d490cfd2099266e95e9195 weak [file ".github/workflows/changelog.yml"] url = https://github.com/devlooped/oss/blob/main/.github/workflows/changelog.yml @@ -61,15 +61,15 @@ weak [file ".github/workflows/dotnet-file.yml"] url = https://github.com/devlooped/oss/blob/main/.github/workflows/dotnet-file.yml - sha = 7afe350f7e80a230e922db026d4e1198ba15cae1 + sha = 59aaf432369b5ea597831d4feec5a6ac4024c2e3 - etag = 65e9794df6caff779eb989c8f71ddf4d4109b24a75af79e4f8d0fe6ba7bd9702 + etag = 1374e3f8c9b7af69c443605c03f7262300dcb7d783738d9eb9fe84268ed2d10c weak [file ".github/workflows/publish.yml"] url = https://github.com/devlooped/oss/blob/main/.github/workflows/publish.yml - sha = 5e17ad62ebb5241555a7a4d29e3ab15e5ba120d2 + sha = 06e898ccba692566ebf845fa7c8833ac6c318c0a - etag = 2cc96046d8f28e7cbcde89ed56d3d89e1a70fb0de7846ee1827bee66b7dfbcf1 + etag = 2f64f75ad01f735fd05290370fb8a826111ac8dd7e74ce04226bb627a54a62ba weak [file ".gitignore"] url = https://github.com/devlooped/oss/blob/main/.gitignore @@ -128,9 +128,9 @@ weak [file ".github/workflows/includes.yml"] url = https://github.com/devlooped/oss/blob/main/.github/workflows/includes.yml - sha = d152e7437fd0d6f6d9363d23cb3b78c07335ea49 + sha = 85829f2510f335f4a411867f3dbaaa116c3ab3de - etag = ec40db34f379d0c6d83b2ec15624f330318a172cc4f85b5417c63e86eaf601df + etag = 086f6b6316cc6ea7089c0dcc6980be519e6ed6e6201e65042ef41b82634ec0ee weak [file ".github/workflows/combine-prs.yml"] url = https://github.com/devlooped/oss/blob/main/.github/workflows/combine-prs.yml @@ -233,16 +233,16 @@ weak [file "src/SponsorLink/SponsorLink.Analyzer.Tests.targets"] url = https://github.com/devlooped/SponsorLink/blob/main/samples/dotnet/SponsorLink.Analyzer.Tests.targets - sha = 058dbbc3582042d7fdcaf5741db59d2b46ea1222 + sha = df44ccc14cc11b5674c55aca9ba8596bdbcf8438 - etag = 2d8bac60892b5565e3419b1fa775c5b977af202304ef3c25a4c6d04c7ac9faf1 + etag = a3e9cbcc227dd56a7bed236eaded136f1b80f9f36a4fabce8be695ee844bf881 weak [file "src/SponsorLink/SponsorLink.Analyzer.targets"] url = https://github.com/devlooped/SponsorLink/blob/main/samples/dotnet/SponsorLink.Analyzer.targets - sha = b7450e6c80efbce65fa2956299f02781cd2dafbe + sha = fb82cf346cea86140a51ae49b9bc730d72f7c7ac - etag = 6f31003e8910d535b2f3cbfcab195db7ced71346f818f45ecd23b5ee9b0dc725 + etag = 284f794d03adabf10ac5e25ef87d257821a82eac112efe65d6fe23d675f9af7f weak [file "src/SponsorLink/SponsorLink/AnalyzerOptionsExtensions.cs"] url = https://github.com/devlooped/SponsorLink/blob/main/samples/dotnet/SponsorLink/AnalyzerOptionsExtensions.cs @@ -288,9 +288,9 @@ weak [file "src/SponsorLink/SponsorLink/SponsorLink.cs"] url = https://github.com/devlooped/SponsorLink/blob/main/samples/dotnet/SponsorLink/SponsorLink.cs - sha = efda32a6eaaeffa485fb480e31adfd2f8130bd48 + sha = 3f72a9fd35274a659dd380a7d5b747d71b9732a1 - etag = 555128f4279241225b4dc8bb2ec8835894edfe9f6b9223399ee8cb3dc7adaf06 + etag = 616598e0ecb6d2ce97660aa6ac049e2a31a1c953669743b7b612b61d40c37706 weak [file "src/SponsorLink/SponsorLink/SponsorLink.csproj"] url = https://github.com/devlooped/SponsorLink/blob/main/samples/dotnet/SponsorLink/SponsorLink.csproj @@ -456,3 +456,13 @@ etag = 50937c64732bb2b97ddc67cc7b7b2d091c51390c9f5f2b5fdcfe9f1becb5d838 weak +[file ".github/workflows/dotnet-file-core.yml"] + url = https://github.com/devlooped/oss/blob/main/.github/workflows/dotnet-file-core.yml + sha = 875284ba5d565f529aba2f5d24ab8ed27c1d1c79 + etag = 8de1d974bf73b1945b5c8be684c3a0b7364114a0d795c9d68837aed9b3aff331 + weak +[file "src/nuget.config"] + url = https://github.com/devlooped/oss/blob/main/src/nuget.config + sha = 354f54c22c9b1619221fba99b99ea1dc215266b4 + etag = c200cff9d9ca61fe06b7d535b233cad330613c47b34433e8a117abbca4c34eb9 + weak diff --git a/readme.md b/readme.md index b1e6f4b..449e9fd 100644 --- a/readme.md +++ b/readme.md @@ -71,7 +71,6 @@ The versioning scheme for packages is: [![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) [![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) @@ -91,7 +90,6 @@ The versioning scheme for packages is: [![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) [![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) [![Simon Cropp](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/SimonCropp.png "Simon Cropp")](https://github.com/SimonCropp) [![agileworks-eu](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/agileworks-eu.png "agileworks-eu")](https://github.com/agileworks-eu) @@ -102,6 +100,7 @@ The versioning scheme for packages is: [![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/SponsorLink/SponsorLink.Analyzer.Tests.targets b/src/SponsorLink/SponsorLink.Analyzer.Tests.targets index b2e6e7b..1ce67f6 100644 --- a/src/SponsorLink/SponsorLink.Analyzer.Tests.targets +++ b/src/SponsorLink/SponsorLink.Analyzer.Tests.targets @@ -7,12 +7,12 @@ - + - + @@ -21,19 +21,29 @@ - - + + + + + $([MSBuild]::ValueOrDefault('%(FullPath)', '').Replace('net6.0', 'netstandard2.0').Replace('net8.0', 'netstandard2.0').Replace('netcoreapp3.1', 'netstandard2.0')) + + + + diff --git a/src/SponsorLink/SponsorLink.Analyzer.targets b/src/SponsorLink/SponsorLink.Analyzer.targets index 6e1f69f..9aae475 100644 --- a/src/SponsorLink/SponsorLink.Analyzer.targets +++ b/src/SponsorLink/SponsorLink.Analyzer.targets @@ -84,14 +84,14 @@ - + - + diff --git a/src/SponsorLink/SponsorLink/SponsorLink.cs b/src/SponsorLink/SponsorLink/SponsorLink.cs index eecd218..eec50c8 100644 --- a/src/SponsorLink/SponsorLink/SponsorLink.cs +++ b/src/SponsorLink/SponsorLink/SponsorLink.cs @@ -107,6 +107,15 @@ public static IncrementalValueProvider GetStatusOptions(this Incr => context.GetSponsorAdditionalFiles().Combine(context.AnalyzerConfigOptionsProvider) .Select((source, _) => new StatusOptions(source.Left, source.Right.GlobalOptions)); + /// + /// Gets the status options for use within a source generator, to avoid depending on + /// analyzer runs. Used in combination with . + /// + public static StatusOptions GetStatusOptions(this GeneratorExecutionContext context) + => new StatusOptions( + context.AdditionalFiles.Where(x => x.IsSponsorManifest(context.AnalyzerConfigOptions) || x.IsSponsorableAnalyzer(context.AnalyzerConfigOptions)).ToImmutableArray(), + context.AnalyzerConfigOptions.GlobalOptions); + static bool IsSponsorManifest(this AdditionalText text, AnalyzerConfigOptionsProvider provider) => provider.GetOptions(text).TryGetValue("build_metadata.SponsorManifest.ItemType", out var itemType) && itemType == "SponsorManifest" && diff --git a/src/nuget.config b/src/nuget.config new file mode 100644 index 0000000..0b68f5a --- /dev/null +++ b/src/nuget.config @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + +