Skip to content

Release pgtyped-rescript 3.0.1 #27

Release pgtyped-rescript 3.0.1

Release pgtyped-rescript 3.0.1 #27

Workflow file for this run

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