diff --git a/build.proj b/build.proj index 2edac3d8e1..56f2c5599d 100644 --- a/build.proj +++ b/build.proj @@ -17,6 +17,7 @@ + diff --git a/dir.props b/dir.props index 9f6f8e636e..d6d09c3b9e 100644 --- a/dir.props +++ b/dir.props @@ -62,12 +62,14 @@ $(IntermediatePath)RestoreSources.props $(IntermediatePath)PackageVersions.props $(BaseOutputPath)logs/ + $(BaseOutputPath)msbuild-debug/ $(BaseOutputPath)git-info/ $(ProjectDir)git-info/ $(BaseOutputPath)prebuilt-report/ $(PackageReportDir)prebuilt-usage.xml + $(PackageReportDir)all-project-assets-json-files.zip $(PackageReportDir)prodcon-build.xml $(PackageReportDir)poisoned.txt $(BaseOutputPath)conflict-report/ diff --git a/netci.groovy b/netci.groovy index e7af288a82..3e6736debb 100644 --- a/netci.groovy +++ b/netci.groovy @@ -13,7 +13,9 @@ def addArchival(def job) { // Grab these logs from all of those locations. [ "", "source-build/", "tarball-output/"].each { logRoot -> archivalSettings.addFiles("${logRoot}bin/logs/*") - archivalSettings.addFiles("${logRoot}bin/prebuilt-report/*") + archivalSettings.addFiles("${logRoot}bin/prebuilt-report/**/*") + archivalSettings.addFiles("${logRoot}bin/conflict-report/**/*") + archivalSettings.addFiles("${logRoot}bin/msbuild-debug/**/*") archivalSettings.addFiles("${logRoot}src/**/*.binlog") archivalSettings.addFiles("${logRoot}src/**/*.log") archivalSettings.addFiles("${logRoot}init-tools.log") @@ -58,11 +60,11 @@ def addBuildStepsAndSetMachineAffinity(def job, String os, String configuration) steps { if (os == "Windows_NT") { batchFile("git submodule update --init --recursive"); - batchFile(".\\build.cmd /p:Configuration=${configuration} ${loggingOptions}") + batchFile(".\\build.cmd /p:Configuration=${configuration} /p:FailOnPrebuiltBaselineError=true ${loggingOptions}") } else { shell("git submodule update --init --recursive"); - shell("./build.sh /p:Configuration=${configuration} ${loggingOptions}"); + shell("./build.sh /p:Configuration=${configuration} /p:FailOnPrebuiltBaselineError=true ${loggingOptions}"); smokeTestExcludes = ""; if (os == "Fedora24" || os == "OSX10.12") { // Dev certs doesn't seem to work in these platforms. https://github.com/dotnet/source-build/issues/560 @@ -132,7 +134,7 @@ def addPushJob(String project, String branch, String os, String configuration) shell("cd ./source-build;./build.sh /p:ArchiveDownloadedPackages=true /p:Configuration=${configuration} ${loggingOptions}"); shell("cd ./source-build;./build-source-tarball.sh ../tarball-output --skip-build"); - shell("cd ./tarball-output;./build.sh /p:Configuration=${configuration} ${loggingOptions}") + shell("cd ./tarball-output;./build.sh /p:Configuration=${configuration} /p:FailOnPrebuiltBaselineError=true ${loggingOptions}") shell("cd ./tarball-output;./smoke-test.sh --minimal --configuration ${configuration}") } } @@ -178,13 +180,13 @@ def addPushJob(String project, String branch, String os, String configuration) steps{ shell("cd ./source-build;git submodule update --init --recursive"); // First build the product itself - shell("docker run -u=\"\$(id -u):\$(id -g)\" -t --sig-proxy=true -e HOME=/opt/code/home -v \$(pwd)/source-build:/opt/code --rm -w /opt/code ${imageName} /opt/code/build.sh /p:ArchiveDownloadedPackages=true /p:Configuration=${configuration} /p:ContinueOnPrebuiltBaselineError=true ${loggingOptions}"); + shell("docker run -u=\"\$(id -u):\$(id -g)\" -t --sig-proxy=true -e HOME=/opt/code/home -v \$(pwd)/source-build:/opt/code --rm -w /opt/code ${imageName} /opt/code/build.sh /p:ArchiveDownloadedPackages=true /p:Configuration=${configuration} ${loggingOptions}"); // Have to make this directory before volume-sharing it unlike non-docker build - existing directory is really only a warning in build-source-tarball.sh shell("mkdir tarball-output"); // now build the tarball shell("docker run -u=\"\$(id -u):\$(id -g)\" -t --sig-proxy=true -e HOME=/opt/code/home --network none -v \$(pwd)/source-build:/opt/code -v \$(pwd)/tarball-output:/opt/tarball --rm -w /opt/code ${imageName} /opt/code/build-source-tarball.sh /opt/tarball --skip-build"); // now build from the tarball offline and without access to the regular non-tarball build - shell("docker run -u=\"\$(id -u):\$(id -g)\" -t --sig-proxy=true -e HOME=/opt/tarball/home --network none -v \$(pwd)/tarball-output:/opt/tarball --rm -w /opt/tarball ${imageName} /opt/tarball/build.sh /p:Configuration=${configuration} ${loggingOptions}"); + shell("docker run -u=\"\$(id -u):\$(id -g)\" -t --sig-proxy=true -e HOME=/opt/tarball/home --network none -v \$(pwd)/tarball-output:/opt/tarball --rm -w /opt/tarball ${imageName} /opt/tarball/build.sh /p:Configuration=${configuration} /p:FailOnPrebuiltBaselineError=true ${loggingOptions}"); // finally, run a smoke-test on the result shell("docker run -u=\"\$(id -u):\$(id -g)\" -t --sig-proxy=true -e HOME=/opt/tarball/home -v \$(pwd)/tarball-output:/opt/tarball --rm -w /opt/tarball ${imageName} /opt/tarball/smoke-test.sh --minimal --configuration ${configuration}"); } diff --git a/repos/dir.props b/repos/dir.props index bea8d507cd..e5b99b25d1 100644 --- a/repos/dir.props +++ b/repos/dir.props @@ -56,6 +56,9 @@ + + + diff --git a/repos/dir.targets b/repos/dir.targets index 04cd9f7237..d3386477d8 100644 --- a/repos/dir.targets +++ b/repos/dir.targets @@ -192,11 +192,13 @@ <_ReportDir>$(ConflictingPackageReportDir)before-$(RepositoryName)/ <_ReportDataFile>$(_ReportDir)usage.xml + <_ProjectAssetsJsonArchiveFile>$(_ReportDir)all-project-assets-json-files.zip + DataFile="$(_ReportDataFile)" + ProjectAssetsJsonArchiveFile="$(_ProjectAssetsJsonArchiveFile)" /> @@ -385,7 +387,8 @@ TargetRid="$(TargetRid)" ProjectDirectories="@(ProjectDirectories)" RootDir="$(ProjectDir)" - DataFile="$(PackageReportDataFile)" /> + DataFile="$(PackageReportDataFile)" + ProjectAssetsJsonArchiveFile="$(ProjectAssetsJsonArchiveFile)" /> @@ -407,7 +410,12 @@ $(BaselineDataFile)offline.xml $(BaselineDataFile)online.xml - false + false + + + + false + true + /// If passed, the path of the archive file to generate that includes a copy of all + /// project.asset.json files found. + /// + public string ProjectAssetsJsonArchiveFile { get; set; } + public override bool Execute() { DateTime startTime = DateTime.Now; @@ -124,6 +131,35 @@ public override bool Execute() "project.assets.json", SearchOption.AllDirectories); + if (!string.IsNullOrEmpty(ProjectAssetsJsonArchiveFile)) + { + Log.LogMessage(MessageImportance.Low, "Archiving project.assets.json files..."); + + Directory.CreateDirectory(Path.GetDirectoryName(ProjectAssetsJsonArchiveFile)); + + using (var projectAssetArchive = new ZipArchive( + File.Open( + ProjectAssetsJsonArchiveFile, + FileMode.Create, + FileAccess.ReadWrite), + ZipArchiveMode.Create)) + { + // Only one entry can be open at a time, so don't do this during the Parallel + // ForEach later. + foreach (var file in assetFiles) + { + string relativePath = file.Substring(RootDir.Length); + using (var stream = File.OpenRead(file)) + using (Stream entryWriter = projectAssetArchive + .CreateEntry(relativePath, CompressionLevel.Optimal) + .Open()) + { + stream.CopyTo(entryWriter); + } + } + } + } + Log.LogMessage(MessageImportance.Low, "Reading usage info..."); var usages = new ConcurrentBag();