Skip to content

release: prepare v1.0.0 #13

release: prepare v1.0.0

release: prepare v1.0.0 #13

Workflow file for this run

name: release-dry-run
permissions:
contents: read
on:
workflow_dispatch:
pull_request:
paths:
- '.github/workflows/release*.yml'
- 'release/platforms.json'
- 'scripts/install.*'
- 'scripts/render-package-manager-files.mjs'
- 'scripts/release-platforms.mjs'
- 'scripts/verify-release.mjs'
- 'scripts/verify-release-attestations.sh'
- 'Formula/url-sanitize.rb'
- 'bucket/url-sanitize.json'
- 'package.json'
- 'packages/*/package.json'
- 'Cargo.toml'
- 'pyproject.toml'
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
env:
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: 'true'
jobs:
platform-matrix:
name: Generate Platform Matrix
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.matrix.outputs.matrix }}
steps:
- uses: actions/checkout@v6
with:
persist-credentials: false
- id: matrix
run: node scripts/release-platforms.mjs --gha-matrix >> "$GITHUB_OUTPUT"
verify:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
with:
persist-credentials: false
- uses: pnpm/action-setup@v6
- uses: actions/setup-node@v6
with:
node-version: '22'
cache: 'pnpm'
- run: pnpm install --frozen-lockfile
- run: pnpm verify:release
- name: Validate generated package-manager files
run: |
set -euo pipefail
node scripts/release-platforms.mjs --synthetic-sums "$RUNNER_TEMP/SHA256SUMS"
version="$(node -p "require('./packages/core/package.json').version")"
node scripts/render-package-manager-files.mjs \
--version "$version" \
--sums "$RUNNER_TEMP/SHA256SUMS" \
--out "$RUNNER_TEMP/package-managers"
ruby -c "$RUNNER_TEMP/package-managers/homebrew/Formula/url-sanitize.rb"
jq -e '.version and .architecture["64bit"].url and .architecture["64bit"].hash and .autoupdate' \
"$RUNNER_TEMP/package-managers/scoop/url-sanitize.json"
sh -n scripts/install.sh
- name: Summary
run: |
{
echo "## Release dry run"
echo
echo "Release metadata, package-manager rendering, Ruby syntax, Scoop JSON, and installer shell syntax passed."
} >> "$GITHUB_STEP_SUMMARY"
build-native:
needs: [verify, platform-matrix]
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.platform-matrix.outputs.matrix) }}
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v6
with:
persist-credentials: false
- uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.target }}
- uses: Swatinem/rust-cache@v2
- name: Build native binary
run: cargo build --release -p url-sanitize --target "${{ matrix.target }}"
shell: bash
- name: Stage binary
run: |
set -euo pipefail
src="target/${{ matrix.target }}/release/${{ matrix.binary }}"
mkdir -p "dist/${{ matrix.target }}"
cp "$src" "dist/${{ matrix.target }}/${{ matrix.binary }}"
chmod +x "dist/${{ matrix.target }}/${{ matrix.binary }}" || true
shell: bash
- name: Smoke native binary
run: |
set -euo pipefail
"dist/${{ matrix.target }}/${{ matrix.binary }}" --version
output="$("dist/${{ matrix.target }}/${{ matrix.binary }}" "https://example.com/?utm_source=x")"
test "$output" = "https://example.com/"
shell: bash
- name: Build release archive
run: |
set -euo pipefail
mkdir -p release-assets
if [[ "${{ matrix.archive }}" == *.zip ]]; then
powershell -NoProfile -Command "Compress-Archive -Path 'dist/${{ matrix.target }}/*' -DestinationPath 'release-assets/${{ matrix.archive }}'"
else
tar -czf "release-assets/${{ matrix.archive }}" -C "dist/${{ matrix.target }}" .
fi
shell: bash
- uses: actions/upload-artifact@v7
with:
name: release-dry-run-${{ matrix.target }}
path: release-assets/*
assemble-assets:
needs: build-native
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
with:
persist-credentials: false
- uses: actions/download-artifact@v8
with:
pattern: release-dry-run-*
path: release-assets
merge-multiple: true
- name: Build SHA256SUMS and render package managers
run: |
set -euo pipefail
cp scripts/install.sh release-assets/url-sanitize-installer.sh
cp scripts/install.ps1 release-assets/url-sanitize-installer.ps1
(cd release-assets && sha256sum * > SHA256SUMS)
version="$(node -p "require('./packages/core/package.json').version")"
node scripts/render-package-manager-files.mjs \
--version "$version" \
--sums release-assets/SHA256SUMS \
--out "$RUNNER_TEMP/package-managers"
ruby -c "$RUNNER_TEMP/package-managers/homebrew/Formula/url-sanitize.rb"
jq -e '.version and .architecture["64bit"].url and .architecture["64bit"].hash and .autoupdate' \
"$RUNNER_TEMP/package-managers/scoop/url-sanitize.json"
- name: Summary
run: |
{
echo "## Release assets"
echo
echo "Built archives, generated SHA256SUMS, and rendered Homebrew/Scoop metadata."
echo
sed 's/^/- /' release-assets/SHA256SUMS
} >> "$GITHUB_STEP_SUMMARY"