Publish Master Branch to NPM #20
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: 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." |