-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
657 changed files
with
22,190 additions
and
11,985 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
// IMPORTANT: This file is read by the merge flow from main branch only. | ||
{ | ||
"merge-flow-configurations": { | ||
// MSBuild servicing chain from oldest supported through currently-supported to main | ||
// Automate opening PRs to merge msbuild's vs16.11 (VS until 4/2029) into vs17.0 (SDK 6.0.1xx) | ||
"vs16.11": { | ||
"MergeToBranch": "vs17.0" | ||
}, | ||
// Automate opening PRs to merge msbuild's vs17.0 (SDK 6.0.1xx) into vs17.3 (SDK 6.0.4xx) | ||
"vs17.0": { | ||
"MergeToBranch": "vs17.3" | ||
}, | ||
// Automate opening PRs to merge msbuild's vs17.3 (SDK 6.0.4xx) into vs17.6 (VS until 1/2025) | ||
"vs17.3": { | ||
"MergeToBranch": "vs17.6" | ||
}, | ||
// Automate opening PRs to merge msbuild's vs17.6 into vs17.8 (VS until 7/2025) | ||
"vs17.6": { | ||
"MergeToBranch": "vs17.8" | ||
}, | ||
// Automate opening PRs to merge msbuild's vs17.8 (SDK 8.0.1xx) into vs17.10 (SDK 8.0.3xx) | ||
"vs17.8": { | ||
"MergeToBranch": "vs17.10" | ||
}, | ||
// Automate opening PRs to merge msbuild's vs17.10 (SDK 8.0.3xx) into vs17.11 (SDK 8.0.4xx) | ||
"vs17.10": { | ||
"MergeToBranch": "vs17.11" | ||
}, | ||
// MSBuild latest release to main | ||
"vs17.11": { | ||
"MergeToBranch": "main" | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
name: 💡 BuildCheck Suggestion | ||
description: Suggesting a diagnostic check (AKA [BuildCheck](https://github.com/dotnet/msbuild/blob/main/documentation/specs/BuildCheck/BuildCheck.md)) that MSBuild could provide. | ||
title: "[BuildCheck Suggestion]: " | ||
labels: ["BuildCheck Suggestion", "Area: BuildCheck"] | ||
body: | ||
- type: textarea | ||
attributes: | ||
label: Summary | ||
description: Brief summary of what this proposal is about. | ||
validations: | ||
required: true | ||
- type: textarea | ||
attributes: | ||
label: Background and Motivation | ||
description: What is the problem MSBuild should be flagging and in what context did you encounter it? | ||
validations: | ||
required: true | ||
- type: textarea | ||
attributes: | ||
label: Sample issue or antipattern that the check should be flagging | ||
description: Please provide as specific as possible sample that you envision to be catched by the check. | ||
validations: | ||
required: true | ||
- type: textarea | ||
attributes: | ||
label: Sample output | ||
description: If you have an idea what and how to report - please try to provide possible sample. |
171 changes: 171 additions & 0 deletions
171
.github/workflows/SyncAnalyzerTemplateMSBuildVersion.yml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,171 @@ | ||
name: Sync Microsoft.Build version in analyzer template with Version.props | ||
on: | ||
push: | ||
branches: | ||
- main | ||
paths: | ||
- 'eng/Versions.props' | ||
|
||
jobs: | ||
Sync-version: | ||
runs-on: ubuntu-latest | ||
|
||
steps: | ||
- name: Checkout repository | ||
uses: actions/checkout@v3 | ||
|
||
- name: Set baseBranch variable | ||
id: vars | ||
run: echo "baseBranch=${{ github.ref_name }}" >> $GITHUB_ENV | ||
|
||
- name: Update analyzer template version with version from Versions.props | ||
shell: pwsh | ||
run: | | ||
try { | ||
# Define the paths to your XML and JSON files | ||
$xmlFilePath = "eng/Versions.props" | ||
$jsonFilePath = "template_feed/content/Microsoft.CheckTemplate/.template.config/template.json" | ||
# Check if the XML file exists | ||
if (-Not (Test-Path -Path $xmlFilePath)) { | ||
throw "Versions.props file not found: $xmlFilePath" | ||
} | ||
# Load and parse the XML content | ||
[xml]$xmlContent = Get-Content -Path $xmlFilePath | ||
$versionPrefix = [string]$xmlContent.Project.PropertyGroup.VersionPrefix | ||
$versionPrefix = $versionPrefix.Trim() | ||
# Validate the versionPrefix | ||
if ([string]::IsNullOrWhiteSpace($versionPrefix)) { | ||
throw "VersionPrefix is empty or null in the XML file: $xmlFilePath" | ||
} | ||
# Check if the JSON file exists | ||
if (-Not (Test-Path -Path $jsonFilePath)) { | ||
throw "Analyzer template file not found: $jsonFilePath" | ||
} | ||
# Load the JSON template | ||
$jsonContent = Get-Content -Path $jsonFilePath -Raw | ConvertFrom-Json | ||
# Check if the versionPrefix is different from the current defaultValue | ||
if ($versionPrefix -ne $jsonContent.symbols.MicrosoftBuildVersion.defaultValue) { | ||
# Update the defaultValue of MicrosoftBuildVersion in the JSON template | ||
$jsonContent.symbols.MicrosoftBuildVersion.defaultValue = $versionPrefix | ||
# Convert the JSON content back to a string | ||
$jsonString = $jsonContent | ConvertTo-Json -Depth 10 | ||
# Write the updated JSON back to the file | ||
Set-Content -Path $jsonFilePath -Value $jsonString | ||
Write-Output "Updated MicrosoftBuildVersion to $versionPrefix" | ||
# Set the updateNeeded output variable to true | ||
$updateNeeded = "true" | ||
} else { | ||
Write-Output "No update needed. MicrosoftBuildVersion is already $versionPrefix" | ||
# Set the updateNeeded output variable to false | ||
$updateNeeded = "false" | ||
} | ||
# Set the versionPrefix and template filePath as an output | ||
Add-Content -Path $env:GITHUB_ENV -Value "versionPrefix=$versionPrefix" | ||
Add-Content -Path $env:GITHUB_ENV -Value "jsonFilePath=$jsonFilePath" | ||
Add-Content -Path $env:GITHUB_ENV -Value "updateNeeded=$updateNeeded" | ||
Write-Output "Extracted versionPrefix: $versionPrefix" | ||
Write-Output "Extracted jsonFilePath: $jsonFilePath" | ||
Write-Output "Update needed: $updateNeeded" | ||
} | ||
catch { | ||
Write-Error "An error occurred: $_" | ||
} | ||
- name: Create Pull Request | ||
if: env.updateNeeded == 'true' | ||
uses: actions/github-script@v7 | ||
with: | ||
script: | | ||
const baseBranch = process.env.baseBranch; | ||
const versionPrefix = process.env.versionPrefix; | ||
const filePath = process.env.jsonFilePath; | ||
const newBranch = `${baseBranch}-update-msbuild-version-for-analyzer-template`; | ||
const commitMessage = `Update MicrosoftBuildVersion to ${versionPrefix}`; | ||
const prBody = '[Automated] Update the MicrosoftBuildVersion defaultValue in the template.json.'; | ||
const prTitle = 'Update MicrosoftBuildVersion in analyzer template'; | ||
// Main execution | ||
(async () => { | ||
try { | ||
// Configure git | ||
await configureGit(); | ||
// Create and switch to the new branch | ||
await createAndSwitchBranch(newBranch); | ||
// Check if the branch PR already exists on the remote | ||
const shouldOpenPullRequest = await checkBranchPRExists(newBranch,baseBranch); | ||
// Stage and commit the changes | ||
await stageAndCommitChanges(filePath, commitMessage); | ||
// Push the new branch to the repository | ||
await pushBranch(newBranch); | ||
// Create the pull request if needed | ||
if (shouldOpenPullRequest) { | ||
await createPullRequest(baseBranch, newBranch, prTitle, prBody); | ||
} else { | ||
console.log("The PR already exists, skipping opening a new PR."); | ||
} | ||
} catch (error) { | ||
core.setFailed(error); | ||
} | ||
})(); | ||
async function configureGit() { | ||
await exec.exec(`git config user.name "github-actions"`); | ||
await exec.exec(`git config user.email "[email protected]"`); | ||
} | ||
async function createAndSwitchBranch(branch) { | ||
await exec.exec('git', ['checkout', '-b', branch]); | ||
} | ||
async function checkBranchPRExists(newBranch,baseBranch) { | ||
// Check if a pull request already exists | ||
const { data: pullRequests } = await github.rest.pulls.list({ | ||
owner: context.repo.owner, | ||
repo: context.repo.repo, | ||
head: newBranch, | ||
base: baseBranch, | ||
state: 'open', | ||
}); | ||
if (pullRequests.length === 0) { | ||
return true; | ||
} else { | ||
return false; | ||
} | ||
} | ||
async function stageAndCommitChanges(filePath, commitMessage) { | ||
await exec.exec(`git add ${filePath}`); | ||
await exec.exec(`git commit -m "${commitMessage}"`); | ||
} | ||
async function pushBranch(branch) { | ||
await exec.exec(`git push --force --set-upstream origin HEAD:${branch}`); | ||
} | ||
async function createPullRequest(baseBranch, newBranch, title, body) { | ||
await github.rest.pulls.create({ | ||
owner: context.repo.owner, | ||
repo: context.repo.repo, | ||
title: title, | ||
body: body, | ||
head: newBranch, | ||
base: baseBranch | ||
}); | ||
} |
Oops, something went wrong.