From 41010245ca07e0c59186057bec5fd76eb961c247 Mon Sep 17 00:00:00 2001 From: Scott Williams Date: Wed, 1 Aug 2018 18:18:32 +0100 Subject: [PATCH] fix build version number generation --- appveyor.yml | 13 +----- build.cmd | 23 +---------- build.ps1 | 110 +++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 112 insertions(+), 34 deletions(-) create mode 100644 build.ps1 diff --git a/appveyor.yml b/appveyor.yml index 8938394..016a9ee 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,19 +1,16 @@ version: 0.0.{build} image: Visual Studio 2017 -install: - - choco install gitversion.portable -pre -y before_build: - cmd: dotnet --version - - ps: c:\ProgramData\chocolatey\lib\gitversion.portable\tools\gitversion.exe /l console /output buildserver build_script: - cmd: build.cmd - cmd: tests\CodeCoverage\CodeCoverage.cmd after_build: - - cmd: appveyor PushArtifact "artifacts\SixLabors.Core.%GitVersion_NuGetVersion%.nupkg" + - cmd: appveyor PushArtifact "artifacts\SixLabors.Core.%APPVEYOR_BUILD_VERSION%.nupkg" deploy: - provider: NuGet @@ -24,14 +21,6 @@ deploy: artifact: /.*\.nupkg/ on: branch: master - - provider: NuGet - server: https://www.myget.org/F/sixlabors-unstable/api/v2/package - symbol_server: https://www.myget.org/F/sixlabors-unstable/symbols/api/v2/package - api_key: - secure: V/lEHP0UeMWIpWd0fiNlY2IgbCnJKQlGdRksECdJbOBdaE20Fl0RNL7WyqHe02o4 - artifact: /.*\.nupkg/ - on: - branch: develop # prevent the double build when a branch has an active PR skip_branch_with_pr: true diff --git a/build.cmd b/build.cmd index e55aad0..6372b41 100644 --- a/build.cmd +++ b/build.cmd @@ -1,27 +1,6 @@ @echo Off -if not "%GitVersion_NuGetVersion%" == "" ( - dotnet restore /p:packageversion=%GitVersion_NuGetVersion% -)ELSE ( - dotnet restore -) - -ECHO Building nuget packages -if not "%GitVersion_NuGetVersion%" == "" ( - dotnet build -c Release /p:packageversion=%GitVersion_NuGetVersion% -)ELSE ( - dotnet build -c Release -) -if not "%errorlevel%"=="0" goto failure - -dotnet test ./tests/SixLabors.Core.Tests/SixLabors.Core.Tests.csproj - - -if not "%GitVersion_NuGetVersion%" == "" ( - dotnet pack ./src/SixLabors.Core/ -c Release --output ../../artifacts --no-build /p:packageversion=%GitVersion_NuGetVersion% -)ELSE ( - dotnet pack ./src/SixLabors.Core/ -c Release --output ../../artifacts --no-build -) +PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& '.\build.ps1'" if not "%errorlevel%"=="0" goto failure diff --git a/build.ps1 b/build.ps1 new file mode 100644 index 0000000..fcd63ae --- /dev/null +++ b/build.ps1 @@ -0,0 +1,110 @@ + +# lets calulat the correct version here +$fallbackVersion = "1.0.0"; +$version = '' + +$tagRegex = '^v?(\d+\.\d+\.\d+)(-([a-zA-Z]+)\.?(\d*))?$' + +# we are running on the build server +$isVersionTag = $env:APPVEYOR_REPO_TAG_NAME -match $tagRegex + + if($isVersionTag){ + + Write-Debug "Building commit tagged with a compatable version number" + + $version = $matches[1] + $postTag = $matches[3] + $count = $matches[4] + Write-Debug "version number: ${version} post tag: ${postTag} count: ${count}" + if("$postTag" -ne ""){ + $version = "${version}-${postTag}" + } + if("$count" -ne ""){ + # for consistancy with previous releases we pad the counter to only 4 places + $padded = $count.Trim().Trim('0').PadLeft(4,"0"); + Write-Debug "count '$count', padded '${padded}'" + + $version = "${version}${padded}" + } + }else { + + Write-Debug "Untagged" + $lastTag = (git tag --list --sort=-taggerdate) | Out-String + $list = $lastTag.Split("`n") + foreach ($tag in $list) { + + Write-Debug "testing ${tag}" + $tag = $tag.Trim(); + if($tag -match $tagRegex){ + Write-Debug "matched ${tag}" + $version = $matches[1]; + break; + } + } + + if("$version" -eq ""){ + $version = $fallbackVersion + Write-Debug "Failed to discover base version Fallback to '${version}'" + }else{ + + Write-Debug "Discovered base version from tags '${version}'" + } + + $buildNumber = $env:APPVEYOR_BUILD_NUMBER + + # build number replacement is padded to 6 places + $buildNumber = "$buildNumber".Trim().Trim('0').PadLeft(6,"0"); + if("$env:APPVEYOR_PULL_REQUEST_NUMBER" -ne ""){ + Write-Debug "building a PR" + + $prNumber = "$env:APPVEYOR_PULL_REQUEST_NUMBER".Trim().Trim('0').PadLeft(5,"0"); + # this is a PR + $version = "${version}-PullRequest${prNumber}${buildNumber}"; + }else{ + Write-Debug "building a branch commit" + + # this is a general branch commit + $branch = $env:APPVEYOR_REPO_BRANCH + + if("$branch" -eq ""){ + $branch = ((git rev-parse --abbrev-ref HEAD) | Out-String).Trim() + + if("$branch" -eq ""){ + $branch = "unknown" + } + } + + $branch = $branch.Replace("/","-").ToLower() + + if($branch.ToLower() -eq "master"){ + $branch = "dev" + } + + $version = "${version}-${branch}${buildNumber}"; + } + } + +if("$env:APPVEYOR_API_URL" -ne ""){ + # update appveyor build number for this build + Invoke-RestMethod -Method "PUT" ` + -Uri "${env:APPVEYOR_API_URL}api/build" ` + -Body "{version:'${version}'}" ` + -ContentType "application/json" +} + +Write-Host "Building version '${version}'" +dotnet restore /p:packageversion=$version + +Write-Host "Building projects" +dotnet build -c Release /p:packageversion=$version + +if ($LASTEXITCODE ){ Exit $LASTEXITCODE } + +if ( $env:CI -ne "True") { + dotnet test ./tests/SixLabors.Core.Tests/SixLabors.Core.Tests.csproj --no-build -c Release +} +if ($LASTEXITCODE ){ Exit $LASTEXITCODE } + +Write-Host "Packaging projects" +dotnet pack ./src/SixLabors.Core/ -c Release --output ../../artifacts --no-build /p:packageversion=$version +if ($LASTEXITCODE ){ Exit $LASTEXITCODE } \ No newline at end of file