Skip to content

Commit c364efa

Browse files
committed
refactor: switch to manual dispatch only for releases
Every push to main publishes a dev build. Stable releases are triggered explicitly via workflow_dispatch, allowing multiple PRs to be batched into a single release before shipping.
1 parent 55edcd8 commit c364efa

1 file changed

Lines changed: 22 additions & 60 deletions

File tree

.github/workflows/publish-ui-npm.yaml

Lines changed: 22 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -13,63 +13,27 @@ on:
1313
default: patch
1414

1515
jobs:
16-
# ── Detect release mode ──────────────────────────────────────────────────
17-
# Reads the merged PR's labels to decide dev vs release, and which semver
18-
# component to bump. workflow_dispatch always triggers a release.
19-
detect-mode:
20-
name: Detect release mode
21-
runs-on: ubuntu-latest
22-
outputs:
23-
release-mode: ${{ steps.check.outputs.mode }}
24-
bump-type: ${{ steps.check.outputs.bump-type }}
25-
steps:
26-
- name: Check trigger and PR labels
27-
id: check
28-
env:
29-
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
30-
run: |
31-
# workflow_dispatch always triggers a release with the chosen bump type.
32-
if [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then
33-
echo "mode=release" >> "$GITHUB_OUTPUT"
34-
echo "bump-type=${{ inputs.bump-type }}" >> "$GITHUB_OUTPUT"
35-
exit 0
36-
fi
37-
38-
# For push events, check the merged PR's labels to decide dev vs release.
39-
# NOTE: relies on merge commits (not squash/rebase) so github.sha matches
40-
# the PR's merge commit SHA in the search results.
41-
LABELS=$(gh pr list \
42-
--state merged \
43-
--base main \
44-
--search "${{ github.sha }}" \
45-
--json labels \
46-
--jq '.[0].labels[].name' 2>/dev/null || true)
47-
48-
# Match "release" or "release:<type>" but not unrelated labels like
49-
# "release-blocker" or "release-notes".
50-
if echo "$LABELS" | grep -qE "^release(:|$)"; then
51-
echo "mode=release" >> "$GITHUB_OUTPUT"
52-
if echo "$LABELS" | grep -q "release:major"; then
53-
echo "bump-type=major" >> "$GITHUB_OUTPUT"
54-
elif echo "$LABELS" | grep -q "release:minor"; then
55-
echo "bump-type=minor" >> "$GITHUB_OUTPUT"
56-
else
57-
echo "bump-type=patch" >> "$GITHUB_OUTPUT"
58-
fi
59-
else
60-
echo "mode=dev" >> "$GITHUB_OUTPUT"
61-
echo "bump-type=patch" >> "$GITHUB_OUTPUT"
62-
fi
16+
# ── Dev publish ──────────────────────────────────────────────────────────
17+
# Every push to main publishes a pre-release dev build. Releases are
18+
# triggered manually via workflow_dispatch when the team is ready to ship.
19+
publish-dev:
20+
name: Publish dev build
21+
if: github.event_name == 'push'
22+
uses: datum-cloud/actions/.github/workflows/publish-npm-package.yaml@v1.13.0
23+
with:
24+
package-name: "@datum-cloud/activity-ui"
25+
package-path: ui
26+
release-mode: dev
27+
secrets: inherit
6328

6429
# ── Bump version ─────────────────────────────────────────────────────────
65-
# Runs only for release mode. Bumps the version in package.json, commits,
30+
# Runs only on manual dispatch. Bumps the version in package.json, commits,
6631
# creates the git tag, and pushes to main. All downstream jobs read the
6732
# version from this job's output — the npm publish workflow receives it
6833
# already set in package.json.
6934
bump-version:
7035
name: Bump version
71-
needs: detect-mode
72-
if: needs.detect-mode.outputs.release-mode == 'release'
36+
if: github.event_name == 'workflow_dispatch'
7337
runs-on: ubuntu-latest
7438
permissions:
7539
contents: write
@@ -102,7 +66,7 @@ jobs:
10266
id: bump
10367
working-directory: ui
10468
env:
105-
BUMP_TYPE: ${{ needs.detect-mode.outputs.bump-type }}
69+
BUMP_TYPE: ${{ inputs.bump-type }}
10670
run: |
10771
if [[ "$BUMP_TYPE" != "major" && "$BUMP_TYPE" != "minor" && "$BUMP_TYPE" != "patch" ]]; then
10872
echo "::error::Invalid bump-type '$BUMP_TYPE'. Must be major, minor, or patch."
@@ -113,24 +77,22 @@ jobs:
11377
echo "new-version=${NEW_VERSION}" >> "$GITHUB_OUTPUT"
11478
git push origin main --follow-tags
11579
116-
# ── Publish to npm ───────────────────────────────────────────────────────
117-
# For release: package.json already has the bumped version from bump-version.
118-
# For dev: the reusable workflow computes a pre-release version from the SHA.
119-
publish:
120-
needs: [detect-mode, bump-version]
121-
if: always() && !failure() && !cancelled() && needs.detect-mode.result == 'success'
80+
# ── Publish release to npm ───────────────────────────────────────────────
81+
# Runs after bump-version. package.json already has the bumped version.
82+
publish-release:
83+
name: Publish release
84+
needs: bump-version
12285
uses: datum-cloud/actions/.github/workflows/publish-npm-package.yaml@v1.13.0
12386
with:
12487
package-name: "@datum-cloud/activity-ui"
12588
package-path: ui
126-
release-mode: ${{ needs.detect-mode.outputs.release-mode }}
89+
release-mode: release
12790
secrets: inherit
12891

12992
# ── Create GitHub Release ────────────────────────────────────────────────
13093
create-release:
13194
name: Create GitHub Release
132-
needs: [bump-version, publish]
133-
if: needs.bump-version.result == 'success'
95+
needs: [bump-version, publish-release]
13496
runs-on: ubuntu-latest
13597
permissions:
13698
contents: write

0 commit comments

Comments
 (0)