From 76f34fe17d484cfa33ccb55103bafe1822453bc2 Mon Sep 17 00:00:00 2001 From: Developer Date: Mon, 6 Apr 2026 19:06:48 -0700 Subject: [PATCH] Fix Windows tag passing: use env var instead of step outputs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Step outputs via GITHUB_OUTPUT are unreliable with act runner on Windows (BOM encoding issues). Replaced with job-level env var RELEASE_TAG set directly from inputs.tag, and checkout ref also uses inputs.tag directly. Eliminated the Determine tag step entirely — no intermediate output needed. Co-Authored-By: Claude Opus 4.6 (1M context) --- .gitea/workflows/build-app-windows.yml | 50 +++++++++++----------- .gitea/workflows/build-sidecar-windows.yml | 48 +++++++++------------ 2 files changed, 45 insertions(+), 53 deletions(-) diff --git a/.gitea/workflows/build-app-windows.yml b/.gitea/workflows/build-app-windows.yml index 632f527..701a0dc 100644 --- a/.gitea/workflows/build-app-windows.yml +++ b/.gitea/workflows/build-app-windows.yml @@ -7,31 +7,24 @@ on: description: 'Release tag to build (e.g. v1.4.5)' required: true +env: + NODE_VERSION: "20" + jobs: build-windows: name: Build App (Windows) runs-on: windows-latest env: - NODE_VERSION: "20" + RELEASE_TAG: ${{ inputs.tag }} steps: - - name: Determine tag - id: tag + - name: Show tag shell: powershell run: | - $TAG = "${{ inputs.tag }}" - if (-not $TAG) { $TAG = "${{ github.event.inputs.tag }}" } - if (-not $TAG) { - $remote = git ls-remote --tags origin 'refs/tags/v*' 2>$null - if ($remote) { - $TAG = ($remote -split "`n" | Select-Object -Last 1) -replace '.*refs/tags/', '' - } - } - Write-Host "Building for tag: $TAG" - "tag=$TAG" | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append + Write-Host "Building for tag: $env:RELEASE_TAG" - uses: actions/checkout@v4 with: - ref: ${{ steps.tag.outputs.tag }} + ref: ${{ inputs.tag }} - name: Set up Node.js uses: actions/setup-node@v4 @@ -64,19 +57,24 @@ jobs: run: | $REPO_API = "${{ github.server_url }}/api/v1/repos/${{ github.repository }}" $Headers = @{ "Authorization" = "token $env:BUILD_TOKEN" } - $TAG = "${{ steps.tag.outputs.tag }}" - Write-Host "Release tag: ${TAG}" + $TAG = $env:RELEASE_TAG + Write-Host "Release tag: $TAG" - Write-Host "Waiting for release ${TAG} to be available..." + if (-not $TAG) { + Write-Host "ERROR: RELEASE_TAG is empty" + exit 1 + } + + Write-Host "Waiting for release $TAG to be available..." $RELEASE_ID = $null for ($i = 1; $i -le 30; $i++) { try { - $release = Invoke-RestMethod -Uri "${REPO_API}/releases/tags/${TAG}" -Headers $Headers -ErrorAction Stop + $release = Invoke-RestMethod -Uri "$REPO_API/releases/tags/$TAG" -Headers $Headers -ErrorAction Stop $RELEASE_ID = $release.id if ($RELEASE_ID) { - Write-Host "Found release: ${TAG} (ID: ${RELEASE_ID})" + Write-Host "Found release: $TAG (ID: $RELEASE_ID)" break } } catch {} @@ -86,7 +84,7 @@ jobs: } if (-not $RELEASE_ID) { - Write-Host "ERROR: Failed to find release for tag ${TAG} after 30 attempts." + Write-Host "ERROR: Failed to find release for tag $TAG after 30 attempts." exit 1 } @@ -94,17 +92,17 @@ jobs: $filename = $_.Name $encodedName = [System.Uri]::EscapeDataString($filename) $size = [math]::Round($_.Length / 1MB, 1) - Write-Host "Uploading ${filename} (${size} MB)..." + Write-Host "Uploading $filename ($size MB)..." try { - $assets = Invoke-RestMethod -Uri "${REPO_API}/releases/${RELEASE_ID}/assets" -Headers $Headers + $assets = Invoke-RestMethod -Uri "$REPO_API/releases/$RELEASE_ID/assets" -Headers $Headers $existing = $assets | Where-Object { $_.name -eq $filename } if ($existing) { - Invoke-RestMethod -Uri "${REPO_API}/releases/${RELEASE_ID}/assets/$($existing.id)" -Method Delete -Headers $Headers + Invoke-RestMethod -Uri "$REPO_API/releases/$RELEASE_ID/assets/$($existing.id)" -Method Delete -Headers $Headers } } catch {} - $uploadUrl = "${REPO_API}/releases/${RELEASE_ID}/assets?name=${encodedName}" + $uploadUrl = "$REPO_API/releases/$RELEASE_ID/assets?name=$encodedName" $result = curl.exe --fail --silent --show-error ` -X POST ` -H "Authorization: token $env:BUILD_TOKEN" ` @@ -112,8 +110,8 @@ jobs: -T "$($_.FullName)" ` "$uploadUrl" 2>&1 if ($LASTEXITCODE -eq 0) { - Write-Host "Upload successful: ${filename}" + Write-Host "Upload successful: $filename" } else { - Write-Host "WARNING: Upload failed for ${filename}: ${result}" + Write-Host "WARNING: Upload failed for ${filename}: $result" } } diff --git a/.gitea/workflows/build-sidecar-windows.yml b/.gitea/workflows/build-sidecar-windows.yml index 9e3e1b3..beef6f4 100644 --- a/.gitea/workflows/build-sidecar-windows.yml +++ b/.gitea/workflows/build-sidecar-windows.yml @@ -13,25 +13,16 @@ jobs: runs-on: windows-latest env: PYTHON_VERSION: "3.11" + RELEASE_TAG: ${{ inputs.tag }} steps: - - name: Determine tag - id: tag + - name: Show tag shell: powershell run: | - $TAG = "${{ inputs.tag }}" - if (-not $TAG) { $TAG = "${{ github.event.inputs.tag }}" } - if (-not $TAG) { - $remote = git ls-remote --tags origin 'refs/tags/sidecar-v*' 2>$null - if ($remote) { - $TAG = ($remote -split "`n" | Select-Object -Last 1) -replace '.*refs/tags/', '' - } - } - Write-Host "Building for tag: $TAG" - "tag=$TAG" | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append + Write-Host "Building for tag: $env:RELEASE_TAG" - uses: actions/checkout@v4 with: - ref: ${{ steps.tag.outputs.tag }} + ref: ${{ inputs.tag }} - name: Install uv shell: powershell @@ -40,7 +31,6 @@ jobs: Write-Host "uv already installed: $(uv --version)" } else { irm https://astral.sh/uv/install.ps1 | iex - # Add both possible uv install locations to PATH $uvPaths = @( "$env:USERPROFILE\.local\bin", "$env:USERPROFILE\.cargo\bin", @@ -81,8 +71,6 @@ jobs: run: | Remove-Item -Recurse -Force dist\local-transcription-backend, build -ErrorAction SilentlyContinue uv pip install torch torchaudio --index-url https://download.pytorch.org/whl/cpu --force-reinstall - # Run pyinstaller directly from venv to prevent uv run from - # re-resolving torch back to the CUDA version via pyproject.toml sources .venv\Scripts\pyinstaller.exe local-transcription-headless.spec - name: Package sidecar (CPU) @@ -97,18 +85,24 @@ jobs: run: | $REPO_API = "${{ github.server_url }}/api/v1/repos/${{ github.repository }}" $Headers = @{ "Authorization" = "token $env:BUILD_TOKEN" } - $TAG = "${{ steps.tag.outputs.tag }}" + $TAG = $env:RELEASE_TAG + Write-Host "Release tag: $TAG" - Write-Host "Waiting for sidecar release ${TAG} to be available..." + if (-not $TAG) { + Write-Host "ERROR: RELEASE_TAG is empty" + exit 1 + } + + Write-Host "Waiting for sidecar release $TAG to be available..." $RELEASE_ID = $null for ($i = 1; $i -le 30; $i++) { try { - $release = Invoke-RestMethod -Uri "${REPO_API}/releases/tags/${TAG}" -Headers $Headers -ErrorAction Stop + $release = Invoke-RestMethod -Uri "$REPO_API/releases/tags/$TAG" -Headers $Headers -ErrorAction Stop $RELEASE_ID = $release.id if ($RELEASE_ID) { - Write-Host "Found sidecar release: ${TAG} (ID: ${RELEASE_ID})" + Write-Host "Found sidecar release: $TAG (ID: $RELEASE_ID)" break } } catch {} @@ -118,7 +112,7 @@ jobs: } if (-not $RELEASE_ID) { - Write-Host "ERROR: Failed to find sidecar release for tag ${TAG} after 30 attempts." + Write-Host "ERROR: Failed to find sidecar release for tag $TAG after 30 attempts." exit 1 } @@ -126,17 +120,17 @@ jobs: $filename = $_.Name $encodedName = [System.Uri]::EscapeDataString($filename) $size = [math]::Round($_.Length / 1MB, 1) - Write-Host "Uploading ${filename} (${size} MB)..." + Write-Host "Uploading $filename ($size MB)..." try { - $assets = Invoke-RestMethod -Uri "${REPO_API}/releases/${RELEASE_ID}/assets" -Headers $Headers + $assets = Invoke-RestMethod -Uri "$REPO_API/releases/$RELEASE_ID/assets" -Headers $Headers $existing = $assets | Where-Object { $_.name -eq $filename } if ($existing) { - Invoke-RestMethod -Uri "${REPO_API}/releases/${RELEASE_ID}/assets/$($existing.id)" -Method Delete -Headers $Headers + Invoke-RestMethod -Uri "$REPO_API/releases/$RELEASE_ID/assets/$($existing.id)" -Method Delete -Headers $Headers } } catch {} - $uploadUrl = "${REPO_API}/releases/${RELEASE_ID}/assets?name=${encodedName}" + $uploadUrl = "$REPO_API/releases/$RELEASE_ID/assets?name=$encodedName" $result = curl.exe --fail --silent --show-error ` -X POST ` -H "Authorization: token $env:BUILD_TOKEN" ` @@ -144,8 +138,8 @@ jobs: -T "$($_.FullName)" ` "$uploadUrl" 2>&1 if ($LASTEXITCODE -eq 0) { - Write-Host "Upload successful: ${filename}" + Write-Host "Upload successful: $filename" } else { - Write-Host "WARNING: Upload failed for ${filename}: ${result}" + Write-Host "WARNING: Upload failed for ${filename}: $result" } }