From cccfe3dd570bb44816caee913f929455f1ba554a Mon Sep 17 00:00:00 2001 From: Nate McMaster Date: Wed, 1 Nov 2017 13:03:46 -0700 Subject: [PATCH] Use submodules for source dependencies (#621) As a part of making builds more reproducible, we want to start committing the exact sha of source dependencies used to build aspnetcore. This implements that using git submodules, and removes targets that were previously used to clone source on demand. Initial submodule status: Antiforgery => e1884586 AzureIntegration => c998d74e BasicMiddleware => 9f3ed006 BrowserLink => 7e2ff85a Caching => c6a9cbbe Common => 062ad3e7 CORS => 8fd36866 DataProtection => 49b2e22a DependencyInjection => 88297e3c Diagnostics => 7ac0e06a DotNet=>ols => 1836201b EntityFrameworkCore => e70d7dae EventNotification => 3f881f18 FileSystem => 51e14a62 Hosting => 82ccf4f0 HtmlAbstractions => d687617a HttpAbstractions => c0f93723 HttpSysServer => 02331040 Identity => 52dfb021 JavaScriptServices => e583a17e JsonPatch => e453fafa KestrelHttpServer => 0c34523e Logging => e8e3e707 MetaPackages => d63542ca Mvc => 2e4bc548 Razor => 6c7551d9 Routing => bb413c6a Security => 88cb3df0 SignalR => 2419867d [auto-updated: submodules] --- .gitignore | 1 - .gitmodules | 180 ++++++++++++++++++++++++++ README.md | 53 ++------ build/Repositories.props | 56 --------- build/RepositoryBuild.targets | 5 +- build/repo.props | 1 + build/repo.targets | 181 +++------------------------ build/submodules.props | 55 ++++++++ build/tasks/BuildGraph/Repository.cs | 2 +- build/tasks/CalculateBuildGraph.cs | 2 +- modules/Antiforgery | 1 + modules/AzureIntegration | 1 + modules/BasicMiddleware | 1 + modules/BrowserLink | 1 + modules/CORS | 1 + modules/Caching | 1 + modules/Common | 1 + modules/Configuration | 1 + modules/DataProtection | 1 + modules/DependencyInjection | 1 + modules/Diagnostics | 1 + modules/DotNetTools | 1 + modules/EntityFrameworkCore | 1 + modules/EventNotification | 1 + modules/FileSystem | 1 + modules/Hosting | 1 + modules/HtmlAbstractions | 1 + modules/HttpAbstractions | 1 + modules/HttpClientFactory | 1 + modules/HttpSysServer | 1 + modules/IISIntegration | 1 + modules/Identity | 1 + modules/JavaScriptServices | 1 + modules/JsonPatch | 1 + modules/KestrelHttpServer | 1 + modules/Localization | 1 + modules/Logging | 1 + modules/MetaPackages | 1 + modules/Microsoft.Data.Sqlite | 1 + modules/MusicStore | 1 + modules/Mvc | 1 + modules/MvcPrecompilation | 1 + modules/Options | 1 + modules/Proxy | 1 + modules/Razor | 1 + modules/ResponseCaching | 1 + modules/Routing | 1 + modules/Scaffolding | 1 + modules/Security | 1 + modules/ServerTests | 1 + modules/Session | 1 + modules/SignalR | 1 + modules/StaticFiles | 1 + modules/Testing | 1 + modules/WebSockets | 1 + scripts/UpdateBuildTools.ps1 | 2 +- scripts/UpdateRepos.ps1 | 4 +- scripts/UpdateSubmodules.ps1 | 72 ++++++----- scripts/common.psm1 | 22 ++-- 59 files changed, 370 insertions(+), 311 deletions(-) create mode 100644 .gitmodules delete mode 100644 build/Repositories.props create mode 100644 build/submodules.props create mode 160000 modules/Antiforgery create mode 160000 modules/AzureIntegration create mode 160000 modules/BasicMiddleware create mode 160000 modules/BrowserLink create mode 160000 modules/CORS create mode 160000 modules/Caching create mode 160000 modules/Common create mode 160000 modules/Configuration create mode 160000 modules/DataProtection create mode 160000 modules/DependencyInjection create mode 160000 modules/Diagnostics create mode 160000 modules/DotNetTools create mode 160000 modules/EntityFrameworkCore create mode 160000 modules/EventNotification create mode 160000 modules/FileSystem create mode 160000 modules/Hosting create mode 160000 modules/HtmlAbstractions create mode 160000 modules/HttpAbstractions create mode 160000 modules/HttpClientFactory create mode 160000 modules/HttpSysServer create mode 160000 modules/IISIntegration create mode 160000 modules/Identity create mode 160000 modules/JavaScriptServices create mode 160000 modules/JsonPatch create mode 160000 modules/KestrelHttpServer create mode 160000 modules/Localization create mode 160000 modules/Logging create mode 160000 modules/MetaPackages create mode 160000 modules/Microsoft.Data.Sqlite create mode 160000 modules/MusicStore create mode 160000 modules/Mvc create mode 160000 modules/MvcPrecompilation create mode 160000 modules/Options create mode 160000 modules/Proxy create mode 160000 modules/Razor create mode 160000 modules/ResponseCaching create mode 160000 modules/Routing create mode 160000 modules/Scaffolding create mode 160000 modules/Security create mode 160000 modules/ServerTests create mode 160000 modules/Session create mode 160000 modules/SignalR create mode 160000 modules/StaticFiles create mode 160000 modules/Testing create mode 160000 modules/WebSockets mode change 100644 => 100755 scripts/UpdateRepos.ps1 diff --git a/.gitignore b/.gitignore index 5e36a0b23c..75392f570d 100644 --- a/.gitignore +++ b/.gitignore @@ -16,7 +16,6 @@ StyleCop.Cache node_modules *.snk .nuget -.r .deps global.json *.binlog diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000000..ff191b1b02 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,180 @@ +[submodule "modules/Antiforgery"] + path = modules/Antiforgery + url = https://github.com/aspnet/Antiforgery.git + branch = dev +[submodule "modules/AzureIntegration"] + path = modules/AzureIntegration + url = https://github.com/aspnet/AzureIntegration.git + branch = dev +[submodule "modules/BasicMiddleware"] + path = modules/BasicMiddleware + url = https://github.com/aspnet/BasicMiddleware.git + branch = dev +[submodule "modules/BrowserLink"] + path = modules/BrowserLink + url = https://github.com/aspnet/BrowserLink.git + branch = dev +[submodule "modules/Caching"] + path = modules/Caching + url = https://github.com/aspnet/Caching.git + branch = dev +[submodule "modules/Common"] + path = modules/Common + url = https://github.com/aspnet/Common.git + branch = dev +[submodule "modules/Configuration"] + path = modules/Configuration + url = https://github.com/aspnet/Configuration.git + branch = dev +[submodule "modules/CORS"] + path = modules/CORS + url = https://github.com/aspnet/CORS.git + branch = dev +[submodule "modules/DataProtection"] + path = modules/DataProtection + url = https://github.com/aspnet/DataProtection.git + branch = dev +[submodule "modules/DependencyInjection"] + path = modules/DependencyInjection + url = https://github.com/aspnet/DependencyInjection.git + branch = dev +[submodule "modules/Diagnostics"] + path = modules/Diagnostics + url = https://github.com/aspnet/Diagnostics.git + branch = dev +[submodule "modules/DotNetTools"] + path = modules/DotNetTools + url = https://github.com/aspnet/DotNetTools.git + branch = dev +[submodule "modules/EntityFrameworkCore"] + path = modules/EntityFrameworkCore + url = https://github.com/aspnet/EntityFrameworkCore.git + branch = dev +[submodule "modules/EventNotification"] + path = modules/EventNotification + url = https://github.com/aspnet/EventNotification.git + branch = dev +[submodule "modules/FileSystem"] + path = modules/FileSystem + url = https://github.com/aspnet/FileSystem.git + branch = dev +[submodule "modules/Hosting"] + path = modules/Hosting + url = https://github.com/aspnet/Hosting.git + branch = dev +[submodule "modules/HtmlAbstractions"] + path = modules/HtmlAbstractions + url = https://github.com/aspnet/HtmlAbstractions.git + branch = dev +[submodule "modules/HttpAbstractions"] + path = modules/HttpAbstractions + url = https://github.com/aspnet/HttpAbstractions.git + branch = dev +[submodule "modules/HttpClientFactory"] + path = modules/HttpClientFactory + url = https://github.com/aspnet/HttpClientFactory.git + branch = dev +[submodule "modules/HttpSysServer"] + path = modules/HttpSysServer + url = https://github.com/aspnet/HttpSysServer.git + branch = dev +[submodule "modules/Identity"] + path = modules/Identity + url = https://github.com/aspnet/Identity.git + branch = dev +[submodule "modules/IISIntegration"] + path = modules/IISIntegration + url = https://github.com/aspnet/IISIntegration.git + branch = dev +[submodule "modules/JavaScriptServices"] + path = modules/JavaScriptServices + url = https://github.com/aspnet/JavaScriptServices.git + branch = dev +[submodule "modules/JsonPatch"] + path = modules/JsonPatch + url = https://github.com/aspnet/JsonPatch.git + branch = dev +[submodule "modules/KestrelHttpServer"] + path = modules/KestrelHttpServer + url = https://github.com/aspnet/KestrelHttpServer.git + branch = dev +[submodule "modules/Localization"] + path = modules/Localization + url = https://github.com/aspnet/Localization.git + branch = dev +[submodule "modules/Logging"] + path = modules/Logging + url = https://github.com/aspnet/Logging.git + branch = dev +[submodule "modules/MetaPackages"] + path = modules/MetaPackages + url = https://github.com/aspnet/MetaPackages.git + branch = dev +[submodule "modules/Microsoft.Data.Sqlite"] + path = modules/Microsoft.Data.Sqlite + url = https://github.com/aspnet/Microsoft.Data.Sqlite.git + branch = dev +[submodule "modules/MusicStore"] + path = modules/MusicStore + url = https://github.com/aspnet/MusicStore.git + branch = dev +[submodule "modules/Mvc"] + path = modules/Mvc + url = https://github.com/aspnet/Mvc.git + branch = dev +[submodule "modules/MvcPrecompilation"] + path = modules/MvcPrecompilation + url = https://github.com/aspnet/MvcPrecompilation.git + branch = dev +[submodule "modules/Options"] + path = modules/Options + url = https://github.com/aspnet/Options.git + branch = dev +[submodule "modules/Proxy"] + path = modules/Proxy + url = https://github.com/aspnet/Proxy.git + branch = dev +[submodule "modules/Razor"] + path = modules/Razor + url = https://github.com/aspnet/Razor.git + branch = dev +[submodule "modules/ResponseCaching"] + path = modules/ResponseCaching + url = https://github.com/aspnet/ResponseCaching.git + branch = dev +[submodule "modules/Routing"] + path = modules/Routing + url = https://github.com/aspnet/Routing.git + branch = dev +[submodule "modules/Scaffolding"] + path = modules/Scaffolding + url = https://github.com/aspnet/Scaffolding.git + branch = dev +[submodule "modules/Security"] + path = modules/Security + url = https://github.com/aspnet/Security.git + branch = dev +[submodule "modules/ServerTests"] + path = modules/ServerTests + url = https://github.com/aspnet/ServerTests.git + branch = dev +[submodule "modules/Session"] + path = modules/Session + url = https://github.com/aspnet/Session.git + branch = dev +[submodule "modules/SignalR"] + path = modules/SignalR + url = https://github.com/aspnet/SignalR.git + branch = dev +[submodule "modules/StaticFiles"] + path = modules/StaticFiles + url = https://github.com/aspnet/StaticFiles.git + branch = dev +[submodule "modules/Testing"] + path = modules/Testing + url = https://github.com/aspnet/Testing.git + branch = dev +[submodule "modules/WebSockets"] + path = modules/WebSockets + url = https://github.com/aspnet/WebSockets.git + branch = dev diff --git a/README.md b/README.md index 1b049850fa..0a1bc63329 100644 --- a/README.md +++ b/README.md @@ -1,51 +1,16 @@ Universe -========= +======== -This repo is to build the whole ASP.NET Core stack. +Build infrastructure used to produce the whole ASP.NET Core stack. ## Getting started - git clone git@github.com:aspnet/Universe.git - cd Universe - build +``` +git clone --recursive https://github.com/aspnet/Universe.git +cd Universe +./build.cmd +``` -The default build will clone all known repos as subfolders. The clone will be the dev branch. +## More info -If the build is run subsequently it will `git pull` the dev branch rather than clone. Note! This will cause a -merge if you have local changes. We may tweak how this is done if it causes problems. - -After folders are up to date, `build.cmd compile` is executed in each of the enlisted subfolders. - -If there are errors the build will continue with the next repo. - -The last output is a list of which repos succeeded or failed. - -## build targets - -`build pull` will only clone or pull all repos. - -`build compile` this is the default target, described above. - -`build install` works like build compile, but will run `build.cmd install` in each subfolder. This means -any nupkg produced by the repo are copied into the local `.nuget` folder to be picked up by subsequent -repositories. The subfolders are built in dependency order. - - -## Verifying cross repo changes -You can use the Universe repo to preemptively verify and prepare follow ups for your breaking changes: -- Clone the Universe repo https://github.com/aspnet/Universe -- Add a branch attribute to the `build\Repositories.props` file to point to your branch in the repo you’re trying to verify. For instance, - `` - becomes - `` - **Note**: This branch should have been pushed to the server already. -- Run from the root of Universe - `build.cmd /p:CompileOnly=true /p:ShallowClone=true /p:BuildGraphOf=HtmlAbstractions` - - This should clone and compile all the repos against your breaking changes branch. If you’d like to additionally run tests in all your dependencies (this will take a while and also you could hit some flaky tests), remove the first parameter: - `build.cmd /p:ShallowClone=true /p:BuildGraphOf=HtmlAbstractions` - - The ShallowClone property speeds up git clone and is optional in both cases. - - -This project is part of ASP.NET Core. You can find samples, documentation and getting started instructions for ASP.NET Core at the [Home](https://github.com/aspnet/home) repo. +This project is part of ASP.NET Core. You can find samples, documentation and getting started instructions for ASP.NET Core at the [Home](https://github.com/aspnet/home) repo. \ No newline at end of file diff --git a/build/Repositories.props b/build/Repositories.props deleted file mode 100644 index 165c37c611..0000000000 --- a/build/Repositories.props +++ /dev/null @@ -1,56 +0,0 @@ - - - - dev - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/build/RepositoryBuild.targets b/build/RepositoryBuild.targets index 119cc5b8b1..13b2d979b0 100644 --- a/build/RepositoryBuild.targets +++ b/build/RepositoryBuild.targets @@ -6,8 +6,7 @@ %(RepositoryToBuildInOrder.Identity) RepositoryToBuild=%(RepositoryToBuildInOrder.Identity); - BuildRepositoryRoot=%(RepositoryToBuildInOrder.RepositoryPath)\; - CommitHash=%(RepositoryToBuildInOrder.Commit) + BuildRepositoryRoot=$([MSBuild]::NormalizeDirectory(%(RepositoryToBuildInOrder.RootPath))) @@ -35,7 +34,7 @@ $(RepositoryBuildArguments) '/p:DotNetPackageVersionPropsPath=$(GeneratedPackageVersionPropsPath)' $(RepositoryBuildArguments) '/p:CustomBeforeKoreBuildProps=$(MSBuildThisFileDirectory)repobuild\BeforeKoreBuild.props' $(RepositoryBuildArguments) '/p:CustomAfterKoreBuildTargets=$(MSBuildThisFileDirectory)repobuild\AfterKoreBuild.targets' - $(RepositoryBuildArguments) /p:BuildNumber=$(BuildNumber) /p:Configuration=$(Configuration) /p:CommitHash=$(CommitHash) + $(RepositoryBuildArguments) /p:BuildNumber=$(BuildNumber) /p:Configuration=$(Configuration) $(RepositoryBuildArguments) /noconsolelogger '/l:RepoTasks.FlowLogger,$(MSBuildThisFileDirectory)tasks\bin\publish\RepoTasks.dll;Summary;FlowId=$(RepositoryToBuild)' $(_RepositoryBuildTargets) $(RepositoryBuildArguments) diff --git a/build/repo.props b/build/repo.props index 40b83474b9..3c0277344d 100644 --- a/build/repo.props +++ b/build/repo.props @@ -1,6 +1,7 @@ + diff --git a/build/repo.targets b/build/repo.targets index 856c87bdd7..d907ee1eaf 100644 --- a/build/repo.targets +++ b/build/repo.targets @@ -3,20 +3,13 @@ + $(RepositoryRoot)modules\ $(ArtifactsDir)lineups\ - false - <_CloneRepositoryRoot>$(RepositoryRoot).r\ <_DependencyBuildDirectory>$(RepositoryRoot).deps\build\ <_DependencyLineupDir>$(RepositoryRoot).deps\lineups\ <_DependencyPackagesDirectory>$(_DependencyBuildDirectory) <_RestoreGraphSpecsDirectory>$(IntermediateDir)package-specs\ - <_RepositoryListFileName>Repositories.props - <_DefaultRepositoryList>$(MSBuildThisFileDirectory)$(_RepositoryListFileName) - <_DependencyRepositoryList>$(_DependencyBuildDirectory)$(_RepositoryListFileName) - <_RepositoryListToImport Condition="Exists('$(_DependencyRepositoryList)')">$(_DependencyRepositoryList) - <_RepositoryListToImport Condition="!Exists('$(_DependencyRepositoryList)')">$(_DefaultRepositoryList) - <_RepositoryBuildTargets Condition="'$(_RepositoryBuildTargets)'=='' AND '$(CompileOnly)'=='true'">/t:Package /t:VerifyPackages <_RepositoryBuildTargets Condition="'$(_RepositoryBuildTargets)'==''">/t:Build @@ -26,20 +19,16 @@ $(IntermediateDir)ext\ $(IntermediateDir)dependencies.props - $(PrepareDependsOn);VerifyPackageArtifactConfig;CleanArtifacts;CleanUniverseArtifacts + $(PrepareDependsOn);VerifyPackageArtifactConfig;CleanArtifacts;PrepareOutputPaths $(RestoreDependsOn);RestoreExternalDependencies - $(CleanDependsOn);CleanArtifacts;CleanUniverseArtifacts - $(CompileDependsOn);CloneRepositories;BuildRepositories + $(CleanDependsOn);CleanArtifacts + $(CompileDependsOn);BuildRepositories $(PackageDependsOn);CopyPackagesByCategory $(VerifyDependsOn);VerifyCoherentVersions - - - - - - + + @@ -49,21 +38,24 @@ + + + - + @@ -113,104 +105,24 @@ - - - - - - - <_CloneOverHttps>true - <_CloneOverHttps Condition="'$(UniverseCloneUrl)' != '' AND !$(UniverseCloneUrl.StartsWith('https'))">false - - - - - + - - - <_CloneRepository Include="$(MSBuildProjectFullPath)"> - - CloneRepository=%(Repository.Identity); - CloneUrl=%(Repository.CloneUrl); - CloneBranch=%(Repository.Branch); - CloneRepositoryCommit=%(Repository.Commit); - UseGateBranch=$(UseGateBranch) - - - - - - - - - - - - - - - false - <_CloneArguments>git clone --quiet $(CloneUrl) $(CloneRepository) - <_CloneArguments Condition="'$(ShallowClone)'=='true'">$(_CloneArguments) --depth 1 - - - - - - - - - - - - - - - + DependsOnTargets="_PrepareRepositories;_UpdateNuGetConfig;_GenerateBuildGraph;_BuildRepositories" /> - + @@ -219,8 +131,8 @@ + $(SubmoduleRoot)**\*.csproj; + $(SubmoduleRoot)**\dependencies.props" /> @@ -246,7 +158,7 @@ @@ -254,7 +166,7 @@ @@ -289,57 +201,4 @@ ExternalDependencies="@(ExternalDependency)" /> - - - $(BuildDir)$(_RepositoryListFileName) - - - - - - - - - - - - - <_RepositoryName>$([System.String]::new('%(Repository.Identity)').Replace('.', '_')) - <_CloneUrl>$([System.Environment]::GetEnvironmentVariable("BUILD_VCS_URL_$(_RepositoryName)")) - <_CommitHash>$([System.Environment]::GetEnvironmentVariable("BUILD_VCS_NUMBER_$(_RepositoryName)")) - - - - - - - - - - - - - - - - <_CommitHash> - <_CloneUrl> - - - diff --git a/build/submodules.props b/build/submodules.props new file mode 100644 index 0000000000..2b15369e0c --- /dev/null +++ b/build/submodules.props @@ -0,0 +1,55 @@ + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build/tasks/BuildGraph/Repository.cs b/build/tasks/BuildGraph/Repository.cs index c1e3e5c619..a72137739e 100644 --- a/build/tasks/BuildGraph/Repository.cs +++ b/build/tasks/BuildGraph/Repository.cs @@ -35,7 +35,7 @@ namespace RepoTools.BuildGraph Parallel.For(0, repositoryPaths.Count, new ParallelOptions { MaxDegreeOfParallelism = 6 }, i => { var repositoryPath = repositoryPaths[i]; - var repositoryName = Path.GetFileName(repositoryPath); + var repositoryName = Path.GetFileName(repositoryPath.TrimEnd(new [] { '\\', '/' })); var repository = Read(provider, repositoryName, repositoryPath); repositories[i] = repository; }); diff --git a/build/tasks/CalculateBuildGraph.cs b/build/tasks/CalculateBuildGraph.cs index 0c574f41dd..5d922f7d39 100644 --- a/build/tasks/CalculateBuildGraph.cs +++ b/build/tasks/CalculateBuildGraph.cs @@ -39,7 +39,7 @@ namespace RepoTasks { var graphSpecProvider = new DependencyGraphSpecProvider(PackageSpecsDirectory.Trim()); - var repositoryPaths = Repositories.Select(r => r.GetMetadata("RepositoryPath")).ToList(); + var repositoryPaths = Repositories.Select(r => r.GetMetadata("RootPath")).ToList(); var repositories = Repository.ReadAllRepositories(repositoryPaths, graphSpecProvider); var graph = GraphBuilder.Generate(repositories, StartGraphAt, Log); diff --git a/modules/Antiforgery b/modules/Antiforgery new file mode 160000 index 0000000000..e188458677 --- /dev/null +++ b/modules/Antiforgery @@ -0,0 +1 @@ +Subproject commit e1884586775c85e27f1b5f2dcad80ba1d84b2f21 diff --git a/modules/AzureIntegration b/modules/AzureIntegration new file mode 160000 index 0000000000..c998d74e1d --- /dev/null +++ b/modules/AzureIntegration @@ -0,0 +1 @@ +Subproject commit c998d74e1de26897dddaf3c2df7165341a4c0dbd diff --git a/modules/BasicMiddleware b/modules/BasicMiddleware new file mode 160000 index 0000000000..9f3ed006a1 --- /dev/null +++ b/modules/BasicMiddleware @@ -0,0 +1 @@ +Subproject commit 9f3ed006a12fdaddf2f5134cdc647433a0548946 diff --git a/modules/BrowserLink b/modules/BrowserLink new file mode 160000 index 0000000000..7e2ff85a76 --- /dev/null +++ b/modules/BrowserLink @@ -0,0 +1 @@ +Subproject commit 7e2ff85a7622e20d697ed64936f8e4affb0865f7 diff --git a/modules/CORS b/modules/CORS new file mode 160000 index 0000000000..8fd36866f9 --- /dev/null +++ b/modules/CORS @@ -0,0 +1 @@ +Subproject commit 8fd36866f9427b8a09cecdd6520ba54b064424c6 diff --git a/modules/Caching b/modules/Caching new file mode 160000 index 0000000000..c6a9cbbe45 --- /dev/null +++ b/modules/Caching @@ -0,0 +1 @@ +Subproject commit c6a9cbbe4566d1d757b27d74a1aad5da8d12aed1 diff --git a/modules/Common b/modules/Common new file mode 160000 index 0000000000..062ad3e7ca --- /dev/null +++ b/modules/Common @@ -0,0 +1 @@ +Subproject commit 062ad3e7ca8fb86a471333864b6202926ea20aa5 diff --git a/modules/Configuration b/modules/Configuration new file mode 160000 index 0000000000..94a5f9e3d1 --- /dev/null +++ b/modules/Configuration @@ -0,0 +1 @@ +Subproject commit 94a5f9e3d122cf1b01c3621130f70739efec1fb2 diff --git a/modules/DataProtection b/modules/DataProtection new file mode 160000 index 0000000000..49b2e22ab3 --- /dev/null +++ b/modules/DataProtection @@ -0,0 +1 @@ +Subproject commit 49b2e22ab30239ed63d3f3b9478e7563e9a93ed9 diff --git a/modules/DependencyInjection b/modules/DependencyInjection new file mode 160000 index 0000000000..88297e3c11 --- /dev/null +++ b/modules/DependencyInjection @@ -0,0 +1 @@ +Subproject commit 88297e3c1116f952aa22013172ef2f9396f716e0 diff --git a/modules/Diagnostics b/modules/Diagnostics new file mode 160000 index 0000000000..7ac0e06abf --- /dev/null +++ b/modules/Diagnostics @@ -0,0 +1 @@ +Subproject commit 7ac0e06abf822738437dba3bfc5b3b01325045f7 diff --git a/modules/DotNetTools b/modules/DotNetTools new file mode 160000 index 0000000000..1836201bee --- /dev/null +++ b/modules/DotNetTools @@ -0,0 +1 @@ +Subproject commit 1836201beecf81c3e2b4a50cc1666f5aa51f5786 diff --git a/modules/EntityFrameworkCore b/modules/EntityFrameworkCore new file mode 160000 index 0000000000..e70d7daef7 --- /dev/null +++ b/modules/EntityFrameworkCore @@ -0,0 +1 @@ +Subproject commit e70d7daef78b7ef76f989277c0b63bc6a666acf6 diff --git a/modules/EventNotification b/modules/EventNotification new file mode 160000 index 0000000000..3f881f18d8 --- /dev/null +++ b/modules/EventNotification @@ -0,0 +1 @@ +Subproject commit 3f881f18d811b65046c1df798d4d97c98aa39086 diff --git a/modules/FileSystem b/modules/FileSystem new file mode 160000 index 0000000000..51e14a624c --- /dev/null +++ b/modules/FileSystem @@ -0,0 +1 @@ +Subproject commit 51e14a624c5f32bd2df62adf06dbe558574b4b11 diff --git a/modules/Hosting b/modules/Hosting new file mode 160000 index 0000000000..82ccf4f06e --- /dev/null +++ b/modules/Hosting @@ -0,0 +1 @@ +Subproject commit 82ccf4f06e749d2044f3adb88e870b431341274f diff --git a/modules/HtmlAbstractions b/modules/HtmlAbstractions new file mode 160000 index 0000000000..d687617a35 --- /dev/null +++ b/modules/HtmlAbstractions @@ -0,0 +1 @@ +Subproject commit d687617a356b9a875ea5b09163ef9d443b4256bb diff --git a/modules/HttpAbstractions b/modules/HttpAbstractions new file mode 160000 index 0000000000..c0f937239a --- /dev/null +++ b/modules/HttpAbstractions @@ -0,0 +1 @@ +Subproject commit c0f937239a0a099b73c67c96ab9e1c875952f67f diff --git a/modules/HttpClientFactory b/modules/HttpClientFactory new file mode 160000 index 0000000000..8a64334608 --- /dev/null +++ b/modules/HttpClientFactory @@ -0,0 +1 @@ +Subproject commit 8a643346089ce2356ac4bcc07f217f256004a00d diff --git a/modules/HttpSysServer b/modules/HttpSysServer new file mode 160000 index 0000000000..02331040a1 --- /dev/null +++ b/modules/HttpSysServer @@ -0,0 +1 @@ +Subproject commit 02331040a127954eadaa859777379af77f419183 diff --git a/modules/IISIntegration b/modules/IISIntegration new file mode 160000 index 0000000000..94c895a1bd --- /dev/null +++ b/modules/IISIntegration @@ -0,0 +1 @@ +Subproject commit 94c895a1bd1b9bba48ce496200fd386322fb6a74 diff --git a/modules/Identity b/modules/Identity new file mode 160000 index 0000000000..52dfb02175 --- /dev/null +++ b/modules/Identity @@ -0,0 +1 @@ +Subproject commit 52dfb0217597ae18efd5958e380fe8e56cde3163 diff --git a/modules/JavaScriptServices b/modules/JavaScriptServices new file mode 160000 index 0000000000..e583a17ef8 --- /dev/null +++ b/modules/JavaScriptServices @@ -0,0 +1 @@ +Subproject commit e583a17ef8381a15ae9f59635dae7e0cfbdd2aac diff --git a/modules/JsonPatch b/modules/JsonPatch new file mode 160000 index 0000000000..e453fafad5 --- /dev/null +++ b/modules/JsonPatch @@ -0,0 +1 @@ +Subproject commit e453fafad52649daff689c24fa2374a143f43654 diff --git a/modules/KestrelHttpServer b/modules/KestrelHttpServer new file mode 160000 index 0000000000..0c34523e8b --- /dev/null +++ b/modules/KestrelHttpServer @@ -0,0 +1 @@ +Subproject commit 0c34523e8b36be0236106aa174ede6aab9acce85 diff --git a/modules/Localization b/modules/Localization new file mode 160000 index 0000000000..98484b8283 --- /dev/null +++ b/modules/Localization @@ -0,0 +1 @@ +Subproject commit 98484b828334f3914c3c2f723b4c98c7acb8f627 diff --git a/modules/Logging b/modules/Logging new file mode 160000 index 0000000000..e8e3e707f5 --- /dev/null +++ b/modules/Logging @@ -0,0 +1 @@ +Subproject commit e8e3e707f5131e22d7d27fce6bfcefdda1dbb817 diff --git a/modules/MetaPackages b/modules/MetaPackages new file mode 160000 index 0000000000..d63542ca31 --- /dev/null +++ b/modules/MetaPackages @@ -0,0 +1 @@ +Subproject commit d63542ca31614cff8a69c788d6fb1ebc8b0870f9 diff --git a/modules/Microsoft.Data.Sqlite b/modules/Microsoft.Data.Sqlite new file mode 160000 index 0000000000..791993269c --- /dev/null +++ b/modules/Microsoft.Data.Sqlite @@ -0,0 +1 @@ +Subproject commit 791993269cfbf97ec3fbdb5139d860ba61ef7396 diff --git a/modules/MusicStore b/modules/MusicStore new file mode 160000 index 0000000000..1c0aeb08bb --- /dev/null +++ b/modules/MusicStore @@ -0,0 +1 @@ +Subproject commit 1c0aeb08bb1ebd846726232226279bbe001782e1 diff --git a/modules/Mvc b/modules/Mvc new file mode 160000 index 0000000000..2e4bc548f5 --- /dev/null +++ b/modules/Mvc @@ -0,0 +1 @@ +Subproject commit 2e4bc548f5921d2f4250314373473e453f3ca95b diff --git a/modules/MvcPrecompilation b/modules/MvcPrecompilation new file mode 160000 index 0000000000..00dd638c4f --- /dev/null +++ b/modules/MvcPrecompilation @@ -0,0 +1 @@ +Subproject commit 00dd638c4ff35f53198ead9de7ccd40c26ec13c9 diff --git a/modules/Options b/modules/Options new file mode 160000 index 0000000000..7e46634d3f --- /dev/null +++ b/modules/Options @@ -0,0 +1 @@ +Subproject commit 7e46634d3fc19df60edadc00386034ccde8f54c9 diff --git a/modules/Proxy b/modules/Proxy new file mode 160000 index 0000000000..0d1e231947 --- /dev/null +++ b/modules/Proxy @@ -0,0 +1 @@ +Subproject commit 0d1e2319472707ceaae2dab5a044764f7686b28e diff --git a/modules/Razor b/modules/Razor new file mode 160000 index 0000000000..6c7551d9c7 --- /dev/null +++ b/modules/Razor @@ -0,0 +1 @@ +Subproject commit 6c7551d9c7fc7a9e60d29ae6a39d46924960e6e6 diff --git a/modules/ResponseCaching b/modules/ResponseCaching new file mode 160000 index 0000000000..85bd164189 --- /dev/null +++ b/modules/ResponseCaching @@ -0,0 +1 @@ +Subproject commit 85bd16418984058a4292f8071118d2794b8d8e07 diff --git a/modules/Routing b/modules/Routing new file mode 160000 index 0000000000..bb413c6ac3 --- /dev/null +++ b/modules/Routing @@ -0,0 +1 @@ +Subproject commit bb413c6ac33fbc5bd5459033cb29afb3b002cdf2 diff --git a/modules/Scaffolding b/modules/Scaffolding new file mode 160000 index 0000000000..d8f8670c7b --- /dev/null +++ b/modules/Scaffolding @@ -0,0 +1 @@ +Subproject commit d8f8670c7b9fe467f9b20456549b19bee26f0e7d diff --git a/modules/Security b/modules/Security new file mode 160000 index 0000000000..88cb3df0eb --- /dev/null +++ b/modules/Security @@ -0,0 +1 @@ +Subproject commit 88cb3df0ebdd524a8c56e74b740296941947fdff diff --git a/modules/ServerTests b/modules/ServerTests new file mode 160000 index 0000000000..f1e0205b9f --- /dev/null +++ b/modules/ServerTests @@ -0,0 +1 @@ +Subproject commit f1e0205b9fedb29f0ea4901caf41acda56bdc597 diff --git a/modules/Session b/modules/Session new file mode 160000 index 0000000000..a29e7cf687 --- /dev/null +++ b/modules/Session @@ -0,0 +1 @@ +Subproject commit a29e7cf687fef67e403f9909632e61fce4a7dbaa diff --git a/modules/SignalR b/modules/SignalR new file mode 160000 index 0000000000..2419867dfc --- /dev/null +++ b/modules/SignalR @@ -0,0 +1 @@ +Subproject commit 2419867dfcda3b11a83a30de6559f1c44b3da38c diff --git a/modules/StaticFiles b/modules/StaticFiles new file mode 160000 index 0000000000..5248d6057c --- /dev/null +++ b/modules/StaticFiles @@ -0,0 +1 @@ +Subproject commit 5248d6057c759e5944eb3d0a9088457081abb090 diff --git a/modules/Testing b/modules/Testing new file mode 160000 index 0000000000..94569378d4 --- /dev/null +++ b/modules/Testing @@ -0,0 +1 @@ +Subproject commit 94569378d4e4fafa054560bfdc5a86b20d41553b diff --git a/modules/WebSockets b/modules/WebSockets new file mode 160000 index 0000000000..f17facd329 --- /dev/null +++ b/modules/WebSockets @@ -0,0 +1 @@ +Subproject commit f17facd32960ff7e0a64eac863cf444b98ea16d9 diff --git a/scripts/UpdateBuildTools.ps1 b/scripts/UpdateBuildTools.ps1 index 0c16b148b2..0308041774 100755 --- a/scripts/UpdateBuildTools.ps1 +++ b/scripts/UpdateBuildTools.ps1 @@ -1,4 +1,4 @@ -#!/usr/bin/env powershell +#!/usr/bin/env pwsh <# .SYNOPSIS diff --git a/scripts/UpdateRepos.ps1 b/scripts/UpdateRepos.ps1 old mode 100644 new mode 100755 index 0530979e1b..9fe5ec896a --- a/scripts/UpdateRepos.ps1 +++ b/scripts/UpdateRepos.ps1 @@ -1,4 +1,4 @@ -#!/usr/bin/env powershell +#!/usr/bin/env pwsh <# .SYNOPSIS @@ -38,7 +38,7 @@ try { Invoke-Block { & git submodule update --init } $update_errors = @() - $submodules = Get-Submodules $ModuleDirectory + $submodules = Get-Submodules $RepoRoot $updated_submodules = @() foreach($submodule in $submodules) { diff --git a/scripts/UpdateSubmodules.ps1 b/scripts/UpdateSubmodules.ps1 index 2ccdc8cdb9..5a64ed2006 100755 --- a/scripts/UpdateSubmodules.ps1 +++ b/scripts/UpdateSubmodules.ps1 @@ -1,4 +1,4 @@ -#!/usr/bin/env powershell +#!/usr/bin/env pwsh <# .SYNOPSIS @@ -36,65 +36,71 @@ function Get-GitChanges([string]$Path) { return $LastExitCode -ne 0 } +Push-Location $RepoRoot | Out-Null try { Assert-Git + Write-Host "Checking that submodules are in a clean state first..." if (Get-GitChanges $ModuleDirectory) { Write-Error "$RepoRoot/modules is in an unclean state. Reset submodules first by running ``git submodule update``" exit 1 } - $submodules = Get-Submodules $ModuleDirectory + $submodules = Get-Submodules $RepoRoot -Verbose:$VerbosePreference - $changes = $submodules ` - | % { - Push-Location $_.path - try { - $vcs_name = "BUILD_VCS_NUMBER_" + $_.module - $newCommit = [environment]::GetEnvironmentVariable($vcs_name) + foreach ($submodule in $submodules) { + $submodulePath = $submodule.path + Write-Host "Updating $submodulePath" - if($newCommit -eq $null) - { - Write-Warning "TeamCity env variable '$vcs_name' not found." - Write-Warning "git submodule update --remote" - Invoke-Block { & git submodule update --remote } + $vcs_name = "BUILD_VCS_NUMBER_" + $submodule.module + $newCommit = [environment]::GetEnvironmentVariable($vcs_name) + + if (-not $newCommit) { + Write-Warning "TeamCity env variable '$vcs_name' not found. Pulling the latest submodule branch instead" + Invoke-Block { & git submodule update --remote $submodulePath } + Push-Location $submodulePath | Out-Null + try { $newCommit = $(git rev-parse HEAD) } - else - { + finally { + Pop-Location | Out-Null + } + } + else { + Push-Location $submodulePath | Out-Null + try { Invoke-Block { & git checkout $newCommit } } - - $_.newCommit = $newCommit - if ($newCommit -ne $_.commit) { - $_.changed = $true - Write-Verbose "$($_.module) updated to $($_.newCommit)" + finally { + Pop-Location | Out-Null } - else { - Write-Verbose "$($_.module) did not change" - } - return $_ } - finally { - Pop-Location - } - } ` - | ? { $_.changed } ` - | % { "$($_.module) to $($_.newCommit.Substring(0, 8))" } - $submodules ` + $submodule.newCommit = $newCommit + if ($newCommit -ne $submodule.commit) { + $submodule.changed = $true + Write-Host -ForegroundColor Cyan "`t=> $($submodule.module) updated to $($submodule.newCommit)" + } + else { + Write-Host -ForegroundColor Magenta "`t$($submodule.module) did not change" + } + } + + $changes = $submodules ` | ? { $_.changed } ` | % { Invoke-Block { & git add $_.path } + "$($_.module) => $($_.newCommit)" } if ($changes) { - $shortMessage = "Updating submodule(s) $( $changes -join ' ,' )" + $shortMessage = "Updating submodule(s) `n`n$( $changes -join "`n" )" # add this to the commit message to make it possible to filter commit triggers based on message $message = "$shortMessage`n`n[auto-updated: submodules]" if (-not $NoCommit -and ($Force -or ($PSCmdlet.ShouldContinue($shortMessage, 'Create a new commit with these changes?')))) { Invoke-Block { & git commit -m $message @GitCommitArgs } - } else { + } + else { # If composing this script with others, return the message that would have been used return @{ message = $message diff --git a/scripts/common.psm1 b/scripts/common.psm1 index 9c08953171..3c78631d60 100644 --- a/scripts/common.psm1 +++ b/scripts/common.psm1 @@ -6,6 +6,7 @@ function Assert-Git { } function Invoke-Block([scriptblock]$cmd) { + $cmd | Out-String | Write-Verbose & $cmd # Need to check both of these cases for errors as they represent different items @@ -16,15 +17,20 @@ function Invoke-Block([scriptblock]$cmd) { } } -function Get-Submodules([string]$ModuleDirectory) -{ - Invoke-Block { & git submodule update --init } +function Get-Submodules { + param( + [Parameter(Mandatory = $true)] + [string]$RepoRoot + ) - $gitModules = Join-Path $RepoRoot ".gitmodules" + Invoke-Block { & git submodule update --init } | Out-Null + + $moduleConfigFile = Join-Path $RepoRoot ".gitmodules" $submodules = @() - Get-ChildItem "$ModuleDirectory/*" -Directory | % { - Push-Location $_ + Get-ChildItem "$RepoRoot/modules/*" -Directory | % { + Push-Location $_ | Out-Null + Write-Verbose "Attempting to get submodule info for $_" try { $data = @{ path = $_ @@ -32,13 +38,13 @@ function Get-Submodules([string]$ModuleDirectory) commit = $(git rev-parse HEAD) newCommit = $null changed = $false - branch = $(git config -f $gitModules --get submodule.modules/$($_.Name).branch ) + branch = $(git config -f $moduleConfigFile --get submodule.modules/$($_.Name).branch ) } $submodules += $data } finally { - Pop-Location + Pop-Location | Out-Null } }