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 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+