[release/v7.5]Make GitHub Workflows work in the internal mirror (#25342)

Co-authored-by: Travis Plunk <travis.plunk@microsoft.com>
This commit is contained in:
PowerShell Team Bot
2025-04-11 21:46:34 +00:00
committed by GitHub
co-authored by Travis Plunk
parent d390c57b50
commit 27d193267a
7 changed files with 259 additions and 91 deletions
@@ -0,0 +1,88 @@
name: Path Filters
description: 'Path Filters'
inputs:
GITHUB_TOKEN:
description: 'GitHub token'
required: true
outputs:
source:
description: 'Source code changes (composite of all changes)'
value: ${{ steps.filter.outputs.source }}
githubChanged:
description: 'GitHub workflow changes'
value: ${{ steps.filter.outputs.githubChanged }}
toolsChanged:
description: 'Tools changes'
value: ${{ steps.filter.outputs.toolsChanged }}
propsChanged:
description: 'Props changes'
value: ${{ steps.filter.outputs.propsChanged }}
testsChanged:
description: 'Tests changes'
value: ${{ steps.filter.outputs.testsChanged }}
mainSourceChanged:
description: 'Main source code changes (any changes in src/)'
value: ${{ steps.filter.outputs.mainSourceChanged }}
buildModuleChanged:
description: 'Build module changes'
value: ${{ steps.filter.outputs.buildModuleChanged }}
runs:
using: composite
steps:
- name: Check if GitHubWorkflowChanges is present
id: filter
uses: actions/github-script@v7.0.1
with:
github-token: ${{ inputs.GITHUB_TOKEN }}
script: |
// Fetch the list of files changed in the PR
let files = [];
let page = 1;
let fetchedFiles;
do {
fetchedFiles = await github.rest.pulls.listFiles({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: context.issue.number,
per_page: 100,
page: page++
});
files = files.concat(fetchedFiles.data);
} while (fetchedFiles.data.length > 0);
const actionsChanged = files.some(file => file.filename.startsWith('.github/actions'));
const workflowsChanged = files.some(file => file.filename.startsWith('.github/workflows'));
const githubChanged = actionsChanged || workflowsChanged;
const toolsCiPsm1Changed = files.some(file => file.filename.startsWith('tools/ci.psm1'));
const toolsBuildCommonChanged = files.some(file => file.filename.startsWith('tools/buildCommon/'));
const toolsChanged = toolsCiPsm1Changed || toolsBuildCommonChanged;
const propsChanged = files.some(file => file.filename.endsWith('.props'));
const testsChanged = files.some(file => file.filename.startsWith('test/powershell/') || file.filename.startsWith('test/tools/') || file.filename.startsWith('test/xUnit/'));
const mainSourceChanged = files.some(file => file.filename.startsWith('src/'));
const buildModuleChanged = files.some(file => file.filename.startsWith('build.psm1'));
const source = mainSourceChanged || toolsChanged || githubChanged || propsChanged || testsChanged;
core.setOutput('toolsChanged', toolsChanged);
core.setOutput('githubChanged', githubChanged);
core.setOutput('propsChanged', propsChanged);
core.setOutput('testsChanged', testsChanged);
core.setOutput('mainSourceChanged', mainSourceChanged);
core.setOutput('buildModuleChanged', buildModuleChanged);
core.setOutput('source', source);
- name: Capture outputs
run: |
Write-Verbose -Verbose "source: ${{ steps.filter.outputs.source }}"
Write-Verbose -Verbose "github: ${{ steps.filter.outputs.githubChanged }}"
Write-Verbose -Verbose "tools: ${{ steps.filter.outputs.toolsChanged }}"
Write-Verbose -Verbose "props: ${{ steps.filter.outputs.propsChanged }}"
Write-Verbose -Verbose "tests: ${{ steps.filter.outputs.testsChanged }}"
Write-Verbose -Verbose "mainSource: ${{ steps.filter.outputs.mainSourceChanged }}"
Write-Verbose -Verbose "buildModule: ${{ steps.filter.outputs.buildModuleChanged }}"
shell: pwsh
+22 -5
View File
@@ -20,26 +20,39 @@ runs:
steps:
- name: Capture Environment
if: success() || failure()
run: 'Get-ChildItem -Path env: | Out-String -width 9999 -Stream | write-Verbose -Verbose'
run: |-
Import-Module ./build.psm1
Write-LogGroupStart -Title 'Environment'
Get-ChildItem -Path env: | Out-String -width 9999 -Stream | write-Verbose -Verbose
Write-LogGroupEnd -Title 'Environment'
shell: pwsh
- name: Download Build Artifacts
uses: actions/download-artifact@v4
with:
path: "${{ github.workspace }}"
- name: Capture Artifacts Directory
continue-on-error: true
run: Get-ChildItem "${{ github.workspace }}/build/*" -Recurse
run: |-
Import-Module ./build.psm1
Write-LogGroupStart -Title 'Artifacts Directory'
Get-ChildItem "${{ github.workspace }}/build/*" -Recurse
Write-LogGroupEnd -Title 'Artifacts Directory'
shell: pwsh
- uses: actions/setup-dotnet@v4
with:
global-json-file: ./global.json
- name: Bootstrap
shell: pwsh
run: |-
Import-Module ./build.psm1
Write-LogGroupStart -Title 'Bootstrap'
Import-Module ./tools/ci.psm1
Invoke-CIInstall -SkipUser
Write-LogGroupEnd -Title 'Bootstrap'
- name: Extract Files
uses: actions/github-script@v7.0.0
@@ -68,7 +81,11 @@ runs:
- name: Capture Extracted Build ZIP
continue-on-error: true
run: Get-ChildItem "${{ github.workspace }}/bins/*" -Recurse -ErrorAction SilentlyContinue
run: |-
Import-Module ./build.psm1
Write-LogGroupStart -Title 'Extracted Build ZIP'
Get-ChildItem "${{ github.workspace }}/bins/*" -Recurse -ErrorAction SilentlyContinue
Write-LogGroupEnd -Title 'Extracted Build ZIP'
shell: pwsh
- name: Test
@@ -18,36 +18,39 @@ inputs:
runs:
using: composite
steps:
- name: Convert JUnit to CTRF
run: |-
Get-ChildItem -Path "${{ inputs.testResultsFolder }}/*.xml" -Recurse | ForEach-Object {
npx --yes junit-to-ctrf $_.FullName --output ./${{ inputs.ctrfFolder }}/$($_.BaseName).json --tool Pester
- name: Log Summary
run: |
if (-not $env:GITHUB_STEP_SUMMARY) {
Write-Error "GITHUB_STEP_SUMMARY is not set. Ensure this workflow is running in a GitHub Actions environment."
exit 1
}
shell: pwsh
# this task only takes / as directory separators
- name: Publish Test Report
uses: ctrf-io/github-test-reporter@v1
with:
report-path: './${{ inputs.ctrfFolder }}/*.json'
exit-on-fail: true
summary-report: true
test-report: false
test-list-report: false
failed-report: false
fail-rate-report: false
flaky-report: false
flaky-rate-report: false
failed-folded-report: true
previous-results-report: false
ai-report: true
skipped-report: false
suite-folded-report: false
suite-list-report: false
pull-request-report: false
commit-report: false
custom-report: false
if: always()
$testCaseCount = 0
$testErrorCount = 0
$testFailureCount = 0
$testDisabledCount = 0
Get-ChildItem -Path "${{ inputs.testResultsFolder }}/*.xml" -Recurse | ForEach-Object {
$results = [xml] (get-content $_.FullName)
$testCaseCount += $results.testsuites.tests
$testErrorCount += $results.testsuites.errors
$testFailureCount += $results.testsuites.failures
$testDisabledCount += $results.testsuites.disabled
}
@"
# Summary of ${{ inputs.name }}
- Total Tests: $testCaseCount
- Total Errors: $testErrorCount
- Total Failures: $testFailureCount
- Total Disabled: $testDisabledCount
"@ | Out-File -FilePath $ENV:GITHUB_STEP_SUMMARY -Append
Write-Host "Summary written to $ENV:GITHUB_STEP_SUMMARY"
Get-Content $ENV:GITHUB_STEP_SUMMARY
shell: pwsh
- name: Upload testResults artifact
if: always()
@@ -55,10 +58,3 @@ runs:
with:
name: junit-pester-${{ inputs.name }}
path: ${{ runner.workspace }}/testResults
- name: Upload ctrf artifact
if: always()
uses: actions/upload-artifact@v4
with:
name: ctrf-pester-${{ inputs.name }}
path: ${{ inputs.ctrfFolder }}
+11 -17
View File
@@ -9,6 +9,7 @@ on:
branches:
- master
- release/**
- github-mirror
paths:
- "**"
- "!.github/ISSUE_TEMPLATE/**"
@@ -19,6 +20,7 @@ on:
branches:
- master
- release/**
- github-mirror
# Path filters for PRs need to go into the changes job
concurrency:
@@ -43,30 +45,22 @@ jobs:
# Required permissions
permissions:
pull-requests: read
contents: read
# Set job outputs to values from filter step
outputs:
source: ${{ steps.filter.outputs.source }}
steps:
- name: checkout
uses: actions/checkout@v4.1.0
# For pull requests it's not necessary to checkout the code
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.2.0
id: filter
uses: actions/checkout@v4
with:
list-files: json
filters: .github/action-filters.yml
persist-credentials: false
- name: Capture outputs
run: |
"source: ${{ steps.filter.outputs.source }}"
"github: ${{ steps.filter.outputs.github }}"
"tools: ${{ steps.filter.outputs.tools }}"
"props: ${{ steps.filter.outputs.props }}"
"tests: ${{ steps.filter.outputs.tests }}"
"mainSource: ${{ steps.filter.outputs.mainSource }}"
"buildModule: ${{ steps.filter.outputs.buildModule }}"
shell: pwsh
- name: Change Detection
id: filter
uses: "./.github/actions/infrastructure/path-filters"
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
ci_build:
name: Build PowerShell
+8 -15
View File
@@ -7,6 +7,7 @@ on:
branches:
- master
- release/**
- github-mirror
paths:
- "**"
- "!.github/ISSUE_TEMPLATE/**"
@@ -17,6 +18,7 @@ on:
branches:
- master
- release/**
- github-mirror
# Path filters for PRs need to go into the changes job
concurrency:
@@ -34,6 +36,7 @@ env:
__SuppressAnsiEscapeSequences: 1
nugetMultiFeedWarnLevel: none
system_debug: 'false'
jobs:
changes:
name: Change Detection
@@ -42,6 +45,8 @@ jobs:
# Required permissions
permissions:
pull-requests: read
contents: read
# Set job outputs to values from filter step
outputs:
source: ${{ steps.filter.outputs.source }}
@@ -49,23 +54,11 @@ jobs:
- name: checkout
uses: actions/checkout@v4.1.0
# For pull requests it's not necessary to checkout the code
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.2.0
- name: Change Detection
id: filter
uses: "./.github/actions/infrastructure/path-filters"
with:
list-files: json
filters: .github/action-filters.yml
- name: Capture outputs
run: |
"source: ${{ steps.filter.outputs.source }}"
"github: ${{ steps.filter.outputs.github }}"
"tools: ${{ steps.filter.outputs.tools }}"
"props: ${{ steps.filter.outputs.props }}"
"tests: ${{ steps.filter.outputs.tests }}"
"mainSource: ${{ steps.filter.outputs.mainSource }}"
"buildModule: ${{ steps.filter.outputs.buildModule }}"
shell: pwsh
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
ci_build:
name: Build PowerShell
+8 -15
View File
@@ -5,6 +5,7 @@ on:
branches:
- master
- release/**
- github-mirror
paths:
- "**"
- "!.vsts-ci/misc-analysis.yml"
@@ -16,6 +17,8 @@ on:
branches:
- master
- release/**
- github-mirror
# Path filters for PRs need to go into the changes job
concurrency:
@@ -43,6 +46,8 @@ jobs:
# Required permissions
permissions:
pull-requests: read
contents: read
# Set job outputs to values from filter step
outputs:
source: ${{ steps.filter.outputs.source }}
@@ -50,23 +55,11 @@ jobs:
- name: checkout
uses: actions/checkout@v4.1.0
# For pull requests it's not necessary to checkout the code
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.2.0
- name: Change Detection
id: filter
uses: "./.github/actions/infrastructure/path-filters"
with:
list-files: json
filters: .github/action-filters.yml
- name: Capture outputs
run: |
"source: ${{ steps.filter.outputs.source }}"
"github: ${{ steps.filter.outputs.github }}"
"tools: ${{ steps.filter.outputs.tools }}"
"props: ${{ steps.filter.outputs.props }}"
"tests: ${{ steps.filter.outputs.tests }}"
"mainSource: ${{ steps.filter.outputs.mainSource }}"
"buildModule: ${{ steps.filter.outputs.buildModule }}"
shell: pwsh
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
ci_build:
name: Build PowerShell