From 5f93e046ec6e51aa5e102852d265ef11bb5c6d0e Mon Sep 17 00:00:00 2001 From: ArkadiuszMichalski <2730894+ArkadiuszMichalski@users.noreply.github.com> Date: Fri, 5 Apr 2024 14:29:39 +0200 Subject: [PATCH] Reduce CI build time for some circumstances Fix #14942, close #14943 --- .github/workflows/CI_build.yml | 95 ++++++++++++++++++++++++++++++++-- 1 file changed, 92 insertions(+), 3 deletions(-) diff --git a/.github/workflows/CI_build.yml b/.github/workflows/CI_build.yml index 91d21f5a1..52c99e132 100644 --- a/.github/workflows/CI_build.yml +++ b/.github/workflows/CI_build.yml @@ -3,14 +3,97 @@ name: CI_build on: [push, pull_request] jobs: + before_build: + + runs-on: windows-latest + outputs: + result: ${{ steps.filter.outputs.result }} + matrix: ${{ steps.filter.outputs.matrix }} + + steps: + - name: Checkout repo + uses: actions/checkout@v4 + with: + fetch-depth: ${{ github.event_name == 'pull_request' && 2 || 0 }} + - name: Commit filtering + id: filter + run: | + $allowMaster = $true + $folders_onejob = "PowerEditor/(Test|(installer/(filesForTesting|functionList)))/" + $files_nowork = "md|txt|log|ini" + $files_needwork = "CMakeLists\.txt" + + $matrix_all = 'matrix={"build_configuration": ["Release", "Debug"], "build_platform": ["x64", "Win32", "ARM64"]}' + $matrix_onejob = 'matrix={"build_configuration": ["Debug"], "build_platform": ["Win32"]}' + Write-Output $matrix_all >> $env:GITHUB_OUTPUT + + $isPush = "${{github.event_name }}" -eq "push" ? $true : $false + $isMaster = $isPush -and $${{ github.ref_name == github.event.repository.master_branch }} + + if ($isPush) { + $commit_message = "${{ github.event.head_commit.message }}" + } + else { + $last_commit = @(Invoke-RestMethod ${{ github.event.pull_request._links.commits.href }})[0] | Select-Object -Last 1 + $commit_message = $last_commit.commit.message + } + + $commit_title = ($commit_message -split "[\r\n]+")[0] + $files_modified = @(git diff --name-only HEAD~1) + $files_needwork_all = @($files_modified | Where-Object {$_ -notmatch "\.(xml|$files_nowork)$|$folders_onejob" -or $_ -match "$files_needwork$"}) + + if ($allowMaster -or !$isMaster) { + if ($commit_title -match "\[force all\]") { + Write-Output "Run standard jobs" + } + elseif ($commit_title -match "\[force one\]") { + Write-Output "Run only one Win32/Debug job" + Write-Output "result=ONEJOB" >> $env:GITHUB_OUTPUT + Write-Output $matrix_onejob >> $env:GITHUB_OUTPUT + } + elseif (($files_modified.length -gt 0 -and $files_needwork_all.length -eq 0) -or $commit_title -match "\[force (xml|none)\]") { + if (@($files_modified | Where-Object {$_ -notmatch "\.($files_nowork)$"}).length -eq 0 -or $commit_title -match "\[force none\]") { + Write-Output "Changed files on this commit don't require any additional tasks.`n" + Write-Output "result=OK" >> $env:GITHUB_OUTPUT + } + else { + Write-Output "XML validation mode`n" + if (@($files_modified | Where-Object {$_ -match $folders_onejob}).length -eq 0) { + python -m pip install requests rfc3987 pywin32 lxml + python PowerEditor\Test\xmlValidator\validator_xml.py + if ($LastExitCode -eq 0) { + Write-Output "`nAll XML files are valid.`n" + Write-Output "result=OK" >> $env:GITHUB_OUTPUT + } + else { + Write-Output "`nSome XML files are invalid.`n" + $host.SetShouldExit($LastExitCode) + } + } + else { + Write-Output "Run only one Win32/Debug job" + Write-Output "result=ONEJOB" >> $env:GITHUB_OUTPUT + Write-Output $matrix_onejob >> $env:GITHUB_OUTPUT + } + + } + } + else { + Write-Output "Run standard jobs" + } + } + else { + Write-Output "Run standard jobs" + } + build_windows: runs-on: windows-latest + needs: before_build + if: needs.before_build.outputs.result == '' || needs.before_build.outputs.result == 'ONEJOB' strategy: fail-fast: false - matrix: - build_configuration: [Release, Debug] - build_platform: [x64, Win32, ARM64] + matrix: ${{ fromJSON(needs.before_build.outputs.matrix) }} steps: - name: Checkout repo @@ -98,6 +181,8 @@ jobs: # build_windows_clang: # runs-on: windows-latest + #needs: before_build + #if: needs.before_build.outputs.result == '' # strategy: # matrix: # build_configuration: [Release] @@ -125,6 +210,8 @@ jobs: build_windows_cmake: runs-on: windows-latest + needs: before_build + if: needs.before_build.outputs.result == '' strategy: matrix: include: @@ -177,6 +264,8 @@ jobs: build_windows_msys2: runs-on: windows-latest + needs: before_build + if: needs.before_build.outputs.result == '' strategy: fail-fast: false matrix: