protected override (SVersion Version, bool MustBuild) PrepareBuild( IActivityMonitor m, DependentSolution s, ISolutionDriver driver, IReadOnlyList <UpdatePackageInfo> upgrades) { IReleaseSolutionInfo info = _roadmap.ReleaseInfos[s.Index]; var targetVersion = info.CurrentReleaseInfo.Version; if (upgrades.Count > 0) { if (!driver.UpdatePackageDependencies(m, upgrades)) { return(null, false); } var upText = upgrades.Select(u => u.PackageUpdate.ToString()).Concatenate(); var msg = info.CurrentReleaseInfo.Level == ReleaseLevel.None ? $"Not released (keeping version {targetVersion}). Upgrading release dependencies: {upText}." : $"Releasing {targetVersion}. Upgrading release dependencies: {upText}." + Environment.NewLine + Environment.NewLine + info.ReleaseNote; if (!driver.GitRepository.Commit(m, msg)) { return(null, false); } } _commits[s.Index] = driver.GitRepository.Head.CommitSha; return(targetVersion, info.CurrentReleaseInfo.Level != ReleaseLevel.None); }
protected override BuildState Build( IActivityMonitor m, DependentSolution s, ISolutionDriver driver, IReadOnlyList <UpdatePackageInfo> upgrades, SVersion sVersion, IReadOnlyCollection <UpdatePackageInfo> buildProjectsUpgrade) { IReleaseSolutionInfo info = _roadmap.ReleaseInfos[s.Index]; Debug.Assert((sVersion == null) == (info.CurrentReleaseInfo.Level == ReleaseLevel.None)); var targetVersion = info.CurrentReleaseInfo.Version; Debug.Assert(sVersion == null || sVersion == targetVersion); if (_commits[s.Index] != driver.GitRepository.Head.CommitSha) { m.Error($"Commit changed between CreateBuildResult call and this Build. Build canceled."); return(BuildState.Failed); } if (sVersion == null) { m.Info($"Build skipped for {s.Solution.Name}."); return(BuildState.Succeed); } else { bool buildResult = DoBuild(m, driver, targetVersion, out bool tagCreated); if (!buildResult && tagCreated) { driver.GitRepository.ClearVersionTag(m, targetVersion); } if (targetVersion.PackageQuality == PackageQuality.Release) { buildResult &= driver.GitRepository.SwitchMasterToDevelop(m); } return(buildResult ? BuildState.Succeed : BuildState.Failed); } }