Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 1 addition & 5 deletions .github/aw/releases.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,5 @@
"$schema": "./releases.schema.json",
"blockedVersions": [],
"minimumVersion": "v0.64.4",
"minRecommendedVersion": "v0.64.4",
"aliases": {
"latest": "latest",
"stable": "v0.64.5"
}
"minRecommendedVersion": "v0.64.4"
}
10 changes: 0 additions & 10 deletions .github/aw/releases.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,16 +31,6 @@
"description": "The minimum recommended compile-agentic version in vMAJOR.MINOR.PATCH format. Workflows compiled with a version below this will emit a warning (but not fail) at activation, nudging users to upgrade. Use an empty string to disable this check.",
"pattern": "^(v[0-9]+\\.[0-9]+\\.[0-9]+)?$",
"default": ""
},
"aliases": {
"type": "object",
"description": "A map of release alias names to version strings. The special value 'latest' resolves to the most recent release. Other values must be a version string in vMAJOR.MINOR.PATCH format.",
"additionalProperties": {
"type": "string",
"pattern": "^(latest|v[0-9]+\\.[0-9]+\\.[0-9]+)$",
"description": "A version string in vMAJOR.MINOR.PATCH format or the special value 'latest'"
},
"default": {}
}
}
}
79 changes: 1 addition & 78 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -870,30 +870,13 @@ jobs:
const errors = [];

// Check additionalProperties (only allow known keys)
const allowedKeys = new Set(['$schema', 'blockedVersions', 'minimumVersion', 'minRecommendedVersion', 'aliases']);
const allowedKeys = new Set(['$schema', 'blockedVersions', 'minimumVersion', 'minRecommendedVersion']);
for (const key of Object.keys(config)) {
if (!allowedKeys.has(key)) {
errors.push(`Unknown property: '${key}'`);
}
}

// Validate aliases
if ('aliases' in config) {
const aliases = config.aliases;
if (typeof aliases !== 'object' || aliases === null || Array.isArray(aliases)) {
errors.push("'aliases' must be an object");
} else {
const aliasValuePattern = /^(latest|v[0-9]+\.[0-9]+\.[0-9]+)$/;
for (const [alias, value] of Object.entries(aliases)) {
if (typeof value !== 'string') {
errors.push(`'aliases.${alias}' must be a string`);
} else if (!aliasValuePattern.test(value)) {
errors.push(`'aliases.${alias}' ('${value}') must be 'latest' or a version in vMAJOR.MINOR.PATCH format (e.g. 'v1.2.3')`);
}
}
}
}

// Validate blockedVersions
if ('blockedVersions' in config) {
const bv = config.blockedVersions;
Expand Down Expand Up @@ -2801,66 +2784,6 @@ jobs:

echo "" >> $GITHUB_STEP_SUMMARY

install-script:
name: Install Script (stable)
runs-on: ubuntu-latest
timeout-minutes: 10
permissions:
contents: read
concurrency:
group: ci-${{ github.ref }}-install-script
cancel-in-progress: true
steps:
- name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Validate stable alias in releases.json
id: validate-stable
run: |
STABLE=$(jq -r '.aliases.stable // empty' .github/aw/releases.json)
echo "stable_version=$STABLE" >> $GITHUB_OUTPUT

if [ -z "$STABLE" ]; then
echo "❌ 'stable' alias is not set in releases.json"
exit 1
fi

if [ "$STABLE" = "stable" ]; then
echo "❌ 'stable' alias points to itself - misconfiguration in releases.json"
exit 1
fi

if ! echo "$STABLE" | grep -qE '^v[0-9]+\.[0-9]+\.[0-9]+$'; then
echo "❌ 'stable' alias '$STABLE' is not a valid semver version (expected vMAJOR.MINOR.PATCH)"
exit 1
fi

echo "✅ 'stable' alias resolves to a valid version: $STABLE"

- name: Run install-gh-aw.sh with stable version
run: bash install-gh-aw.sh stable

- name: Verify installation
run: |
BINARY="$HOME/.local/share/gh/extensions/gh-aw/gh-aw"
EXPECTED="${{ steps.validate-stable.outputs.stable_version }}"

if [ ! -f "$BINARY" ]; then
echo "❌ Binary not found at $BINARY"
exit 1
fi

INSTALLED_VERSION=$("$BINARY" version 2>&1 | grep -oE 'v[0-9]+\.[0-9]+\.[0-9]+' | head -1)
echo "Installed version: $INSTALLED_VERSION"
echo "Expected version: $EXPECTED"

if [ "$INSTALLED_VERSION" != "$EXPECTED" ]; then
echo "❌ Version mismatch: installed $INSTALLED_VERSION but expected $EXPECTED"
exit 1
fi

echo "✅ install-gh-aw.sh successfully installed stable release: $INSTALLED_VERSION" >> $GITHUB_STEP_SUMMARY

sh-difc-proxy:
name: DIFC Proxy sh Integration Test
runs-on: ubuntu-latest
Expand Down
151 changes: 0 additions & 151 deletions .github/workflows/update-stable-release.yml

This file was deleted.

22 changes: 20 additions & 2 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -545,6 +545,8 @@ This project follows the GitHub Community Guidelines. Please be respectful and i

Releases are triggered manually by a core team member using the GitHub Actions release workflow.

> **Note:** The release workflow publishes the new version as a **prerelease** on GitHub. Once the release is verified, a maintainer must **manually promote it to a full release and move the `latest` tag** so that users installing with `version: latest` receive the new version.

### Steps

1. **Launch the release action**
Expand All @@ -563,7 +565,17 @@ Releases are triggered manually by a core team member using the GitHub Actions r

3. **Approve the environment gate**

Return to the paused release run in [`github/gh-aw`](https://github.com/github/gh-aw/actions). Approve the **`gh-aw-actions-release`** environment gate. The workflow will verify that the new tag exists in `github/gh-aw-actions` and then publish the GitHub release.
Return to the paused release run in [`github/gh-aw`](https://github.com/github/gh-aw/actions). Approve the **`gh-aw-actions-release`** environment gate. The workflow will verify that the new tag exists in `github/gh-aw-actions` and then publish the GitHub release as a **prerelease**.

4. **Promote to latest** _(manual step)_

After verifying the prerelease is working correctly:

a. **Edit the GitHub release** — go to the [Releases page](https://github.com/github/gh-aw/releases), open the new prerelease, uncheck **This is a pre-release**, and save. This promotes the release to a stable full release.

b. **Move the `latest` tag** — GitHub's release API resolves `latest` to the most recent non-prerelease release. Promoting the release in step (a) is sufficient for the `latest` resolution to update automatically.

Users who install with `version: latest` (the default) will now receive the new release.

### Summary

Expand All @@ -583,7 +595,13 @@ Merge the sync-actions PR
Approve the gh-aw-actions-release environment gate
Release published 🎉
Release published as prerelease 🎉
▼ (manual)
Promote prerelease → full release on GitHub Releases page
'latest' now resolves to the new version ✅
```

## 🎯 Why This Contribution Model?
Expand Down
Loading
Loading