Skip to content

Commit b28a542

Browse files
committed
chore: merge main into feat/harness-implementation
Brings in the updated release workflow with preview release support, AGUI protocol additions, and other main branch changes.
2 parents 05570b9 + ce683c0 commit b28a542

70 files changed

Lines changed: 3707 additions & 566 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/pr-title.yml

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,7 @@ jobs:
3838
The subject "{subject}" found in the pull request title "{title}"
3939
must start with a lowercase letter.
4040
Example: "feat: add deploy command"
41-
# Validate the commit message when a PR has a single commit, since
42-
# GitHub suggests using it as the merge commit message on squash-merge
43-
validateSingleCommit: true
44-
validateSingleCommitMatchesPrTitle: true
41+
validateSingleCommit: false
4542
# Skip validation for bot/dependency PRs
4643
ignoreLabels: |
4744
bot

.github/workflows/release.yml

Lines changed: 43 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@ on:
88
required: true
99
type: choice
1010
options:
11-
- preview
12-
- preview-major
1311
- patch
1412
- minor
1513
- major
@@ -35,13 +33,28 @@ jobs:
3533
outputs:
3634
version: ${{ steps.bump.outputs.version }}
3735
branch: ${{ steps.bump.outputs.branch }}
36+
dist_tag: ${{ steps.release-meta.outputs.dist_tag }}
37+
base_branch: ${{ steps.release-meta.outputs.base_branch }}
3838

3939
steps:
40-
- name: Validate running from main
40+
- name: Determine release metadata
41+
id: release-meta
4142
run: |
42-
if [[ "${{ github.ref }}" != "refs/heads/main" ]]; then
43-
echo "⚠️ WARNING: Running from ${{ github.ref }}"
44-
echo "⚠️ Production releases should only run from main branch"
43+
BRANCH_NAME="${{ github.ref_name }}"
44+
VERSION_BUMP="${{ github.event.inputs.bump_type }}"
45+
46+
if [[ "$BRANCH_NAME" == "main" ]]; then
47+
echo "dist_tag=latest" >> $GITHUB_OUTPUT
48+
echo "base_branch=main" >> $GITHUB_OUTPUT
49+
else
50+
if [[ "$VERSION_BUMP" != "prerelease" ]]; then
51+
echo "❌ ERROR: Only the prerelease bump type is allowed from non-main branches."
52+
echo "Current branch: $BRANCH_NAME, bump type: $VERSION_BUMP"
53+
exit 1
54+
fi
55+
echo "dist_tag=preview" >> $GITHUB_OUTPUT
56+
echo "base_branch=$BRANCH_NAME" >> $GITHUB_OUTPUT
57+
echo "ℹ️ Publishing preview release from branch: $BRANCH_NAME"
4558
fi
4659
4760
- name: Checkout code
@@ -151,46 +164,39 @@ jobs:
151164
env:
152165
GH_TOKEN: ${{ github.token }}
153166
NEW_VERSION: ${{ steps.bump.outputs.version }}
154-
GITHUB_REF: ${{ github.ref }}
167+
BASE_BRANCH: ${{ steps.release-meta.outputs.base_branch }}
168+
DIST_TAG: ${{ steps.release-meta.outputs.dist_tag }}
155169
GITHUB_ACTOR: ${{ github.actor }}
156170
run: |
157171
BRANCH_NAME="release/v$NEW_VERSION"
158172
159-
WARNING_TEXT=""
160-
if [ "$GITHUB_REF" != "refs/heads/main" ]; then
161-
WARNING_TEXT="**WARNING**: Not running from main branch!"
162-
else
163-
WARNING_TEXT="✅ Running from main branch"
173+
RELEASE_TYPE="Production"
174+
if [ "$DIST_TAG" != "latest" ]; then
175+
RELEASE_TYPE="Preview (npm tag: $DIST_TAG)"
164176
fi
165177
166178
gh pr create \
167-
--base main \
179+
--base "$BASE_BRANCH" \
168180
--head "$BRANCH_NAME" \
169181
--title "Release v$NEW_VERSION" \
170-
--body "## 🚀 Release v$NEW_VERSION
182+
--body "## Release v$NEW_VERSION
171183
172184
This PR was automatically created by the release workflow.
173185
174-
### ⚠️ Pre-merge Checklist
186+
**Release type:** $RELEASE_TYPE
187+
**Base branch:** $BASE_BRANCH
188+
189+
### Pre-merge Checklist
175190
- [ ] Review CHANGELOG.md - ensure it has meaningful release notes
176191
- [ ] Verify version numbers are correct in all files
177192
- [ ] All CI checks are passing
178193
179-
### 📝 How to improve changelog
180-
If the auto-generated changelog isn't good enough:
181-
1. Edit CHANGELOG.md in this PR
182-
2. Commit the changes
183-
3. Then approve and merge
184-
185-
### 🔄 Release Process
194+
### Release Process
186195
After merging this PR:
187196
1. Package will be built and tested
188197
2. **Manual approval required** before publishing to npm
189198
3. GitHub release and tag created after publication
190199
191-
### 🚨 Running from: $GITHUB_REF
192-
$WARNING_TEXT
193-
194200
---
195201
*Triggered by @$GITHUB_ACTOR*"
196202
@@ -285,7 +291,6 @@ jobs:
285291
name: Publish to npm
286292
needs: [prepare-release, release-approval]
287293
runs-on: ubuntu-latest
288-
if: github.ref == 'refs/heads/main'
289294
environment:
290295
name: npm-publish
291296
url: https://www.npmjs.com/package/@aws/agentcore
@@ -294,14 +299,15 @@ jobs:
294299
contents: write # Required to push git tags
295300

296301
steps:
297-
- name: Checkout latest main (AFTER PR merge)
302+
- name: Checkout base branch (AFTER PR merge)
298303
uses: actions/checkout@v6
299304
with:
300-
ref: main
305+
ref: ${{ needs.prepare-release.outputs.base_branch }}
301306
fetch-depth: 0
302307

303308
- name: Verify we have the merged code
304309
run: |
310+
echo "Branch: ${{ needs.prepare-release.outputs.base_branch }}"
305311
echo "Current version in package.json:"
306312
cat package.json | grep '"version"'
307313
echo ""
@@ -336,24 +342,25 @@ jobs:
336342
env:
337343
VERSION: ${{ steps.version.outputs.version }}
338344
EXPECTED_VERSION: ${{ needs.prepare-release.outputs.version }}
345+
BASE_BRANCH: ${{ needs.prepare-release.outputs.base_branch }}
339346
run: |
340-
echo "Version in main branch: $VERSION"
347+
echo "Version in $BASE_BRANCH: $VERSION"
341348
echo "Expected version from PR: $EXPECTED_VERSION"
342349
343350
if [ "$VERSION" != "$EXPECTED_VERSION" ]; then
344351
echo ""
345352
echo "❌ ERROR: Version mismatch!"
346353
echo ""
347354
echo "The release PR has NOT been merged yet."
348-
echo "Main branch has: $VERSION"
355+
echo "$BASE_BRANCH has: $VERSION"
349356
echo "Release PR has: $EXPECTED_VERSION"
350357
echo ""
351-
echo "👉 Please MERGE the release PR first, then approve this deployment."
358+
echo "Please MERGE the release PR first, then approve this deployment."
352359
echo ""
353360
exit 1
354361
fi
355362
356-
echo "Version matches - PR was merged correctly"
363+
echo "Version matches - PR was merged correctly"
357364
358365
- name: Install dependencies
359366
run: npm ci
@@ -362,10 +369,13 @@ jobs:
362369
run: npm run build
363370

364371
- name: Publish to npm (using OIDC trusted publishing)
372+
env:
373+
DIST_TAG: ${{ needs.prepare-release.outputs.dist_tag }}
365374
run: |
366375
echo "Publishing with OIDC trusted publishing..."
367376
echo "No NPM_TOKEN needed - using GitHub OIDC"
368-
npm publish --access public --provenance --tag latest
377+
echo "Dist tag: $DIST_TAG"
378+
npm publish --access public --provenance --tag "$DIST_TAG"
369379
370380
- name: Create and push tag
371381
env:

scripts/bump-version.ts

Lines changed: 7 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,12 @@
77
* npx tsx scripts/bump-version.ts <bump_type> [options]
88
*
99
* Arguments:
10-
* bump_type: major | minor | patch | prerelease | preview | preview-major
10+
* bump_type: major | minor | patch | prerelease
1111
*
1212
* Options:
1313
* --changelog <text> Custom changelog entry
1414
* --prerelease-tag <tag> Prerelease identifier (default: beta)
1515
* --dry-run Show what would be done without making changes
16-
*
17-
* Preview bumps (internal format):
18-
* - 0.3.0 -> 0.3.0-preview.1.0
19-
* - 0.3.0-preview.1.0 -> 0.3.0-preview.1.1 (preview)
20-
* - 0.3.0-preview.1.0 -> 0.3.0-preview.2.0 (preview-major)
2116
*/
2217
import { execSync } from 'child_process';
2318
import { existsSync, readFileSync, writeFileSync } from 'fs';
@@ -26,17 +21,14 @@ import { existsSync, readFileSync, writeFileSync } from 'fs';
2621
// Types
2722
// ===========================
2823

29-
type BumpType = 'major' | 'minor' | 'patch' | 'prerelease' | 'preview' | 'preview-major';
24+
type BumpType = 'major' | 'minor' | 'patch' | 'prerelease';
3025

3126
interface ParsedVersion {
3227
major: number;
3328
minor: number;
3429
patch: number;
3530
prerelease?: string;
3631
prereleaseNum?: number;
37-
// For preview format: X.Y.Z-previewN.M
38-
previewMajor?: number;
39-
previewMinor?: number;
4032
}
4133

4234
interface PackageJson {
@@ -58,18 +50,6 @@ interface PackageLockJson {
5850
// ===========================
5951

6052
function parseVersion(version: string): ParsedVersion {
61-
// First try to match preview format: X.Y.Z-preview.N.M (e.g., 0.3.0-preview.1.0)
62-
const previewMatch = /^(\d+)\.(\d+)\.(\d+)-preview\.(\d+)\.(\d+)$/.exec(version);
63-
if (previewMatch) {
64-
return {
65-
major: parseInt(previewMatch[1]!, 10),
66-
minor: parseInt(previewMatch[2]!, 10),
67-
patch: parseInt(previewMatch[3]!, 10),
68-
previewMajor: parseInt(previewMatch[4]!, 10),
69-
previewMinor: parseInt(previewMatch[5]!, 10),
70-
};
71-
}
72-
7353
// Match standard versions like: 1.2.3, 1.2.3-beta.1, 1.2.3-rc.0
7454
const match = /^(\d+)\.(\d+)\.(\d+)(?:-([a-zA-Z]+)\.(\d+))?$/.exec(version);
7555

@@ -89,11 +69,6 @@ function parseVersion(version: string): ParsedVersion {
8969
function formatVersion(parsed: ParsedVersion): string {
9070
const base = `${parsed.major}.${parsed.minor}.${parsed.patch}`;
9171

92-
// Handle preview format: X.Y.Z-preview.N.M
93-
if (parsed.previewMajor !== undefined && parsed.previewMinor !== undefined) {
94-
return `${base}-preview.${parsed.previewMajor}.${parsed.previewMinor}`;
95-
}
96-
9772
// Handle standard prerelease format: X.Y.Z-tag.N
9873
if (parsed.prerelease !== undefined && parsed.prereleaseNum !== undefined) {
9974
return `${base}-${parsed.prerelease}.${parsed.prereleaseNum}`;
@@ -121,8 +96,8 @@ function bumpVersion(current: string, bumpType: BumpType, prereleaseTag = 'beta'
12196
});
12297

12398
case 'patch':
124-
// If currently a prerelease or preview, just remove the suffix
125-
if (parsed.prerelease || parsed.previewMajor !== undefined) {
99+
// If currently a prerelease, just remove the suffix
100+
if (parsed.prerelease) {
126101
return formatVersion({
127102
major: parsed.major,
128103
minor: parsed.minor,
@@ -155,47 +130,6 @@ function bumpVersion(current: string, bumpType: BumpType, prereleaseTag = 'beta'
155130
prereleaseNum: 0,
156131
});
157132

158-
case 'preview':
159-
// Handle preview format: X.Y.Z-previewN.M
160-
// If already a preview, increment the minor preview number
161-
if (parsed.previewMajor !== undefined && parsed.previewMinor !== undefined) {
162-
return formatVersion({
163-
major: parsed.major,
164-
minor: parsed.minor,
165-
patch: parsed.patch,
166-
previewMajor: parsed.previewMajor,
167-
previewMinor: parsed.previewMinor + 1,
168-
});
169-
}
170-
// Otherwise, start at preview.1.0
171-
return formatVersion({
172-
major: parsed.major,
173-
minor: parsed.minor,
174-
patch: parsed.patch,
175-
previewMajor: 1,
176-
previewMinor: 0,
177-
});
178-
179-
case 'preview-major':
180-
// Increment the major preview number and reset minor to 0
181-
if (parsed.previewMajor !== undefined && parsed.previewMinor !== undefined) {
182-
return formatVersion({
183-
major: parsed.major,
184-
minor: parsed.minor,
185-
patch: parsed.patch,
186-
previewMajor: parsed.previewMajor + 1,
187-
previewMinor: 0,
188-
});
189-
}
190-
// Otherwise, start at preview.1.0
191-
return formatVersion({
192-
major: parsed.major,
193-
minor: parsed.minor,
194-
patch: parsed.patch,
195-
previewMajor: 1,
196-
previewMinor: 0,
197-
});
198-
199133
default: {
200134
const exhaustiveCheck: never = bumpType;
201135
throw new Error(`Unknown bump type: ${exhaustiveCheck as string}`);
@@ -392,27 +326,20 @@ function parseArgs(): { bumpType: BumpType; changelog?: string; prereleaseTag: s
392326
Usage: npx tsx scripts/bump-version.ts <bump_type> [options]
393327
394328
Arguments:
395-
bump_type: major | minor | patch | prerelease | preview | preview-major
329+
bump_type: major | minor | patch | prerelease
396330
397331
Options:
398332
--changelog <text> Custom changelog entry
399333
--prerelease-tag <tag> Prerelease identifier (default: beta)
400334
--dry-run Show what would be done without making changes
401335
--help, -h Show this help message
402-
403-
Preview bumps:
404-
- 0.3.0 -> 0.3.0-preview.1.0
405-
- 0.3.0-preview.1.0 -> 0.3.0-preview.1.1 (preview)
406-
- 0.3.0-preview.1.0 -> 0.3.0-preview.2.0 (preview-major)
407336
`);
408337
process.exit(0);
409338
}
410339

411340
const bumpType = args[0] as BumpType;
412-
if (!['major', 'minor', 'patch', 'prerelease', 'preview', 'preview-major'].includes(bumpType)) {
413-
console.error(
414-
`Error: Invalid bump type '${bumpType}'. Must be one of: major, minor, patch, prerelease, preview, preview-major`
415-
);
341+
if (!['major', 'minor', 'patch', 'prerelease'].includes(bumpType)) {
342+
console.error(`Error: Invalid bump type '${bumpType}'. Must be one of: major, minor, patch, prerelease`);
416343
process.exit(1);
417344
}
418345

0 commit comments

Comments
 (0)