build: preparing project layout

This commit is contained in:
D. Moonfire 2022-09-05 22:17:10 -05:00
parent 8a2d4c7745
commit 4fcb9c367c
19 changed files with 315 additions and 196 deletions

View file

@ -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
View file

@ -1 +1,2 @@
use flake
export PATH=$PWD/scripts:$PATH
use flake || use nix

View file

@ -1,3 +0,0 @@
npm install --ci
npx commitlint-gitlab-ci -x @commitlint/config-conventional
npm run build

View file

@ -1,41 +0,0 @@
include:
- template: Security/SAST.gitlab-ci.yml
stages:
- build
- test
- release
default:
image: registry.gitlab.com/dmoonfire/nix-flake-docker:latest
build:
stage: build
script:
- nix develop --command .gitlab/build.sh
rules:
- if: $CI_COMMIT_BRANCH
test:
stage: test
script:
- nix develop --command .gitlab/test.sh
artifacts:
when: always
paths:
- ./**/*test-result.xml
- ./coverage/Cobertura.xml
- ./coverage/Summary.*
- ./**/*.nupkg
reports:
junit:
- ./**/*test-result.xml
cobertura:
- ./coverage/Cobertura.xml
publish:
stage: release
script:
- nix develop --command .gitlab/release.sh
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH

View file

@ -1,3 +0,0 @@
npm install --ci
npm run build
npx semantic-release

View file

@ -1,5 +0,0 @@
#dotnet test --test-adapter-path:. --logger:"junit;LogFilePath=../artifacts/{assembly}-test-result.xml;MethodFormat=Default;FailureBodyFormat=Verbose" --collect:"XPlat Code Coverage"
#dotnet new tool-manifest
#dotnet tool install dotnet-reportgenerator-globaltool
#dotnet tool run reportgenerator -reports:tests/*/TestResults/*/coverage.cobertura.xml -targetdir:./coverage "-reporttypes:Cobertura;TextSummary"
#grep "Line coverage" coverage/Summary.txt

36
.woodpecker.yml Normal file
View 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

View file

@ -1,36 +0,0 @@
## [1.0.4](https://gitlab.com/mfgames-cil/mfgames-testsetup-cil/compare/v1.0.3...v1.0.4) (2021-09-11)
### Bug Fixes
* **nuget:** fixing packaging and versioning ([a6fe769](https://gitlab.com/mfgames-cil/mfgames-testsetup-cil/commit/a6fe769feb307c1d85534b603d045bd9fbb37778))
* **nuget:** fixing packaging and versioning ([1e8dd7a](https://gitlab.com/mfgames-cil/mfgames-testsetup-cil/commit/1e8dd7a9a9d69d13173e513ab8fcb3116bd04f8b))
* **nuget:** fixing packaging and versioning ([4941485](https://gitlab.com/mfgames-cil/mfgames-testsetup-cil/commit/4941485989daedf64e9ff73493305a71e7023c6e))
## [1.0.3](https://gitlab.com/mfgames-cil/mfgames-testsetup-cil/compare/v1.0.2...v1.0.3) (2021-09-10)
### Bug Fixes
* test output should go to the Xunit output ([d7902d2](https://gitlab.com/mfgames-cil/mfgames-testsetup-cil/commit/d7902d215aba596a42b7c2e11e3483bb4067e674))
## [1.0.2](https://gitlab.com/mfgames-cil/mfgames-testsetup-cil/compare/v1.0.1...v1.0.2) (2021-09-10)
### Bug Fixes
* **nuget:** adding description ([40745c5](https://gitlab.com/mfgames-cil/mfgames-testsetup-cil/commit/40745c524f062982eeb75854b47ff08191446fa5))
## [1.0.1](https://gitlab.com/mfgames-cil/mfgames-testsetup-cil/compare/v1.0.0...v1.0.1) (2021-09-10)
### Bug Fixes
* correcting NuGet packaging ([87cf2f9](https://gitlab.com/mfgames-cil/mfgames-testsetup-cil/commit/87cf2f91c4ab2a499f1d1ddcfd5590fe66e3f9ae))
# 1.0.0 (2021-09-10)
### Features
* initial commit ([abecc1f](https://gitlab.com/mfgames-cil/mfgames-testsetup-cil/commit/abecc1f34cfb0efcc6d30c59ae00f781566ab4c3))

16
NuGet.Config Normal file
View 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>

View file

@ -2,11 +2,11 @@
"nodes": {
"flake-utils": {
"locked": {
"lastModified": 1638122382,
"narHash": "sha256-sQzZzAbvKEqN9s0bzWuYmRaA03v40gaJ4+iL1LXjaeI=",
"lastModified": 1659877975,
"narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "74f7e4319258e287b0f9cb95426c9853b282730b",
"rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0",
"type": "github"
},
"original": {
@ -17,11 +17,11 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1638806821,
"narHash": "sha256-v2qd2Bsmzft53s43eCbN+4ocrLksRdFLyF/MAGuWuDA=",
"lastModified": 1662019588,
"narHash": "sha256-oPEjHKGGVbBXqwwL+UjsveJzghWiWV0n9ogo1X6l4cw=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "bc5d68306b40b8522ffb69ba6cff91898c2fbbff",
"rev": "2da64a81275b68fdad38af669afeda43d401e94b",
"type": "github"
},
"original": {

View file

@ -1,5 +1,5 @@
{
description = "A .NET core library for building tools";
description = "A .NET core library for easily building CLI tools";
inputs = {
nixpkgs.url = "nixpkgs/nixos-unstable";
@ -11,7 +11,14 @@
let pkgs = nixpkgs.legacyPackages.${system};
in {
devShell = pkgs.mkShell {
buildInputs = [ pkgs.dotnet-sdk_5 pkgs.nodejs-16_x pkgs.nixfmt ];
buildInputs = [
pkgs.dotnet-sdk
pkgs.lefthook
pkgs.convco
pkgs.nodePackages.prettier
pkgs.nixfmt
pkgs.jq
];
};
});
}

22
lefthook.yml Normal file
View 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)

23
scripts/README.md Normal file
View 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
View 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
View file

@ -0,0 +1,4 @@
#!/usr/bin/env sh
cd $(dirname $0)/..
lefthook run pre-commit

51
scripts/release.sh Executable file
View 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
View 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

8
scripts/test.sh Executable file
View file

@ -0,0 +1,8 @@
#!/usr/bin/env sh
cd $(dirname $0)/..
./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

4
scripts/update-template.sh Executable file
View file

@ -0,0 +1,4 @@
#!/usr/bin/env sh
cd $(dirname $0)/..
git pull template main --no-rebase