Arcade: Create new release pipeline for publishing stable packages

Created on 12 Jan 2019  路  18Comments  路  Source: dotnet/arcade

All 18 comments

What does stable mean in this context?

This is related to phase 3 of Matt's plan. I understood this would just be a new release pipeline that can identify if packages are stable (based on their version) and push then to a different location other than dotnetfeed. But I'd also like some more context here from @mmitche

Got it!

Right, so basically the primary issues are as follows:

  • When we have a stable package (e.g. end of release, we stabilize on Microsoft.NETCore.App 3.0.0) the package identity will not change from build to build, even though contents may be different.
  • When we have a package identity that doesn't change, we would need to overwrite the feed's current package in order to publish the new one.
  • Overwriting is either bad practice in some cases (e.g. dotnetfeed) or not allowed at all (azdo/nuget.org)

So, when we have a stable build, we really need to identify the build as such, and publish the outputs to an isolated feed. I think this feed is effectively temporary. We would then use the idea @jcagme had to propagate the feed info around using darc so that update PRs know about the new feed.

This is related to https://github.com/dotnet/arcade/issues/1788 since stable assets will end up in a private feed. Also, the release making the publishing could be the same. It should be smart enough to determine if it is pushing stable vs. non-stable packages and with that determine the feed to publish them to.

/fyi: @riarenas

@mmitche / @tmat - how would be the best way to identify that a build is producing "stable" packages? My plan right now is to add some code here that checks whether "VersionSuffix" is empty or not and emit a ##vso command to set a variable with the outcome of that comparison.

@JohnTortugo I believe DotNetFinalVersionKind will be set to 'release' for stable packages.

We can feed that into the manifest or whereever we need to influence behavior.

Btw, I'd like some safety checks put into the publish process for feeds that are not isolated (e.g. dotnet-core) to ensure we don't accidentally publish stable packages there if there is a bug, mis-set switch, etc.)

This is related to #1788 since stable assets will end up in a private feed. Also, the release making the publishing could be the same. It should be smart enough to determine if it is pushing stable vs. non-stable packages and with that determine the feed to publish them to.

/fyi: @riarenas

@jcagme One nit: Stable packages don't need to necessarily be in a private feed, just in an isolated feed. private/public depends on whether the build is public or not.

@mmitche / @jcagme - is there a plan already for how to tell if the build is private or public?

@JohnTortugo There's not yet, but it could be as simple as if the branch starts with 'internal/'

Or, alternatively, you could have BAR figure it out. If commit exists in public repo, then it's public, otherwise private

I like the BAR idea better as I'm not super confident in teams following convention.

Or, alternatively, you could have BAR figure it out. If commit exists in public repo, then it's public, otherwise private

Yeah, I was thinking the same.

@JohnTortugo I believe DotNetFinalVersionKind will be set to 'release' for stable packages.

We can feed that into the manifest or whereever we need to influence behavior.

Btw, I'd like some safety checks put into the publish process for feeds that are not isolated (e.g. dotnet-core) to ensure we don't accidentally publish stable packages there if there is a bug, mis-set switch, etc.)

This is an example about DotNetFinalVersionKind https://github.com/dotnet/arcade/blob/master/src/Microsoft.DotNet.Arcade.Sdk/tools/Version.BeforeCommonTargets.targets#L88.

Or, alternatively, you could have BAR figure it out. If commit exists in public repo, then it's public, otherwise private

We are doing this when we build the asset manifest. We check whether a commit exists in GH or not, we could use that to add something to the manifest.

Also, we could simply use the channel. Builds are really all internal until they are published. They are only published based on channel. An assignment to an internal-only channel only publishes to internal locations.

I'd prefer that idea, but I guess we don't have private/public channels concept in Maestro/BAR right now. Right?

We can add it, but it's implicit in the behavior of the channel release pipeline. e.g. builds assigned to a channel called ".NET Core 3 Internal Servicing" should only publish to internal package feeds.

I'll write a plan for the issue and send around by e-mail.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

weshaggard picture weshaggard  路  42Comments

ViktorHofer picture ViktorHofer  路  27Comments

riarenas picture riarenas  路  49Comments

JohnTortugo picture JohnTortugo  路  29Comments

missymessa picture missymessa  路  26Comments