Tonyc
Tonyc

Reputation: 739

TFS 2018 - Building pre-release packages

I'm using "TFS 2018 Update 2" and trying to build a package marked as a pre-release according to the microsoft semantic

I tried using the .nuspec file inserting the (ex: 1.0.0-beta and changing the Build number format as: $(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r)$(Suffix) setting the $(Suffix) variable at queue time.

Every attempt failed: the package never contains the suffix, than is never marked as pre-release. I see that the nuget pack command never contains the suffix (missing "-beta" after "2018.6.12.9"). In my test build $Suffix is set to "-beta":

nuget.exe pack C:\agent_work\4\s\DotNetClassicLibrary\DotNetClassicLibrary.csproj -NonInteractive -OutputDirectory C:\agent_work\4\a -Properties Configuration=debug -version 2018.6.12.9 -Verbosity Detailed

The Build task on TFS is:

"DotNetClassicLibrary / Build DotNetClassicLibrary_2018.6.12.9-beta / Job / NuGet pack"

So I'm sure that the variable is assigned because of the presence of the suffix "-beta" in the path.

Here there is the configuration of the nuget pack task

Nuget Pack

This is the Build number format

enter image description here

Upvotes: 0

Views: 283

Answers (1)

Cece Dong - MSFT
Cece Dong - MSFT

Reputation: 31083

I could reproduce your scenario on my side. In my opinion, Nuget pack task with build number doesn't support character or numbers. You may check this task and try to modify it.

case "byBuildNumber":
                tl.debug("Getting version number from build number")

                if(tl.getVariable("SYSTEM_HOSTTYPE") === "release")
                {
                    tl.setResult(tl.TaskResult.Failed, tl.loc("Error_AutomaticallyVersionReleases"));
                    return;
                }

                let buildNumber: string =  tl.getVariable("BUILD_BUILDNUMBER");
                tl.debug(`Build number: ${buildNumber}`);

                let versionRegex = /\d+\.\d+\.\d+(?:\.\d+)?/;
                let versionMatches = buildNumber.match(versionRegex);
                if (!versionMatches)
                {
                    tl.setResult(tl.TaskResult.Failed, tl.loc("Error_NoVersionFoundInBuildNumber"));
                    return;
                }

                if (versionMatches.length > 1)
                {
                    tl.warning(tl.loc("Warning_MoreThanOneVersionInBuildNumber"))
                }

                version = versionMatches[0];
                break;

As an alternative, you could choose Nuget custom, and specify the pack command there with parameter -version $(Build.BuildNumber), I've tried on my side, this works.

Upvotes: 1

Related Questions