Merge pull request #426 from jonathanweinberg/codex/release-v0.1.0-pr… #43
Workflow file for this run
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: Pre-1.0 Release | |
| env: | |
| FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| version: | |
| description: Optional release version. Must match release-metadata.json when supplied. | |
| required: false | |
| type: string | |
| push: | |
| tags: | |
| - 'v*' | |
| permissions: | |
| contents: write | |
| jobs: | |
| package: | |
| name: Build unsigned release package | |
| runs-on: windows-2022 | |
| steps: | |
| - name: Check out repository | |
| uses: actions/checkout@v6 | |
| with: | |
| fetch-depth: 0 | |
| - name: Set up Node.js | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: '22' | |
| cache: npm | |
| cache-dependency-path: interface/standalone-dashboard/package-lock.json | |
| - name: Install dashboard dependencies | |
| run: npm --prefix interface/standalone-dashboard ci | |
| - name: Test standalone dashboard | |
| run: npm --prefix interface/standalone-dashboard run test | |
| - name: Run ShareSurfer PowerShell tests | |
| shell: pwsh | |
| run: pwsh -NoLogo -NoProfile -File tests/Invoke-ShareSurferTests.ps1 | |
| - name: Run Windows PowerShell 5.1 validation | |
| shell: powershell | |
| run: > | |
| powershell.exe -NoLogo -NoProfile -ExecutionPolicy Bypass | |
| -File scripts/Test-ShareSurferWindowsPowerShell51.ps1 | |
| - name: Resolve package version | |
| id: release_metadata | |
| shell: pwsh | |
| run: | | |
| $metadata = Get-Content -LiteralPath .\release-metadata.json -Raw | ConvertFrom-Json | |
| $version = [string]$metadata.packageVersion | |
| $tag = [string]$metadata.currentPrereleaseTag | |
| $packageName = [string]$metadata.packageName | |
| $zipFileName = [string]$metadata.zipAssetName | |
| $releaseUrl = [string]$metadata.releaseUrl | |
| $minimumDependencyAgeDays = [int]$metadata.minimumDependencyAgeDays | |
| $metadataTag = "v$version" | |
| $metadataPackageName = "ShareSurfer-$version" | |
| $metadataZipFileName = "$metadataPackageName.zip" | |
| if ($tag -ne $metadataTag) { | |
| throw "release-metadata.json mismatch: currentPrereleaseTag must be $metadataTag." | |
| } | |
| if ($packageName -ne $metadataPackageName) { | |
| throw "release-metadata.json mismatch: packageName must be $metadataPackageName." | |
| } | |
| if ($zipFileName -ne $metadataZipFileName) { | |
| throw "release-metadata.json mismatch: zipAssetName must be $metadataZipFileName." | |
| } | |
| $inputVersion = '${{ github.event.inputs.version }}' | |
| if (-not [string]::IsNullOrWhiteSpace($inputVersion)) { | |
| $normalizedInput = $inputVersion.Trim() | |
| if ($normalizedInput.StartsWith('v')) { | |
| $normalizedInput = $normalizedInput.Substring(1) | |
| } | |
| if ($normalizedInput -ne $version) { | |
| throw "Manual version '$inputVersion' does not match release-metadata.json version '$version'." | |
| } | |
| } | |
| if ($env:GITHUB_REF_TYPE -eq 'tag' -and $env:GITHUB_REF_NAME -ne $tag) { | |
| throw "Tag '$env:GITHUB_REF_NAME' does not match release-metadata.json tag '$tag'." | |
| } | |
| "version=$version" >> $env:GITHUB_OUTPUT | |
| "tag=$tag" >> $env:GITHUB_OUTPUT | |
| "package_name=$packageName" >> $env:GITHUB_OUTPUT | |
| "zip_file_name=$zipFileName" >> $env:GITHUB_OUTPUT | |
| "release_url=$releaseUrl" >> $env:GITHUB_OUTPUT | |
| "minimum_dependency_age_days=$minimumDependencyAgeDays" >> $env:GITHUB_OUTPUT | |
| - name: Build unsigned release package | |
| shell: pwsh | |
| run: > | |
| pwsh -NoLogo -NoProfile -File scripts/New-ShareSurferRelease.ps1 | |
| -Version '${{ steps.release_metadata.outputs.version }}' | |
| -OutputRoot artifacts | |
| -SkipNpmInstall | |
| -MinimumDependencyAgeDays '${{ steps.release_metadata.outputs.minimum_dependency_age_days }}' | |
| -Force | |
| -PassThru | |
| | ConvertTo-Json -Depth 6 | |
| - name: Upload unsigned release package artifact | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: ${{ steps.release_metadata.outputs.package_name }}-unsigned | |
| path: | | |
| artifacts/${{ steps.release_metadata.outputs.package_name }} | |
| artifacts/${{ steps.release_metadata.outputs.zip_file_name }} | |
| artifacts/${{ steps.release_metadata.outputs.zip_file_name }}.sha256 | |
| - name: Publish GitHub release for tags | |
| if: startsWith(github.ref, 'refs/tags/') | |
| shell: pwsh | |
| env: | |
| GH_TOKEN: ${{ github.token }} | |
| run: | | |
| $version = '${{ steps.release_metadata.outputs.version }}' | |
| $tag = '${{ steps.release_metadata.outputs.tag }}' | |
| $packageName = '${{ steps.release_metadata.outputs.package_name }}' | |
| $zipFileName = '${{ steps.release_metadata.outputs.zip_file_name }}' | |
| $zip = "artifacts/$zipFileName" | |
| $hash = "artifacts/$zipFileName.sha256" | |
| $notes = "artifacts/$packageName/RELEASE.md" | |
| $args = @( | |
| 'release', | |
| 'create', | |
| $tag, | |
| $zip, | |
| $hash, | |
| '--title', | |
| "ShareSurfer $tag", | |
| '--notes-file', | |
| $notes | |
| ) | |
| if ($version -match '-') { | |
| $args += '--prerelease' | |
| } | |
| gh @args |