From 12d1aafbbe24813a17c3964a236cdb87ebb58c16 Mon Sep 17 00:00:00 2001 From: Aparna Jyothi Date: Tue, 5 Aug 2025 16:46:22 +0530 Subject: [PATCH] update debug logs --- .github/workflows/build-python-packages.yml | 179 ++++++++++++++++++-- 1 file changed, 161 insertions(+), 18 deletions(-) diff --git a/.github/workflows/build-python-packages.yml b/.github/workflows/build-python-packages.yml index 74f2710..b8c4037 100644 --- a/.github/workflows/build-python-packages.yml +++ b/.github/workflows/build-python-packages.yml @@ -29,7 +29,82 @@ on: branches: - 'main' -# ... all previous jobs remain unchanged +env: + VERSION: ${{ inputs.VERSION || '3.12.3' }} +defaults: + run: + shell: pwsh + +jobs: + generate_matrix: + runs-on: ubuntu-latest + outputs: + matrix: ${{ steps.generate-matrix.outputs.matrix }} + steps: + - name: Generate execution matrix + id: generate-matrix + run: | + [String[]]$configurations = "${{ inputs.platforms || 'ubuntu-22.04,ubuntu-22.04_arm64,ubuntu-24.04,ubuntu-24.04_arm64,macos-13,macos-14_arm64,windows-2022_x64,windows-2022_x86,windows-11_arm64' }}".Split(",").Trim() + [String[]]$buildModes = "${{ inputs.threading_build_modes || 'default' }}".Split(",").Trim() + $matrix = @() + + foreach ($configuration in $configurations) { + foreach ($buildMode in $buildModes) { + $parts = $configuration.Split("_") + $os = $parts[0] + $arch = if ($parts[1]) {$parts[1]} else {"x64"} + switch -wildcard ($os) { + "*ubuntu*" { $platform = $os.Replace("ubuntu","linux"); if ($arch -eq "arm64" ) { $os = "${os}-arm" } } + "*macos*" { $platform = 'darwin' } + "*windows*" { $platform = 'win32'; if ($arch -eq "arm64" ) { $os = "${os}-arm" } } + } + + if ($buildMode -eq "freethreaded") { + if ([semver]"${{ inputs.VERSION }}" -lt [semver]"3.13.0") { + continue; + } + $arch += "-freethreaded" + } + + $matrix += @{ + 'platform' = $platform + 'os' = $os + 'arch' = $arch + } + } + } + echo "matrix=$($matrix | ConvertTo-Json -Compress -AsArray)" >> $env:GITHUB_OUTPUT + + build_python: + needs: generate_matrix + strategy: + fail-fast: false + matrix: + include: ${{ fromJson(needs.generate_matrix.outputs.matrix) }} + runs-on: ${{ matrix.os }} + env: + ARTIFACT_NAME: python-${{ inputs.VERSION || '3.12.3' }}-${{ matrix.platform }}-${{ matrix.arch }} + steps: + - name: Check out repository code + uses: actions/checkout@v4 + with: + submodules: true + + - name: Adding Symlink + if: matrix.os == 'macos-13' + run: ln -sf /usr/local/opt/tcl-tk@8 /usr/local/opt/tcl-tk + + - name: Build Python ${{ env.VERSION }} + run: | + ./builders/build-python.ps1 -Version $env:VERSION ` + -Platform ${{ matrix.platform }} -Architecture ${{ matrix.arch }} + + - name: Publish artifact + uses: actions/upload-artifact@v4 + with: + name: ${{ env.ARTIFACT_NAME }} + path: ${{ runner.temp }}/artifact + if-no-files-found: error test_python: needs: [generate_matrix, build_python] @@ -60,7 +135,7 @@ on: name: ${{ env.ARTIFACT_NAME }} path: ${{ runner.temp }}/${{ env.ARTIFACT_NAME }} - - name: Debug: Check OS Architecture and Python Binary + - name: Check OS Architecture and Python Binary shell: pwsh run: | Write-Host "OS Architecture:" @@ -97,10 +172,10 @@ on: $PSNativeCommandUseErrorActionPreference = $true if ('${{ matrix.platform }}' -eq 'win32') { powershell ./setup.ps1 - } else { - sh ./setup.sh - cp ${{ runner.temp }}/${{ env.ARTIFACT_NAME }}/build_output.txt ${{ runner.temp }} - } + } else { + sh ./setup.sh + cp ${{ runner.temp }}/${{ env.ARTIFACT_NAME }}/build_output.txt ${{ runner.temp }} + } working-directory: ${{ runner.temp }}/${{ env.ARTIFACT_NAME }} - name: Setup Python ${{ env.VERSION }} @@ -125,16 +200,84 @@ on: - name: Run tests run: | - Install-Module Pester -Force -Scope CurrentUser -SkipPublisherCheck - Import-Module Pester - $pesterContainer = New-PesterContainer -Path './python-tests.ps1' -Data @{ - Version="${{ env.VERSION }}"; - Platform="${{ matrix.platform }}"; - Architecture="${{ matrix.arch }}"; - } - $Result = Invoke-Pester -Container $pesterContainer -PassThru - if ($Result.FailedCount -gt 0) { - $host.SetShouldExit($Result.FailedCount) - exit $Result.FailedCount - } + Install-Module Pester -Force -Scope CurrentUser -SkipPublisherCheck + Import-Module Pester + $pesterContainer = New-PesterContainer -Path './python-tests.ps1' -Data @{ + Version="${{ env.VERSION }}"; + Platform="${{ matrix.platform }}"; + Architecture="${{ matrix.arch }}"; + } + $Result = Invoke-Pester -Container $pesterContainer -PassThru + if ($Result.FailedCount -gt 0) { + $host.SetShouldExit($Result.FailedCount) + exit $Result.FailedCount + } working-directory: ${{ github.workspace }}/tests + + + publish_release: + name: Publish release + if: github.event_name == 'workflow_dispatch' && inputs.PUBLISH_RELEASES + needs: test_python + runs-on: ubuntu-latest + steps: + - uses: actions/download-artifact@v4 + + - name: Publish Release ${{ env.VERSION }} + id: create_release + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ env.VERSION }}-${{ github.run_id }} + release_name: ${{ env.VERSION }} + body: | + Python ${{ env.VERSION }} + + - name: Generate hash for packages + run: | + $childItems = Get-Childitem -Path '.' + $childItems | Foreach-Object { + $packageObj = Get-Childitem -Path $_.FullName | Select-Object -First 1 + Write-Host "Package: $($packageObj.Name)" + $actualHash = (Get-FileHash -Path $packageObj.FullName -Algorithm sha256).Hash + $hashString = "$actualHash $($packageObj.Name)" + Write-Host "$hashString" + Add-Content -Path ./hashes.sha256 -Value "$hashString" + } + + - name: Upload release assets + uses: actions/github-script@v7 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const fs = require('fs'); + for (let artifactDir of fs.readdirSync('.')) { + let artifactName = fs.lstatSync(artifactDir).isDirectory() ? fs.readdirSync(`${artifactDir}`)[0] : artifactDir; + + console.log(`Upload ${artifactName} asset`); + github.rest.repos.uploadReleaseAsset({ + owner: context.repo.owner, + repo: context.repo.repo, + release_id: ${{ steps.create_release.outputs.id }}, + name: artifactName, + data: fs.lstatSync(artifactDir).isDirectory() ? fs.readFileSync(`./${artifactDir}/${artifactName}`) : fs.readFileSync(`./${artifactName}`).toString() + }); + } + + trigger_pr: + name: Trigger "Create Pull Request" workflow + needs: publish_release + runs-on: ubuntu-latest + steps: + - name: Trigger "Create Pull Request" workflow + uses: actions/github-script@v7 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + github.rest.actions.createWorkflowDispatch({ + owner: context.repo.owner, + repo: context.repo.repo, + workflow_id: 'create-pr.yml', + ref: 'main' + });