Kaynağa Gözat

chore: Add "publish to minor" workflow to master branch

Michael Bromley 6 ay önce
ebeveyn
işleme
691f17ff0f
1 değiştirilmiş dosya ile 89 ekleme ve 0 silme
  1. 89 0
      .github/workflows/publish_minor_to_npm.yml

+ 89 - 0
.github/workflows/publish_minor_to_npm.yml

@@ -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."