release: prepare v1.0.0 #12
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: 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" |