diff --git a/build/PackageArchive.targets b/build/PackageArchive.targets
new file mode 100644
index 0000000000..a5f9c15ab6
--- /dev/null
+++ b/build/PackageArchive.targets
@@ -0,0 +1,78 @@
+
+
+ <_TemplatesDirectory>$(MSBuildThisFileDirectory)tools\templates\
+ <_WorkRoot>$(RepositoryRoot).w\
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $(_WorkRoot)obj\$(OutputPackageName)
+ $(RepositoryRoot)artifacts\$(OutputPackageName).lzma
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $(RepositoryRoot).deps\Signed\Packages\
+ $(RepositoryRoot).deps\Signed\Packages-NoTimeStamp\
+
+
+
+
+
+
+
+
+ @(TimestampMetapackageVersion->Metadata('Filename'))
+ $(TimeStampVersion.TrimStart('Microsoft.AspNetCore.All'))
+ @(TimestampFreeMetapackageVersion->Metadata('Filename'))
+ $(TimeStampFreeVersion.TrimStart('Microsoft.AspNetCore.All'))
+ nuGetPackagesArchive-$(TimestampVersion)
+ nuGetPackagesArchive-$(TimestampFreeVersion)
+
+
+
+
+
+
+
+
+
diff --git a/build/RuntimeStore.targets b/build/RuntimeStore.targets
index 316d9303de..f695ae6033 100644
--- a/build/RuntimeStore.targets
+++ b/build/RuntimeStore.targets
@@ -42,7 +42,8 @@
+ PackageArtifacts="@(PackageArtifact)"
+ ExternalDependencies="@(ExternalDependency)" />
false
+ false
+ false
-
+
@@ -46,7 +48,7 @@
-
+
@@ -128,7 +130,7 @@
-
+
@@ -142,7 +144,7 @@
-
+
diff --git a/build/dependencies.props b/build/dependencies.props
index 9971961ad3..2ae47f4ba3 100644
--- a/build/dependencies.props
+++ b/build/dependencies.props
@@ -12,6 +12,12 @@
false
false
+
+ false
+
+ false
+
+ false
@@ -287,41 +293,46 @@ not building again in this patch.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/build/repo.targets b/build/repo.targets
index 16f7b77936..67ca16bf53 100644
--- a/build/repo.targets
+++ b/build/repo.targets
@@ -1,6 +1,7 @@
+
diff --git a/build/tasks/AddArchiveReferences.cs b/build/tasks/AddArchiveReferences.cs
new file mode 100644
index 0000000000..9d12c34270
--- /dev/null
+++ b/build/tasks/AddArchiveReferences.cs
@@ -0,0 +1,132 @@
+// Copyright (c) .NET Foundation. All rights reserved.
+// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
+
+using System;
+using System.Linq;
+using System.Xml;
+using Microsoft.Build.Framework;
+using Microsoft.Build.Utilities;
+using NuGet.Versioning;
+using RepoTasks.Utilities;
+
+namespace RepoTasks
+{
+ public class AddArchiveReferences : Task
+ {
+ [Required]
+ public string ReferencePackagePath { get; set; }
+
+ [Required]
+ public bool RemoveTimestamp { get; set; }
+
+ [Required]
+ public ITaskItem[] BuildArtifacts { get; set; }
+
+ [Required]
+ public ITaskItem[] PackageArtifacts { get; set; }
+
+ [Required]
+ public ITaskItem[] ExternalDependencies { get; set; }
+
+ public override bool Execute()
+ {
+ // Parse input
+ var externalArchiveArtifacts = ExternalDependencies.Where(p => p.GetMetadata("LZMA") == "true");
+ var externalArchiveTools = ExternalDependencies.Where(p => p.GetMetadata("LZMATools") == "true");
+ var archiveArtifacts = PackageArtifacts.Where(p => p.GetMetadata("LZMA") == "true");
+ var archiveTools = PackageArtifacts.Where(p => p.GetMetadata("LZMATools") == "true");
+ var buildArtifacts = BuildArtifacts.Select(ArtifactInfo.Parse)
+ .OfType()
+ .Where(p => !p.IsSymbolsArtifact);
+
+ var xmlDoc = new XmlDocument();
+ xmlDoc.Load(ReferencePackagePath);
+
+ // Project
+ var projectElement = xmlDoc.FirstChild;
+
+ // Items
+ var itemGroupElement = xmlDoc.CreateElement("ItemGroup");
+ Log.LogMessage(MessageImportance.High, $"Archive will include the following packages");
+
+ foreach (var package in archiveArtifacts)
+ {
+ var packageName = package.ItemSpec;
+ var packageVersion = buildArtifacts
+ .Single(p => string.Equals(p.PackageInfo.Id, packageName, StringComparison.OrdinalIgnoreCase))
+ .PackageInfo.Version.ToString();
+
+ if (string.Equals(RemoveTimestamp, "true", StringComparison.OrdinalIgnoreCase))
+ {
+ var version = new NuGetVersion(packageVersion);
+ var updatedVersion = new NuGetVersion(version.Version, VersionUtilities.GetNoTimestampReleaseLabel(version.Release));
+ packageVersion = updatedVersion.ToNormalizedString();
+ }
+
+ Log.LogMessage(MessageImportance.High, $" - Package: {packageName} Version: {packageVersion}");
+
+ var packageReferenceElement = xmlDoc.CreateElement("PackageReference");
+ packageReferenceElement.SetAttribute("Include", packageName);
+ packageReferenceElement.SetAttribute("Version", packageVersion);
+
+ itemGroupElement.AppendChild(packageReferenceElement);
+ }
+
+ foreach (var package in externalArchiveArtifacts)
+ {
+ var packageName = package.ItemSpec;
+ var packageVersion = package.GetMetadata("Version");
+ Log.LogMessage(MessageImportance.High, $" - Package: {packageName} Version: {packageVersion}");
+
+ var packageReferenceElement = xmlDoc.CreateElement("PackageReference");
+ packageReferenceElement.SetAttribute("Include", packageName);
+ packageReferenceElement.SetAttribute("Version", packageVersion);
+
+ itemGroupElement.AppendChild(packageReferenceElement);
+ }
+
+ foreach (var package in archiveTools)
+ {
+ var packageName = package.ItemSpec;
+ var packageVersion = buildArtifacts
+ .Single(p => string.Equals(p.PackageInfo.Id, packageName, StringComparison.OrdinalIgnoreCase))
+ .PackageInfo.Version.ToString();
+
+ if (string.Equals(RemoveTimestamp, "true", StringComparison.OrdinalIgnoreCase))
+ {
+ var version = new NuGetVersion(packageVersion);
+ var updatedVersion = new NuGetVersion(version.Version, VersionUtilities.GetNoTimestampReleaseLabel(version.Release));
+ packageVersion = updatedVersion.ToNormalizedString();
+ }
+
+ Log.LogMessage(MessageImportance.High, $" - Tool: {packageName} Version: {packageVersion}");
+
+ var packageReferenceElement = xmlDoc.CreateElement("DotNetCliToolReference");
+ packageReferenceElement.SetAttribute("Include", packageName);
+ packageReferenceElement.SetAttribute("Version", packageVersion);
+
+ itemGroupElement.AppendChild(packageReferenceElement);
+ }
+
+ foreach (var package in externalArchiveTools)
+ {
+ var packageName = package.ItemSpec;
+ var packageVersion = package.GetMetadata("Version");
+ Log.LogMessage(MessageImportance.High, $" - Tool: {packageName} Version: {packageVersion}");
+
+ var packageReferenceElement = xmlDoc.CreateElement("DotNetCliToolReference");
+ packageReferenceElement.SetAttribute("Include", packageName);
+ packageReferenceElement.SetAttribute("Version", packageVersion);
+
+ itemGroupElement.AppendChild(packageReferenceElement);
+ }
+ projectElement.AppendChild(itemGroupElement);
+
+ // Save updated file
+ xmlDoc.AppendChild(projectElement);
+ xmlDoc.Save(ReferencePackagePath);
+
+ return true;
+ }
+ }
+}
diff --git a/build/tasks/AddMetapackageReferences.cs b/build/tasks/AddMetapackageReferences.cs
index 3db68880cc..f6edbcf1f5 100644
--- a/build/tasks/AddMetapackageReferences.cs
+++ b/build/tasks/AddMetapackageReferences.cs
@@ -21,10 +21,14 @@ namespace RepoTasks
[Required]
public ITaskItem[] PackageArtifacts { get; set; }
+ [Required]
+ public ITaskItem[] ExternalDependencies { get; set; }
+
public override bool Execute()
{
// Parse input
var metapackageArtifacts = PackageArtifacts.Where(p => p.GetMetadata("Metapackage") != "false");
+ var externalArtifacts = ExternalDependencies.Where(p => p.GetMetadata("Metapackage") != "false");
var buildArtifacts = BuildArtifacts.Select(ArtifactInfo.Parse)
.OfType()
.Where(p => !p.IsSymbolsArtifact);
@@ -37,14 +41,15 @@ namespace RepoTasks
// Items
var itemGroupElement = xmlDoc.CreateElement("ItemGroup");
- Log.LogMessage(MessageImportance.Normal, $"Runtime store will include the following packages");
+ Log.LogMessage(MessageImportance.High, $"Runtime store will include the following packages");
+
foreach (var package in metapackageArtifacts)
{
- var packageName = package.GetMetadata("Identity");
+ var packageName = package.ItemSpec;
var packageVersion = buildArtifacts
.Single(p => string.Equals(p.PackageInfo.Id, packageName, StringComparison.OrdinalIgnoreCase))
.PackageInfo.Version.ToString();
- Log.LogMessage(MessageImportance.Normal, $" - Package: {packageName} Version: {packageVersion}");
+ Log.LogMessage(MessageImportance.High, $" - Package: {packageName} Version: {packageVersion}");
var packageReferenceElement = xmlDoc.CreateElement("PackageReference");
packageReferenceElement.SetAttribute("Include", packageName);
@@ -52,6 +57,20 @@ namespace RepoTasks
itemGroupElement.AppendChild(packageReferenceElement);
}
+
+ foreach (var package in externalArtifacts)
+ {
+ var packageName = package.ItemSpec;
+ var packageVersion = package.GetMetadata("Version");
+ Log.LogMessage(MessageImportance.High, $" - Package: {packageName} Version: {packageVersion}");
+
+ var packageReferenceElement = xmlDoc.CreateElement("PackageReference");
+ packageReferenceElement.SetAttribute("Include", packageName);
+ packageReferenceElement.SetAttribute("Version", packageVersion);
+
+ itemGroupElement.AppendChild(packageReferenceElement);
+ }
+
projectElement.AppendChild(itemGroupElement);
// Save updated file
diff --git a/build/tasks/RepoTasks.tasks b/build/tasks/RepoTasks.tasks
index 58b2008d5d..0d8e3fca8c 100644
--- a/build/tasks/RepoTasks.tasks
+++ b/build/tasks/RepoTasks.tasks
@@ -10,6 +10,7 @@
+
diff --git a/build/tasks/Utilities/VersionUtilities.cs b/build/tasks/Utilities/VersionUtilities.cs
new file mode 100644
index 0000000000..9bcd94956c
--- /dev/null
+++ b/build/tasks/Utilities/VersionUtilities.cs
@@ -0,0 +1,41 @@
+// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
+// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
+
+using System;
+
+namespace RepoTasks.Utilities
+{
+ public class VersionUtilities
+ {
+ public static string GetNoTimestampReleaseLabel(string releaseLabel)
+ {
+ if (releaseLabel.StartsWith("rtm-", StringComparison.OrdinalIgnoreCase))
+ {
+ // E.g. change version 2.5.0-rtm-123123 to 2.5.0.
+ releaseLabel = string.Empty;
+ }
+ else
+ {
+ var timeStampFreeVersion = Environment.GetEnvironmentVariable("TIMESTAMP_FREE_VERSION");
+ if (string.IsNullOrEmpty(timeStampFreeVersion))
+ {
+ timeStampFreeVersion = "final";
+ }
+
+ if (!timeStampFreeVersion.StartsWith("-"))
+ {
+ timeStampFreeVersion = "-" + timeStampFreeVersion;
+ }
+
+ // E.g. change version 2.5.0-rc2-123123 to 2.5.0-rc2-final.
+ var index = releaseLabel.LastIndexOf('-');
+ if (index != -1)
+ {
+ releaseLabel = releaseLabel.Substring(0, index) + timeStampFreeVersion;
+ }
+ }
+
+ return releaseLabel;
+ }
+ }
+}
\ No newline at end of file
diff --git a/build/tools/templates/Archive/Archive.csproj b/build/tools/templates/Archive/Archive.csproj
new file mode 100644
index 0000000000..252842049b
--- /dev/null
+++ b/build/tools/templates/Archive/Archive.csproj
@@ -0,0 +1,20 @@
+
+
+
+ netcoreapp2.0
+ false
+ netcoreapp2.0
+ $(DotNetRestoreSources)
+
+ $(RestoreSources);
+ https://dotnet.myget.org/F/aspnet-2-0-2-october2017-patch/api/v3/index.json;
+ https://dotnet.myget.org/F/aspnetcore-master/api/v3/index.json;
+ https://dotnet.myget.org/F/aspnetcore-tools/api/v3/index.json;
+
+
+ $(RestoreSources);
+ https://api.nuget.org/v3/index.json;
+
+
+
+
\ No newline at end of file