Repository navigation
162 lines (138 loc) · 6.87 KB
/
Copy pathsquad-version-promote.yml
File metadata and controls
162 lines (138 loc) · 6.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
name: Squad Version Promote
# Automatically bumps the dev branch base version after an official release from main.
# Triggered when a GitHub Release is published (which squad-release.yml creates after a push to main).
# Reads the released version, computes the next minor version, and commits updated
# package.json files to dev so the branch is always prepared for the next release cycle.
#
# Example: release v0.11.0 is published → dev is bumped to 0.12.0
#
# Safety: the bump is skipped when dev is already ahead of the released version,
# so manually pre-bumped branches are never overwritten.
on:
release:
types: [published]
# Manual trigger for testing / recovery — supports dry_run and version override
workflow_dispatch:
inputs:
dry_run:
description: 'Dry run — show what would happen without pushing'
required: false
default: 'false'
type: choice
options: ['false', 'true']
released_version:
description: 'Override released version (for testing, e.g. 0.11.0)'
required: false
default: ''
# Prevent two concurrent runs so version bumps never interleave
concurrency:
group: squad-version-promote
cancel-in-progress: false
permissions:
contents: write
jobs:
bump-dev-version:
name: Bump dev branch base version
runs-on: ubuntu-latest
steps:
# ── Checkout & git setup ────────────────────────────────────────────────
- name: Checkout repository
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 #v7
with:
fetch-depth: 0
token: ${{ secrets.GITHUB_TOKEN }}
- name: Configure git identity
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
- name: Fetch all branches
run: git fetch --all
# ── Determine released version ──────────────────────────────────────────
- name: Read released version
id: released
run: |
if [ -n "${{ inputs.released_version }}" ]; then
RELEASED_VERSION="${{ inputs.released_version }}"
echo "Using manual override: $RELEASED_VERSION"
else
# Strip leading 'v' from the release tag name (e.g. v0.11.0 → 0.11.0)
RELEASED_VERSION="${{ github.event.release.tag_name }}"
RELEASED_VERSION="${RELEASED_VERSION#v}"
echo "Using release tag: $RELEASED_VERSION"
fi
echo "version=$RELEASED_VERSION" >> "$GITHUB_OUTPUT"
# ── Compute next minor version ──────────────────────────────────────────
- name: Compute next minor version
id: next
run: |
RELEASED="${{ steps.released.outputs.version }}"
MAJOR=$(echo "$RELEASED" | cut -d. -f1)
MINOR=$(echo "$RELEASED" | cut -d. -f2)
NEXT_MINOR=$((MINOR + 1))
NEXT_VERSION="${MAJOR}.${NEXT_MINOR}.0"
echo "Released: $RELEASED → Next: $NEXT_VERSION"
echo "version=$NEXT_VERSION" >> "$GITHUB_OUTPUT"
# ── Switch to dev and read its current version ──────────────────────────
- name: Checkout dev branch
run: git checkout dev
- name: Read current dev version
id: dev
run: |
DEV_VERSION=$(node -e "console.log(require('./package.json').version)")
echo "version=$DEV_VERSION" >> "$GITHUB_OUTPUT"
echo "Dev branch version: $DEV_VERSION"
# ── Decide whether a bump is necessary ──────────────────────────────────
- name: Check if bump is needed
id: check
run: |
DEV="${{ steps.dev.outputs.version }}"
RELEASED="${{ steps.released.outputs.version }}"
# Bump is needed only when dev version <= released version
NEEDS_BUMP=$(node scripts/release/version-compare.mjs "$DEV" "$RELEASED")
echo "needs_bump=$NEEDS_BUMP" >> "$GITHUB_OUTPUT"
if [ "$NEEDS_BUMP" = "true" ]; then
echo "✅ Bump needed: dev($DEV) <= released($RELEASED)"
else
echo "⏭️ Skipping: dev($DEV) is already ahead of released($RELEASED)"
fi
# ── Update all package.json files ───────────────────────────────────────
- name: Bump version in all package.json files
if: steps.check.outputs.needs_bump == 'true'
env:
PACKAGE_VERSION: ${{ steps.next.outputs.version }}
run: |
echo "Bumping all package.json files to $PACKAGE_VERSION"
node scripts/release/set-package-versions.mjs
- name: Show diff
if: steps.check.outputs.needs_bump == 'true'
run: git diff
# ── Commit and push (skipped on dry run) ─────────────────────────────────
- name: Commit and push to dev
if: >-
steps.check.outputs.needs_bump == 'true' &&
(github.event_name != 'workflow_dispatch' || inputs.dry_run == 'false')
run: |
RELEASED="${{ steps.released.outputs.version }}"
NEW_VERSION="${{ steps.next.outputs.version }}"
git add package.json packages/squad-cli/package.json packages/squad-sdk/package.json
if git diff --cached --quiet; then
echo "ℹ️ No changes to commit — files already at $NEW_VERSION"
else
git commit -m "chore: bump dev base version to ${NEW_VERSION} after v${RELEASED} release"
git push origin dev
echo "✅ Pushed version bump to dev: ${NEW_VERSION}"
fi
# ── Summary steps ────────────────────────────────────────────────────────
- name: Dry run summary
if: inputs.dry_run == 'true'
run: |
echo "🔍 Dry run complete — no changes pushed."
echo " Released version : ${{ steps.released.outputs.version }}"
echo " Dev version : ${{ steps.dev.outputs.version }}"
echo " Next version : ${{ steps.next.outputs.version }}"
echo " Bump needed : ${{ steps.check.outputs.needs_bump }}"
- name: Skip summary
if: steps.check.outputs.needs_bump != 'true'
run: |
echo "⏭️ Version bump skipped."
echo " Dev (${{ steps.dev.outputs.version }}) is already ahead of released (${{ steps.released.outputs.version }})."