diff --git a/.editorconfig b/.editorconfig
index 234046b..26a8ca5 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -3,10 +3,6 @@
# top-most EditorConfig file
root = true
-# ignore submodule
-[gcm/**]
-generated_code = true
-
# Don't use tabs for indentation.
[*]
indent_style = space
@@ -91,3 +87,11 @@ 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
+
+# VSTHRD200: Use "Async" suffix for async methods
+dotnet_diagnostic.VSTHRD200.severity = none
diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
deleted file mode 100644
index a105ac5..0000000
--- a/.github/FUNDING.yml
+++ /dev/null
@@ -1 +0,0 @@
-github: devlooped
diff --git a/.github/ISSUE_TEMPLATE/bug.md b/.github/ISSUE_TEMPLATE/bug.md
deleted file mode 100644
index 67f7595..0000000
--- a/.github/ISSUE_TEMPLATE/bug.md
+++ /dev/null
@@ -1,50 +0,0 @@
----
-name: Bug Report
-about: Create a report to help us fix a problem.
-title: ''
-labels: 'bug'
-assignees: ''
----
-
-## Describe the Bug
-
-
-
-## Steps to Reproduce
-
-
-
-```c#
-public class ReproTest
-{
- [Fact]
- public void Repro()
- {
- // arrange
-
- // act
-
- // assert
- }
-}
-```
-
-## Expected Behavior
-
-
-
-## Exception with Stack Trace
-
-
-
-```text
-Put the exception with stack trace here.
-```
-
-## Version Info
-
-
-
-## Additional Info
-
-
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index 9bd9700..f551596 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -6,4 +6,4 @@ updates:
- package-ecosystem: nuget
directory: /
schedule:
- interval: weekly
\ No newline at end of file
+ interval: daily
diff --git a/.github/release.yml b/.github/release.yml
new file mode 100644
index 0000000..2f3ce7f
--- /dev/null
+++ b/.github/release.yml
@@ -0,0 +1,25 @@
+changelog:
+ exclude:
+ labels:
+ - bydesign
+ - dependencies
+ - duplicate
+ - question
+ - invalid
+ - wontfix
+ - need info
+ - docs
+ authors:
+ - devlooped-bot
+ - dependabot
+ - github-actions
+ categories:
+ - title: β¨ Implemented enhancements
+ labels:
+ - enhancement
+ - title: π Fixed bugs
+ labels:
+ - bug
+ - title: π¨ Other
+ labels:
+ - '*'
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index ac505e2..831bb61 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -5,12 +5,13 @@ 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]
@@ -22,28 +23,29 @@ defaults:
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
@@ -54,8 +56,14 @@ jobs:
- name: π build
run: dotnet build -m:1 -p:VersionLabel="$GITHUB_REF.$GITHUB_RUN_NUMBER"
+ - 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
+ uses: ./.github/workflows/test
- name: π¦ pack
run: dotnet pack -m:1 -p:VersionLabel="$GITHUB_REF.$GITHUB_RUN_NUMBER"
@@ -68,3 +76,16 @@ jobs:
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"
+
+ dotnet-format:
+ runs-on: ubuntu-latest
+ needs: build
+ steps:
+ - name: π€ checkout
+ uses: actions/checkout@v2
+ with:
+ submodules: recursive
+ fetch-depth: 0
+
+ - name: β ensure format
+ run: dotnet format --verify-no-changes -v:diag --exclude ~/.nuget
diff --git a/.github_changelog_generator b/.github/workflows/changelog.config
similarity index 73%
rename from .github_changelog_generator
rename to .github/workflows/changelog.config
index 7eeacb4..cd34ee7 100644
--- a/.github_changelog_generator
+++ b/.github/workflows/changelog.config
@@ -1,8 +1,7 @@
usernames-as-github-logins=true
-header-label=
issues_wo_labels=true
pr_wo_labels=true
-exclude-labels=dependencies,duplicate,question,invalid,wontfix,need info
+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:
diff --git a/.github/workflows/changelog.yml b/.github/workflows/changelog.yml
index b351081..b120b73 100644
--- a/.github/workflows/changelog.yml
+++ b/.github/workflows/changelog.yml
@@ -1,37 +1,39 @@
ο»Ώname: changelog
on:
+ workflow_dispatch:
release:
types: [released]
- workflow_dispatch:
-
-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..dcead42
--- /dev/null
+++ b/.github/workflows/combine-prs.yml
@@ -0,0 +1,154 @@
+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 prefix: ' + 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 dba8e1d..818aa2c 100644
--- a/.github/workflows/dotnet-file.yml
+++ b/.github/workflows/dotnet-file.yml
@@ -1,4 +1,4 @@
-ο»Ώ# Synchronizes .netconfig-configured files with dotnet-file
+# Synchronizes .netconfig-configured files with dotnet-file
name: dotnet-file
on:
workflow_dispatch:
@@ -9,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
@@ -29,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
@@ -46,16 +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
delete-branch: true
labels: dependencies
- commit-message: Bump files with dotnet-file sync
+ 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..b806653
--- /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-include@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..421b6c1 100644
--- a/.github/workflows/pages.yml
+++ b/.github/workflows/pages.yml
@@ -1,14 +1,46 @@
+# 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
@@ -17,11 +49,12 @@ jobs:
sudo gem install bundler
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 8317592..bd83ada 100644
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -20,12 +20,12 @@ jobs:
with:
submodules: recursive
fetch-depth: 0
-
+
- name: π build
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 -p:version=${GITHUB_REF#refs/*/v}
diff --git a/.github/workflows/release-artifacts.yml b/.github/workflows/release-artifacts.yml
deleted file mode 100644
index 17d4e0b..0000000
--- a/.github/workflows/release-artifacts.yml
+++ /dev/null
@@ -1,43 +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 -p:version=${GITHUB_REF#refs/*/v}
-
- - name: π§ͺ test
- run: dotnet test --no-build -m:1
-
- - name: π¦ pack
- run: dotnet pack -m:1 -p:version=${GITHUB_REF#refs/*/v}
-
- - 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.ps1 b/.github/workflows/sponsors.ps1
deleted file mode 100644
index 791fd7c..0000000
--- a/.github/workflows/sponsors.ps1
+++ /dev/null
@@ -1,59 +0,0 @@
-$event = Get-Content -Path $env:GITHUB_EVENT_PATH | ConvertFrom-Json
-$author = $event.issue ? $event.issue.user.node_id : $event.pull_request.user.node_id
-
-if ($author -eq $null) {
- throw 'No user id found'
-}
-
-gh auth status
-
-echo "Looking up sponsorship from $env:GITHUB_ACTOR ..."
-
-$query = gh api graphql --paginate -f owner='devlooped' -f query='
-query($owner: String!, $endCursor: String) {
- organization (login: $owner) {
- sponsorshipsAsMaintainer (first: 100, after: $endCursor) {
- nodes {
- sponsorEntity {
- ... on Organization { id, name }
- ... on User { id, name }
- }
- tier { monthlyPriceInDollars }
- }
- pageInfo {
- hasNextPage
- endCursor
- }
- }
- }
-}
-'
-
-$amount =
- $query |
- ConvertFrom-Json |
- select @{ Name='nodes'; Expression={$_.data.organization.sponsorshipsAsMaintainer.nodes}} |
- select -ExpandProperty nodes |
- where { $_.sponsorEntity.id -eq $author } |
- select -ExpandProperty tier |
- select -ExpandProperty monthlyPriceInDollars
-
-if ($null -eq $amount) {
- echo "Author is not a sponsor! Nothing left to do."
- return
-}
-
-echo "Author is a sponsor!"
-
-$headers = @{ 'Accept'='application/vnd.github.v3+json;charset=utf-8'; 'Authorization' = "bearer $env:GH_TOKEN" }
-
-# Try creating the labels, ignore errors (i.e. already created)
-iwr -Body '{ "name":"sponsor :purple_heart:", "color":"ea4aaa", "description":"sponsor" }' "$env:GITHUB_API_URL/repos/$env:GITHUB_REPOSITORY/labels" -Method Post -Headers $headers -SkipHttpErrorCheck -UseBasicParsing | select -ExpandProperty StatusCode
-iwr -Body '{ "name":"sponsor :yellow_heart:", "color":"ea4aaa", "description":"sponsor++" }' "$env:GITHUB_API_URL/repos/$env:GITHUB_REPOSITORY/labels" -Method Post -Headers $headers -SkipHttpErrorCheck -UseBasicParsing | select -ExpandProperty StatusCode
-
-$number = $event.issue ? $event.issue.number : $event.pull_request.number
-$labels = $amount -ge 100 ? '{"labels":["sponsor :yellow_heart:"]}' : '{"labels":["sponsor :purple_heart:"]}'
-
-iwr -Body $labels "$env:GITHUB_API_URL/repos/$env:GITHUB_REPOSITORY/issues/$number/labels" -Method Post -Headers $headers -SkipHttpErrorCheck -UseBasicParsing | select -ExpandProperty StatusCode
-
-echo 'Label applied'
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..242945b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,6 +2,7 @@ bin
obj
artifacts
pack
+TestResults
.vs
.vscode
@@ -12,9 +13,12 @@ pack
*.nupkg
*.metaproj
*.tmp
+*.log
*.cache
*.binlog
*.zip
+__azurite*.*
+__*__
.nuget
*.lock.json
@@ -26,4 +30,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 f86811f..2192a68 100644
--- a/.netconfig
+++ b/.netconfig
@@ -1,88 +1,51 @@
[file]
url = https://github.com/devlooped/oss
- url = https://github.com/devlooped/.github
+ url = https://github.com/clarius/pages
[file ".netconfig"]
url = https://github.com/devlooped/oss/blob/main/.netconfig
skip
[file "readme.md"]
url = https://github.com/devlooped/oss/blob/main/readme.md
skip
-[file "src/icon.png"]
- url = https://github.com/devlooped/oss/blob/main/src/icon.png
- skip
-[file ".github/ISSUE_TEMPLATE/config.yml"]
- url = https://github.com/devlooped/oss/blob/main/.github/ISSUE_TEMPLATE/config.yml
- skip
-[file "assets/images/sponsors.svg"]
- url = https://github.com/devlooped/oss/blob/main/assets/images/sponsors.svg
- skip
-[file "assets/images/sponsors.png"]
- url = https://github.com/devlooped/oss/blob/main/assets/images/sponsors.png
- skip
[file ".editorconfig"]
url = https://github.com/devlooped/oss/blob/main/.editorconfig
- sha = 0683ee777d7d878d4bf013d7deea352685135a05
- etag = 985aa022503959d35b03c870f07ae604cead7580d260775235ef6665aa9a6cbe
+ sha = 448cf45a26e068fe5d7164ea48d1dc8bf620df46
+ etag = 897634b9ba05c00e8ef35b24533d31bc43a5299be5a64e240109ba4c00fcad15
weak
[file ".gitattributes"]
url = https://github.com/devlooped/oss/blob/main/.gitattributes
sha = 0683ee777d7d878d4bf013d7deea352685135a05
etag = 7acb32f5fa6d4ccd9c824605a7c2b8538497f0068c165567807d393dcf4d6bb7
weak
-[file ".github/FUNDING.yml"]
- url = https://github.com/devlooped/.github/blob/main/.github/FUNDING.yml
- sha = 39f4c591716ff50dd035d2fade35e5822489ab7f
- etag = a944c728facd033bbdfb4ff8d0ef10d0b3a457c277dc499458df0ffc7e6409da
- weak
-[file ".github/ISSUE_TEMPLATE/bug.md"]
- url = https://github.com/devlooped/oss/blob/main/.github/ISSUE_TEMPLATE/bug.md
- sha = 0683ee777d7d878d4bf013d7deea352685135a05
- etag = 026852ba1f1921f3a043bb5e09cd7a2c3d9a33ec51f48e524dc3a2ab72de3141
- weak
[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 = fc5889d5387e2d5aa7aba279b2aa12251cf08cb2
- etag = 91e9a208cd134bd7b71d7419800c613bc50a30e21e605607528721f2acdeab86
+ sha = 4b31891ab5ac32cda49b33fa5b487532be878fd5
+ etag = 8c84cdd23cda71ed9c24be87b8a2f6ae16c97ade937ffe7a29dad5aae00148e3
weak
[file ".github/workflows/changelog.yml"]
url = https://github.com/devlooped/oss/blob/main/.github/workflows/changelog.yml
- sha = 084aa7c36ee1c262ea2f9e83931068366a7b4312
- etag = 1e17c477f9e26f83367870a18e3727a71dcbb49cd31d85e0cfcfe092202d3a66
+ sha = a4b66eb5f4dfb9704502f19f59ba33cb4855188c
+ etag = 54c0b571648b1055beb3ddac180b34e93a9869b9f0277de306901b2c1dbe0b2c
weak
[file ".github/workflows/dotnet-file.yml"]
url = https://github.com/devlooped/oss/blob/main/.github/workflows/dotnet-file.yml
- sha = 084aa7c36ee1c262ea2f9e83931068366a7b4312
- etag = 501f8bf58287fdd7467701342f7251a015bc29664b494e7d81a71c0c55bee61f
+ sha = f08c3f28e46e28eb31e70846d65e57aa9553ce56
+ etag = 567444486383d032c1c5fbc538f07e860f92b1d08c66ac6ffb1db64ca539251c
weak
[file ".github/workflows/publish.yml"]
url = https://github.com/devlooped/oss/blob/main/.github/workflows/publish.yml
- sha = 55c0b32601e94e1eed35028a0cad510c6bcbb265
- etag = ad8681ee3f191f796944135772b74565c470e349464e793aa664c888f7784b7a
- weak
-[file ".github/workflows/release-artifacts.yml"]
- url = https://github.com/devlooped/oss/blob/main/.github/workflows/release-artifacts.yml
- sha = 55c0b32601e94e1eed35028a0cad510c6bcbb265
- etag = 53f2dd2465fd15a065828468139544449ab7ccc0ba40f9074d7ac92426bfd07b
- weak
-[file ".github/workflows/release-notes.yml"]
- url = https://github.com/devlooped/oss/blob/main/.github/workflows/release-notes.yml
- sha = 70bc909d2ce6924385a8bcc3a9fb1cff338a3fb7
- etag = c987e5b93b002c5a2a63304f677eb969b7b6e274b77ef4392aeef4d9ca7e10dd
- weak
-[file ".github_changelog_generator"]
- url = https://github.com/devlooped/oss/blob/main/.github_changelog_generator
- sha = a7ab5fe706fdfe1efb05d47d00ef4bb137088669
- etag = 44dc852588ec508eaed9cefe260618eb162f0db50495188fc3c4e266b41944e2
+ sha = d3022567c9ef2bc9461511e53b8abe065afdf03b
+ etag = 58601b5a71c805647ab26e84053acdfb8d174eaa93330487af8a5503753c5707
weak
[file ".gitignore"]
url = https://github.com/devlooped/oss/blob/main/.gitignore
- sha = fa83a5161ba52bc5d510ce0ba75ee0b1f8d4bc63
- etag = 925782b685859e07040442303b411bebd1c75b4fe4e075f547e067f33f323814
+ sha = c78868eba59a3e04602434684f9eac241fef13fb
+ etag = 1c1705a3f0ed65e33c9133996ebaa100aa445a8b968b2904ad48fef938702006
weak
[file "Directory.Build.rsp"]
url = https://github.com/devlooped/oss/blob/main/Directory.Build.rsp
@@ -96,59 +59,67 @@
weak
[file "assets/css/style.scss"]
url = https://github.com/devlooped/oss/blob/main/assets/css/style.scss
- sha = b5583942b012f42f5ac2d06200427070cc18c250
- etag = 2c86a074a6c8c2f6af806908a57215439fad563830b4af8fbed1a3aabaede0cf
- weak
-[file "code-of-conduct.md"]
- url = https://github.com/devlooped/oss/blob/main/code-of-conduct.md
- sha = f72699c9d52f02e6a3411ef589f2a02007c5e5af
- etag = 4857c01bb695f09bf6912d778951c3065d9dd565e5de3d0827f40432d0e4c613
+ sha = 9db26e2710b084d219d6355339d822f159bf5780
+ etag = f710d8919abfd5a8d00050b74ba7d0bb05c6d02e40842a3012eb96555c208504
weak
[file "license.txt"]
url = https://github.com/devlooped/oss/blob/main/license.txt
sha = 0683ee777d7d878d4bf013d7deea352685135a05
etag = 2c6335b37e4ae05eea7c01f5d0c9d82b49c488f868a8b5ba7bff7c6ff01f3994
weak
-[file "security.md"]
- url = https://github.com/devlooped/oss/blob/main/security.md
- sha = a0f58a6d63e48ae6e55944c556d0bc94476dc8df
- etag = fc8101fd914820db3e6b42d608dc46aefbc60c830ac721ed3917daead3727dbd
- weak
[file "src/Directory.Build.props"]
url = https://github.com/devlooped/oss/blob/main/src/Directory.Build.props
- sha = 52d6c40aaa460ac48fc74c03324c6b1db7ae170d
- etag = ae2606c157b9725ce8c707e30d9768fb0bad901ac34065d3cd75fc2bdbc5f8cf
+ sha = ef8e7fa7593ded91d871d30eeebd0dc79f679159
+ etag = 1d5ec6bdb8b12c13635a11364dcfe54aefb82cc171f332a8d536aa35476222d5
weak
[file "src/Directory.Build.targets"]
url = https://github.com/devlooped/oss/blob/main/src/Directory.Build.targets
- sha = 55c0b32601e94e1eed35028a0cad510c6bcbb265
- etag = 874f20853c983e6440ed67bb571d94927f9fb4cd4438585b07df7b420c664609
+ sha = b9fb0a7d34d6c16fb404f9dff4aac6789ef08a00
+ etag = 852b16129d2c681ad6ec86ff56b256541e0ce0961eb3a9492e0ead89ffe5a6bd
weak
[file "src/kzu.snk"]
url = https://github.com/devlooped/oss/blob/main/src/kzu.snk
skip
-[file "support.md"]
- url = https://github.com/devlooped/oss/blob/main/support.md
- sha = a0f58a6d63e48ae6e55944c556d0bc94476dc8df
- etag = 2d47e2fc4fdfa3515203d452674566e3df507461f9938f451a06d79deb687d24
- weak
[file ".github/workflows/pages.yml"]
- url = https://github.com/devlooped/.github/blob/main/.github/workflows/pages.yml
- sha = f2dc1370469bec1b2d32d82faf659b050cdc7e2a
- etag = f2bc91354dc634de00aa9f502eb69e34368c315bcdbe422cde95ddd850d31669
- weak
-[file ".github/workflows/sponsors.ps1"]
- url = https://github.com/devlooped/.github/blob/main/.github/workflows/sponsors.ps1
- sha = 11f5c27cfdb304436ef0b7ee27ff333cda31ef65
- etag = 57a303125f3367b68ad0700d89ff4ba57cb29b33b303903488c9c8638d0bf735
- weak
-[file ".github/workflows/sponsors.yml"]
- url = https://github.com/devlooped/.github/blob/main/.github/workflows/sponsors.yml
- sha = 514760df24bd906b9e5d3a56deac0d18cba59a6d
- etag = 0236ed96c1d11f69b26ac0e039e74107df5731574236e2de2a83152fee5df0a6
+ url = https://github.com/clarius/pages/blob/main/.github/workflows/pages.yml
+ sha = d3b026ee6d3772debc989c4cec72156421336f94
+ etag = 76f23752ceffc013040215aec5519e5069fec9cea1179828ef88d4e0652752f0
weak
[file "Gemfile"]
- url = https://github.com/devlooped/.github/blob/main/Gemfile
- sha = f2dc1370469bec1b2d32d82faf659b050cdc7e2a
- etag = d45832acd078778ffebf260000f6d25172a131f51684744d7e982da2a47170ce
- weak
+ url = https://github.com/clarius/pages/blob/main/Gemfile
+ sha = 565a77f40db0863cb47ceb36f88790259a697c91
+ etag = 24e482e91192e292b633e3c17c4f095286ffb5a041d299d761b2e6ef99ee7669
+ weak
+[file ".github/release.yml"]
+ url = https://github.com/devlooped/oss/blob/main/.github/release.yml
+ sha = 2c80ab026b7e70393630260335f8316afe8a5fbe
+ etag = 56173be25769857a078a27cbeb12cbf101b81d8075461ea3bd894df2ddd28677
+ 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 = 74189b061850a3527676d76281de61044abc86a2
+ etag = 10106929413a89658d22c36b5b934c598809e1deb8cdd994ec846f824195aac6
+ weak
+[file ".github/workflows/includes.yml"]
+ url = https://github.com/devlooped/oss/blob/main/.github/workflows/includes.yml
+ sha = f08c3f28e46e28eb31e70846d65e57aa9553ce56
+ etag = 884175b3f80b39edc1a23c6a34d58aa3c481432d4f20938f9a834dd918ef283d
+ 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
+ skip
\ No newline at end of file
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/code-of-conduct.md b/code-of-conduct.md
deleted file mode 100644
index 775f221..0000000
--- a/code-of-conduct.md
+++ /dev/null
@@ -1,6 +0,0 @@
-# Code of Conduct
-
-This project has adopted the code of conduct defined by the Contributor Covenant
-to clarify expected behavior in our community.
-
-For more information, see the [.NET Foundation Code of Conduct](https://dotnetfoundation.org/code-of-conduct).
diff --git a/readme.md b/readme.md
index d411c6c..9bf9a2a 100644
--- a/readme.md
+++ b/readme.md
@@ -3,6 +3,7 @@
[](https://www.nuget.org/packages/dotnet-gcm) [](https://www.nuget.org/packages/dotnet-gcm) [](https://github.com//kzu/dotnet-gcm/blob/main/LICENSE) [](https://github.com/kzu/dotnet-gcm/actions)
+
A dotnet global tool for managing Git credentials using the Microsoft Git Credentials Manager Core.
```
@@ -77,3 +78,4 @@ Options:
-?, -h, --help Show help and usage information
```
+
\ No newline at end of file
diff --git a/security.md b/security.md
deleted file mode 100644
index 01b219a..0000000
--- a/security.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# Security Policy
-
-## Reporting a Vulnerability
-
-Security issues and bugs should be reported privately by emailing security@devlooped.com.
-You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your
-original message and ping [@devlooped](https://twitter.com/devlooped) on Twitter.
-
-Please do not open issues for anything you think might have a security implication.
\ No newline at end of file
diff --git a/src/Directory.Build.props b/src/Directory.Build.props
index f34a5b8..028c354 100644
--- a/src/Directory.Build.props
+++ b/src/Directory.Build.props
@@ -23,7 +23,13 @@
Copyright (C) Daniel Cazzulino and Contributors. All rights reserved.
false
MIT
+
+
icon.png
+ readme.md
+
+ icon.png
+ readme.md
true
true
@@ -32,21 +38,15 @@
true
-
- https://pkg.kzu.io/index.json;https://api.nuget.org/v3/index.json;$(RestoreSources)
-
-
-
-
-
+
+ true
+
Release
+ true
+ false
Latest
@@ -55,7 +55,9 @@
embedded
true
enable
-
+
+ strict
+
$(MSBuildProjectName)
$(MSBuildProjectName.IndexOf('.'))
@@ -82,6 +84,9 @@
true
+
+
+ LatestMinor
@@ -126,6 +131,8 @@
+
+
diff --git a/src/Directory.Build.targets b/src/Directory.Build.targets
index 1e26703..11b776b 100644
--- a/src/Directory.Build.targets
+++ b/src/Directory.Build.targets
@@ -5,6 +5,11 @@
CI;$(DefineConstants)
+
+ true
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -82,8 +109,11 @@
+
+
+
@@ -104,9 +134,17 @@
$(RepositorySha)
+
+
+ <_GitSourceRoot Include="@(SourceRoot -> WithMetadataValue('SourceControl', 'git'))" />
+
+
+
+ @(_GitSourceRoot)
+
+
-
$(RepositoryUrl)
- $(Description)
-
-Built from $(RepositoryUrl)/tree/$(RepositorySha)
-
$(Description)
$(RepositoryUrl)/blob/main/changelog.md
@@ -126,54 +160,4 @@ 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/readme.md b/src/readme.md
new file mode 100644
index 0000000..342851b
--- /dev/null
+++ b/src/readme.md
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/support.md b/support.md
deleted file mode 100644
index cfde22d..0000000
--- a/support.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# Support
-
-Support is typically available thorugh GitHub Discussions and Issues.
-
-**Found a bug? File an issue.** If you found something that isn't working as expected and you can reproduce it, go to the repo Issues tab and file an issue.
-
-**Want a new feature? Start a discussion.** It's always good to start a discussion (Discussion tab in the project, Ideas category) to explain the problem you're trying to solve before jumping in with the pull request. We may already have a solution in place or have an idea on ways to solve that issue. After the details are nailed down, we will migrate the discussion to a proper Issue (with the `enhancement`) label. At that point, we'd love to see your PRs :).
-
-Consider [sponsoring](https://github.com/sponsors/devlooped) the project to get priority support and many other perks!