Skip to content

Commit

Permalink
Sync eng/common directory with azure-sdk-tools repository for Tools PR
Browse files Browse the repository at this point in the history
  • Loading branch information
azure-sdk committed Aug 19, 2020
1 parent 5cb3a64 commit f3f99aa
Show file tree
Hide file tree
Showing 4 changed files with 60 additions and 2 deletions.
13 changes: 12 additions & 1 deletion eng/common/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,15 @@ should not contain binary files as they don't play well with git.
Any updates to files in the `eng/common` directory should be made in the [azure-sdk-tools](https://github.com/azure/azure-sdk-tools) repo.
All changes made will cause a PR to created in all subscribed azure-sdk language repos which will blindly replace all contents of
the `eng/common` directory in that repo. For that reason do **NOT** make changes to files in this directory in the individual azure-sdk
languages repos as they will be overwritten the next time an update is taken from the common azure-sdk-tools repo.
languages repos as they will be overwritten the next time an update is taken from the common azure-sdk-tools repo.

### Workflow

Starting from [these changes](https://github.com/Azure/azure-sdk-tools/commit/401dbcaa17075ceb94073b6a4d7acafce8687a5d) the 'Sync eng/common directory' PRs will be created in the language repositories once a pull request that touches the eng/common directory is submitted against the master branch. This will make it easier for changes to be tested in each individual language repo before merging the changes in the azure-sdk-tools repo. The workflow is explained bellow

1. Create a PR against Azure/azure-sdk-tools:master. This is the **Tools PR**.
2. `azure-sdk-tools - sync - eng-common` is run automatically. It creates **Sync PRs** in each of the connected language repositories using the format `Sync eng/common directory with azure-sdk-tools for PR {Tools PR Number}`. Each **Sync PR** will contain a link back to the **Tools PR** that triggered it.
3. More changes pushed to the **Tools PR**, will automatically triggered new pipeline runs in the respective **Sync PRs**. The **Sync PRs** are used to make sure the changes would not break any of the connected pipelines.
4. Once satisfied with the changes;
- First merge all the **Sync PRs**. The **Tools PR** contains links to all the **Sync PRs**
- Finally merge the **Tools PR**. Each **Sync PR** contains the link to the corresponding **Tools PR**.
2 changes: 2 additions & 0 deletions eng/common/pipelines/templates/steps/create-pull-request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ parameters:
PushArgs:
WorkingDirectory: $(System.DefaultWorkingDirectory)
PRTitle: not-specified
PRBody: not-specified
ScriptDirectory: eng/common/scripts
GHReviewersVariable: ''
GHTeamReviewersVariable: ''
Expand Down Expand Up @@ -65,6 +66,7 @@ steps:
-PRBranch "${{ parameters.PRBranchName }}"
-AuthToken "$(azuresdk-github-pat)"
-PRTitle "${{ parameters.PRTitle }}"
-PRBody "${{ parameters.PRBody }}"
- task: PowerShell@2
displayName: Tag a Reviewer on PR
Expand Down
4 changes: 3 additions & 1 deletion eng/common/scripts/Submit-PullRequest.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,9 @@ param(

[Parameter(Mandatory = $true)]
$PRTitle,
$PRBody = $PRTitle

[Parameter(Mandatory = $true)]
$PRBody
)

$headers = @{
Expand Down
43 changes: 43 additions & 0 deletions eng/common/scripts/Verify-Resource-Ref.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@

. (Join-Path $PSScriptRoot common.ps1)
Install-Module -Name powershell-yaml -RequiredVersion 0.4.1 -Force -Scope CurrentUser
$ymlfiles = Get-ChildItem $RepoRoot | Where-Object {$_ -like '*.yml'}
$affectedRepos = @()

foreach ($file in $ymlfiles)
{
Write-Host "Verifying '${file}'"
$ymlContent = Get-Content $file.FullName -Raw
$ymlObject = ConvertFrom-Yaml $ymlContent -Ordered

if ($ymlObject.Contains("resources"))
{
if ($ymlObject["resources"]["repositories"])
{
$repositories = $ymlObject["resources"]["repositories"]
foreach ($repo in $repositories)
{
$repoName = $repo["repository"]
if (-not ($repo.Contains("ref")))
{
$errorMessage = "File: ${file}, Repository: ${repoName}."
$affectedRepos.Add($errorMessage)
}
}
}
}
}

if ($affectedRepos.Count -gt 0)
{
Write-Error "Ref not found in the following Repository Resources."
foreach ($errorMessage in $affectedRepos)
{
Write-Information $errorMessage
}
Write-Information "Please ensure you add a Ref: when using repository resources"
Write-Information "More Info at https://aka.ms/azsdk/engsys/tools-versioning"
exit 1
}

Write-Information "All repository resources in yaml files reference a valid tag"

0 comments on commit f3f99aa

Please sign in to comment.