From 5c46e47fd571fec3e8687d36f024bd1763ada0e1 Mon Sep 17 00:00:00 2001 From: Dennis Beuchler Date: Tue, 22 Sep 2020 09:19:44 +0200 Subject: [PATCH] Simplified version parsing for GitHub Workflows and GitLab CI/CD --- .build/BuildToolkit.ps1 | 87 +++++++++++++++++++++------- .github/workflows/build-and-test.yml | 1 - 2 files changed, 65 insertions(+), 23 deletions(-) diff --git a/.build/BuildToolkit.ps1 b/.build/BuildToolkit.ps1 index 1c2d482f6..fcbed9d64 100644 --- a/.build/BuildToolkit.ps1 +++ b/.build/BuildToolkit.ps1 @@ -102,10 +102,6 @@ function Invoke-Initialize([string]$Version = "1.0.0", [bool]$Cleanup = $False) } } - if (-not $env:MORYX_GIT_REF) { - $env:MORYX_GIT_REF = "unknown"; - } - if (-not $env:MORYX_PACKAGE_TARGET) { $env:MORYX_PACKAGE_TARGET = ""; } @@ -136,7 +132,6 @@ function Invoke-Initialize([string]$Version = "1.0.0", [bool]$Cleanup = $False) Write-Variable "GitCommitHash" $global:GitCommitHash; Write-Step "Printing environment variables" - Write-Variable "MORYX_GIT_REF" $env:MORYX_GIT_REF; Write-Variable "MORYX_OPTIMIZE_CODE" $env:MORYX_OPTIMIZE_CODE; Write-Variable "MORYX_BUILDNUMBER" $env:MORYX_BUILDNUMBER; Write-Variable "MORYX_BUILD_CONFIG" $env:MORYX_BUILD_CONFIG; @@ -174,6 +169,7 @@ function Install-Tool([string]$PackageName, [string]$Version, [string]$TargetExe Write-Host "$PackageName ($Version) already exists. Do not need to install." } } + function Invoke-Build([string]$ProjectFile, [string]$Options = "") { Write-Step "Building $ProjectFile" @@ -453,29 +449,16 @@ function Invoke-Publish { } function Set-Version ([string]$MajorMinorPatch) { - Write-Host "Setting environment version to $MajorMinorPatch"; - $semVer2Regex = "^(?0|[1-9]\d*)\.(?0|[1-9]\d*)\.(?0|[1-9]\d*)(?:-(?(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+(?[0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$"; - - $ref = $env:MORYX_GIT_REF; - if ($ref -like "refs/tags/v*") { - # Its a version tag - $version = $ref.Replace("refs/tags/v","") - } - - if ($ref -like "refs/heads/*") { - # Its a branch - $refName = $ref.Replace("refs/heads/",""); - $refName = $refName.Replace("/","").ToLower(); - - $version = "$MajorMinorPatch-$refName.$env:MORYX_BUILDNUMBER"; - } + + $version = Read-VersionFromRef($MajorMinorPatch); + Write-Host "Setting environment version to $version"; # Match semVer2 regex $regexMatch = [regex]::Match($version, $semVer2Regex); if (-not $regexMatch.Success) { - Write-Host "Could not parse version: $ref"; + Write-Host "Could not parse version: $version"; Invoke-ExitCodeCheck 1; } @@ -502,6 +485,66 @@ function Set-Version ([string]$MajorMinorPatch) { } } +function Read-VersionFromRef([string]$MajorMinorPatch) { + function preReleaseVersion ([string] $name) + { + $name = $name.Replace("/","").ToLower(); + return "$MajorMinorPatch-$name.$env:MORYX_BUILDNUMBER";; + } + + $ref = ""; + if ($env:GITLAB_CI) { # GitLab CI/CD + Write-Host "Reading version from 'GitLab CI/CD'"; + $ref = $env:CI_COMMIT_REF_NAME; # The branch or tag name for which project is built + + if ($env:CI_COMMIT_TAG) { # The commit tag name. Present only when building tags. + if ($env:CI_COMMIT_TAG -like "v*") { + # Its a version tag + $version = $ref.substring(1) ; + } + else { + # Just a tag + $version = preReleaseVersion($ref); + } + } + else { + $version = preReleaseVersion($ref); + } + + } + elseif ($env:GITHUB_WORKFLOW) { # GitHub Workflow + Write-Host "Reading version from 'GitHub Workflow'"; + $ref = $env:GITHUB_REF; + + if ($ref.StartsWith("refs/tags/")) { + if ($ref.StartsWith("refs/tags/v")) { + # Its a version tag + $version = $ref.Replace("refs/tags/v","") + } + else { + # Just a tag + $name = $ref.Replace("refs/tags/",""); + $version = = preReleaseVersion($name); + } + } + elseif ($ref.StartsWith("refs/heads/*")) { + # Its a branch + $name = $ref.Replace("refs/heads/",""); + $version = preReleaseVersion($name); + } + else { + $version = preReleaseVersion($ref); + } + } + else { # Local build + Write-Host "Reading version from 'local'"; + $ref = (& $global:GitCli rev-parse --abbrev-ref HEAD); + $version = preReleaseVersion($ref); + } + + return $version; +} + function Set-AssemblyVersion([string]$InputFile) { $file = Get-Childitem -Path $inputFile; diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index 7bbaf4b02..3ecf41e6e 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -17,7 +17,6 @@ env: MORYX_OPTIMIZE_CODE: "false" MORYX_BUILD_CONFIG: "Release" MORYX_BUILDNUMBER: ${{github.run_number}} - MORYX_GIT_REF: ${{github.ref}} MORYX_NUGET_APIKEY: ${{secrets.MYGET_TOKEN}} MORYX_PACKAGE_TARGET: "https://www.myget.org/F/moryx/api/v2/package"