|
|
@@ -0,0 +1,89 @@
|
|
|
+name: Publish Minor 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 minor branch
|
|
|
+ if: github.ref == 'refs/heads/minor'
|
|
|
+
|
|
|
+ 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 on this branch since 24 h ago
|
|
|
+ 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 the current version from lerna.json
|
|
|
+ CURRENT_VERSION=$(node -p "require('./lerna.json').version")
|
|
|
+ # Split version into parts
|
|
|
+ IFS='.' read -r -a VERSION_PARTS <<< "$CURRENT_VERSION"
|
|
|
+ # Increment minor version for pre-release
|
|
|
+ MINOR=$((VERSION_PARTS[1] + 1))
|
|
|
+ # Compose new pre-release version incl. timestamp
|
|
|
+ NEW_VERSION="${VERSION_PARTS[0]}.${MINOR}.0-minor-${{ 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 minor 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 minor --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."
|