Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -437,5 +437,18 @@ private bool AreEquivalent(List<TargetFeedConfig> expectedItems, List<TargetFeed

return true;
}

[Fact]
public void MustHaveSeparateTargetFeedSpecificationsForShippingAndNonShipping()
{
Action shouldFail = () => new TargetFeedSpecification(new TargetFeedContentType[] { TargetFeedContentType.Package }, "FooFeed", AssetSelection.All);
shouldFail.Should().Throw<ArgumentException>();

Action shouldPassShippingOnly = () => new TargetFeedSpecification(new TargetFeedContentType[] { TargetFeedContentType.Package }, "FooFeed", AssetSelection.ShippingOnly);
shouldPassShippingOnly.Should().NotThrow();

Action shouldPassNonShippingOnly = () => new TargetFeedSpecification(new TargetFeedContentType[] { TargetFeedContentType.Package }, "FooFeed", AssetSelection.NonShippingOnly);
shouldPassNonShippingOnly.Should().NotThrow();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,8 @@ public enum BuildQuality

private static TargetFeedSpecification[] DotNet31BlazorFeeds =
{
(TargetFeedContentType.Package, FeedDotNet31Blazor),
(TargetFeedContentType.Package, FeedDotNet31Blazor, AssetSelection.ShippingOnly),
(TargetFeedContentType.Package, FeedDotNet31Blazor, AssetSelection.NonShippingOnly),
(InstallersAndSymbols, FeedInternalForInstallers),
(TargetFeedContentType.Checksum, FeedInternalForChecksums),
};
Expand Down Expand Up @@ -204,35 +205,40 @@ public enum BuildQuality

private static TargetFeedSpecification[] DotNetEngFeeds =
{
(TargetFeedContentType.Package, FeedDotNetEng),
(TargetFeedContentType.Package, FeedDotNetEng, AssetSelection.ShippingOnly),
(TargetFeedContentType.Package, FeedDotNetEng, AssetSelection.NonShippingOnly),
(InstallersAndSymbols, FeedForInstallers),
(TargetFeedContentType.Checksum, FeedForChecksums),
};

private static TargetFeedSpecification[] DotNetToolsFeeds =
{
(TargetFeedContentType.Package, FeedDotNetTools),
(TargetFeedContentType.Package, FeedDotNetTools, AssetSelection.ShippingOnly),
(TargetFeedContentType.Package, FeedDotNetTools, AssetSelection.NonShippingOnly),
(InstallersAndSymbols, FeedForInstallers),
(TargetFeedContentType.Checksum, FeedForChecksums),
};

private static TargetFeedSpecification[] DotNetToolsInternalFeeds =
{
(TargetFeedContentType.Package, FeedDotNetToolsInternal),
(TargetFeedContentType.Package, FeedDotNetToolsInternal, AssetSelection.ShippingOnly),
(TargetFeedContentType.Package, FeedDotNetToolsInternal, AssetSelection.NonShippingOnly),
(InstallersAndSymbols, FeedInternalForInstallers),
(TargetFeedContentType.Checksum, FeedInternalForChecksums),
};

private static TargetFeedSpecification[] DotNetExperimentalFeeds =
{
(TargetFeedContentType.Package, FeedDotNetExperimental),
(TargetFeedContentType.Package, FeedDotNetExperimental, AssetSelection.ShippingOnly),
(TargetFeedContentType.Package, FeedDotNetExperimental, AssetSelection.NonShippingOnly),
(InstallersAndSymbols, FeedForInstallers),
(TargetFeedContentType.Checksum, FeedForChecksums),
};

private static TargetFeedSpecification[] GeneralTestingFeeds =
{
(TargetFeedContentType.Package, FeedGeneralTesting),
(TargetFeedContentType.Package, FeedGeneralTesting, AssetSelection.ShippingOnly),
(TargetFeedContentType.Package, FeedGeneralTesting, AssetSelection.NonShippingOnly),
(InstallersAndSymbols, FeedForInstallers),
(TargetFeedContentType.Checksum, FeedForChecksums),
(InstallersAndSymbols, FeedStagingForInstallers),
Expand All @@ -241,7 +247,8 @@ public enum BuildQuality

private static TargetFeedSpecification[] GeneralTestingInternalFeeds =
{
(TargetFeedContentType.Package, FeedGeneralTestingInternal),
(TargetFeedContentType.Package, FeedGeneralTestingInternal, AssetSelection.ShippingOnly),
(TargetFeedContentType.Package, FeedGeneralTestingInternal, AssetSelection.NonShippingOnly),
(InstallersAndSymbols, FeedInternalForInstallers),
(TargetFeedContentType.Checksum, FeedInternalForChecksums),
(InstallersAndSymbols, FeedStagingInternalForInstallers),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,46 +86,14 @@ public override List<TargetFeedConfig> Setup()

private IEnumerable<TargetFeedConfig> Feeds()
{
// If the build is stable, we need to create two new feeds (if not provided)
// that can contain stable packages. These packages cannot be pushed to the normal
// feeds specified in the feed config because it would mean pushing the same package more than once
// to the same feed on successive builds, which is not allowed.
if (IsStableBuild)
{
if (string.IsNullOrEmpty(StablePackagesFeed))
{
var packagesFeedTask = new CreateAzureDevOpsFeed()
{
BuildEngine = BuildEngine,
IsInternal = IsInternalBuild,
AzureDevOpsPersonalAccessToken = AzureDevOpsFeedsKey,
RepositoryName = RepositoryName,
CommitSha = CommitSha
};

if (!packagesFeedTask.Execute())
{
throw new Exception($"Problems creating an AzureDevOps feed for repository '{RepositoryName}' and commit '{CommitSha}'.");
}

StablePackagesFeed = packagesFeedTask.TargetFeedURL;
}

if (string.IsNullOrEmpty(StableSymbolsFeed))
{
var symbolsFeedTask = new CreateAzureDevOpsFeed()
{
BuildEngine = BuildEngine,
IsInternal = IsInternalBuild,
AzureDevOpsPersonalAccessToken = AzureDevOpsFeedsKey,
RepositoryName = RepositoryName,
CommitSha = CommitSha,
ContentIdentifier = "sym"
};

if (!symbolsFeedTask.Execute())
{
throw new Exception($"Problems creating an AzureDevOps (symbols) feed for repository '{RepositoryName}' and commit '{CommitSha}'.");
}

StableSymbolsFeed = symbolsFeedTask.TargetFeedURL;
}
CreateStablePackagesFeedIfNeeded();
CreateStableSymbolsFeedIfNeeded();

yield return new TargetFeedConfig(
TargetFeedContentType.Package,
Expand All @@ -152,6 +120,7 @@ private IEnumerable<TargetFeedConfig> Feeds()
filenamesToExclude: FilesToExclude,
flatten: Flatten);
}

foreach (var spec in _targetChannelConfig.TargetFeeds)
{
foreach (var type in spec.ContentTypes)
Expand All @@ -163,9 +132,11 @@ private IEnumerable<TargetFeedConfig> Feeds()
continue;
}
}

// If dealing with a stable build, the package feed targeted for shipping packages and symbols
// should be skipped, as it is added above.
if (IsStableBuild && ((type is TargetFeedContentType.Package && spec.Assets == AssetSelection.ShippingOnly) || type is TargetFeedContentType.Symbols))
{
// stable build shipping packages and symbols were handled above
continue;
}

Expand Down Expand Up @@ -213,6 +184,59 @@ private IEnumerable<TargetFeedConfig> Feeds()
}
}

/// <summary>
/// Create the stable symbol packages feed if one is not already explicitly provided
/// </summary>
/// <exception cref="Exception">Throws if the feed cannot be created</exception>
private void CreateStableSymbolsFeedIfNeeded()
{
if (string.IsNullOrEmpty(StableSymbolsFeed))
{
var symbolsFeedTask = new CreateAzureDevOpsFeed()
{
BuildEngine = BuildEngine,
IsInternal = IsInternalBuild,
AzureDevOpsPersonalAccessToken = AzureDevOpsFeedsKey,
RepositoryName = RepositoryName,
CommitSha = CommitSha,
ContentIdentifier = "sym"
};

if (!symbolsFeedTask.Execute())
{
throw new Exception($"Problems creating an AzureDevOps (symbols) feed for repository '{RepositoryName}' and commit '{CommitSha}'.");
}

StableSymbolsFeed = symbolsFeedTask.TargetFeedURL;
}
}

/// <summary>
/// Create the stable packages feed if one is not already explicitly provided
/// </summary>
/// <exception cref="Exception">Throws if the feed cannot be created</exception>
private void CreateStablePackagesFeedIfNeeded()
{
if (string.IsNullOrEmpty(StablePackagesFeed))
{
var packagesFeedTask = new CreateAzureDevOpsFeed()
{
BuildEngine = BuildEngine,
IsInternal = IsInternalBuild,
AzureDevOpsPersonalAccessToken = AzureDevOpsFeedsKey,
RepositoryName = RepositoryName,
CommitSha = CommitSha
};

if (!packagesFeedTask.Execute())
{
throw new Exception($"Problems creating an AzureDevOps feed for repository '{RepositoryName}' and commit '{CommitSha}'.");
}

StablePackagesFeed = packagesFeedTask.TargetFeedURL;
}
}

private string GetFeedOverride(string feed)
{
foreach (var prefix in FeedOverrides.Keys)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,15 @@ public static implicit operator TargetFeedSpecification((TargetFeedContentType t

public TargetFeedSpecification(IEnumerable<TargetFeedContentType> contentTypes, string feedUrl, AssetSelection assets)
{
// A feed targeted for content type 'Package' may not have asset selection 'All'.
// During TargetFeedConfig creation, the default feed spec for shipping packages will be ignored and replaced with
// a separate target feed config.

if (assets == AssetSelection.All && contentTypes.Contains(TargetFeedContentType.Package))
{
throw new ArgumentException($"Target feed specification for {feedUrl} must have a separated asset selection 'ShippingOnly' and 'NonShippingOnly packages");
}

ContentTypes = contentTypes.ToImmutableList();
FeedUrl = feedUrl;
Assets = assets;
Expand Down