haxe compiletest #1
This file contains hidden or 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
| name: MSVC Build | |
| on: | |
| push: | |
| branches: [ '*' ] | |
| pull_request: | |
| branches: [ '*' ] | |
| permissions: | |
| contents: read | |
| packages: write | |
| jobs: | |
| build: | |
| runs-on: windows-2022 | |
| env: | |
| THRIFT_BUILD_DIR: C:\thrift-build | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| - name: Ensure expected workspace path | |
| shell: pwsh | |
| run: | | |
| if (-not (Test-Path 'C:\src')) { New-Item -Path 'C:\src' -ItemType Directory | Out-Null } | |
| if (Test-Path 'C:\src\thrift') { Remove-Item 'C:\src\thrift' -Recurse -Force } | |
| cmd /c mklink /J C:\src\thrift $env:GITHUB_WORKSPACE | |
| - name: Configure build output directory | |
| shell: pwsh | |
| run: | | |
| New-Item -Path $env:THRIFT_BUILD_DIR -ItemType Directory -Force | Out-Null | |
| - name: Set Docker image name | |
| shell: pwsh | |
| env: | |
| OWNER: ${{ github.repository_owner }} | |
| run: | | |
| $image = "ghcr.io/{0}/thrift-build" -f $env:OWNER.ToLower() | |
| "DOCKER_IMAGE=$image" | Out-File -FilePath $env:GITHUB_ENV -Append | |
| - name: Compute Docker image tag | |
| shell: pwsh | |
| run: | | |
| $hash = (Get-FileHash -Algorithm SHA256 'build/docker/msvc2017/Dockerfile').Hash.ToLower().Substring(0, 12) | |
| "IMAGE_TAG=msvc2017-$hash" | Out-File -FilePath $env:GITHUB_ENV -Append | |
| - name: Log in to GHCR | |
| uses: docker/login-action@v3 | |
| with: | |
| registry: ghcr.io | |
| username: ${{ github.actor }} | |
| password: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Pull cached image | |
| id: pull_cached | |
| continue-on-error: true | |
| shell: pwsh | |
| run: | | |
| $needBuild = $true | |
| Write-Host "Attempting to pull hash-based tag: $($env:DOCKER_IMAGE):$($env:IMAGE_TAG)" | |
| docker pull "$($env:DOCKER_IMAGE):$($env:IMAGE_TAG)" 2>&1 | Out-Host | |
| if ($LASTEXITCODE -eq 0) { | |
| Write-Host "Successfully pulled cached image with hash tag" | |
| $needBuild = $false | |
| } else { | |
| Write-Host "Hash tag not found, no fallback configured. Will build from scratch." | |
| $needBuild = $true | |
| } | |
| Write-Host "Setting outputs: need_build=$needBuild" | |
| "need_build=$needBuild" >> $env:GITHUB_OUTPUT | |
| - name: Build Docker image | |
| if: steps.pull_cached.outputs.need_build == 'true' | |
| shell: pwsh | |
| run: | | |
| Write-Host "Building with tag: $($env:DOCKER_IMAGE):$($env:IMAGE_TAG)" | |
| docker build -t "$($env:DOCKER_IMAGE):$($env:IMAGE_TAG)" -f build\docker\msvc2017\Dockerfile 'build\' | |
| if ($LASTEXITCODE -ne 0) { | |
| Write-Error "Docker build failed" | |
| exit 1 | |
| } | |
| Write-Host "Verifying tags were created:" | |
| docker images "$($env:DOCKER_IMAGE)" | |
| - name: Push Docker image | |
| if: github.event_name != 'pull_request' && steps.pull_cached.outputs.need_build == 'true' | |
| shell: pwsh | |
| run: | | |
| Write-Host "Pushing hash-based tag only: $($env:DOCKER_IMAGE):$($env:IMAGE_TAG)" | |
| docker push "$($env:DOCKER_IMAGE):$($env:IMAGE_TAG)" | |
| if ($LASTEXITCODE -ne 0) { | |
| Write-Error "Failed to push hash-based tag" | |
| exit 1 | |
| } | |
| Write-Host "Successfully pushed hash-tagged image" | |
| - name: Build and test inside container | |
| shell: pwsh | |
| run: | | |
| docker run -v c:\src\thrift:C:\Thrift -v "${env:THRIFT_BUILD_DIR}:C:\build" --rm -t "$($env:DOCKER_IMAGE):$($env:IMAGE_TAG)" c:\thrift\build\docker\msvc2017\build.bat | |
| - name: Check test results | |
| if: always() | |
| shell: pwsh | |
| run: | | |
| $logPath = Join-Path $env:THRIFT_BUILD_DIR 'Testing\Temporary\LastTest.log' | |
| if (Test-Path $logPath) { | |
| $content = Get-Content $logPath -Raw | |
| if ($content -match 'Test Failed\.') { | |
| Write-Error "Tests failed - check LastTest.log artifact for details" | |
| exit 1 | |
| } else { | |
| Write-Host "All tests passed" | |
| } | |
| } else { | |
| Write-Warning "LastTest.log not found at $logPath" | |
| } | |
| - name: Upload LastTest log | |
| if: always() | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| name: msvc2017-LastTest-log | |
| path: ${{ env.THRIFT_BUILD_DIR }}\Testing\Temporary\LastTest.log | |
| if-no-files-found: warn |