build: preparing project layout
This commit is contained in:
parent
70d6f57d7c
commit
1d6dff4c92
19 changed files with 406 additions and 190 deletions
18
.config/dotnet-tools.json
Normal file
18
.config/dotnet-tools.json
Normal file
|
@ -0,0 +1,18 @@
|
|||
{
|
||||
"version": 1,
|
||||
"isRoot": true,
|
||||
"tools": {
|
||||
"gitversion.tool": {
|
||||
"version": "5.9.0",
|
||||
"commands": [
|
||||
"dotnet-gitversion"
|
||||
]
|
||||
},
|
||||
"dotnet-reportgenerator-globaltool": {
|
||||
"version": "5.1.3",
|
||||
"commands": [
|
||||
"reportgenerator"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
|
@ -103,7 +103,7 @@ tab_width=2
|
|||
|
||||
[*.{cs,js,json,jsx,proto,resjson,ts,tsx}]
|
||||
indent_style = space
|
||||
indent_size=space
|
||||
indent_size = 4
|
||||
tab_width = 4
|
||||
|
||||
[*.{asax,ascx,aspx,cshtml,css,htm,html,master,razor,skin,vb,xaml,xamlx,xoml}]
|
||||
|
|
3
.envrc
3
.envrc
|
@ -1 +1,2 @@
|
|||
use asdf
|
||||
export PATH=$PWD/scripts:$PATH
|
||||
use flake || use nix
|
||||
|
|
12
.gitignore
vendored
12
.gitignore
vendored
|
@ -11,3 +11,15 @@ obj/
|
|||
.idea/
|
||||
_ReSharper.Caches/
|
||||
node_modules/
|
||||
|
||||
# NixOS
|
||||
.direnv/
|
||||
|
||||
# Tests and Coverage
|
||||
coverage
|
||||
TestResults/
|
||||
tests/artifacts/
|
||||
|
||||
# Lefthook
|
||||
.lefthook-local/
|
||||
lefthook-local.yml
|
||||
|
|
|
@ -1,51 +0,0 @@
|
|||
stages:
|
||||
- build
|
||||
|
||||
default:
|
||||
before_script:
|
||||
- curl -sL https://deb.nodesource.com/setup_15.x | bash -
|
||||
- apt-get install -y nodejs
|
||||
|
||||
build:
|
||||
image: mcr.microsoft.com/dotnet/sdk:5.0
|
||||
stage: build
|
||||
script:
|
||||
# Set up the environment.
|
||||
- npx npm install --ci
|
||||
- npx commitlint-gitlab-ci -x @commitlint/config-conventional
|
||||
|
||||
# Build and test everything.
|
||||
- dotnet restore
|
||||
- dotnet build
|
||||
- 'dotnet test --test-adapter-path:. --logger:"junit;LogFilePath=../artifacts/{assembly}-test-result.xml;MethodFormat=Default;FailureBodyFormat=Verbose" --collect:"XPlat Code Coverage"'
|
||||
|
||||
# Summarize the output for Gitlab CI reporting.
|
||||
- dotnet new tool-manifest
|
||||
- dotnet tool install dotnet-reportgenerator-globaltool
|
||||
- dotnet tool run reportgenerator -reports:src/*/TestResults/*/coverage.cobertura.xml -targetdir:./coverage "-reporttypes:Cobertura;TextSummary"
|
||||
- grep "Line coverage" coverage/Summary.txt
|
||||
|
||||
# Perform the release.
|
||||
- npx semantic-release
|
||||
|
||||
rules:
|
||||
- if: '$CI_COMMIT_TITLE =~ /^chore\(release\)/'
|
||||
when: never
|
||||
- if: '$CI_COMMIT_TAG'
|
||||
when: never
|
||||
- if: '$CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH'
|
||||
when: never
|
||||
- when: on_success
|
||||
|
||||
artifacts:
|
||||
when: always
|
||||
paths:
|
||||
- ./**/*test-result.xml
|
||||
- ./coverage/Cobertura.xml
|
||||
- ./coverage/Summary.*
|
||||
- ./**/*.nupkg
|
||||
reports:
|
||||
junit:
|
||||
- ./**/*test-result.xml
|
||||
cobertura:
|
||||
- ./coverage/Cobertura.xml
|
36
.woodpecker.yml
Normal file
36
.woodpecker.yml
Normal file
|
@ -0,0 +1,36 @@
|
|||
clone:
|
||||
git:
|
||||
image: woodpeckerci/plugin-git
|
||||
settings:
|
||||
tags: true
|
||||
|
||||
pipeline:
|
||||
build:
|
||||
image: registry.gitlab.com/dmoonfire/nix-flake-docker:latest
|
||||
commands:
|
||||
- nix develop --command scripts/build.sh
|
||||
when:
|
||||
event: [push, pull_request, tag]
|
||||
tag: v*
|
||||
|
||||
test:
|
||||
image: registry.gitlab.com/dmoonfire/nix-flake-docker:latest
|
||||
commands:
|
||||
- nix develop --command scripts/test.sh
|
||||
when:
|
||||
event: [push, pull_request]
|
||||
#paths:
|
||||
# - ./**/*test-result.xml
|
||||
# - ./coverage/Cobertura.xml
|
||||
# - ./coverage/Summary.*
|
||||
# - ./**/*.nupkg
|
||||
|
||||
release-main:
|
||||
image: registry.gitlab.com/dmoonfire/nix-flake-docker:latest
|
||||
commands:
|
||||
- nix develop --command scripts/release.sh
|
||||
secrets:
|
||||
- gitea_token
|
||||
when:
|
||||
event: push
|
||||
branch: main
|
38
CHANGELOG.md
38
CHANGELOG.md
|
@ -1,38 +0,0 @@
|
|||
## [1.1.5](https://gitlab.com/mfgames-cil/mfgames-locking-cil/compare/v1.1.4...v1.1.5) (2021-09-11)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **nuget:** fixing packaging and versioning ([1c375c4](https://gitlab.com/mfgames-cil/mfgames-locking-cil/commit/1c375c45cc22eeb27ebec60eb45e934cd1bf28b3))
|
||||
* **nuget:** fixing packaging and versioning ([0ce47dd](https://gitlab.com/mfgames-cil/mfgames-locking-cil/commit/0ce47dd8d186bb312ad6a3da64139f20c07674a1))
|
||||
* **nuget:** fixing packaging and versioning ([7bc5aac](https://gitlab.com/mfgames-cil/mfgames-locking-cil/commit/7bc5aacc4b87e151d85640501f27a6bbacc9a743))
|
||||
|
||||
## [1.1.4](https://gitlab.com/mfgames-cil/mfgames-locking-cil/compare/v1.1.3...v1.1.4) (2021-09-04)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **semantic-release-nuget:** fixing typo ([4ce4fe2](https://gitlab.com/mfgames-cil/mfgames-locking-cil/commit/4ce4fe26cb3d8e90a7ef710a82626af8e7caa147))
|
||||
|
||||
## [1.1.3](https://gitlab.com/mfgames-cil/mfgames-locking-cil/compare/v1.1.2...v1.1.3) (2021-09-04)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* working on pushing ([5c66619](https://gitlab.com/mfgames-cil/mfgames-locking-cil/commit/5c66619e12587ada01c5eafd5a4aa5d8f6ef3c5d))
|
||||
|
||||
## [1.1.2](https://gitlab.com/mfgames-cil/mfgames-locking-cil/compare/v1.1.1...v1.1.2) (2021-09-04)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* updating package-lock.json ([d000882](https://gitlab.com/mfgames-cil/mfgames-locking-cil/commit/d000882f96895ffa42c000f0169048354db78bc1))
|
||||
* working on build patterns ([7594b73](https://gitlab.com/mfgames-cil/mfgames-locking-cil/commit/7594b73846b80127ee6ba7ab1d3d0f6d64c81cc5))
|
||||
* working on dependencies ([ba538c0](https://gitlab.com/mfgames-cil/mfgames-locking-cil/commit/ba538c0d86005618c84f3fc6bbf062d60e499a1b))
|
||||
|
||||
## [1.1.1](https://gitlab.com/mfgames-cil/mfgames-locking-cil/compare/v1.1.0...v1.1.1) (2021-01-22)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* added changelog generation ([d8fa302](https://gitlab.com/mfgames-cil/mfgames-locking-cil/commit/d8fa3029a9c2d0c9523584a78e16d4612fd114f8))
|
16
NuGet.Config
Normal file
16
NuGet.Config
Normal file
|
@ -0,0 +1,16 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<packageSources>
|
||||
<clear />
|
||||
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
|
||||
<add key="mfgames.com" value="https://src.mfgames.com/api/packages/mfgames-cil/nuget/index.json" protocolVersion="3" />
|
||||
</packageSources>
|
||||
<packageSourceMapping>
|
||||
<packageSource key="nuget.org">
|
||||
<package pattern="*" />
|
||||
</packageSource>
|
||||
<packageSource key="mfgames.com">
|
||||
<package pattern="MfGames.*" />
|
||||
</packageSource>
|
||||
</packageSourceMapping>
|
||||
</configuration>
|
42
flake.lock
Normal file
42
flake.lock
Normal file
|
@ -0,0 +1,42 @@
|
|||
{
|
||||
"nodes": {
|
||||
"flake-utils": {
|
||||
"locked": {
|
||||
"lastModified": 1659877975,
|
||||
"narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1662019588,
|
||||
"narHash": "sha256-oPEjHKGGVbBXqwwL+UjsveJzghWiWV0n9ogo1X6l4cw=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "2da64a81275b68fdad38af669afeda43d401e94b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"id": "nixpkgs",
|
||||
"ref": "nixos-unstable",
|
||||
"type": "indirect"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils",
|
||||
"nixpkgs": "nixpkgs"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
24
flake.nix
Normal file
24
flake.nix
Normal file
|
@ -0,0 +1,24 @@
|
|||
{
|
||||
description = "A .NET core library for easily building CLI tools";
|
||||
|
||||
inputs = {
|
||||
nixpkgs.url = "nixpkgs/nixos-unstable";
|
||||
flake-utils.url = "github:numtide/flake-utils";
|
||||
};
|
||||
|
||||
outputs = { self, nixpkgs, flake-utils }:
|
||||
flake-utils.lib.eachDefaultSystem (system:
|
||||
let pkgs = nixpkgs.legacyPackages.${system};
|
||||
in {
|
||||
devShell = pkgs.mkShell {
|
||||
buildInputs = [
|
||||
pkgs.dotnet-sdk
|
||||
pkgs.lefthook
|
||||
pkgs.convco
|
||||
pkgs.nodePackages.prettier
|
||||
pkgs.nixfmt
|
||||
pkgs.jq
|
||||
];
|
||||
};
|
||||
});
|
||||
}
|
22
lefthook.yml
Normal file
22
lefthook.yml
Normal file
|
@ -0,0 +1,22 @@
|
|||
pre-commit:
|
||||
parallel: true
|
||||
commands:
|
||||
dotnet-format:
|
||||
glob: "*.cs"
|
||||
run: dotnet format
|
||||
prettier:
|
||||
run: prettier . --write --loglevel warn
|
||||
nixfmt:
|
||||
run: nixfmt flake.nix
|
||||
|
||||
commit-msg:
|
||||
commands:
|
||||
commit-check:
|
||||
run: convco check -n 1
|
||||
|
||||
skip_output:
|
||||
- meta # Skips lefthook version printing
|
||||
- summary # Skips summary block (successful and failed steps) printing
|
||||
- success # Skips successful steps printing
|
||||
- failure # Skips failed steps printing
|
||||
- execution # Skips printing successfully executed commands and their output (but still prints failed executions)
|
|
@ -2,7 +2,12 @@ module.exports = {
|
|||
branches: ["main"],
|
||||
message: "chore(release): v${nextRelease.version}\n\n${nextRelease.notes}",
|
||||
plugins: [
|
||||
[
|
||||
"@semantic-release/commit-analyzer",
|
||||
{
|
||||
"preset": "conventionalcommits",
|
||||
},
|
||||
],
|
||||
"@semantic-release/release-notes-generator",
|
||||
"@semantic-release/npm",
|
||||
[
|
||||
|
|
23
scripts/README.md
Normal file
23
scripts/README.md
Normal file
|
@ -0,0 +1,23 @@
|
|||
# Scripts Directory
|
||||
|
||||
This directory contains the basic scripts for working with the library.
|
||||
|
||||
## `setup.sh`
|
||||
|
||||
This verifies the environment is correct and makes sure everything is configured.
|
||||
|
||||
## `build.sh`
|
||||
|
||||
This builds the project and creates the binaries in debug mode.
|
||||
|
||||
## `test.sh`
|
||||
|
||||
This runs any required tests.
|
||||
|
||||
## `format.sh`
|
||||
|
||||
This is used to format the code base using our standards. It matches the commands in the `lefthook` pre-commit hook.
|
||||
|
||||
## `release.sh`
|
||||
|
||||
Intended to run in a CI environment, this creates a NuGet package and publishes it.
|
7
scripts/build.sh
Executable file
7
scripts/build.sh
Executable file
|
@ -0,0 +1,7 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
cd $(dirname $0)/..
|
||||
./scripts/setup.sh || exit 1
|
||||
|
||||
echo "$(basename $0): building project"
|
||||
dotnet build
|
4
scripts/format.sh
Executable file
4
scripts/format.sh
Executable file
|
@ -0,0 +1,4 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
cd $(dirname $0)/..
|
||||
lefthook run pre-commit
|
51
scripts/release.sh
Executable file
51
scripts/release.sh
Executable file
|
@ -0,0 +1,51 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
cd $(dirname $0)/..
|
||||
./scripts/setup.sh || exit 1
|
||||
|
||||
# Verify the input.
|
||||
if [ "x$GITEA_TOKEN" = "x" ]
|
||||
then
|
||||
echo "the environment variable GITEA_TOKEN is not defined"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Clean up everything from the previous runs.
|
||||
echo "$(basename $0): cleaning project"
|
||||
dotnet clean
|
||||
|
||||
# Version the file based on the Git repository.
|
||||
echo "$(basename $0): setting project version"
|
||||
(cd src && dotnet dotnet-gitversion /updateprojectfiles)
|
||||
SEMVER="v$(dotnet gitversion /output json | jq -r .SemVer)"
|
||||
|
||||
if [ "x$SEMVER" = "x" ]
|
||||
then
|
||||
echo "$(basename $0): cannot figure out the semantic version"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Build to pick up the new version.
|
||||
echo "$(basename $0): building project $SEMVER"
|
||||
dotnet build || exit 1
|
||||
|
||||
# Create and publish the NuGet packages.
|
||||
echo "$(basename $0): creating NuGet packages"
|
||||
dotnet pack -p:IncludeSymbols=true -p:SymbolPackageFormat=snupkg || exit 1
|
||||
|
||||
echo "$(basename $0): publishing NuGet package"
|
||||
dotnet nuget remove source mfgames.com >& /dev/null
|
||||
dotnet nuget add source --name mfgames.com --username dmoonfire --password $GITEA_TOKEN https://src.mfgames.com/api/packages/mfgames-cil/nuget/index.json --store-password-in-clear-text || exit 1
|
||||
dotnet nuget push --skip-duplicate --source mfgames.com src/*/bin/Debug/*.nupkg || exit 1
|
||||
|
||||
# Tag and push, but only if we don't have a tag.
|
||||
if ! git tag | grep $SEMVER >& /dev/null
|
||||
then
|
||||
echo "$(basename $0): tagging and pushing"
|
||||
git remote add publish https://dmoonfire:$GITEA_TOKEN@src.mfgames.com/mfgames-cil/$(basename $(git config --get remote.origin.url))
|
||||
git tag $SEMVER
|
||||
git push publish $SEMVER || exit 1
|
||||
git remote remove publish
|
||||
else
|
||||
echo "$(basename $0): not tagging, already exists"
|
||||
fi
|
28
scripts/setup.sh
Executable file
28
scripts/setup.sh
Executable file
|
@ -0,0 +1,28 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# Normalize our environment.
|
||||
cd $(dirname $0)/..
|
||||
|
||||
# Make sure we have the needed executables installed.
|
||||
for e in dotnet lefthook prettier nixfmt
|
||||
do
|
||||
if ! which $e >& /dev/null
|
||||
then
|
||||
echo "Cannot find '$e' in the path"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
# Make sure we have lefthook is installed.
|
||||
if [ ! -f .git/hooks/pre-commit ]
|
||||
then
|
||||
echo "$(basename $0): installing lefthook"
|
||||
lefthook install
|
||||
fi
|
||||
|
||||
# Make sure our tools are installed.
|
||||
echo "$(basename $0): install .NET tools"
|
||||
dotnet tool restore
|
||||
|
||||
# Everything is good.
|
||||
exit 0
|
12
scripts/test.sh
Executable file
12
scripts/test.sh
Executable file
|
@ -0,0 +1,12 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
cd $(dirname $0)/..
|
||||
|
||||
if [ -f ./tests/*/*.csproj ]
|
||||
then
|
||||
./scripts/setup.sh || exit 1
|
||||
|
||||
dotnet test --test-adapter-path:. --logger:"junit;LogFilePath=../artifacts/{assembly}-test-result.xml;MethodFormat=Default;FailureBodyFormat=Verbose" --collect:"XPlat Code Coverage"
|
||||
dotnet tool run reportgenerator -reports:tests/*/TestResults/*/coverage.cobertura.xml -targetdir:./coverage "-reporttypes:Cobertura;TextSummary"
|
||||
grep "Line coverage" coverage/Summary.txt
|
||||
fi
|
4
scripts/update-template.sh
Executable file
4
scripts/update-template.sh
Executable file
|
@ -0,0 +1,4 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
cd $(dirname $0)/..
|
||||
git pull template main --no-rebase
|
Reference in a new issue