Skip to content

Publish Master Branch to NPM #27

Publish Master Branch to NPM

Publish Master Branch to NPM #27

name: Publish Master Branch to NPM
on:
workflow_dispatch:
# Nightly run at 02:00 UTC
schedule:
- cron: '0 2 * * *'
jobs:
publish:
runs-on: ubuntu-latest
permissions:
contents: read
id-token: write
# Only allow workflow to run on master branch
if: github.ref == 'refs/heads/master'
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
# Check if branch received commits in the last 24 h; skip remainder if none
- name: Check for new commits
id: commit_check
run: |
# Count commits since 24 h ago on this branch
COMMITS=$(git rev-list --count --since="24 hours" HEAD)
echo "Commits found: $COMMITS"
if [ "$COMMITS" -eq 0 ]; then
echo "should_publish=false" >> $GITHUB_OUTPUT
else
echo "should_publish=true" >> $GITHUB_OUTPUT
fi
- name: Setup Node.js
if: ${{ steps.commit_check.outputs.should_publish == 'true' }}
uses: actions/setup-node@v4
with:
node-version: '22.x'
registry-url: 'https://registry.npmjs.org'
- name: Install dependencies
if: ${{ steps.commit_check.outputs.should_publish == 'true' }}
run: npm install --no-save
- name: Get current date
if: ${{ steps.commit_check.outputs.should_publish == 'true' }}
id: date
run: echo "date=$(date +'%Y%m%d%H%M')" >> $GITHUB_OUTPUT
- name: Configure Git
if: ${{ steps.commit_check.outputs.should_publish == 'true' }}
run: |
git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com"
git config --global user.name "github-actions[bot]"
- name: Version and build packages
if: ${{ steps.commit_check.outputs.should_publish == 'true' }}
run: |
# Get current version from lerna.json
CURRENT_VERSION=$(node -p "require('./lerna.json').version")
IFS='.' read -r -a VERSION_PARTS <<< "$CURRENT_VERSION"
# Increment patch version for pre-release
PATCH=$((VERSION_PARTS[2] + 1))
# Compose new pre-release version incl. timestamp
NEW_VERSION="${VERSION_PARTS[0]}.${VERSION_PARTS[1]}.${PATCH}-master-${{ steps.date.outputs.date }}"
npx lerna version $NEW_VERSION --no-git-tag-version --yes --no-push --force-publish
- name: Commit changes
if: ${{ steps.commit_check.outputs.should_publish == 'true' }}
run: |
git add .
git commit -m "chore: Bump version for pre-release to $NEW_VERSION"
- name: Publish to NPM
if: ${{ steps.commit_check.outputs.should_publish == 'true' }}
run: npx lerna publish from-package --yes --dist-tag master --no-git-reset
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
NPM_CONFIG_PROVENANCE: true
# Informative noop when skipping
- name: Skip publish
if: ${{ steps.commit_check.outputs.should_publish == 'false' }}
run: echo "No new commits in last 24 hours – skipping publish."