From d0267b94284615e51a066a4d524f1448377273d6 Mon Sep 17 00:00:00 2001 From: "Dylan R. E. Moonfire" Date: Tue, 15 Feb 2022 20:59:35 -0600 Subject: [PATCH] build: switching Nix layout --- .envrc | 2 +- .gitignore | 6 ++++++ .gitlab-ci.yml | 48 +++++++++++++++++-------------------------- .tool-versions | 3 --- commitlint.config.js | 3 +++ flake.lock | 42 +++++++++++++++++++++++++++++++++++++ flake.nix | 17 +++++++++++++++ release.config.js | 10 +++++++-- scripts/ci-build.sh | 3 +++ scripts/ci-release.sh | 5 +++++ scripts/ci-test.sh | 9 ++++++++ 11 files changed, 113 insertions(+), 35 deletions(-) delete mode 100644 .tool-versions create mode 100644 flake.lock create mode 100644 flake.nix create mode 100755 scripts/ci-build.sh create mode 100755 scripts/ci-release.sh create mode 100755 scripts/ci-test.sh diff --git a/.envrc b/.envrc index a63eb96..3550a30 100644 --- a/.envrc +++ b/.envrc @@ -1 +1 @@ -use asdf +use flake diff --git a/.gitignore b/.gitignore index 50364fe..bd1eeef 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,9 @@ obj/ .idea/ _ReSharper.Caches/ node_modules/ +.direnv/ +coverage/ +tests/artifacts/ +TestResults/ +.config/ +.direnv/ diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index faa6ded..a571da1 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,42 +1,25 @@ stages: - build + - test + - release default: - before_script: - - curl -sL https://deb.nodesource.com/setup_15.x | bash - - - apt-get install -y nodejs + image: registry.gitlab.com/dmoonfire/nix-flake-docker:latest 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 - + - nix develop --command scripts/ci-build.sh 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 + - if: $CI_COMMIT_BRANCH +test: + stage: test + script: + - nix develop --command scripts/ci-test.sh + rules: + - if: $CI_COMMIT_BRANCH + - if: $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME artifacts: when: always paths: @@ -49,3 +32,10 @@ build: - ./**/*test-result.xml cobertura: - ./coverage/Cobertura.xml + +release: + stage: release + script: + - nix develop --command scripts/ci-release.sh + rules: + - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH diff --git a/.tool-versions b/.tool-versions deleted file mode 100644 index f84212e..0000000 --- a/.tool-versions +++ /dev/null @@ -1,3 +0,0 @@ -dotnet-core 5.0.100 -yarn 1.22.10 -nodejs 15.0.1 diff --git a/commitlint.config.js b/commitlint.config.js index db74d15..29519fc 100644 --- a/commitlint.config.js +++ b/commitlint.config.js @@ -1,3 +1,6 @@ module.exports = { extends: ["@commitlint/config-conventional"], + rules: { + "body-max-line-length": [0], + }, }; diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..a918885 --- /dev/null +++ b/flake.lock @@ -0,0 +1,42 @@ +{ + "nodes": { + "flake-utils": { + "locked": { + "lastModified": 1638122382, + "narHash": "sha256-sQzZzAbvKEqN9s0bzWuYmRaA03v40gaJ4+iL1LXjaeI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "74f7e4319258e287b0f9cb95426c9853b282730b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1638198142, + "narHash": "sha256-plU9b8r4St6q4U7VHtG9V7oF8k9fIpfXl/KDaZLuY9k=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "8a308775674e178495767df90c419425474582a1", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "ref": "nixos-unstable", + "type": "indirect" + } + }, + "root": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..d6a1166 --- /dev/null +++ b/flake.nix @@ -0,0 +1,17 @@ +{ + description = "A .NET core library for building 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_5 pkgs.nodejs-16_x pkgs.nixfmt ]; + }; + }); +} diff --git a/release.config.js b/release.config.js index 34d154d..b217e78 100644 --- a/release.config.js +++ b/release.config.js @@ -1,6 +1,7 @@ module.exports = { + extends: ["@commitlint/config-conventional"], branches: ["main"], - message: "chore(release): v${nextRelease.version}\n\n${nextRelease.notes}", + message: "chore(release): v${nextRelease.version} [skip ci]\n\n${nextRelease.notes}", plugins: [ [ "@semantic-release/commit-analyzer", @@ -10,7 +11,12 @@ module.exports = { ], "@semantic-release/release-notes-generator", "@semantic-release/npm", - "semantic-release-dotnet", + [ + "semantic-release-dotnet", + { + paths: ["src/Directory.Build.props"], + }, + ], [ "semantic-release-nuget", { diff --git a/scripts/ci-build.sh b/scripts/ci-build.sh new file mode 100755 index 0000000..f49cd78 --- /dev/null +++ b/scripts/ci-build.sh @@ -0,0 +1,3 @@ +npm install --ci +dotnet restore +dotnet build diff --git a/scripts/ci-release.sh b/scripts/ci-release.sh new file mode 100755 index 0000000..72699fd --- /dev/null +++ b/scripts/ci-release.sh @@ -0,0 +1,5 @@ +npm install --ci +dotnet restore +dotnet build +npm install --ci +npx semantic-release diff --git a/scripts/ci-test.sh b/scripts/ci-test.sh new file mode 100755 index 0000000..cc073a6 --- /dev/null +++ b/scripts/ci-test.sh @@ -0,0 +1,9 @@ +npm install --ci +npx commitlint-gitlab-ci -x @commitlint/config-conventional +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" +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