Просмотр исходного кода

Restore the original lockfile in repos after invoking build.cmd/sh (#865)

Nate McMaster 8 лет назад
Родитель
Сommit
8dabce0c19
1 измененных файлов с 32 добавлено и 12 удалено
  1. 32 12
      build/RepositoryBuild.targets

+ 32 - 12
build/RepositoryBuild.targets

@@ -76,10 +76,27 @@
       <RepositoryBuildArguments>$(RepositoryBuildArguments) /p:Configuration=$(Configuration)</RepositoryBuildArguments>
       <RepositoryBuildArguments>$(RepositoryBuildArguments) /p:IsFinalBuild=$(IsFinalBuild)</RepositoryBuildArguments>
       <RepositoryBuildArguments>$(RepositoryBuildArguments) /noconsolelogger '/l:RepoTasks.FlowLogger,$(MSBuildThisFileDirectory)tasks\bin\publish\RepoTasks.dll;Summary;FlowId=$(RepositoryToBuild)'</RepositoryBuildArguments>
+
+      <SourceLockFile>$(RepositoryRoot)korebuild-lock.txt</SourceLockFile>
+      <RepoLockFile>$(BuildRepositoryRoot)korebuild-lock.txt</RepoLockFile>
+      <BackupRepoLockFile>$(IntermediateDir)$(RepositoryToBuild)-korebuild-lock.txt</BackupRepoLockFile>
     </PropertyGroup>
   </Target>
 
-  <Target Name="_BuildRepository" DependsOnTargets="GetRepoBuildProps">
+  <Target Name="_UpdateRepoLockFile">
+    <!-- Copy Korebuild lock file to individual repos to align version if the repo doesn't already have one -->
+    <Message Text="Copying KoreBuild lockfile from Universe to repository $(BuildRepositoryRoot)"/>
+    <Move SourceFiles="$(RepoLockFile)" DestinationFiles="$(BackupRepoLockFile)" Condition="Exists($(RepoLockFile))" />
+    <Copy SourceFiles="$(SourceLockFile)" DestinationFiles="$(RepoLockFile)" />
+  </Target>
+
+  <Target Name="_RestoreOriginalRepoLockFile">
+    <!-- Restore original Korebuild lock file -->
+    <Delete Files="$(RepoLockFile)" ContinueOnError="true" />
+    <Move SourceFiles="$(BackupRepoLockFile)" DestinationFiles="$(RepoLockFile)" Condition="Exists($(BackupRepoLockFile))"  />
+  </Target>
+
+  <Target Name="_BuildRepository" DependsOnTargets="GetRepoBuildProps;_UpdateRepoLockFile">
     <PropertyGroup>
       <BuildArguments>/t:CleanArtifacts /t:Build /p:SkipTests=true $(RepositoryBuildArguments)</BuildArguments>
       <RepositoryArtifactsRoot>$(BuildRepositoryRoot)artifacts</RepositoryArtifactsRoot>
@@ -89,18 +106,23 @@
 
     <Message Text="============ Building $(RepositoryToBuild) ============" Importance="High" />
 
-    <!-- Copy Korebuild lock file to individual repos to align version if the repo doesn't already have one -->
-    <Message Text="Copying KoreBuild lockfile from Universe to repository $(BuildRepositoryRoot)"/>
-    <Copy SourceFiles="$(RepositoryRoot)korebuild-lock.txt" DestinationFolder="$(BuildRepositoryRoot)" />
-
     <Exec
       Command="./$(_BuildScriptToExecute) -Path $(BuildRepositoryRoot) $(BuildArguments)"
       IgnoreStandardErrorWarningFormat="true"
-      WorkingDirectory="$(RepositoryRoot)" />
+      WorkingDirectory="$(RepositoryRoot)"
+      IgnoreExitCode="true"
+      ContinueOnError="WarnAndContinue">
+      <Output TaskParameter="ExitCode" PropertyName="BuildExitCode" />
+    </Exec>
+
+    <CallTarget Targets="_RestoreOriginalRepoLockFile" />
+
+    <!-- Fail if build.cmd didn't exit code 0 or process failed to start. -->
+    <Error Text="Building $(RepositoryToBuild) failed: $(_BuildScriptToExecute) exited code $(BuildExitCode)" Condition=" '$(BuildExitCode)' != '0' " />
 
     <ItemGroup>
       <RepositoryArtifacts Include="$(RepositoryArtifactsBuildDirectory)*" />
-      <RepositoryMSBuildArtifacts Include="$(RepositoryArtifactsMSBuildDirectory)**\*.*" />
+      <RepositoryMSBuildArtifacts Include="$(RepositoryArtifactsMSBuildDirectory)**\*" />
     </ItemGroup>
 
     <Copy
@@ -114,7 +136,7 @@
     <Message Text="============ Done building $(RepositoryToBuild) ============" Importance="High" />
   </Target>
 
-  <Target Name="_TestRepository" DependsOnTargets="GetRepoBuildProps" Returns="@(RepositoryTestResult)">
+  <Target Name="_TestRepository" DependsOnTargets="GetRepoBuildProps;_UpdateRepoLockFile" Returns="@(RepositoryTestResult)">
     <PropertyGroup>
       <BuildArguments>/t:Test /p:NoBuild=$(_NoBuildRepos) $(RepositoryBuildArguments)</BuildArguments>
     </PropertyGroup>
@@ -125,10 +147,6 @@
 
     <Message Text="============ Testing $(RepositoryToBuild) ============" Importance="High" />
 
-    <!-- Copy Korebuild lock file to individual repos to align version if the repo doesn't already have one -->
-    <Message Text="Copying KoreBuild lockfile from Universe to repository $(BuildRepositoryRoot)"/>
-    <Copy SourceFiles="$(RepositoryRoot)korebuild-lock.txt" DestinationFolder="$(BuildRepositoryRoot)" />
-
     <Exec
       Command="./$(_BuildScriptToExecute) -Path $(BuildRepositoryRoot) $(BuildArguments)"
       IgnoreStandardErrorWarningFormat="true"
@@ -137,6 +155,8 @@
       <Output TaskParameter="ExitCode" PropertyName="TestExitCode" />
     </Exec>
 
+    <CallTarget Targets="_RestoreOriginalRepoLockFile" />
+
     <ItemGroup>
       <RepositoryTestResult Update="$(RepositoryToBuild)" Success="true" Condition="'$(TestExitCode)' == '0'" />
     </ItemGroup>