Remove source-build tarball creation infrastructure (#15114)
* Remove source-build tarball creation infrastructure * Remove tarball logic to build text-only packages
This commit is contained in:
parent
2824d95e89
commit
144a5f4328
16 changed files with 0 additions and 972 deletions
|
@ -1,23 +0,0 @@
|
||||||
// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at:
|
|
||||||
// https://github.com/microsoft/vscode-dev-containers/tree/v0.238.0/containers/dotnet
|
|
||||||
{
|
|
||||||
"name": "Source-Build w/ Built Tarball",
|
|
||||||
"image": "mcr.microsoft.com/dotnet-buildtools/prereqs:fedora-36",
|
|
||||||
// A completely built .NET source-tarball is >64 GB
|
|
||||||
"hostRequirements": {
|
|
||||||
"storage": "128gb"
|
|
||||||
},
|
|
||||||
// Configure tool-specific properties.
|
|
||||||
"customizations": {
|
|
||||||
// Configure properties specific to VS Code.
|
|
||||||
"vscode": {
|
|
||||||
// Add the IDs of extensions you want installed when the container is created.
|
|
||||||
"extensions": [
|
|
||||||
"ms-dotnettools.csharp",
|
|
||||||
"eamodio.gitlens"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
// Use 'onCreateCommand' to run pre-build commands inside the codespace.
|
|
||||||
"onCreateCommand": "${containerWorkspaceFolder}/.devcontainer/source-build-scripts/buildTarball.sh"
|
|
||||||
}
|
|
|
@ -1,12 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
./.devcontainer/source-build-scripts/createTarball.sh
|
|
||||||
|
|
||||||
cd $(realpath ..)/dotnet-source/
|
|
||||||
|
|
||||||
./prep.sh
|
|
||||||
|
|
||||||
# GitHub Codespaces automatically sets RepositoryName, which conflicts with source-build scripts.
|
|
||||||
unset RepositoryName
|
|
||||||
|
|
||||||
./build.sh --online --clean-while-building || true
|
|
|
@ -1,7 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# Always return exit code 0 so that we can use the codespaces prebuild to diagnose build errors.
|
|
||||||
./build.sh /p:ArcadeBuildTarball=true /p:TarballDir=$(realpath ..)/dotnet-source/ /p:PreserveTarballGitFolders=true || true
|
|
||||||
|
|
||||||
# Save the commit hash of the currently built repo, so developers know which version was built
|
|
||||||
git rev-parse HEAD > ./artifacts/prebuild.sha
|
|
|
@ -1,20 +0,0 @@
|
||||||
// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at:
|
|
||||||
// https://github.com/microsoft/vscode-dev-containers/tree/v0.238.0/containers/dotnet
|
|
||||||
{
|
|
||||||
"name": "Source-Build w/ Tarball",
|
|
||||||
"image": "mcr.microsoft.com/dotnet-buildtools/prereqs:fedora-36",
|
|
||||||
// A completely built .NET source tarball is >64 GB
|
|
||||||
"hostRequirements": {
|
|
||||||
"storage": "128gb"
|
|
||||||
},
|
|
||||||
"customizations": {
|
|
||||||
"vscode": {
|
|
||||||
"extensions": [
|
|
||||||
"ms-dotnettools.csharp",
|
|
||||||
"eamodio.gitlens"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
// Use 'onCreateCommand' to run pre-build commands inside the codespace.
|
|
||||||
"onCreateCommand": "${containerWorkspaceFolder}/.devcontainer/scripts/createTarball.sh"
|
|
||||||
}
|
|
|
@ -1,5 +0,0 @@
|
||||||
// Use this devcontainer if you don't need the full context of a source-build tarball
|
|
||||||
{
|
|
||||||
"name": "Source-Build",
|
|
||||||
"image": "mcr.microsoft.com/dotnet-buildtools/prereqs:fedora-36"
|
|
||||||
}
|
|
|
@ -1,13 +1,5 @@
|
||||||
<Project>
|
<Project>
|
||||||
<Choose>
|
<Choose>
|
||||||
<When Condition=" '$(ArcadeBuildTarball)' == 'true' ">
|
|
||||||
<!-- Source build / tarball generation -->
|
|
||||||
<ItemGroup>
|
|
||||||
<ProjectToBuild Include="$(RepoRoot)src/SourceBuild/Arcade/src/SourceBuild.Tasks.csproj" BuildInParallel="false" />
|
|
||||||
<ProjectToBuild Include="$(RepoRoot)src/SourceBuild/tarball/BuildSourceBuildTarball.proj" BuildInParallel="false" />
|
|
||||||
</ItemGroup>
|
|
||||||
</When>
|
|
||||||
|
|
||||||
<When Condition=" '$(InitializeVMR)' == 'true' ">
|
<When Condition=" '$(InitializeVMR)' == 'true' ">
|
||||||
<!-- VMR bootstrap -->
|
<!-- VMR bootstrap -->
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
The source and targets in the `src/SourceBuild/Arcade` directory are intended to move into the Arcade repo at some point. They are added here for ease of development while developing the tarball generation process. See https://github.com/dotnet/source-build/issues/2295
|
|
|
@ -1,17 +0,0 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
|
||||||
<PropertyGroup>
|
|
||||||
<TargetFrameworks>net7.0</TargetFrameworks>
|
|
||||||
<EnableDefaultCompileItems>false</EnableDefaultCompileItems>
|
|
||||||
<RunAnalyzers>false</RunAnalyzers>
|
|
||||||
<Nullable>disable</Nullable>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<Compile Include="*.cs" />
|
|
||||||
|
|
||||||
<PackageReference Include="Microsoft.Build.Framework" Version="$(MicrosoftBuildFrameworkVersion)" PrivateAssets="All" ExcludeAssets="Runtime" />
|
|
||||||
<PackageReference Include="Microsoft.Build.Utilities.Core" Version="$(MicrosoftBuildUtilitiesCoreVersion)" Publish="false" ExcludeAssets="runtime" />
|
|
||||||
<PackageReference Include="NuGet.Packaging" Version="5.8.0" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
</Project>
|
|
|
@ -1,180 +0,0 @@
|
||||||
// Licensed to the .NET Foundation under one or more agreements.
|
|
||||||
// The .NET Foundation licenses this file to you under the MIT license.
|
|
||||||
|
|
||||||
using Microsoft.Build.Framework;
|
|
||||||
using Microsoft.Build.Utilities;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Xml.Linq;
|
|
||||||
|
|
||||||
namespace Microsoft.DotNet.SourceBuild.Tasks
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Reads entries in a Version.Details.xml file to find intermediate nupkg dependencies. For
|
|
||||||
/// each dependency with a "SourceBuild" element, adds an item to the "Dependencies" output.
|
|
||||||
/// </summary>
|
|
||||||
public class Tarball_ReadSourceBuildIntermediateNupkgDependencies : Task
|
|
||||||
{
|
|
||||||
[Required]
|
|
||||||
public string VersionDetailsXmlFile { get; set; }
|
|
||||||
|
|
||||||
[Required]
|
|
||||||
public string SourceBuildIntermediateNupkgPrefix { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Convert any internal repo references to the public GitHub repos.
|
|
||||||
/// </summary>
|
|
||||||
public bool ConvertInternalRepos { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The intermediate nupkg RID to use if any RID-specific intermediate nupkgs are required.
|
|
||||||
/// If this parameter isn't specified, RID-specific intermediate nupkgs can't be used and
|
|
||||||
/// this task fails.
|
|
||||||
/// </summary>
|
|
||||||
public string SourceBuildIntermediateNupkgRid { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// %(Identity): NuGet package ID.
|
|
||||||
/// %(Name): The Name of the dependency from Version.Details.xml.
|
|
||||||
/// %(ExactVersion): NuGet package version. This can be used to look up the restored package
|
|
||||||
/// contents in a package cache.
|
|
||||||
/// %(Version): NuGet package version, wrapped in "[version]" syntax for exact match.
|
|
||||||
/// %(Uri): The URI for the repo.
|
|
||||||
/// %(Sha): The commit Sha for the dependency.
|
|
||||||
/// %(SourceBuildRepoName): The repo name to use in source-build.
|
|
||||||
/// </summary>
|
|
||||||
[Output]
|
|
||||||
public ITaskItem[] Dependencies { get; set; }
|
|
||||||
|
|
||||||
public override bool Execute()
|
|
||||||
{
|
|
||||||
XElement root = XElement.Load(VersionDetailsXmlFile, LoadOptions.PreserveWhitespace);
|
|
||||||
|
|
||||||
XName CreateQualifiedName(string plainName)
|
|
||||||
{
|
|
||||||
return root.GetDefaultNamespace().GetName(plainName);
|
|
||||||
}
|
|
||||||
|
|
||||||
Dependencies = root
|
|
||||||
.Elements()
|
|
||||||
.Elements(CreateQualifiedName("Dependency"))
|
|
||||||
.Select(d =>
|
|
||||||
{
|
|
||||||
XElement sourceBuildElement = d.Element(CreateQualifiedName("SourceBuild"));
|
|
||||||
|
|
||||||
if (sourceBuildElement == null)
|
|
||||||
{
|
|
||||||
// Workaround for https://github.com/dotnet/source-build/issues/2481
|
|
||||||
sourceBuildElement = d.Element(CreateQualifiedName("SourceBuildTarball"));
|
|
||||||
|
|
||||||
if (sourceBuildElement == null)
|
|
||||||
{
|
|
||||||
// Ignore element: doesn't represent a source-build dependency.
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
string repoName = sourceBuildElement.Attribute("RepoName")?.Value;
|
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(repoName))
|
|
||||||
{
|
|
||||||
Log.LogError($"Dependency SourceBuild RepoName null or empty in '{VersionDetailsXmlFile}' element {d}");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
string dependencyName = d.Attribute("Name")?.Value ?? string.Empty;
|
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(dependencyName))
|
|
||||||
{
|
|
||||||
// Log name missing as FYI, but this is not an error case for source-build.
|
|
||||||
Log.LogMessage($"Dependency Name null or empty in '{VersionDetailsXmlFile}' element {d}");
|
|
||||||
}
|
|
||||||
|
|
||||||
string dependencyVersion = d.Attribute("Version")?.Value;
|
|
||||||
|
|
||||||
string uri = d.Element(CreateQualifiedName("Uri"))?.Value;
|
|
||||||
if (ConvertInternalRepos)
|
|
||||||
{
|
|
||||||
uri = ConvertInternalRepo(uri);
|
|
||||||
}
|
|
||||||
|
|
||||||
string sha = d.Element(CreateQualifiedName("Sha"))?.Value;
|
|
||||||
string sourceBuildRepoName = sourceBuildElement.Attribute("RepoName")?.Value;
|
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(dependencyVersion))
|
|
||||||
{
|
|
||||||
// We need a version to bring down an intermediate nupkg. Fail.
|
|
||||||
Log.LogError($"Dependency Version null or empty in '{VersionDetailsXmlFile}' element {d}");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
string identity = SourceBuildIntermediateNupkgPrefix + repoName;
|
|
||||||
|
|
||||||
bool.TryParse(
|
|
||||||
sourceBuildElement.Attribute("ManagedOnly")?.Value,
|
|
||||||
out bool managedOnly);
|
|
||||||
|
|
||||||
// If RID-specific, add the RID to the end of the identity.
|
|
||||||
if (!managedOnly)
|
|
||||||
{
|
|
||||||
if (string.IsNullOrEmpty(SourceBuildIntermediateNupkgRid))
|
|
||||||
{
|
|
||||||
Log.LogError(
|
|
||||||
$"Parameter {nameof(SourceBuildIntermediateNupkgRid)} was " +
|
|
||||||
"not specified, indicating this project depends only on managed " +
|
|
||||||
"inputs. However, source-build element is not ManagedOnly: " +
|
|
||||||
sourceBuildElement);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
identity += "." + SourceBuildIntermediateNupkgRid;
|
|
||||||
}
|
|
||||||
|
|
||||||
return new TaskItem(
|
|
||||||
identity,
|
|
||||||
new Dictionary<string, string>
|
|
||||||
{
|
|
||||||
["Name"] = dependencyName,
|
|
||||||
["Version"] = $"[{dependencyVersion}]",
|
|
||||||
["ExactVersion"] = dependencyVersion,
|
|
||||||
["Uri"] = uri,
|
|
||||||
["Sha"] = sha,
|
|
||||||
["SourceBuildRepoName"] = sourceBuildRepoName
|
|
||||||
});
|
|
||||||
})
|
|
||||||
.Where(d => d != null)
|
|
||||||
.ToArray();
|
|
||||||
|
|
||||||
return !Log.HasLoggedErrors;
|
|
||||||
}
|
|
||||||
|
|
||||||
private string ConvertInternalRepo(string uri)
|
|
||||||
{
|
|
||||||
if (uri.StartsWith("https://dev.azure.com", StringComparison.OrdinalIgnoreCase))
|
|
||||||
{
|
|
||||||
string[] repoParts = uri.Substring(uri.LastIndexOf('/')).Split('-', 2);
|
|
||||||
|
|
||||||
if (repoParts.Length != 2)
|
|
||||||
{
|
|
||||||
Log.LogError($"Repo '{uri}' does not end with the expected <GH organization>-<GH repo> format");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
string org = repoParts[0];
|
|
||||||
string repo = repoParts[1];
|
|
||||||
|
|
||||||
// The internal Nuget.Client repo has suffix which needs to be accounted for.
|
|
||||||
const string trustedSuffix = "-Trusted";
|
|
||||||
if (uri.EndsWith(trustedSuffix, StringComparison.OrdinalIgnoreCase))
|
|
||||||
{
|
|
||||||
repo = repo.Substring(0, repo.Length - trustedSuffix.Length);
|
|
||||||
}
|
|
||||||
|
|
||||||
uri = $"https://github.com/{org}/{repo}";
|
|
||||||
}
|
|
||||||
|
|
||||||
return uri;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,194 +0,0 @@
|
||||||
// Licensed to the .NET Foundation under one or more agreements.
|
|
||||||
// The .NET Foundation licenses this file to you under the MIT license.
|
|
||||||
// See the LICENSE file in the project root for more information.
|
|
||||||
|
|
||||||
using Microsoft.Build.Framework;
|
|
||||||
using Microsoft.Build.Tasks;
|
|
||||||
using Microsoft.Build.Utilities;
|
|
||||||
using NuGet.Versioning;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Globalization;
|
|
||||||
using System.IO;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Text.RegularExpressions;
|
|
||||||
using System.Xml.Serialization;
|
|
||||||
|
|
||||||
namespace Microsoft.DotNet.SourceBuild.Tasks
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Writes a props file to the given directory for each dependency specified
|
|
||||||
/// plus adds or updates an existing props file with all dependencies. The
|
|
||||||
/// intention is for the props file to be included by a source-build build
|
|
||||||
/// to get metadata about each dependent repo.
|
|
||||||
/// </summary>
|
|
||||||
public class Tarball_WriteSourceRepoProperties : Task
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// The directory to write the props files to.
|
|
||||||
/// </summary>
|
|
||||||
[Required]
|
|
||||||
public string SourceBuildMetadataDir { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Dependencies to include in the props files.
|
|
||||||
///
|
|
||||||
/// %(Identity): NuGet package ID.
|
|
||||||
/// %(Name): The Name of the dependency from Version.Details.xml.
|
|
||||||
/// %(ExactVersion): NuGet package version. This can be used to look up the restored package
|
|
||||||
/// contents in a package cache.
|
|
||||||
/// %(Version): NuGet package version, wrapped in "[version]" syntax for exact match.
|
|
||||||
/// %(Uri): The URI for the repo.
|
|
||||||
/// %(Sha): The commit Sha for the dependency.
|
|
||||||
/// %(SourceBuildRepoName): The repo name to use in source-build.
|
|
||||||
/// </summary>
|
|
||||||
/// <value></value>
|
|
||||||
[Required]
|
|
||||||
public ITaskItem[] Dependencies { get; set; }
|
|
||||||
|
|
||||||
public override bool Execute()
|
|
||||||
{
|
|
||||||
var allRepoProps = new Dictionary<string, string>();
|
|
||||||
|
|
||||||
foreach (var dependency in Dependencies.Select(dep =>
|
|
||||||
new {
|
|
||||||
Name = dep.GetMetadata("Name"),
|
|
||||||
SourceBuildRepoName = dep.GetMetadata("SourceBuildRepoName"),
|
|
||||||
Version = dep.GetMetadata("ExactVersion"),
|
|
||||||
Sha = dep.GetMetadata("Sha"),
|
|
||||||
Uri = dep.GetMetadata("Uri"),
|
|
||||||
GitCommitCount = dep.GetMetadata("GitCommitCount")
|
|
||||||
}))
|
|
||||||
{
|
|
||||||
string repoName = dependency.SourceBuildRepoName;
|
|
||||||
string safeRepoName = repoName.Replace("-", "").Replace(".", "");
|
|
||||||
string propsPath = Path.Combine(SourceBuildMetadataDir, $"{repoName.Replace(".", "-")}.props");
|
|
||||||
DerivedVersion derivedVersion = GetVersionInfo(safeRepoName, dependency.Version, "0");
|
|
||||||
var repoProps = new Dictionary<string, string>
|
|
||||||
{
|
|
||||||
["GitCommitHash"] = dependency.Sha,
|
|
||||||
["OfficialBuildId"] = derivedVersion.OfficialBuildId,
|
|
||||||
["OutputPackageVersion"] = dependency.Version,
|
|
||||||
["PreReleaseVersionLabel"] = derivedVersion.PreReleaseVersionLabel,
|
|
||||||
["IsStable"] = string.IsNullOrWhiteSpace(derivedVersion.PreReleaseVersionLabel) ? "true" : "false",
|
|
||||||
};
|
|
||||||
if (!string.IsNullOrEmpty(dependency.GitCommitCount))
|
|
||||||
{
|
|
||||||
repoProps.Add("GitCommitCount", dependency.GitCommitCount);
|
|
||||||
}
|
|
||||||
WritePropsFile(propsPath, repoProps);
|
|
||||||
allRepoProps[$"{safeRepoName}GitCommitHash"] = dependency.Sha;
|
|
||||||
allRepoProps[$"{safeRepoName}OutputPackageVersion"] = dependency.Version;
|
|
||||||
}
|
|
||||||
string allRepoPropsPath = Path.Combine(SourceBuildMetadataDir, "AllRepoVersions.props");
|
|
||||||
Log.LogMessage(MessageImportance.Normal, $"[{DateTimeOffset.Now}] Writing all repo versions to {allRepoPropsPath}");
|
|
||||||
UpdatePropsFile(allRepoPropsPath, allRepoProps);
|
|
||||||
|
|
||||||
return !Log.HasLoggedErrors;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Reverse a version in the Arcade style (https://github.com/dotnet/arcade/blob/fb92b14d8cd07cf44f8f7eefa8ac58d7ffd05f3f/src/Microsoft.DotNet.Arcade.Sdk/tools/Version.BeforeCommonTargets.targets#L18)
|
|
||||||
/// back to an OfficialBuildId + ReleaseLabel which we can then supply to get the same resulting version number.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="repoName">The source build name of the repo to get the version info for.</param>
|
|
||||||
/// <param name="version">The complete version, e.g. 1.0.0-beta1-19720.5</param>
|
|
||||||
/// <param name="commitCount">The current commit count of the repo. This is used for some repos that do not use the standard versioning scheme.</param>
|
|
||||||
/// <returns></returns>
|
|
||||||
private static DerivedVersion GetVersionInfo(string repoName, string version, string commitCount)
|
|
||||||
{
|
|
||||||
var nugetVersion = new NuGetVersion(version);
|
|
||||||
|
|
||||||
if (!string.IsNullOrWhiteSpace(nugetVersion.Release))
|
|
||||||
{
|
|
||||||
var releaseParts = nugetVersion.Release.Split('-', '.');
|
|
||||||
if (repoName.Contains("nuget"))
|
|
||||||
{
|
|
||||||
// NuGet does this - arbitrary build IDs
|
|
||||||
return new DerivedVersion { OfficialBuildId = DateTime.Now.ToString("yyyyMMdd.1"), PreReleaseVersionLabel = releaseParts[0] };
|
|
||||||
}
|
|
||||||
else if (releaseParts.Length == 3)
|
|
||||||
{
|
|
||||||
// VSTest uses full dates for the first part of their preview build numbers
|
|
||||||
if (repoName.Contains("vstest"))
|
|
||||||
{
|
|
||||||
return new DerivedVersion { OfficialBuildId = $"{releaseParts[1]}.{releaseParts[2]}", PreReleaseVersionLabel = releaseParts[0] };
|
|
||||||
}
|
|
||||||
else if (int.TryParse(releaseParts[1], out int datePart) && int.TryParse(releaseParts[2], out int buildPart))
|
|
||||||
{
|
|
||||||
if (datePart > 1 && datePart < 8 && buildPart > 1000 && buildPart < 10000)
|
|
||||||
{
|
|
||||||
return new DerivedVersion { OfficialBuildId = releaseParts[2], PreReleaseVersionLabel = $"{releaseParts[0]}.{releaseParts[1]}" };
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return new DerivedVersion { OfficialBuildId = $"20{((datePart / 1000))}{((datePart % 1000) / 50):D2}{(datePart % 50):D2}.{buildPart}", PreReleaseVersionLabel = releaseParts[0] };
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (releaseParts.Length == 4)
|
|
||||||
{
|
|
||||||
// new preview version style, e.g. 5.0.0-preview.7.20365.12
|
|
||||||
if (int.TryParse(releaseParts[2], out int datePart) && int.TryParse(releaseParts[3], out int buildPart))
|
|
||||||
{
|
|
||||||
return new DerivedVersion { OfficialBuildId = $"20{((datePart / 1000))}{((datePart % 1000) / 50):D2}{(datePart % 50):D2}.{buildPart}", PreReleaseVersionLabel = $"{releaseParts[0]}.{releaseParts[1]}" };
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// finalized version number (x.y.z) - probably not our code
|
|
||||||
// Application Insights, Newtonsoft.Json do this
|
|
||||||
return new DerivedVersion { OfficialBuildId = DateTime.Now.ToString("yyyyMMdd.1"), PreReleaseVersionLabel = string.Empty };
|
|
||||||
}
|
|
||||||
|
|
||||||
throw new FormatException($"Can't derive a build ID from version {version} (commit count {commitCount}, release {string.Join(";", nugetVersion.Release.Split('-', '.'))})");
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void UpdatePropsFile(string filePath, Dictionary<string, string> properties)
|
|
||||||
{
|
|
||||||
if (!File.Exists(filePath))
|
|
||||||
{
|
|
||||||
WritePropsFile(filePath, properties);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var content = new StringBuilder();
|
|
||||||
foreach (var line in File.ReadAllLines(filePath))
|
|
||||||
{
|
|
||||||
content.AppendLine(line);
|
|
||||||
if (line.Contains("<PropertyGroup>"))
|
|
||||||
{
|
|
||||||
foreach (var propName in properties.Keys.OrderBy(k => k))
|
|
||||||
{
|
|
||||||
content.AppendLine($" <{propName}>{properties[propName]}</{propName}>");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
File.WriteAllText(filePath, content.ToString());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void WritePropsFile(string filePath, Dictionary<string, string> properties)
|
|
||||||
{
|
|
||||||
var content = new StringBuilder();
|
|
||||||
content.AppendLine("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
|
|
||||||
content.AppendLine("<Project>");
|
|
||||||
content.AppendLine(" <PropertyGroup>");
|
|
||||||
foreach (var propName in properties.Keys.OrderBy(k => k))
|
|
||||||
{
|
|
||||||
content.AppendLine($" <{propName}>{properties[propName]}</{propName}>");
|
|
||||||
}
|
|
||||||
content.AppendLine(" </PropertyGroup>");
|
|
||||||
content.AppendLine("</Project>");
|
|
||||||
File.WriteAllText(filePath, content.ToString());
|
|
||||||
}
|
|
||||||
|
|
||||||
private class DerivedVersion
|
|
||||||
{
|
|
||||||
internal string OfficialBuildId { get; set; }
|
|
||||||
internal string PreReleaseVersionLabel { get; set; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,7 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<!-- Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license. -->
|
|
||||||
<Project>
|
|
||||||
<PropertyGroup>
|
|
||||||
<SourceBuildTasksAssembly>$(RepoRoot)\artifacts\bin\SourceBuild.Tasks\$(Configuration)\net7.0\SourceBuild.Tasks.dll</SourceBuildTasksAssembly>
|
|
||||||
</PropertyGroup>
|
|
||||||
</Project>
|
|
|
@ -1,415 +0,0 @@
|
||||||
<!-- Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license. -->
|
|
||||||
<Project Sdk="Microsoft.DotNet.Arcade.Sdk">
|
|
||||||
|
|
||||||
<Import Project="./BuildTasks.props" />
|
|
||||||
<Import Project="../tools/SourceBuild/SourceBuildArcadeTools.targets" Sdk="Microsoft.DotNet.Arcade.Sdk" />
|
|
||||||
<Import Project="$(RepoRoot)/src/redist/targets/Versions.targets" />
|
|
||||||
<Import Project="$(RepoRoot)/src/redist/targets/SetBuildDefaults.targets" />
|
|
||||||
<Import Project="$(RepoRoot)/src/redist/targets/FileExtensions.targets" />
|
|
||||||
<Import Project="$(RepoRoot)/src/redist/targets/GetRuntimeInformation.targets" />
|
|
||||||
<Import Project="$(RepoRoot)/src/redist/targets/GenerateLayout.targets" />
|
|
||||||
|
|
||||||
<UsingTask TaskName="Microsoft.DotNet.SourceBuild.Tasks.Tarball_ReadSourceBuildIntermediateNupkgDependencies" AssemblyFile="$(SourceBuildTasksAssembly)" />
|
|
||||||
<UsingTask TaskName="Microsoft.DotNet.SourceBuild.Tasks.Tarball_WriteSourceRepoProperties" AssemblyFile="$(SourceBuildTasksAssembly)" />
|
|
||||||
|
|
||||||
<PropertyGroup>
|
|
||||||
<ArtifactsDir>$(RepoRoot)artifacts/</ArtifactsDir>
|
|
||||||
<TarballDir Condition=" '$(TarballDir)' == '' ">$(ArtifactsDir)tarball/</TarballDir>
|
|
||||||
<TarballRootDir>$([MSBuild]::EnsureTrailingSlash('$(TarballDir)'))</TarballRootDir>
|
|
||||||
<TarballSourceDir>$(TarballRootDir)src/</TarballSourceDir>
|
|
||||||
<TarballGitInfoDir>$(TarballRootDir)git-info/</TarballGitInfoDir>
|
|
||||||
<CloneVerbosity>quiet</CloneVerbosity> <!-- Support quiet and full -->
|
|
||||||
<ConvertInternalRepos Condition="'$(ConvertInternalRepos)' == '' and '$(VSS_NUGET_EXTERNAL_FEED_ENDPOINTS)' == '' and '$(AzDoPat)' == ''">true</ConvertInternalRepos>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
<Target Name="CreateSourceTarball"
|
|
||||||
DependsOnTargets="
|
|
||||||
GenerateFullNuGetVersion;
|
|
||||||
GenerateVersionFile;
|
|
||||||
CreateTarballDir;
|
|
||||||
SetupSelfGithubInfo;
|
|
||||||
CloneRepoAndDependentsRecursive;
|
|
||||||
CleanClonedSource;
|
|
||||||
RestoreTextOnlyPackages;
|
|
||||||
CopyTextOnlyPackages;
|
|
||||||
CopyTarballContent;
|
|
||||||
">
|
|
||||||
|
|
||||||
<PropertyGroup>
|
|
||||||
<TarballFileDir>$([System.IO.Path]::GetDirectoryName('$(TarballFilePath)'))</TarballFileDir>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
<Error Text="TarballFilePath not specified." Condition=" '$(TarballFilePath)' == '' " />
|
|
||||||
|
|
||||||
<MakeDir Directories="$(TarballFileDir)" Condition=" '$(TarballFileDir)' != '' " />
|
|
||||||
<Exec Command="tar --numeric-owner -zcf $(TarballFilePath) -C $(TarballDir) ." />
|
|
||||||
|
|
||||||
<Message Text="Tarball '$(TarballFilePath)' was successfully created from '$(TarballDir)'" Importance="High" />
|
|
||||||
</Target>
|
|
||||||
|
|
||||||
<Target Name="CreateTarballDir" >
|
|
||||||
<RemoveDir Directories='$(TarballRootDir)' Condition=" EXISTS('$(TarballRootDir)') " />
|
|
||||||
<Error Text="Tarball directory not specified. Pass /p:TarballDir=[new dir name] to specify a tarball directory." Condition=" '$(TarballDir)' == '' " />
|
|
||||||
<Error Text="Tarball directory already exists: $(TarballRootDir)" Condition=" '$(TarballRootDir)' != '' AND EXISTS('$(TarballRootDir)') " />
|
|
||||||
|
|
||||||
<MakeDir Directories="$(TarballRootDir)" Condition=" '$(TarballRootDir)' != '' " />
|
|
||||||
<MakeDir Directories="$(TarballSourceDir)" Condition=" '$(TarballSourceDir)' != '' " />
|
|
||||||
<MakeDir Directories="$(TarballGitInfoDir)" Condition=" '$(TarballGitInfoDir)' != '' " />
|
|
||||||
</Target>
|
|
||||||
|
|
||||||
<Target Name="SetupSelfGithubInfo" Condition=" '$(IsRootRepo)' != 'true' ">
|
|
||||||
|
|
||||||
<Exec
|
|
||||||
Command="cd $(RepoRoot);git config --get remote.origin.url"
|
|
||||||
ConsoleToMSBuild="true"
|
|
||||||
WorkingDirectory="$(RepoRoot)">
|
|
||||||
<Output TaskParameter="ConsoleOutput" ItemName="RootRepoUri" />
|
|
||||||
</Exec>
|
|
||||||
|
|
||||||
<Exec
|
|
||||||
Command="cd $(RepoRoot);git rev-parse HEAD"
|
|
||||||
ConsoleToMSBuild="true"
|
|
||||||
WorkingDirectory="$(RepoRoot)">
|
|
||||||
<Output TaskParameter="ConsoleOutput" ItemName="RootRepoCommitSha" />
|
|
||||||
</Exec>
|
|
||||||
|
|
||||||
<!-- Get commit count for installer repo only -->
|
|
||||||
<Exec
|
|
||||||
Command="cd $(RepoRoot);git rev-list --count HEAD"
|
|
||||||
ConsoleToMSBuild="true"
|
|
||||||
WorkingDirectory="$(RepoRoot)">
|
|
||||||
<Output TaskParameter="ConsoleOutput" ItemName="RootRepoCommitCount" />
|
|
||||||
</Exec>
|
|
||||||
|
|
||||||
<!-- This is hardcoding version for the root repo (installer), since there
|
|
||||||
isn't a Version.Details.xml file to read it from.
|
|
||||||
See https://github.com/dotnet/source-build/issues/2250 -->
|
|
||||||
<ItemGroup>
|
|
||||||
<SourceBuildRepos Include="$(GitHubRepositoryName)">
|
|
||||||
<Name>$(GitHubRepositoryName)</Name>
|
|
||||||
<Version>$(VersionPrefix)</Version>
|
|
||||||
<ExactVersion>$(VersionPrefix)</ExactVersion>
|
|
||||||
<Sha>@(RootRepoCommitSha)</Sha>
|
|
||||||
<Uri>@(RootRepoUri)</Uri>
|
|
||||||
<GitCommitCount>@(RootRepoCommitCount)</GitCommitCount>
|
|
||||||
<SourceBuildRepoName>$(GitHubRepositoryName)</SourceBuildRepoName>
|
|
||||||
<IsRootRepo>true</IsRootRepo>
|
|
||||||
</SourceBuildRepos>
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<Tarball_WriteSourceRepoProperties
|
|
||||||
SourceBuildMetadataDir="$(TarballGitInfoDir)"
|
|
||||||
Dependencies="@(SourceBuildRepos)" />
|
|
||||||
|
|
||||||
<PropertyGroup>
|
|
||||||
<SourceBuildRepoName>%(SourceBuildRepos.SourceBuildRepoName)</SourceBuildRepoName>
|
|
||||||
<RepoUri>%(SourceBuildRepos.Uri)</RepoUri>
|
|
||||||
<RepoSha>%(SourceBuildRepos.Sha)</RepoSha>
|
|
||||||
<IsRootRepo>%(SourceBuildRepos.IsRootRepo)</IsRootRepo>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
<!-- Remove root repo from SourceBuildRepos so it doesn't try to clone twice -->
|
|
||||||
<ItemGroup>
|
|
||||||
<SourceBuildRepos Remove="@(SourceBuildRepos)" />
|
|
||||||
</ItemGroup>
|
|
||||||
</Target>
|
|
||||||
|
|
||||||
<Target Name="CloneRepoAndDependentsRecursive"
|
|
||||||
DependsOnTargets="GetSourceBuildIntermediateNupkgNameConvention">
|
|
||||||
|
|
||||||
<Message Text="--> Start Cloning Repo $(SourceBuildRepoName)" Importance="High" />
|
|
||||||
<PropertyGroup>
|
|
||||||
<SourceDir>$(SourceBuildRepoName)/</SourceDir>
|
|
||||||
<TarballRepoSourceDir>$(TarballSourceDir)$(SourceDir)</TarballRepoSourceDir>
|
|
||||||
<TarballRepoSourceEngDir>$(TarballSourceDir)$(SourceDir)eng/</TarballRepoSourceEngDir>
|
|
||||||
<TarballVersionDetailsFile>$(TarballRepoSourceEngDir)Version.Details.xml</TarballVersionDetailsFile>
|
|
||||||
<CloneParam Condition=" '$(CloneVerbosity)' == 'quiet' ">-q</CloneParam>
|
|
||||||
<OriginalRepoUri>$(RepoUri)</OriginalRepoUri>
|
|
||||||
<RepoUri Condition=" '$(AzDoPat)' != '' ">$(RepoUri.Replace('https://dev.azure.com', 'https://dn-bot:$(AzDoPat)@dev.azure.com'))</RepoUri>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
<!-- Perform a local clone of the root repo, it's faster and doesn't require the RepoSha to be a tree. -->
|
|
||||||
<Exec
|
|
||||||
Command="git clone ./.git $(TarballRepoSourceDir)"
|
|
||||||
WorkingDirectory="$(RepoRoot)"
|
|
||||||
Condition="$(IsRootRepo) == 'true'" />
|
|
||||||
|
|
||||||
<!-- Because the root repo was locally cloned, the remote.origin.url needs to be updated from the local source to the real origin -->
|
|
||||||
<Exec
|
|
||||||
Command="git config --file $(TarballRepoSourceDir)/.git/config --unset remote.origin.url"
|
|
||||||
WorkingDirectory="$(RepoRoot)"
|
|
||||||
Condition="$(IsRootRepo) == 'true'" />
|
|
||||||
|
|
||||||
<Exec
|
|
||||||
Command="git config --file $(TarballRepoSourceDir)/.git/config --add remote.origin.url `git config --get remote.origin.url`"
|
|
||||||
WorkingDirectory="$(RepoRoot)"
|
|
||||||
Condition="$(IsRootRepo) == 'true'" />
|
|
||||||
|
|
||||||
<!-- Needed in cases where source-build is pinned to a version of the root repo. -->
|
|
||||||
<Exec
|
|
||||||
Command="git reset --hard $(RepoSha)"
|
|
||||||
WorkingDirectory="$(TarballRepoSourceDir)"
|
|
||||||
Condition="$(IsRootRepo) == 'true'" />
|
|
||||||
|
|
||||||
<Exec
|
|
||||||
Command="git init $(TarballRepoSourceDir)"
|
|
||||||
WorkingDirectory="$(RepoRoot)"
|
|
||||||
Condition="$(IsRootRepo) != 'true'" />
|
|
||||||
|
|
||||||
<Exec
|
|
||||||
Command="git remote add origin $(RepoUri)"
|
|
||||||
WorkingDirectory="$(TarballRepoSourceDir)"
|
|
||||||
Condition="$(IsRootRepo) != 'true'" />
|
|
||||||
|
|
||||||
<!-- Fetching a sha requires git 2.5.0 or newer -->
|
|
||||||
<Exec
|
|
||||||
Command="git fetch --depth 1 origin $(RepoSha)"
|
|
||||||
WorkingDirectory="$(TarballRepoSourceDir)"
|
|
||||||
Condition="$(IsRootRepo) != 'true'" />
|
|
||||||
|
|
||||||
<Exec
|
|
||||||
Command="git reset --hard FETCH_HEAD"
|
|
||||||
WorkingDirectory="$(TarballRepoSourceDir)"
|
|
||||||
Condition="$(IsRootRepo) != 'true'" />
|
|
||||||
|
|
||||||
<Exec
|
|
||||||
Command="git submodule update --init --recursive --depth 1"
|
|
||||||
WorkingDirectory="$(TarballRepoSourceDir)" />
|
|
||||||
|
|
||||||
<Exec
|
|
||||||
Command="git submodule foreach 'rm -rf %24%28git rev-parse --git-dir%29/objects ||:'"
|
|
||||||
WorkingDirectory="$(TarballRepoSourceDir)"
|
|
||||||
Condition="$(PreserveTarballGitFolders) != 'true'" />
|
|
||||||
|
|
||||||
<Exec
|
|
||||||
Command="git config --file $(TarballRepoSourceDir)/.git/config --unset remote.origin.url"
|
|
||||||
WorkingDirectory="$(RepoRoot)"/>
|
|
||||||
|
|
||||||
<Exec
|
|
||||||
Command="git config --file $(TarballRepoSourceDir)/.git/config --add remote.origin.url $(OriginalRepoUri)"
|
|
||||||
WorkingDirectory="$(RepoRoot)"/>
|
|
||||||
|
|
||||||
<!-- Remove the git objects folder to free up tarball space -->
|
|
||||||
<Exec
|
|
||||||
Command="rm -rf objects"
|
|
||||||
WorkingDirectory="$(TarballRepoSourceDir).git"
|
|
||||||
Condition="$(PreserveTarballGitFolders) != 'true'" />
|
|
||||||
|
|
||||||
<Message Text="--> Done Cloning Repo $(SourceBuildRepoName)" Importance="High" />
|
|
||||||
|
|
||||||
<!-- Apply source-build patches -->
|
|
||||||
<ItemGroup>
|
|
||||||
<SourceBuildPatchFile Include="$(RepoRoot)src/SourceBuild/tarball/patches/$(SourceBuildRepoName)/*.patch" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<Message
|
|
||||||
Text="--> Applying $(SourceBuildRepoName) Patches"
|
|
||||||
Importance="High"
|
|
||||||
Condition="'@(SourceBuildPatchFile)' != ''" />
|
|
||||||
<Exec
|
|
||||||
Command="git --work-tree=$(TarballRepoSourceDir) apply --ignore-whitespace --whitespace=nowarn "%(SourceBuildPatchFile.FullPath)""
|
|
||||||
WorkingDirectory="$(TarballRepoSourceDir)"
|
|
||||||
Condition="'@(SourceBuildPatchFile)' != ''" />
|
|
||||||
<Message
|
|
||||||
Text="--> Done Applying $(SourceBuildRepoName) Patches"
|
|
||||||
Importance="High"
|
|
||||||
Condition="'@(SourceBuildPatchFile)' != ''" />
|
|
||||||
|
|
||||||
<Tarball_ReadSourceBuildIntermediateNupkgDependencies
|
|
||||||
VersionDetailsXmlFile="$([MSBuild]::NormalizePath($(TarballVersionDetailsFile)))"
|
|
||||||
SourceBuildIntermediateNupkgPrefix="$(SourceBuildIntermediateNupkgPrefix)"
|
|
||||||
SourceBuildIntermediateNupkgRid="$(SourceBuildIntermediateNupkgRid)"
|
|
||||||
ConvertInternalRepos="$(ConvertInternalRepos)">
|
|
||||||
<Output TaskParameter="Dependencies" ItemName="SourceBuildRepos" />
|
|
||||||
</Tarball_ReadSourceBuildIntermediateNupkgDependencies>
|
|
||||||
|
|
||||||
<!-- Remove repo if it has already be cloned at any sha. This results in
|
|
||||||
The commit sha for the cloned repo in the tarball being the one that
|
|
||||||
was first encountered. -->
|
|
||||||
<ItemGroup>
|
|
||||||
<SourceBuildRepos Remove="@(SourceBuildRepos)" Condition=" EXISTS('$(TarballGitInfoDir)%(SourceBuildRepoName).props')" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<Tarball_WriteSourceRepoProperties
|
|
||||||
SourceBuildMetadataDir="$(TarballGitInfoDir)"
|
|
||||||
Dependencies="@(SourceBuildRepos)" />
|
|
||||||
|
|
||||||
<Message Text="--> Dependencies for $(TarballVersionDetailsFile):" Importance="High" Condition=" '@(SourceBuildRepos)' != '' " />
|
|
||||||
<Message Text="--> %(SourceBuildRepos.SourceBuildRepoName) / %(SourceBuildRepos.Sha)" Importance="High" Condition=" '@(SourceBuildRepos)' != '' " />
|
|
||||||
<MSBuild Projects="$(MSBuildProjectFile)"
|
|
||||||
Condition=" '@(SourceBuildRepos)' != '' "
|
|
||||||
Targets="CloneRepoAndDependentsRecursive"
|
|
||||||
Properties="SourceBuildRepoName=%(SourceBuildRepos.SourceBuildRepoName);RepoSha=%(SourceBuildRepos.Sha);RepoUri=%(SourceBuildRepos.Uri)" />
|
|
||||||
|
|
||||||
</Target>
|
|
||||||
|
|
||||||
<Target Name="CleanClonedSource">
|
|
||||||
<ItemGroup>
|
|
||||||
<TarballSrcBinaryExtension Include="
|
|
||||||
.dll;
|
|
||||||
.Dll;
|
|
||||||
.exe;
|
|
||||||
.pdb;
|
|
||||||
.mdb;
|
|
||||||
.zip;
|
|
||||||
.nupkg" />
|
|
||||||
|
|
||||||
<TarballSrcBinaryToRemove Include="$(TarballSourceDir)**\*%(TarballSrcBinaryExtension.Identity)" />
|
|
||||||
|
|
||||||
<!-- Runtime coreclr and installer parts have empty placeholder PDB files. Keep them. -->
|
|
||||||
<TarballSrcBinaryToRemove Remove="
|
|
||||||
$(TarballSourceDir)runtime*\src\coreclr\.nuget\**\*%(TarballSrcBinaryExtension.Identity);
|
|
||||||
$(TarballSourceDir)runtime*\src\installer\pkg\**\*%(TarballSrcBinaryExtension.Identity)" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<Message Importance="Normal" Text="Deleting checked in binary files: @(TarballSrcBinaryToRemove, ' ')" />
|
|
||||||
<Delete Files="@(TarballSrcBinaryToRemove)" />
|
|
||||||
</Target>
|
|
||||||
|
|
||||||
<Target Name="RestoreTextOnlyPackages">
|
|
||||||
<PropertyGroup>
|
|
||||||
<TextOnlyPackageRestoreDir>$(ArtifactsDir)text-only-packages/</TextOnlyPackageRestoreDir>
|
|
||||||
<TextOnlyPackageTarballDir>$(TarballRootDir)packages/text-only/</TextOnlyPackageTarballDir>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
<Message Text="Restoring text only packages..." Importance="High" />
|
|
||||||
|
|
||||||
<MSBuild Projects="$(RepoRoot)src/SourceBuild/Arcade/tools/TextOnlyPackages.csproj"
|
|
||||||
Properties="TargetPackagesPath=$(TextOnlyPackageRestoreDir)"
|
|
||||||
Targets="Restore" />
|
|
||||||
</Target>
|
|
||||||
|
|
||||||
<Target Name="CopyTarballContent">
|
|
||||||
<ItemGroup>
|
|
||||||
<TarballContent Include="$(RepoRoot)src/SourceBuild/tarball/content/**/*" />
|
|
||||||
<EngCommonContent Include="$(RepoRoot)eng/common/**/*" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<Copy
|
|
||||||
SourceFiles="@(TarballContent)"
|
|
||||||
DestinationFiles="@(TarballContent->'$(TarballRootDir)%(RecursiveDir)%(Filename)%(Extension)')" />
|
|
||||||
|
|
||||||
<Copy
|
|
||||||
SourceFiles="@(EngCommonContent)"
|
|
||||||
DestinationFiles="@(EngCommonContent->'$(TarballRootDir)eng/common/%(RecursiveDir)%(Filename)%(Extension)')" />
|
|
||||||
|
|
||||||
<PropertyGroup>
|
|
||||||
<ExternalTarballsDir>$(TarballRootDir)packages/archive/</ExternalTarballsDir>
|
|
||||||
<SourceBuiltArtifactsTarballName>Private.SourceBuilt.Artifacts</SourceBuiltArtifactsTarballName>
|
|
||||||
<SourceBuiltPrebuiltsTarballName>Private.SourceBuilt.Prebuilts</SourceBuiltPrebuiltsTarballName>
|
|
||||||
<SourceBuiltArtifactsTarballUrl>https://dotnetcli.azureedge.net/source-built-artifacts/assets/</SourceBuiltArtifactsTarballUrl>
|
|
||||||
<ArchiveArtifactsTextFileName>archiveArtifacts.txt</ArchiveArtifactsTextFileName>
|
|
||||||
<ArchiveArtifactsTextFile>$(ExternalTarballsDir)$(ArchiveArtifactsTextFileName)</ArchiveArtifactsTextFile>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
<MakeDir Directories="$(ExternalTarballsDir)" />
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<ArtifactUrls Include="$(SourceBuiltArtifactsTarballUrl)$(SourceBuiltArtifactsTarballName).$(PrivateSourceBuiltArtifactsPackageVersion).tar.gz" />
|
|
||||||
<ArtifactUrls
|
|
||||||
Include="$(SourceBuiltArtifactsTarballUrl)$(SourceBuiltPrebuiltsTarballName).$(PrivateSourceBuiltPrebuiltsPackageVersion).tar.gz"
|
|
||||||
Condition="'$(PrivateSourceBuiltPrebuiltsPackageVersion)' != ''" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<WriteLinesToFile
|
|
||||||
File="$(ArchiveArtifactsTextFile)"
|
|
||||||
Lines="@(ArtifactUrls)"
|
|
||||||
Overwrite="true" />
|
|
||||||
|
|
||||||
<MakeDir Directories="$(TarballRootDir)packages/prebuilt" />
|
|
||||||
<!-- make sure this directory is persisted through source control, NuGet depends on it existing -->
|
|
||||||
<Exec Command="touch $(TarballRootDir)packages/prebuilt/_" />
|
|
||||||
</Target>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Read directories in which text-only packages have been downloaded and copy content to tarball.
|
|
||||||
-->
|
|
||||||
<Target Name="CopyTextOnlyPackages" DependsOnTargets="RestoreTextOnlyPackages" >
|
|
||||||
|
|
||||||
<ReadLinesFromFile File="$(TextOnlyPackageRestoreDir)/TextOnlyPackageDirectories.txt" Condition="Exists('$(TextOnlyPackageRestoreDir)/TextOnlyPackageDirectories.txt')">
|
|
||||||
<Output TaskParameter="Lines" ItemName="TextOnlyPackageDirectories" />
|
|
||||||
</ReadLinesFromFile>
|
|
||||||
|
|
||||||
<MSBuild Projects="$(MSBuildProjectFile)"
|
|
||||||
Targets="CopySingleTextOnlyDirectory"
|
|
||||||
Properties="TextOnlyDirectory=%(TextOnlyPackageDirectories.Identity);TextOnlyPackageTarballDir=$(TextOnlyPackageTarballDir)" />
|
|
||||||
|
|
||||||
</Target>
|
|
||||||
|
|
||||||
<Target Name="CopySingleTextOnlyDirectory">
|
|
||||||
|
|
||||||
<PropertyGroup>
|
|
||||||
<DirectoryName>$([System.IO.Path]::GetFileName('$(TextOnlyDirectory)'))</DirectoryName>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<TextOnlyPackageContent
|
|
||||||
Include="$(TextOnlyDirectory)/**/*"
|
|
||||||
Exclude="
|
|
||||||
$(TextOnlyDirectory)/**/.nupkg.metadata;
|
|
||||||
$(TextOnlyDirectory)/**/.signature.p7s;
|
|
||||||
$(TextOnlyDirectory)/**/*.nupkg;
|
|
||||||
$(TextOnlyDirectory)/**/*.nupkg.sha512;
|
|
||||||
" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<!-- ttf, woff, woff2, eot are permissible font related content -->
|
|
||||||
<AllowedTextOnlyExtensions Include="
|
|
||||||
.-;
|
|
||||||
.bowerrc;
|
|
||||||
.config;
|
|
||||||
.cs;
|
|
||||||
.cshtml;
|
|
||||||
.csproj;
|
|
||||||
.css;
|
|
||||||
.db;
|
|
||||||
.editorconfig;
|
|
||||||
.env;
|
|
||||||
.env.development;
|
|
||||||
.eot;
|
|
||||||
.fs;
|
|
||||||
.fsproj;
|
|
||||||
.gitignore;
|
|
||||||
.gitkeep;
|
|
||||||
.html;
|
|
||||||
.ico;
|
|
||||||
.js;
|
|
||||||
.json;
|
|
||||||
.map;
|
|
||||||
.md;
|
|
||||||
.nuspec;
|
|
||||||
.otf;
|
|
||||||
.png;
|
|
||||||
.props;
|
|
||||||
.proto;
|
|
||||||
.razor;
|
|
||||||
.sln;
|
|
||||||
.svg;
|
|
||||||
.targets;
|
|
||||||
.ts;
|
|
||||||
.ttf;
|
|
||||||
.tsx;
|
|
||||||
.txt;
|
|
||||||
.vb;
|
|
||||||
.vbproj;
|
|
||||||
.woff;
|
|
||||||
.woff2;
|
|
||||||
browserslist;
|
|
||||||
browserslistrc;
|
|
||||||
LICENSE;" />
|
|
||||||
|
|
||||||
<UnsupportedTextOnlyPackageContent Include="@(TextOnlyPackageContent)" />
|
|
||||||
<UnsupportedTextOnlyPackageContent Remove="$(TextOnlyDirectory)/**/*$([System.String]::Copy('%(AllowedTextOnlyExtensions.Identity)').ToLowerInvariant())" />
|
|
||||||
<UnsupportedTextOnlyPackageContent Remove="$(TextOnlyDirectory)/**/*$([System.String]::Copy('%(AllowedTextOnlyExtensions.Identity)').ToUpperInvariant())" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<Error Text="Unsupported content found in text-only packages: @(UnsupportedTextOnlyPackageContent)" Condition=" '@(UnsupportedTextOnlyPackageContent)' != '' " />
|
|
||||||
|
|
||||||
<Copy
|
|
||||||
SourceFiles="@(TextOnlyPackageContent)"
|
|
||||||
DestinationFiles="@(TextOnlyPackageContent->'$(TextOnlyPackageTarballDir)$(DirectoryName)/%(RecursiveDir)%(Filename)%(Extension)')" />
|
|
||||||
|
|
||||||
</Target>
|
|
||||||
|
|
||||||
</Project>
|
|
|
@ -1,45 +0,0 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
|
||||||
<PropertyGroup>
|
|
||||||
<TargetFrameworks>net7.0</TargetFrameworks>
|
|
||||||
<RestorePackagesPath>$(TargetPackagesPath)</RestorePackagesPath>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
The following text-only packages are ones that are consumed by the installer repo, whose
|
|
||||||
versions are dynamic. These are maintained here so the dynamic version numbers can
|
|
||||||
come from the source (eng/Versions.props). All other more static text-only packages
|
|
||||||
should be added to source-build-reference-packages.
|
|
||||||
-->
|
|
||||||
<ItemGroup>
|
|
||||||
<PackageDownload Include="Microsoft.NET.Sdk.Android.Manifest-$(MauiFeatureBand)" Version="[$(XamarinAndroidWorkloadManifestVersion)]" />
|
|
||||||
<PackageDownload Include="Microsoft.NET.Sdk.iOS.Manifest-$(MauiFeatureBand)" Version="[$(XamarinIOSWorkloadManifestVersion)]" />
|
|
||||||
<PackageDownload Include="Microsoft.NET.Sdk.MacCatalyst.Manifest-$(MauiFeatureBand)" Version="[$(XamarinMacCatalystWorkloadManifestVersion)]" />
|
|
||||||
<PackageDownload Include="Microsoft.NET.Sdk.macOS.Manifest-$(MauiFeatureBand)" Version="[$(XamarinMacOSWorkloadManifestVersion)]" />
|
|
||||||
<PackageDownload Include="Microsoft.NET.Sdk.Maui.Manifest-$(MauiFeatureBand)" Version="[$(MauiWorkloadManifestVersion)]" />
|
|
||||||
<PackageDownload Include="Microsoft.NET.Sdk.tvOS.Manifest-$(MauiFeatureBand)" Version="[$(XamarinTvOSWorkloadManifestVersion)]" />
|
|
||||||
<PackageDownload Include="Microsoft.NET.Workload.Mono.ToolChain.Manifest-8.0.100" Version="[$(MonoWorkloadManifestVersion)]" />
|
|
||||||
<PackageDownload Include="Microsoft.NET.Workload.Emscripten.net6.Manifest-8.0.100" Version="[$(EmscriptenWorkloadManifestVersion)]" />
|
|
||||||
<PackageDownload Include="Microsoft.NET.Workload.Emscripten.net7.Manifest-8.0.100" Version="[$(EmscriptenWorkloadManifestVersion)]" />
|
|
||||||
<PackageDownload Include="Microsoft.NET.Workload.Mono.ToolChain.net6.Manifest-8.0.100" Version="[$(MonoWorkloadManifestVersion)]" />
|
|
||||||
<PackageDownload Include="Microsoft.NET.Workload.Mono.ToolChain.net7.Manifest-8.0.100" Version="[$(MonoWorkloadManifestVersion)]" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Write out directories in which text-only packages are downloaded to be consumed by the "CopyTextOnlyPackages"
|
|
||||||
target.
|
|
||||||
-->
|
|
||||||
<Target Name="WriteTextOnlyDirectoryFile" BeforeTargets="Restore">
|
|
||||||
<ItemGroup>
|
|
||||||
<TextOnlyPackagesDirectories Include="$(TargetPackagesPath)$([System.String]::copy('%(PackageDownload.Identity)').ToLower())" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<PropertyGroup>
|
|
||||||
<TextOnlyPackageDirectoriesContent>@(TextOnlyPackagesDirectories)</TextOnlyPackageDirectoriesContent>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
<WriteLinesToFile
|
|
||||||
Lines="$(TextOnlyPackageDirectoriesContent)"
|
|
||||||
File="$(TargetPackagesPath)/TextOnlyPackageDirectories.txt"
|
|
||||||
Overwrite="true" />
|
|
||||||
</Target>
|
|
||||||
</Project>
|
|
|
@ -1,10 +0,0 @@
|
||||||
<Project>
|
|
||||||
<Import Project="../Arcade/tools/SourceBuildArcadeTarball.targets" />
|
|
||||||
|
|
||||||
<PropertyGroup>
|
|
||||||
<TarballFilePath>$(ArtifactsShippingPackagesDir)dotnet-sdk-source-$(Version).tar.gz</TarballFilePath>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
<Target Name="Build" DependsOnTargets="CreateSourceTarball" />
|
|
||||||
|
|
||||||
</Project>
|
|
|
@ -142,7 +142,6 @@
|
||||||
<ConflictingPackageReportDir>$(BaseOutputPath)conflict-report/</ConflictingPackageReportDir>
|
<ConflictingPackageReportDir>$(BaseOutputPath)conflict-report/</ConflictingPackageReportDir>
|
||||||
<PrebuiltBurndownDataFile>$(PackageReportDir)PrebuiltBurndownData.csv</PrebuiltBurndownDataFile>
|
<PrebuiltBurndownDataFile>$(PackageReportDir)PrebuiltBurndownData.csv</PrebuiltBurndownDataFile>
|
||||||
<ExternalTarballsDir>$(ProjectDir)packages/archive/</ExternalTarballsDir>
|
<ExternalTarballsDir>$(ProjectDir)packages/archive/</ExternalTarballsDir>
|
||||||
<TextOnlyPackageBaseDir>$(ProjectDir)packages/text-only/</TextOnlyPackageBaseDir>
|
|
||||||
<ReferencePackagesDir>$(ProjectDir)packages/reference/</ReferencePackagesDir>
|
<ReferencePackagesDir>$(ProjectDir)packages/reference/</ReferencePackagesDir>
|
||||||
<SourceBuiltArtifactsTarballName>Private.SourceBuilt.Artifacts</SourceBuiltArtifactsTarballName>
|
<SourceBuiltArtifactsTarballName>Private.SourceBuilt.Artifacts</SourceBuiltArtifactsTarballName>
|
||||||
<SourceBuiltPrebuiltsTarballName>Private.SourceBuilt.Prebuilts</SourceBuiltPrebuiltsTarballName>
|
<SourceBuiltPrebuiltsTarballName>Private.SourceBuilt.Prebuilts</SourceBuiltPrebuiltsTarballName>
|
||||||
|
|
|
@ -27,7 +27,6 @@
|
||||||
BuildLeakDetection;
|
BuildLeakDetection;
|
||||||
ExtractToolPackage;
|
ExtractToolPackage;
|
||||||
GenerateRootFs;
|
GenerateRootFs;
|
||||||
BuildTextOnlyPackages;
|
|
||||||
PoisonPrebuiltPackages" />
|
PoisonPrebuiltPackages" />
|
||||||
</Target>
|
</Target>
|
||||||
|
|
||||||
|
@ -154,32 +153,6 @@
|
||||||
<Exec Condition="'$(Platform)' == 'armel'" Command="$(ArmEnvironmentVariables) $(ProjectDir)cross/armel/tizen-build-rootfs.sh" />
|
<Exec Condition="'$(Platform)' == 'armel'" Command="$(ArmEnvironmentVariables) $(ProjectDir)cross/armel/tizen-build-rootfs.sh" />
|
||||||
</Target>
|
</Target>
|
||||||
|
|
||||||
<Target Name="BuildTextOnlyPackages"
|
|
||||||
Inputs="$(MSBuildProjectFullPath)"
|
|
||||||
Outputs="$(CompletedSemaphorePath)BuildTextOnlyPackages.complete">
|
|
||||||
<Message Importance="High" Text="[$([System.DateTime]::Now.ToString('HH:mm:ss.ff'))] Packing text-only packages." />
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<TextOnlyPackageNuspecFile Include="$(TextOnlyPackageBaseDir)/**/*.nuspec" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<Message Importance="High" Text="Found text only package nuspec file: %(TextOnlyPackageNuspecFile.Identity)" />
|
|
||||||
|
|
||||||
<ReplaceTextInFile
|
|
||||||
InputFile="%(TextOnlyPackageNuspecFile.Identity)"
|
|
||||||
OldText="</package>"
|
|
||||||
NewText="<files><file src=".\**\*"/></files></package>" />
|
|
||||||
|
|
||||||
<NugetPack
|
|
||||||
Nuspecs="%(TextOnlyPackageNuspecFile.Identity)"
|
|
||||||
OutputDirectory="$(SourceBuiltPackagesPath)"
|
|
||||||
ExcludeEmptyDirectories="false"
|
|
||||||
CreateSymbolPackage="false" />
|
|
||||||
|
|
||||||
<Message Importance="High" Text="[$([System.DateTime]::Now.ToString('HH:mm:ss.ff'))] Done packing text-only packages." />
|
|
||||||
<WriteLinesToFile File="$(CompletedSemaphorePath)BuildTextOnlyPackages.complete" Overwrite="true" />
|
|
||||||
</Target>
|
|
||||||
|
|
||||||
<Target Name="ExtractToolPackage"
|
<Target Name="ExtractToolPackage"
|
||||||
DependsOnTargets="UnpackTarballs;BuildXPlatTasks"
|
DependsOnTargets="UnpackTarballs;BuildXPlatTasks"
|
||||||
Inputs="$(MSBuildProjectFullPath)"
|
Inputs="$(MSBuildProjectFullPath)"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue