Release pgtyped-rescript 3.0.1 #27
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 | |
| on: | |
| pull_request: | |
| paths: | |
| - '.github/workflows/release.yml' | |
| - 'package.json' | |
| - 'package-lock.json' | |
| - 'packages/**' | |
| workflow_dispatch: | |
| push: | |
| tags: | |
| - '[0-9]*.[0-9]*.[0-9]*' | |
| - 'v[0-9]*.[0-9]*.[0-9]*' | |
| permissions: | |
| contents: read | |
| jobs: | |
| package-checks: | |
| name: Package build and test | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Use Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '20' | |
| cache: 'npm' | |
| registry-url: 'https://registry.npmjs.org' | |
| - run: npm ci | |
| - name: Validate release tag | |
| if: startsWith(github.ref, 'refs/tags/') | |
| run: | | |
| tag="${GITHUB_REF_NAME#v}" | |
| matched_package="" | |
| for package_dir in \ | |
| packages/wire \ | |
| packages/parser \ | |
| packages/runtime \ | |
| packages/query \ | |
| packages/cli | |
| do | |
| package_name="$(node -p "require('./${package_dir}/package.json').name")" | |
| package_version="$(node -p "require('./${package_dir}/package.json').version")" | |
| if [ "$tag" = "$package_version" ]; then | |
| matched_package="${matched_package}${matched_package:+, }${package_name}@${package_version}" | |
| fi | |
| done | |
| if [ -z "$matched_package" ]; then | |
| echo "Tag $GITHUB_REF_NAME does not match any publishable package version" | |
| exit 1 | |
| fi | |
| echo "Tag $GITHUB_REF_NAME matches ${matched_package}" | |
| - name: Build packages | |
| run: npm run build | |
| - name: Run lint | |
| run: npm run lint | |
| - name: Run package tests | |
| run: npx lerna run test --ignore @pgtyped/example --stream | |
| env: | |
| NODE_VERSION: '20' | |
| full-tests: | |
| name: Full test suite | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Use Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '20' | |
| cache: 'npm' | |
| registry-url: 'https://registry.npmjs.org' | |
| - run: npm ci | |
| - name: Build packages | |
| run: npm run build | |
| - name: Run full test suite | |
| run: npm test | |
| env: | |
| NODE_VERSION: '20' | |
| dry-run: | |
| name: Publish dry run | |
| needs: package-checks | |
| if: ${{ !startsWith(github.ref, 'refs/tags/') }} | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Use Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '24' | |
| cache: 'npm' | |
| registry-url: 'https://registry.npmjs.org' | |
| - run: npm ci | |
| - run: npm run build | |
| - name: Dry-run publish packages | |
| run: | | |
| set -euo pipefail | |
| for package_dir in \ | |
| packages/wire \ | |
| packages/parser \ | |
| packages/runtime \ | |
| packages/query \ | |
| packages/cli | |
| do | |
| package_name="$(node -p "require('./${package_dir}/package.json').name")" | |
| package_version="$(node -p "require('./${package_dir}/package.json').version")" | |
| echo "Dry-running ${package_name}@${package_version}" | |
| if npm view "${package_name}@${package_version}" version >/dev/null 2>&1; then | |
| echo "${package_name}@${package_version} is already published; validating package contents only" | |
| npm pack "./${package_dir}" --dry-run | |
| continue | |
| fi | |
| npm publish "./${package_dir}" --access public --dry-run | |
| done | |
| publish: | |
| name: Publish to npm | |
| needs: | |
| - package-checks | |
| - full-tests | |
| if: startsWith(github.ref, 'refs/tags/') | |
| runs-on: ubuntu-latest | |
| environment: npm | |
| permissions: | |
| contents: read | |
| id-token: write | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Use Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '24' | |
| cache: 'npm' | |
| registry-url: 'https://registry.npmjs.org' | |
| - run: npm ci | |
| - run: npm run build | |
| - name: Publish packages with npm trusted publishing | |
| run: | | |
| set -euo pipefail | |
| release_version="${GITHUB_REF_NAME#v}" | |
| for package_dir in \ | |
| packages/wire \ | |
| packages/parser \ | |
| packages/runtime \ | |
| packages/query \ | |
| packages/cli | |
| do | |
| package_name="$(node -p "require('./${package_dir}/package.json').name")" | |
| package_version="$(node -p "require('./${package_dir}/package.json').version")" | |
| if [ "$package_version" != "$release_version" ]; then | |
| echo "Skipping ${package_name}@${package_version}; tag ${GITHUB_REF_NAME} releases ${release_version}" | |
| continue | |
| fi | |
| if npm view "${package_name}@${package_version}" version >/dev/null 2>&1; then | |
| echo "${package_name}@${package_version} is already published; skipping" | |
| continue | |
| fi | |
| echo "Publishing ${package_name}@${package_version}" | |
| npm publish "./${package_dir}" --access public --provenance | |
| done |