Add script to update each Repo
This commit is contained in:
parent
b6510d892c
commit
6652182b58
|
|
@ -0,0 +1,100 @@
|
|||
#!/usr/bin/env powershell
|
||||
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Updates each repo Universe builds to new dependencies.props
|
||||
.PARAMETER Source
|
||||
The NuGet package source to find the lineup on.
|
||||
.PARAMETER LineupID
|
||||
The ID of the Lineup to determine which versions to use.
|
||||
.PARAMETER LineupVersion
|
||||
The version of the Lineup to be used.
|
||||
#>
|
||||
[cmdletbinding(SupportsShouldProcess = $true)]
|
||||
param(
|
||||
[Parameter(Mandatory=$true)]
|
||||
[string]$Source,
|
||||
[Parameter(Mandatory=$true)]
|
||||
[string]$LineupID,
|
||||
[Parameter(Mandatory=$true)]
|
||||
[string]$LineupVersion,
|
||||
[string[]]$GitCommitArgs = @()
|
||||
)
|
||||
|
||||
$ErrorActionPreference = 'Stop'
|
||||
Set-StrictMode -Version 2
|
||||
|
||||
Import-Module "$PSScriptRoot/common.psm1" -Scope Local -Force
|
||||
|
||||
$RepoRoot = Resolve-Path "$PSScriptRoot\.."
|
||||
$ModuleDirectory = Join-Path $RepoRoot "modules"
|
||||
|
||||
Push-Location $ModuleDirectory
|
||||
try {
|
||||
# Init all submodules
|
||||
Invoke-Block { & git submodule update --init }
|
||||
|
||||
$update_errors = @()
|
||||
$submodules = Get-Submodules $ModuleDirectory
|
||||
$updated_submodules = @()
|
||||
foreach($submodule in $submodules)
|
||||
{
|
||||
Push-Location $submodule.path
|
||||
try {
|
||||
$depsFile = Join-Path (Join-Path $($submodule.path) "build") "dependencies.props"
|
||||
|
||||
if (!Test-Path $depsFile)
|
||||
{
|
||||
Write-Warning "No build\dependencies.props file exists for $($submodule.module). "
|
||||
continue
|
||||
}
|
||||
|
||||
# Move to latest commit on tracked branch
|
||||
Invoke-Block { & git checkout --quiet $submodule.branch }
|
||||
|
||||
Invoke-Block { & .\run.ps1 upgrade deps --source $Source --id $LineupID --version $LineupVersion --deps-file $depsFile }
|
||||
Invoke-Block { & git add $depsFile }
|
||||
|
||||
Invoke-Block { & git commit --quiet -m "Update dependencies.props`n`n[auto-updated: dependencies]" @GitCommitArgs }
|
||||
$sshUrl = "git@github.com:aspnet/$($submodule.module)"
|
||||
Invoke-Block { & git remote set-url --push origin $sshUrl }
|
||||
$updated_submodules += $submodule
|
||||
}
|
||||
catch
|
||||
{
|
||||
$update_errors += $_
|
||||
}
|
||||
finally {
|
||||
Pop-Location
|
||||
}
|
||||
}
|
||||
|
||||
if ($update_errors.Count -gt 0 )
|
||||
{
|
||||
throw 'Failed to update'
|
||||
}
|
||||
|
||||
$push_errors = @()
|
||||
foreach($submodule in $updated_submodules)
|
||||
{
|
||||
Push-Location $submodule.path
|
||||
try {
|
||||
Invoke-Block { & git push origin $submodule.branch}
|
||||
}
|
||||
catch
|
||||
{
|
||||
$push_errors += $_
|
||||
}
|
||||
finally {
|
||||
Pop-Location
|
||||
}
|
||||
}
|
||||
|
||||
if ($push_errors.Count -gt 0 )
|
||||
{
|
||||
throw 'Failed to push'
|
||||
}
|
||||
}
|
||||
finally {
|
||||
Pop-Location
|
||||
}
|
||||
|
|
@ -21,6 +21,7 @@ $ErrorActionPreference = 'Stop'
|
|||
Set-StrictMode -Version 2
|
||||
|
||||
$RepoRoot = Resolve-Path "$PSScriptRoot\.."
|
||||
$ModuleDirectory = Join-Path $RepoRoot "modules"
|
||||
|
||||
Import-Module "$PSScriptRoot/common.psm1" -Scope Local -Force
|
||||
|
||||
|
|
@ -38,32 +39,12 @@ function Get-GitChanges([string]$Path) {
|
|||
try {
|
||||
Assert-Git
|
||||
|
||||
if (Get-GitChanges "$RepoRoot/modules") {
|
||||
if (Get-GitChanges $ModuleDirectory) {
|
||||
Write-Error "$RepoRoot/modules is in an unclean state. Reset submodules first by running ``git submodule update``"
|
||||
exit 1
|
||||
}
|
||||
|
||||
Invoke-Block { & git submodule update --init }
|
||||
|
||||
$submodules = @()
|
||||
|
||||
Get-ChildItem "$RepoRoot/modules/*" -Directory | % {
|
||||
Push-Location $_
|
||||
try {
|
||||
$data = @{
|
||||
path = $_
|
||||
module = $_.Name
|
||||
commit = $(git rev-parse HEAD)
|
||||
newCommit = $null
|
||||
changed = $false
|
||||
}
|
||||
Write-Verbose "$($data.module) is at $($data.commit)"
|
||||
$submodules += $data
|
||||
}
|
||||
finally {
|
||||
Pop-Location
|
||||
}
|
||||
}
|
||||
$submodules = Get-Submodules $ModuleDirectory
|
||||
|
||||
$changes = $submodules `
|
||||
| % {
|
||||
|
|
|
|||
|
|
@ -15,3 +15,32 @@ function Invoke-Block([scriptblock]$cmd) {
|
|||
throw "Command failed to execute: $cmd"
|
||||
}
|
||||
}
|
||||
|
||||
function Get-Submodules([string]$ModuleDirectory)
|
||||
{
|
||||
Invoke-Block { & git submodule update --init }
|
||||
|
||||
$gitModules = Join-Path $RepoRoot ".gitmodules"
|
||||
$submodules = @()
|
||||
|
||||
Get-ChildItem "$ModuleDirectory/*" -Directory | % {
|
||||
Push-Location $_
|
||||
try {
|
||||
$data = @{
|
||||
path = $_
|
||||
module = $_.Name
|
||||
commit = $(git rev-parse HEAD)
|
||||
newCommit = $null
|
||||
changed = $false
|
||||
branch = $(git config -f $gitModules --get submodule.modules/$($_.Name).branch )
|
||||
}
|
||||
|
||||
$submodules += $data
|
||||
}
|
||||
finally {
|
||||
Pop-Location
|
||||
}
|
||||
}
|
||||
|
||||
return $submodules
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue