Skip to content

chore: prepare v0.1.0-pre.42 release (#421) (#422) #42

chore: prepare v0.1.0-pre.42 release (#421) (#422)

chore: prepare v0.1.0-pre.42 release (#421) (#422) #42

Workflow file for this run

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