From 4feeb896368a89188d95142322b3d5a690a489e3 Mon Sep 17 00:00:00 2001 From: kzu Date: Thu, 20 Apr 2023 00:16:45 +0000 Subject: [PATCH] Bump files with dotnet-file sync # devlooped/oss - Add techdebt label to excludes from release config https://github.com/devlooped/oss/commit/1afd173 - Ignore docs merges too https://github.com/devlooped/oss/commit/055a8b7 - Add attribution to upstream and note on regex https://github.com/devlooped/oss/commit/c161088 - Fix action repo name https://github.com/devlooped/oss/commit/ac753b7 - Don't fail sponsors tagging, since it's optional https://github.com/devlooped/oss/commit/8990ebb - Fix initial test run without filter https://github.com/devlooped/oss/commit/9a1b075 - Don't collect logs anymore https://github.com/devlooped/oss/commit/6bd81a3 - Fix mapping sources https://github.com/devlooped/oss/commit/b2fa09b - Don't run build when changing docs https://github.com/devlooped/oss/commit/db76fb9 - :hammer: Populate RepositoryBranch in CI w/MSBuild https://github.com/devlooped/oss/commit/55c0b32 - Don't fail the build if sleet finds no packages to push https://github.com/devlooped/oss/commit/6928fc7 - Allow manually running builds https://github.com/devlooped/oss/commit/fc5889d - Automatically retry failed tests up to 5 times https://github.com/devlooped/oss/commit/8bc16a7 - Ensure GNU grep is used on macOS https://github.com/devlooped/oss/commit/964caa3 - Reuse test with retries definition by using a composite action https://github.com/devlooped/oss/commit/3b9f317 - Now that .NET6 is LTS, ensure it's installed https://github.com/devlooped/oss/commit/7ebebbd - Switch to windows-latest agent which is now .NET6 https://github.com/devlooped/oss/commit/445239b - Ignore nuget-provided files for formatting https://github.com/devlooped/oss/commit/bbf637b - Ignore changes to readme.md as build trigger https://github.com/devlooped/oss/commit/e19ed32 - Move format check for last https://github.com/devlooped/oss/commit/7db501b - Make build matrix configurable per-repo https://github.com/devlooped/oss/commit/391da5e - Rename matrix lookup job and steps https://github.com/devlooped/oss/commit/cf8e339 - Switch to newer syntax for output variables https://github.com/devlooped/oss/commit/9dc1ae2 - Automatically build from dev/* branches too https://github.com/devlooped/oss/commit/6d3dd85 - Drop net6 forced install, it's built-in all agents now https://github.com/devlooped/oss/commit/34c1bf6 - Drop net6 setup on prior to dotnet format https://github.com/devlooped/oss/commit/4b31891 - Remove limitation on matrix os for sleet publishing https://github.com/devlooped/oss/commit/7e3288c - Use a better CI version number https://github.com/devlooped/oss/commit/1ec6385 - Don't run analyzers/codefixers in format https://github.com/devlooped/oss/commit/543f7da - Parallelize format to speed up build https://github.com/devlooped/oss/commit/13d67e2 - Ignore xUnit1013 so records can be used as test classes https://github.com/devlooped/oss/commit/369cd2b - Add specific skip rules for tests https://github.com/devlooped/oss/commit/448cf45 - Ignore TestResults folders https://github.com/devlooped/oss/commit/a9f9d3f - Update .editorconfig https://github.com/devlooped/oss/commit/2981836 - Ignore test analyzer rules recursively. https://github.com/devlooped/oss/commit/fd5b554 - Ignore azurite files https://github.com/devlooped/oss/commit/829faad - Ignore primary ctor parameter in tests, usually used for testoutput helper https://github.com/devlooped/oss/commit/c779d3d - Add azurite hidden folders too https://github.com/devlooped/oss/commit/978c71c - Ignore *.log files https://github.com/devlooped/oss/commit/c78868e - Update .gitignore with JetBrains private folder https://github.com/devlooped/oss/commit/9dff0bd - Ignore app root folder too https://github.com/devlooped/oss/commit/b87a8a7 - Use full name as Author, since Owner is already kzu https://github.com/devlooped/oss/commit/0fc6e0e - Only include/pack icon.png if it exists in the default location https://github.com/devlooped/oss/commit/ae442c0 - Preserve transitively copied content in VS https://github.com/devlooped/oss/commit/52d6c40 - Generate API documentation for non-tests projects by default https://github.com/devlooped/oss/commit/32213f2 - Add nuget.org as first restore source, for convenience https://github.com/devlooped/oss/commit/3f294a1 - Automatically set/include icon.png and readme.md https://github.com/devlooped/oss/commit/e260665 - Global tools should run on whatever latest runtime is installed. https://github.com/devlooped/oss/commit/b65c8f1 - Ensure MSBuild tooling can access package artifacts always via PKG_[PackageId] https://github.com/devlooped/oss/commit/cc6922f - Add CI as a project property https://github.com/devlooped/oss/commit/2fea462 - Switch to old nuget.config for package sources https://github.com/devlooped/oss/commit/c6f74ce - Enable C# compiler strict mode by default https://github.com/devlooped/oss/commit/ef8e7fa - Since dependabot doesn't consume API requests, do it more frequently https://github.com/devlooped/oss/commit/4f070a4 - Only override VersionPrefix if it has no value https://github.com/devlooped/oss/commit/28a27ba - Allow extending build with local-only files https://github.com/devlooped/oss/commit/6ae80a1 - If PackAsTool=true, default IsPackable=true, for obvious reasons https://github.com/devlooped/oss/commit/fde1f6f - If PackFolder is specified, assume IsPackable=true https://github.com/devlooped/oss/commit/b0249cf - Make src-level readme visible for easier editing https://github.com/devlooped/oss/commit/bfe0f2a - Add RepositoryBranch as a ThisAssembly.Project property https://github.com/devlooped/oss/commit/83d7378 - Add RepositoryRoot property from source control information https://github.com/devlooped/oss/commit/f9763d3 - Add RepositoryUrl as project property, if available https://github.com/devlooped/oss/commit/4f57ffe - Remove DumpItems task. Easily replaceable with MSBuild.DumpItems https://github.com/devlooped/oss/commit/024f733 - Remove the source link in the package description https://github.com/devlooped/oss/commit/b9fb0a7 - Fix incremental build issue with package files and doc file https://github.com/devlooped/oss/commit/96b6773 - When using EnableRexCodeGenerator, this should Just Work https://github.com/devlooped/oss/commit/c7235d7 - Enable VSCode/Razor compat when using resxcode generator https://github.com/devlooped/oss/commit/1514d15 # clarius/pages --- .editorconfig | 20 +++ .github/dependabot.yml | 10 +- .github/release.yml | 32 ++++ .github/workflows/build.yml | 132 +++++---------- .../workflows/changelog.config | 4 +- .github/workflows/changelog.yml | 33 ++-- .github/workflows/combine-prs.yml | 157 ++++++++++++++++++ .github/workflows/dotnet-file.yml | 50 ++++-- .github/workflows/includes.yml | 43 +++++ .github/workflows/pages.yml | 49 +++++- .github/workflows/publish.yml | 14 +- .github/workflows/release-artifacts.yml | 49 ------ .github/workflows/release-notes.yml | 56 ------- .github/workflows/sponsor.yml | 24 +++ .github/workflows/sponsors.yml | 23 --- .github/workflows/test/action.yml | 36 ++++ .gitignore | 8 +- .netconfig | 107 ++++++------ Gemfile | 2 +- assets/css/style.scss | 11 +- src/Directory.Build.props | 40 +++-- src/Directory.Build.targets | 141 +++++++++------- src/nuget.config | 32 ++++ 23 files changed, 676 insertions(+), 397 deletions(-) create mode 100644 .github/release.yml rename .github_changelog_generator => .github/workflows/changelog.config (68%) create mode 100644 .github/workflows/combine-prs.yml create mode 100644 .github/workflows/includes.yml delete mode 100644 .github/workflows/release-artifacts.yml delete mode 100644 .github/workflows/release-notes.yml create mode 100644 .github/workflows/sponsor.yml delete mode 100644 .github/workflows/sponsors.yml create mode 100644 .github/workflows/test/action.yml create mode 100644 src/nuget.config diff --git a/.editorconfig b/.editorconfig index c434eb5..4cab270 100644 --- a/.editorconfig +++ b/.editorconfig @@ -58,6 +58,12 @@ dotnet_style_require_accessibility_modifiers = omit_if_default:error dotnet_diagnostic.IDE0040.severity = error [*.cs] +# Top-level files are definitely OK +csharp_using_directive_placement = outside_namespace:silent +csharp_style_namespace_declarations = block_scoped:silent +csharp_prefer_simple_using_statement = true:suggestion +csharp_prefer_braces = true:silent + # Prefer "var" everywhere csharp_style_var_for_built_in_types = true:suggestion csharp_style_var_when_type_is_apparent = true:suggestion @@ -87,3 +93,17 @@ csharp_new_line_before_catch = true csharp_new_line_before_finally = true csharp_new_line_before_members_in_object_initializers = true csharp_new_line_before_members_in_anonymous_types = true + +# Test settings +[**/*Tests*/**{.cs,.vb}] +# xUnit1013: Public method should be marked as test. Allows using records as test classes +dotnet_diagnostic.xUnit1013.severity = none + +# CS9113: Parameter is unread (usually, ITestOutputHelper) +dotnet_diagnostic.CS9113.severity = none + +# Default severity for analyzer diagnostics with category 'Style' +dotnet_analyzer_diagnostic.category-Style.severity = none + +# VSTHRD200: Use "Async" suffix for async methods +dotnet_diagnostic.VSTHRD200.severity = none diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 9890fec..f551596 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -6,12 +6,4 @@ updates: - package-ecosystem: nuget directory: / schedule: - interval: weekly - ignore: - - dependency-name: "Microsoft.CodeAnalysis.Common" - - dependency-name: "Microsoft.CodeAnalysis.CSharp" - - dependency-name: "Microsoft.CodeAnalysis.CSharp.Features" - - dependency-name: "Microsoft.CodeAnalysis.CSharp.Workspaces" - - dependency-name: "Microsoft.CodeAnalysis.VisualBasic" - - dependency-name: "Microsoft.Bcl.AsyncInterfaces" - - dependency-name: "Microsoft.Bcl.HashCode" \ No newline at end of file + interval: daily diff --git a/.github/release.yml b/.github/release.yml new file mode 100644 index 0000000..9a018cd --- /dev/null +++ b/.github/release.yml @@ -0,0 +1,32 @@ +changelog: + exclude: + labels: + - bydesign + - dependencies + - duplicate + - question + - invalid + - wontfix + - need info + - docs + - techdebt + authors: + - devlooped-bot + - dependabot + - github-actions + categories: + - title: ✨ Implemented enhancements + labels: + - enhancement + - title: πŸ› Fixed bugs + labels: + - bug + - title: πŸ“ Documentation updates + labels: + - docs + - title: πŸ”¨ Other + labels: + - '*' + exclude: + labels: + - dependencies diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 610688f..0480456 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -5,40 +5,49 @@ name: build on: workflow_dispatch: push: - branches: [ main, dev, 'feature/*', 'rel/*' ] + branches: [ main, dev, 'dev/*', 'feature/*', 'rel/*' ] + paths-ignore: + - changelog.md + - code-of-conduct.md + - security.md + - support.md + - readme.md pull_request: types: [opened, synchronize, reopened] env: DOTNET_NOLOGO: true + VersionPrefix: 42.42.${{ github.run_number }} + VersionLabel: ${{ github.ref }} defaults: run: shell: bash jobs: - dotnet-format: + os-matrix: runs-on: ubuntu-latest + outputs: + matrix: ${{ steps.lookup.outputs.matrix }} steps: - name: 🀘 checkout uses: actions/checkout@v2 - with: - submodules: recursive - fetch-depth: 0 - - - name: βœ“ ensure format + + - name: πŸ”Ž lookup + id: lookup + shell: pwsh run: | - dotnet tool update -g dotnet-format --version 5.0.* - dotnet restore - dotnet format --check -v:diag + $path = './.github/workflows/os-matrix.json' + $os = if (test-path $path) { cat $path } else { '["ubuntu-latest"]' } + echo "matrix=$os" >> $env:GITHUB_OUTPUT build: + needs: os-matrix name: build-${{ matrix.os }} - needs: dotnet-format runs-on: ${{ matrix.os }} strategy: matrix: - os: [ubuntu-latest, windows-latest, macOS-latest] + os: ${{ fromJSON(needs.os-matrix.outputs.matrix) }} steps: - name: 🀘 checkout uses: actions/checkout@v2 @@ -47,102 +56,39 @@ jobs: fetch-depth: 0 - name: πŸ™ build - run: dotnet build -m:1 -bl:build.binlog -p:VersionLabel="$GITHUB_REF.$GITHUB_RUN_NUMBER" -p:RepositoryBranch=${GITHUB_REF#refs/*/} + run: dotnet build -m:1 + + - name: βš™ GNU grep + if: matrix.os == 'macOS-latest' + run: | + brew install grep + echo 'export PATH="/usr/local/opt/grep/libexec/gnubin:$PATH"' >> .bash_profile - name: πŸ§ͺ test - run: dotnet test --no-build -m:1 --blame-hang --blame-hang-timeout 5m -d $GITHUB_WORKSPACE/logs/${{ matrix.os }}.txt -r $GITHUB_WORKSPACE/logs + uses: ./.github/workflows/test - name: πŸ“¦ pack - run: dotnet pack -m:1 -bl:pack.binlog -p:VersionLabel="$GITHUB_REF.$GITHUB_RUN_NUMBER" -p:RepositoryBranch=${GITHUB_REF#refs/*/} + run: dotnet pack -m:1 - - name: πŸ”Ό packages - uses: actions/upload-artifact@v2 - with: - name: bin - path: bin/*.nupkg - # Only push CI package to sleet feed if building on ubuntu (fastest) - name: πŸš€ sleet env: SLEET_CONNECTION: ${{ secrets.SLEET_CONNECTION }} - if: matrix.os == 'ubuntu-latest' && env.SLEET_CONNECTION != '' + if: env.SLEET_CONNECTION != '' run: | dotnet tool install -g --version 4.0.18 sleet sleet push bin --config none -f --verbose -p "SLEET_FEED_CONTAINER=nuget" -p "SLEET_FEED_CONNECTIONSTRING=${{ secrets.SLEET_CONNECTION }}" -p "SLEET_FEED_TYPE=azure" || echo "No packages found" - acceptance: - name: acceptance-${{ matrix.os }} - runs-on: ${{ matrix.os }} - needs: build - strategy: - matrix: - os: [ubuntu-latest, windows-latest, macOS-latest] - steps: - - name: 🀘 checkout - uses: actions/checkout@v2 - - - name: πŸ”½ packages - uses: actions/download-artifact@v2 - with: - name: bin - path: bin - - - name: πŸ§ͺ test - run: dotnet test -p:VersionLabel="$GITHUB_REF.$GITHUB_RUN_NUMBER" - working-directory: src/Acceptance - - preview: - defaults: - run: - shell: pwsh - needs: dotnet-format - runs-on: windows-latest - + dotnet-format: + runs-on: ubuntu-latest steps: - name: 🀘 checkout uses: actions/checkout@v2 + with: + submodules: recursive + fetch-depth: 0 - # > VS Preview - - name: πŸ”½ dotnet-vs - run: dotnet tool update -g dotnet-vs - - name: πŸ”½ vs preview - run: vs install preview --quiet +Microsoft.VisualStudio.Component.ManagedDesktop.Core +Microsoft.NetCore.Component.DevelopmentTools - - name: β‰₯ msbuild - run: echo "$(vs where preview --prop=InstallationPath)\MSBuild\Current\Bin" >> $env:GITHUB_PATH - # < VS Preview - - - name: βš™ curl + - name: βœ“ ensure format run: | - iwr -useb get.scoop.sh | iex - scoop install curl - - name: πŸ” status for PR - if: ${{ github.event.pull_request.head.sha }} - run: echo "STATUS_SHA=${{ github.event.pull_request.head.sha }}" >> $env:GITHUB_ENV - - - name: πŸ” status for branch - if: ${{ !github.event.pull_request.head.sha }} - run: echo "STATUS_SHA=$($env:GITHUB_SHA)" >> $env:GITHUB_ENV - - - name: βŒ› wait on build - env: - CHECK: build-windows-latest - SHA: ${{ env.STATUS_SHA }} - TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: ./.github/workflows/wait-status.ps1 - - - name: βŒ› wait on acceptance - env: - CHECK: acceptance-windows-latest - SHA: ${{ env.STATUS_SHA }} - TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: ./.github/workflows/wait-status.ps1 - - - name: πŸ”½ packages - uses: actions/download-artifact@v2 - with: - name: bin - path: bin - - - name: πŸ§ͺ test - run: msbuild -r -t:build,test -p:TargetFramework=net472 -p:VersionLabel="$($env:GITHUB_REF).$($env:GITHUB_RUN_NUMBER)" - working-directory: src/Acceptance + dotnet format whitespace --verify-no-changes -v:diag --exclude ~/.nuget + dotnet format style --verify-no-changes -v:diag --exclude ~/.nuget diff --git a/.github_changelog_generator b/.github/workflows/changelog.config similarity index 68% rename from .github_changelog_generator rename to .github/workflows/changelog.config index 4e9e334..cd34ee7 100644 --- a/.github_changelog_generator +++ b/.github/workflows/changelog.config @@ -1,9 +1,9 @@ usernames-as-github-logins=true -header-label= issues_wo_labels=true pr_wo_labels=true -exclude-labels=dependencies,duplicate,question,invalid,wontfix +exclude-labels=bydesign,dependencies,duplicate,question,invalid,wontfix,need info,docs enhancement-label=:sparkles: Implemented enhancements: bugs-label=:bug: Fixed bugs: issues-label=:hammer: Other: pr-label=:twisted_rightwards_arrows: Merged: +unreleased=false diff --git a/.github/workflows/changelog.yml b/.github/workflows/changelog.yml index bc837dd..b120b73 100644 --- a/.github/workflows/changelog.yml +++ b/.github/workflows/changelog.yml @@ -1,36 +1,39 @@ ο»Ώname: changelog on: + workflow_dispatch: release: types: [released] -env: - GH_TOKEN: ${{ secrets.GH_TOKEN }} - jobs: changelog: runs-on: ubuntu-latest steps: - - name: πŸ” GH_TOKEN - if: env.GH_TOKEN == '' - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: echo "GH_TOKEN=${GITHUB_TOKEN}" >> $GITHUB_ENV - + - 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@v2 with: fetch-depth: 0 ref: main token: ${{ env.GH_TOKEN }} + + - name: βš™ ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: 3.0.3 - name: βš™ changelog - uses: faberNovel/github-changelog-generator-action@master - with: - options: --token ${{ secrets.GITHUB_TOKEN }} --o changelog.md + run: | + gem install github_changelog_generator + github_changelog_generator --user ${GITHUB_REPOSITORY%/*} --project ${GITHUB_REPOSITORY##*/} --token $GH_TOKEN --o changelog.md --config-file .github/workflows/changelog.config - name: πŸš€ changelog run: | - git config --local user.name github-actions - git config --local user.email github-actions@github.com git add changelog.md - (git commit -m "πŸ–‰ Update changelog with ${GITHUB_REF#refs/*/}" && git push) || echo "Done" + (git commit -m "πŸ–‰ Update changelog with ${GITHUB_REF#refs/*/}" && git push) || echo "Done" \ No newline at end of file diff --git a/.github/workflows/combine-prs.yml b/.github/workflows/combine-prs.yml new file mode 100644 index 0000000..0255974 --- /dev/null +++ b/.github/workflows/combine-prs.yml @@ -0,0 +1,157 @@ +# Source: https://github.com/hrvey/combine-prs-workflow +# Tweaks: regex support for branch + +name: 'β›™ combine-prs' + +on: + workflow_dispatch: + inputs: + branchExpression: + description: 'Regular expression to match against PR branches to find combinable PRs' + required: true + default: 'dependabot' + mustBeGreen: + description: 'Only combine PRs that are green (status is success)' + required: true + default: true + combineTitle: + description: 'Title of the combined PR' + required: true + default: '⬆️ Bump dependencies' + combineBranchName: + description: 'Name of the branch to combine PRs into' + required: true + default: 'combine-prs' + ignoreLabel: + description: 'Exclude PRs with this label' + required: true + default: 'nocombine' + +jobs: + combine-prs: + name: ${{ github.event.inputs.combineBranchName }} + runs-on: ubuntu-latest + steps: + - uses: actions/github-script@v6 + with: + github-token: ${{secrets.GITHUB_TOKEN}} + script: | + const pulls = await github.paginate('GET /repos/:owner/:repo/pulls', { + owner: context.repo.owner, + repo: context.repo.repo + }); + const branchRegExp = new RegExp(`${{github.event.inputs.branchExpression}}`); + let branchesAndPRStrings = []; + let baseBranch = null; + let baseBranchSHA = null; + for (const pull of pulls) { + const branch = pull['head']['ref']; + console.log('Pull for branch: ' + branch); + if (branchRegExp.test(branch)) { + console.log('Branch matched: ' + branch); + let statusOK = true; + if(${{ github.event.inputs.mustBeGreen }}) { + console.log('Checking green status: ' + branch); + const stateQuery = `query($owner: String!, $repo: String!, $pull_number: Int!) { + repository(owner: $owner, name: $repo) { + pullRequest(number:$pull_number) { + commits(last: 1) { + nodes { + commit { + statusCheckRollup { + state + } + } + } + } + } + } + }` + const vars = { + owner: context.repo.owner, + repo: context.repo.repo, + pull_number: pull['number'] + }; + const result = await github.graphql(stateQuery, vars); + const [{ commit }] = result.repository.pullRequest.commits.nodes; + const state = commit.statusCheckRollup.state + console.log('Validating status: ' + state); + if(state != 'SUCCESS') { + console.log('Discarding ' + branch + ' with status ' + state); + statusOK = false; + } + } + console.log('Checking labels: ' + branch); + const labels = pull['labels']; + for(const label of labels) { + const labelName = label['name']; + console.log('Checking label: ' + labelName); + if(labelName == '${{ github.event.inputs.ignoreLabel }}') { + console.log('Discarding ' + branch + ' with label ' + labelName); + statusOK = false; + } + } + if (statusOK) { + console.log('Adding branch to array: ' + branch); + const prString = '#' + pull['number'] + ' ' + pull['title']; + branchesAndPRStrings.push({ branch, prString }); + baseBranch = pull['base']['ref']; + baseBranchSHA = pull['base']['sha']; + } + } + } + if (branchesAndPRStrings.length == 0) { + core.setFailed('No PRs/branches matched criteria'); + return; + } + if (branchesAndPRStrings.length == 1) { + core.setFailed('Only one PR/branch matched criteria'); + return; + } + + try { + await github.rest.git.createRef({ + owner: context.repo.owner, + repo: context.repo.repo, + ref: 'refs/heads/' + '${{ github.event.inputs.combineBranchName }}', + sha: baseBranchSHA + }); + } catch (error) { + console.log(error); + core.setFailed('Failed to create combined branch - maybe a branch by that name already exists?'); + return; + } + + let combinedPRs = []; + let mergeFailedPRs = []; + for(const { branch, prString } of branchesAndPRStrings) { + try { + await github.rest.repos.merge({ + owner: context.repo.owner, + repo: context.repo.repo, + base: '${{ github.event.inputs.combineBranchName }}', + head: branch, + }); + console.log('Merged branch ' + branch); + combinedPRs.push(prString); + } catch (error) { + console.log('Failed to merge branch ' + branch); + mergeFailedPRs.push(prString); + } + } + + console.log('Creating combined PR'); + const combinedPRsString = combinedPRs.join('\n'); + let body = 'β›™ Combined PRs:\n' + combinedPRsString; + if(mergeFailedPRs.length > 0) { + const mergeFailedPRsString = mergeFailedPRs.join('\n'); + body += '\n\n⚠️ The following PRs were left out due to merge conflicts:\n' + mergeFailedPRsString + } + await github.rest.pulls.create({ + owner: context.repo.owner, + repo: context.repo.repo, + title: 'β›™ ${{github.event.inputs.combineTitle}}', + head: '${{ github.event.inputs.combineBranchName }}', + base: baseBranch, + body: body + }); diff --git a/.github/workflows/dotnet-file.yml b/.github/workflows/dotnet-file.yml index 06c38c4..818aa2c 100644 --- a/.github/workflows/dotnet-file.yml +++ b/.github/workflows/dotnet-file.yml @@ -1,6 +1,7 @@ -ο»Ώ# Synchronizes .netconfig-configured files with dotnet-file +# Synchronizes .netconfig-configured files with dotnet-file name: dotnet-file on: + workflow_dispatch: schedule: - cron: "0 0 * * *" push: @@ -8,18 +9,19 @@ on: env: DOTNET_NOLOGO: true - GH_TOKEN: ${{ secrets.GH_TOKEN }} jobs: sync: runs-on: windows-latest + continue-on-error: true steps: - - name: πŸ” GH_TOKEN - if: env.GH_TOKEN == '' - shell: bash - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: echo "GH_TOKEN=${GITHUB_TOKEN}" >> $GITHUB_ENV + - 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@v2 @@ -28,7 +30,24 @@ jobs: ref: main token: ${{ env.GH_TOKEN }} + - name: βŒ› rate + shell: pwsh + 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 + shell: pwsh run: | dotnet tool update -g dotnet-gcm dotnet gcm store --protocol=https --host=github.com --username=$env:GITHUB_ACTOR --password=$env:GH_TOKEN @@ -45,14 +64,23 @@ jobs: echo 'No changelog was generated' } + - name: +Mᐁ includes + uses: devlooped/actions-include@v1 + with: + validate: false + - name: ✍ pull request - uses: peter-evans/create-pull-request@v3 + uses: peter-evans/create-pull-request@v4 with: base: main branch: dotnet-file-sync - commit-message: Bump files with 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" + 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 new file mode 100644 index 0000000..bb1a90b --- /dev/null +++ b/.github/workflows/includes.yml @@ -0,0 +1,43 @@ +name: +Mᐁ includes +on: + workflow_dispatch: + push: + branches: + - 'main' + paths: + - '**.md' + - '!changelog.md' + +jobs: + includes: + runs-on: ubuntu-latest + 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@v2 + with: + token: ${{ env.GH_TOKEN }} + + - name: +Mᐁ includes + uses: devlooped/actions-includes@v1 + + - name: ✍ pull request + uses: peter-evans/create-pull-request@v4 + with: + base: main + branch: markdown-includes + delete-branch: true + labels: docs + author: ${{ env.BOT_AUTHOR }} + committer: ${{ env.BOT_AUTHOR }} + commit-message: +Mᐁ includes + title: +Mᐁ includes + body: +Mᐁ includes + token: ${{ env.GH_TOKEN }} diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml index eea5601..0d08107 100644 --- a/.github/workflows/pages.yml +++ b/.github/workflows/pages.yml @@ -1,27 +1,60 @@ +# Workflow to cross-post a jekyll site (or GitHub Pages) +# to another org/repo. +# Required secrets in repository consuming this workflow: +# - PAGES_ORGANIZATION: the target organization to publish +# pages to. +# - PAGES_ACCESS_TOKEN: a token that is valid in the target +# org/repo for pushing the resulting site +# - PAGES_REPOSITORY: optional repository name under the +# target organization. Defaults to source repo name. + name: pages on: + workflow_dispatch: push: branches: - main - pages + - docs + +env: + PAGES_ORGANIZATION: ${{ secrets.PAGES_ORGANIZATION }} + PAGES_REPOSITORY: ${{ secrets.PAGES_REPOSITORY }} jobs: gh-pages: runs-on: ubuntu-latest + env: + PAGES_ORGANIZATION: ${{ secrets.PAGES_ORGANIZATION }} + PAGES_REPOSITORY: ${{ secrets.PAGES_REPOSITORY }} + PAGES_ACCESS_TOKEN: ${{ secrets.PAGES_ACCESS_TOKEN }} steps: + - name: βœ… organization + if: env.PAGES_ORGANIZATION == '' + run: | + echo "::error title=PAGES_ORGANIZATION secret is required." + exit 1 + + - name: βœ… token + if: env.PAGES_ACCESS_TOKEN == '' + run: | + echo "::error title=PAGES_ACCESS_TOKEN secret is required." + exit 1 + - name: 🀘 checkout uses: actions/checkout@v2 - name: βš™ jekyll run: | sudo gem install bundler - bundle install + sudo bundle install - - name: πŸ–‰ repo - run: echo "REPOSITORY=${GITHUB_REPOSITORY#*/}" >> $GITHUB_ENV + - name: πŸ–‰ default repo + if: env.PAGES_REPOSITORY == '' + run: echo "PAGES_REPOSITORY=${GITHUB_REPOSITORY#*/}" >> $GITHUB_ENV - name: πŸ™ build - run: bundle exec jekyll build -b ${{ env.REPOSITORY }} + run: bundle exec jekyll build -b ${{ env.PAGES_REPOSITORY }} env: JEKYLL_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -30,15 +63,15 @@ jobs: cd _site git init git add -A - git config --local user.email "hello@clarius.org" - git config --local user.name "GitHub Action" + git config --local user.email "bot@clarius.org" + git config --local user.name "bot@clarius.org" git commit -m "Publish pages from ${GITHUB_REPOSITORY}@${GITHUB_SHA:0:9}" - name: πŸš€ push uses: ad-m/github-push-action@v0.6.0 with: - github_token: ${{ secrets.CLARIUS_ACCESS_TOKEN }} - repository: clarius/${{ env.REPOSITORY }} + github_token: ${{ env.PAGES_ACCESS_TOKEN }} + repository: ${{ env.PAGES_ORGANIZATION }}/${{ env.PAGES_REPOSITORY }} branch: gh-pages force: true directory: ./_site \ No newline at end of file diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index f1e4867..bd83ada 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -20,21 +20,15 @@ jobs: with: submodules: recursive fetch-depth: 0 - + - name: πŸ™ build - run: dotnet build -m:1 -bl:build.binlog -p:version=${GITHUB_REF#refs/*/v} -p:RepositoryBranch=${GITHUB_REF#refs/*/} + run: dotnet build -m:1 -p:version=${GITHUB_REF#refs/*/v} - name: πŸ§ͺ test - run: dotnet test --no-build -m:1 + uses: ./.github/workflows/test - name: πŸ“¦ pack - run: dotnet pack -m:1 -bl:pack.binlog -p:version=${GITHUB_REF#refs/*/v} -p:RepositoryBranch=${GITHUB_REF#refs/*/} - - - name: πŸ”Ό logs - if: ${{ always() }} - uses: actions/upload-artifact@v2 - with: - path: '**/*.binlog' + run: dotnet pack -m:1 -p:version=${GITHUB_REF#refs/*/v} - name: πŸš€ nuget run: dotnet nuget push ./bin/**/*.nupkg -s https://api.nuget.org/v3/index.json -k ${{secrets.NUGET_API_KEY}} --skip-duplicate diff --git a/.github/workflows/release-artifacts.yml b/.github/workflows/release-artifacts.yml deleted file mode 100644 index 9f96526..0000000 --- a/.github/workflows/release-artifacts.yml +++ /dev/null @@ -1,49 +0,0 @@ -# Builds a release version of the project and uploads -# as artifacts of the release for verification/history - -name: release-artifacts -on: - release: - types: [published] - -jobs: - release-artifacts: - runs-on: ubuntu-latest - steps: - - name: 🀘 checkout - uses: actions/checkout@v2 - with: - submodules: recursive - fetch-depth: 0 - - - name: 🏷 current - run: echo "CURRENT_TAG=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV - - - name: πŸ™ build - run: dotnet build -m:1 -bl:build.binlog -p:version=${GITHUB_REF#refs/*/v} -p:RepositoryBranch=${GITHUB_REF#refs/*/} - - - name: πŸ§ͺ test - run: dotnet test --no-build -m:1 - - - name: πŸ“¦ pack - run: dotnet pack -m:1 -bl:pack.binlog -p:version=${GITHUB_REF#refs/*/v} -p:RepositoryBranch=${GITHUB_REF#refs/*/} - - - name: πŸ”Ό logs - if: ${{ always() }} - uses: actions/upload-artifact@v2 - with: - path: '**/*.binlog' - - - name: πŸ”½ gh - run: | - sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key C99B11DEB97541F0 - sudo apt-add-repository https://cli.github.com/packages - sudo apt update - sudo apt install gh - - - name: πŸ”Ό artifacts - shell: pwsh - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - gci .\bin -Recurse -Filter *.nupkg | %{ gh release upload --clobber $env:CURRENT_TAG $_ } \ No newline at end of file diff --git a/.github/workflows/release-notes.yml b/.github/workflows/release-notes.yml deleted file mode 100644 index 5781dd6..0000000 --- a/.github/workflows/release-notes.yml +++ /dev/null @@ -1,56 +0,0 @@ -# Updates a release with release notes -name: release-notes - -on: - release: - types: [published] - -jobs: - release-notes: - runs-on: ubuntu-latest - steps: - - name: 🀘 checkout - uses: actions/checkout@v2 - with: - submodules: recursive - fetch-depth: 0 - - - name: 🏷 current - run: echo "CURRENT_TAG=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV - - name: 🏷 since - run: echo "SINCE_TAG=$(git describe --abbrev=0 --tags $(git rev-list --tags --skip=1 --max-count=1))" >> $GITHUB_ENV - - - name: βš™ changelog - uses: faberNovel/github-changelog-generator-action@master - if: env.SINCE_TAG != '' - with: - options: --token ${{ secrets.GITHUB_TOKEN }} --since-tag ${{ env.SINCE_TAG }} --o changelog.md - - - name: βš™ changelog - uses: faberNovel/github-changelog-generator-action@master - if: env.SINCE_TAG == '' - with: - options: --token ${{ secrets.GITHUB_TOKEN }} --o changelog.md - - - name: πŸ–‰ release - shell: pwsh - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - $id = iwr "$env:GITHUB_API_URL/repos/$env:GITHUB_REPOSITORY/releases/tags/$env:CURRENT_TAG" | - select -ExpandProperty Content | - ConvertFrom-Json | - select -ExpandProperty id - - $notes = (Get-Content .\changelog.md | where { !($_ -like '\*') } | %{ $_.replace('\', '\\') }) -join '\n' - $headers = @{ 'Accept'='application/vnd.github.v3+json;charset=utf-8'; 'Authorization' = "bearer $env:GITHUB_TOKEN" } - $body = '{ "body":"' + $notes + '" }' - - # ensure we can convert to json - $body | ConvertFrom-Json | ConvertTo-Json - - # patch & render response nicely - iwr -Body $body "$env:GITHUB_API_URL/repos/$env:GITHUB_REPOSITORY/releases/$id" -Method PATCH -Headers $headers | - select -ExpandProperty Content | - ConvertFrom-Json | - ConvertTo-Json \ No newline at end of file diff --git a/.github/workflows/sponsor.yml b/.github/workflows/sponsor.yml new file mode 100644 index 0000000..9e47191 --- /dev/null +++ b/.github/workflows/sponsor.yml @@ -0,0 +1,24 @@ +name: sponsor πŸ’œ +on: + issues: + types: [opened, edited, reopened] + pull_request: + types: [opened, edited, synchronize, reopened] + +jobs: + sponsor: + runs-on: ubuntu-latest + continue-on-error: true + env: + token: ${{ secrets.GH_TOKEN }} + if: ${{ !endsWith(github.event.sender.login, '[bot]') && !endsWith(github.event.sender.login, 'bot') }} + steps: + - name: 🀘 checkout + if: env.token != '' + uses: actions/checkout@v2 + + - name: πŸ’œ sponsor + if: env.token != '' + uses: devlooped/actions-sponsor@main + with: + token: ${{ env.token }} diff --git a/.github/workflows/sponsors.yml b/.github/workflows/sponsors.yml deleted file mode 100644 index 1a3b119..0000000 --- a/.github/workflows/sponsors.yml +++ /dev/null @@ -1,23 +0,0 @@ -# Runs on new issues/PRs and applies sponsor labels - -name: sponsors -on: - issues: - types: [opened] - -jobs: - sponsors: - runs-on: windows-latest - steps: - - name: 🀘 checkout - uses: actions/checkout@v2 - - - name: πŸ”½ gh - run: | - iwr -useb get.scoop.sh | iex - scoop install gh - - - name: πŸ’› sponsors - run: ./.github/workflows/sponsors.ps1 - env: - GH_TOKEN: ${{ secrets.DEVLOOPED_TOKEN }} diff --git a/.github/workflows/test/action.yml b/.github/workflows/test/action.yml new file mode 100644 index 0000000..4a7dbae --- /dev/null +++ b/.github/workflows/test/action.yml @@ -0,0 +1,36 @@ +name: test +description: runs dotnet tests with retry +runs: + using: "composite" + steps: + - name: πŸ§ͺ test + shell: bash --noprofile --norc {0} + env: + LC_ALL: en_US.utf8 + run: | + [ -f .bash_profile ] && source .bash_profile + counter=0 + exitcode=0 + reset="\e[0m" + warn="\e[0;33m" + while [ $counter -lt 6 ] + do + # run test and forward output also to a file in addition to stdout (tee command) + if [ $filter ] + then + echo -e "${warn}Retry $counter for $filter ${reset}" + dotnet test --no-build -m:1 --blame-hang --blame-hang-timeout 5m --filter=$filter | tee ./output.log + else + dotnet test --no-build -m:1 --blame-hang --blame-hang-timeout 5m | tee ./output.log + fi + # capture dotnet test exit status, different from tee + exitcode=${PIPESTATUS[0]} + if [ $exitcode == 0 ] + then + exit 0 + fi + # cat output, get failed test names, remove trailing whitespace, sort+dedupe, join as FQN~TEST with |, remove trailing |. + filter=$(cat ./output.log | grep -o -P '(?<=\sFailed\s)[\w\._]*' | sed 's/ *$//g' | sort -u | awk 'BEGIN { ORS="|" } { print("FullyQualifiedName~" $0) }' | grep -o -P '.*(?=\|$)') + ((counter++)) + done + exit $exitcode diff --git a/.gitignore b/.gitignore index 043c7d4..0c18de7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,12 @@ bin +app obj artifacts pack +TestResults .vs .vscode +.idea *.suo *.sdf @@ -12,9 +15,12 @@ pack *.nupkg *.metaproj *.tmp +*.log *.cache *.binlog *.zip +__azurite*.* +__*__ .nuget *.lock.json @@ -26,4 +32,4 @@ _site .jekyll-metadata .jekyll-cache Gemfile.lock -package-lock.json \ No newline at end of file +package-lock.json diff --git a/.netconfig b/.netconfig index b86eb6a..4c9dde3 100644 --- a/.netconfig +++ b/.netconfig @@ -12,8 +12,8 @@ [file ".editorconfig"] url = https://github.com/devlooped/oss/blob/main/.editorconfig - sha = 0683ee777d7d878d4bf013d7deea352685135a05 - etag = 985aa022503959d35b03c870f07ae604cead7580d260775235ef6665aa9a6cbe + sha = c779d3d4e468358106dea03e93ba2cd35bb01ecb + etag = 7298c6450967975a8782b5c74f3071e1910fc59686e48f9c9d5cd7c68213cf59 weak [file ".gitattributes"] @@ -24,26 +24,20 @@ [file ".github/dependabot.yml"] url = https://github.com/devlooped/oss/blob/main/.github/dependabot.yml - sha = 0683ee777d7d878d4bf013d7deea352685135a05 - etag = 2fc8a0d2b47091b058ae3e1f68333492044b49a684621f4939a0bce5bff869d5 + sha = 4f070a477b4162a280f02722ae666376ae4fcc71 + etag = 35f2134fff3b0235ff8dac8618a76198c8ef533ad2f29628bbb435cd1134d638 weak [file ".github/workflows/build.yml"] url = https://github.com/devlooped/oss/blob/main/.github/workflows/build.yml - sha = 4bc9de2ce63f083c2805752a25c5997ebc102aeb - etag = 16edbc0d7121c2527f0e62d441bbb4ac2b1ffc7e25ccd4b3d0611c0c86716520 - weak - -[file ".github_changelog_generator"] - url = https://github.com/devlooped/oss/blob/main/.github_changelog_generator - sha = cf52375fd20c6df894f1518890693312d4c4c11c - etag = 115efcd056eaca2f1d2df510eb7632ac3558ace2734a4139b77536b8211dfe41 + sha = 13d67e2cf3f786c8189364fd29332aaa7dc575dc + etag = c616df0877fba60002ccfc0397e9f731ddb22acbbb195a0598fedd4cac5f3135 weak [file ".gitignore"] url = https://github.com/devlooped/oss/blob/main/.gitignore - sha = fa83a5161ba52bc5d510ce0ba75ee0b1f8d4bc63 - etag = 925782b685859e07040442303b411bebd1c75b4fe4e075f547e067f33f323814 + sha = b87a8a795a4c2b6830602225c066c11108552a99 + etag = 96e0860052044780f1fc9e3bdfbee09d82d5dddb8b1217d67460fc7330a64dd8 weak [file "Directory.Build.rsp"] @@ -66,14 +60,14 @@ [file "src/Directory.Build.props"] url = https://github.com/devlooped/oss/blob/main/src/Directory.Build.props - sha = c9924b558ddeafb2cb547a7fcbc18aa7ae292ad1 - etag = dc86d6818b98a7426c604039a07e134d61c8c598f1ceedb9e0e481fa0f93385d + sha = 6ae80a175a8f926ac5d9ffb0f6afd55d85cc9320 + etag = 69d4b16c14d5047b3ed812dbf556b0b8d77deb86f73af04b9bd3640220056fa8 weak [file "src/Directory.Build.targets"] url = https://github.com/devlooped/oss/blob/main/src/Directory.Build.targets - sha = e7de4d0e790f9fe58f31308f95886884b6c5805f - etag = 9956aef0f3becce22fc1dc4e68dd218d5ba3c23de2b106c4ad006ad321cacc4a + sha = 1514d15399a7d545ad92a0e9d57dc8295fdd6af8 + etag = 428f80b0786ff17b836c7a5b0640948724855d17933e958642b22849ac00dadb weak [file "src/kzu.snk"] @@ -84,54 +78,71 @@ [file ".github/workflows/pages.yml"] url = https://github.com/clarius/pages/blob/main/.github/workflows/pages.yml - sha = f2dc1370469bec1b2d32d82faf659b050cdc7e2a - etag = f2bc91354dc634de00aa9f502eb69e34368c315bcdbe422cde95ddd850d31669 - weak - -[file ".github/workflows/sponsors.yml"] - url = https://github.com/devlooped/oss/blob/main/.github/workflows/sponsors.yml - sha = 514760df24bd906b9e5d3a56deac0d18cba59a6d - etag = 0236ed96c1d11f69b26ac0e039e74107df5731574236e2de2a83152fee5df0a6 + sha = afcb0421af6507eba5ceba913b8fc37261efc085 + etag = c52b3f0463b88abf696ddf2c6902675e0bc9d1e812bb317cb758221d75330b56 weak [file "Gemfile"] url = https://github.com/clarius/pages/blob/main/Gemfile - sha = f2dc1370469bec1b2d32d82faf659b050cdc7e2a - etag = d45832acd078778ffebf260000f6d25172a131f51684744d7e982da2a47170ce + sha = 565a77f40db0863cb47ceb36f88790259a697c91 + etag = 24e482e91192e292b633e3c17c4f095286ffb5a041d299d761b2e6ef99ee7669 weak [file "assets/css/style.scss"] url = https://github.com/devlooped/oss/blob/main/assets/css/style.scss - sha = b5583942b012f42f5ac2d06200427070cc18c250 - etag = 2c86a074a6c8c2f6af806908a57215439fad563830b4af8fbed1a3aabaede0cf + sha = 9db26e2710b084d219d6355339d822f159bf5780 + etag = f710d8919abfd5a8d00050b74ba7d0bb05c6d02e40842a3012eb96555c208504 weak [file ".github/workflows/changelog.yml"] url = https://github.com/devlooped/oss/blob/main/.github/workflows/changelog.yml - sha = 169dfb51e7fa3f05cbfe01ca0342c0729f69b481 - etag = 2478e00a02849f0a65287d44028eb3c9f99ee0c0529cddaa88088765abc5da0b + sha = a4b66eb5f4dfb9704502f19f59ba33cb4855188c + etag = 54c0b571648b1055beb3ddac180b34e93a9869b9f0277de306901b2c1dbe0b2c weak [file ".github/workflows/publish.yml"] url = https://github.com/devlooped/oss/blob/main/.github/workflows/publish.yml - sha = e68624389d8133571da53e83ab4e88de7bc028a8 - etag = 8067230717247263ad661c69780fdfdf4b6f140287517fee9c5d4e64d4b737af - weak - -[file ".github/workflows/release-artifacts.yml"] - url = https://github.com/devlooped/oss/blob/main/.github/workflows/release-artifacts.yml - sha = e68624389d8133571da53e83ab4e88de7bc028a8 - etag = 8be10a2fbeb9e6924d8b08e58a61a0f69138352c6f5477b53dcd34c26d8d35ef - weak - -[file ".github/workflows/release-notes.yml"] - url = https://github.com/devlooped/oss/blob/main/.github/workflows/release-notes.yml - sha = 70bc909d2ce6924385a8bcc3a9fb1cff338a3fb7 - etag = c987e5b93b002c5a2a63304f677eb969b7b6e274b77ef4392aeef4d9ca7e10dd + sha = d3022567c9ef2bc9461511e53b8abe065afdf03b + etag = 58601b5a71c805647ab26e84053acdfb8d174eaa93330487af8a5503753c5707 weak [file ".github/workflows/dotnet-file.yml"] url = https://github.com/devlooped/oss/blob/main/.github/workflows/dotnet-file.yml - sha = 094043587f7e7313a0a77dece1532fbcb1ce8555 - etag = 15333d15756257ec2d7975ea3ba5a22d1e3fae98aab35d83d67a728628e90cea + sha = f08c3f28e46e28eb31e70846d65e57aa9553ce56 + etag = 567444486383d032c1c5fbc538f07e860f92b1d08c66ac6ffb1db64ca539251c + weak +[file ".github/release.yml"] + url = https://github.com/devlooped/oss/blob/main/.github/release.yml + sha = 1afd173fe8f81b510c597737b0d271218e81fa73 + etag = 482dc2c892fc7ce0cb3a01eb5d9401bee50ddfb067d8cb85873555ce63cf5438 + weak +[file ".github/workflows/changelog.config"] + url = https://github.com/devlooped/oss/blob/main/.github/workflows/changelog.config + sha = 055a8b7c94b74ae139cce919d60b83976d2a9942 + etag = ddb17acb5872e9e69a76f9dec0ca590f25382caa2ccf750df058dcabb674db2b + weak +[file ".github/workflows/combine-prs.yml"] + url = https://github.com/devlooped/oss/blob/main/.github/workflows/combine-prs.yml + sha = c1610886eba42cb250e3894aed40c0a258cd383d + etag = 598ee294649a44d4c5d5934416c01183597d08aa7db7938453fd2bbf52a4e64d + weak +[file ".github/workflows/includes.yml"] + url = https://github.com/devlooped/oss/blob/main/.github/workflows/includes.yml + sha = ac753b791d03997eb655efb26ae141b51addd1c0 + etag = fcd94a08ac9ebc0e8351deac4e7f085cf8ef67816cc50006e068f44166096eb8 + weak +[file ".github/workflows/sponsor.yml"] + url = https://github.com/devlooped/oss/blob/main/.github/workflows/sponsor.yml + sha = 8990ebb36199046e0b8098bad9e46dcef739c56e + etag = e1dc114d2e8b57d50649989d32dbf0c9080ec77da3738a4cc79e9256d6ca5d3e + weak +[file ".github/workflows/test/action.yml"] + url = https://github.com/devlooped/oss/blob/main/.github/workflows/test/action.yml + sha = 9a1b07589b9bde93bc12528e9325712a32dec418 + etag = b54216ac431a83ce5477828d391f02046527e7f6fffd21da1d03324d352c3efb + weak +[file "src/nuget.config"] + url = https://github.com/devlooped/oss/blob/main/src/nuget.config + sha = b2fa09bd9db6de89e37a8ba6705b5659e435dafd + etag = eb2d09e546aa1e11c0b464d9ed6ab2d3c028a1d86c3ac40a318053625fb72819 weak diff --git a/Gemfile b/Gemfile index 025f43f..ed99566 100644 --- a/Gemfile +++ b/Gemfile @@ -1,3 +1,3 @@ source 'https://rubygems.org' -gem 'github-pages', '~> 209', group: :jekyll_plugins \ No newline at end of file +gem 'github-pages', '~> 209', group: :jekyll_plugins diff --git a/assets/css/style.scss b/assets/css/style.scss index f83369c..5e165a3 100644 --- a/assets/css/style.scss +++ b/assets/css/style.scss @@ -14,4 +14,13 @@ pre, code { code { font-size: 0.80em; -} \ No newline at end of file +} + +h1 > img { + border: unset; + box-shadow: unset; + vertical-align: middle; + -moz-box-shadow: unset; + -o-box-shadow: unset; + -ms-box-shadow: unset; +} diff --git a/src/Directory.Build.props b/src/Directory.Build.props index 7b57175..6b9a668 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -19,11 +19,17 @@ - kzu + Daniel Cazzulino Copyright (C) Daniel Cazzulino and Contributors. All rights reserved. false MIT - icon.png + + + icon.png + readme.md + + icon.png + readme.md true true @@ -32,20 +38,15 @@ true - - https://pkg.kzu.io/index.json;https://api.nuget.org/v3/index.json;$(RestoreSources) - - - - - + + true + Release + true + false Latest @@ -54,7 +55,9 @@ embedded true enable - + + strict + $(MSBuildProjectName) $(MSBuildProjectName.IndexOf('.')) @@ -78,6 +81,12 @@ NU5105;$(NoWarn) true + + + true + + + LatestMinor @@ -103,7 +112,7 @@ after the fixed prefix. This allows dogfooding a branch build. The suffix is sanitized and optionally turned into --> - 42.42.42 + 42.42.42 @@ -122,6 +131,8 @@ + + @@ -131,4 +142,5 @@ + diff --git a/src/Directory.Build.targets b/src/Directory.Build.targets index 89cdd91..5bd4019 100644 --- a/src/Directory.Build.targets +++ b/src/Directory.Build.targets @@ -5,6 +5,11 @@ CI;$(DefineConstants) + + true + true + + + + + + + + + + + + + @@ -37,11 +64,55 @@ $(OutputPath) + + + pr$(GITHUB_REF.Replace('refs/pull/', '').Replace('/merge', '')) + $(GITHUB_REF.Replace('refs/heads/', '').Replace('refs/tags/', '')) + + $(BUILD_SOURCEBRANCH.Replace('refs/heads/', '').Replace('refs/tags/', '')) + + pr$(APPVEYOR_PULL_REQUEST_NUMBER) + $(APPVEYOR_REPO_TAG_NAME) + $(APPVEYOR_REPO_BRANCH) + + $(TEAMCITY_BUILD_BRANCH) + + pr$(TRAVIS_PULL_REQUEST) + $(TRAVIS_BRANCH) + + pr$(CIRCLE_PR_NUMBER) + $(CIRCLE_TAG) + $(CIRCLE_BRANCH) + + $(CI_COMMIT_TAG) + pr$(CI_MERGE_REQUEST_IID) + pr$(CI_EXTERNAL_PULL_REQUEST_IID) + $(CI_COMMIT_BRANCH) + + pr$(BUDDY_EXECUTION_PULL_REQUEST_NO) + $(BUDDY_EXECUTION_TAG) + $(BUDDY_EXECUTION_BRANCH) + + + + + PrepareResources;$(CoreCompileDependsOn) + + - + + + + MSBuild:Compile + $(IntermediateOutputPath)\$([MSBuild]::ValueOrDefault('%(RelativeDir)', '').Replace('\', '.').Replace('/', '.'))%(Filename).g$(DefaultLanguageSourceExtension) + $(Language) + $(RootNamespace) + $(RootNamespace).$([MSBuild]::ValueOrDefault('%(RelativeDir)', '').Replace('\', '.').Replace('/', '.').TrimEnd('.')) + %(Filename) + @@ -52,8 +123,11 @@ + + + @@ -74,9 +148,17 @@ $(RepositorySha) + + + <_GitSourceRoot Include="@(SourceRoot -> WithMetadataValue('SourceControl', 'git'))" /> + + + + @(_GitSourceRoot) + + - $(RepositoryUrl) - $(Description) - -Built from $(RepositoryUrl)/tree/$(RepositorySha) - $(Description) $(RepositoryUrl)/blob/main/changelog.md @@ -95,55 +173,6 @@ Built from $(RepositoryUrl)/tree/$(RepositorySha) - - - - - - - - - - - - - - - - - - i.ItemSpec)) - { - Log.LogMessage(MessageImportance.High, "{0}: {1}", itemName, item.ItemSpec); - foreach (var name in item.MetadataNames.OfType().OrderBy(_ => _)) - { - try - { - Log.LogMessage(MessageImportance.High, "\t{0}={1}", name, item.GetMetadata(name)); - } - catch { } - } - } - ]]> - - - + diff --git a/src/nuget.config b/src/nuget.config new file mode 100644 index 0000000..ef2b768 --- /dev/null +++ b/src/nuget.config @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +