feat: replace platforms/codex/ with real Codex plugin #304
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Plugin Version Check | |
| on: | |
| pull_request: | |
| paths: | |
| - 'plugins/**' | |
| - '.claude-plugin/marketplace.json' | |
| jobs: | |
| check-version-bump: | |
| name: Verify plugin version bump | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout PR branch | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Detect changed plugins | |
| id: detect | |
| run: | | |
| BASE_BRANCH="${{ github.base_ref }}" | |
| CHANGED_PLUGINS="" | |
| MARKETPLACE_JSON=".claude-plugin/marketplace.json" | |
| BASE_MARKETPLACE_JSON=$(git show "origin/${BASE_BRANCH}:${MARKETPLACE_JSON}" 2>/dev/null || echo '{"plugins":[]}') | |
| # Check which plugins have changes in their directory | |
| for plugin_dir in plugins/*/; do | |
| plugin_name=$(basename "$plugin_dir") | |
| if git diff --name-only "origin/${BASE_BRANCH}...HEAD" | grep -q "^plugins/${plugin_name}/"; then | |
| CHANGED_PLUGINS="${CHANGED_PLUGINS} ${plugin_name}" | |
| fi | |
| done | |
| # Also include plugins whose marketplace version changed (catches marketplace-only changes) | |
| if [ -f "$MARKETPLACE_JSON" ]; then | |
| CURRENT_PLUGINS=$(jq -r '.plugins[].name' "$MARKETPLACE_JSON" 2>/dev/null || echo "") | |
| BASE_PLUGINS=$(echo "$BASE_MARKETPLACE_JSON" | jq -r '.plugins[].name' 2>/dev/null || echo "") | |
| ALL_PLUGIN_NAMES=$(echo -e "${CURRENT_PLUGINS}\n${BASE_PLUGINS}" | sort -u) | |
| for plugin_name in $ALL_PLUGIN_NAMES; do | |
| [ -z "$plugin_name" ] && continue | |
| # Skip if already in changed list | |
| echo "$CHANGED_PLUGINS" | grep -qw "$plugin_name" && continue | |
| CURRENT_VER=$(jq -r --arg name "$plugin_name" '.plugins[] | select(.name == $name) | .version // "null"' "$MARKETPLACE_JSON" 2>/dev/null || echo "null") | |
| BASE_VER=$(echo "$BASE_MARKETPLACE_JSON" | jq -r --arg name "$plugin_name" '.plugins[] | select(.name == $name) | .version // "null"' 2>/dev/null || echo "null") | |
| if [ "$CURRENT_VER" != "$BASE_VER" ]; then | |
| echo "Detected marketplace version change for $plugin_name: $BASE_VER → $CURRENT_VER" | |
| CHANGED_PLUGINS="${CHANGED_PLUGINS} ${plugin_name}" | |
| fi | |
| done | |
| fi | |
| echo "Changed plugins:${CHANGED_PLUGINS}" | |
| echo "plugins=${CHANGED_PLUGINS}" >> $GITHUB_OUTPUT | |
| - name: Check for version bump | |
| run: | | |
| MARKETPLACE_JSON=".claude-plugin/marketplace.json" | |
| BASE_BRANCH="${{ github.base_ref }}" | |
| CHANGED_PLUGINS="${{ steps.detect.outputs.plugins }}" | |
| # Version comparison function (returns 0 if v1 > v2) | |
| version_greater() { | |
| local v1=$1 v2=$2 | |
| if [ "$v1" == "$v2" ]; then | |
| return 1 | |
| fi | |
| local IFS=. | |
| local i v1_parts=($v1) v2_parts=($v2) | |
| for ((i=0; i<${#v1_parts[@]} || i<${#v2_parts[@]}; i++)); do | |
| local n1=${v1_parts[i]:-0} | |
| local n2=${v2_parts[i]:-0} | |
| if ((n1 > n2)); then | |
| return 0 | |
| elif ((n1 < n2)); then | |
| return 1 | |
| fi | |
| done | |
| return 1 | |
| } | |
| # Function to get marketplace version for a plugin | |
| get_marketplace_version() { | |
| local plugin_name=$1 | |
| local file=$2 | |
| jq -r --arg name "$plugin_name" '.plugins[] | select(.name == $name) | .version // "null"' "$file" | |
| } | |
| ALL_PASSED=true | |
| for plugin_name in $CHANGED_PLUGINS; do | |
| echo "" | |
| echo "=== Checking $plugin_name ===" | |
| PLUGIN_JSON="plugins/${plugin_name}/.claude-plugin/plugin.json" | |
| if [ ! -f "$PLUGIN_JSON" ]; then | |
| echo "❌ ERROR: No plugin.json found for $plugin_name!" | |
| echo "Plugin changes detected but plugin.json is missing at: $PLUGIN_JSON" | |
| ALL_PASSED=false | |
| continue | |
| fi | |
| # Get versions from PR branch | |
| PR_PLUGIN_VERSION=$(jq -r '.version' "$PLUGIN_JSON") | |
| PR_MARKETPLACE_VERSION=$(get_marketplace_version "$plugin_name" "$MARKETPLACE_JSON") | |
| # Get versions from base branch | |
| BASE_PLUGIN_VERSION=$(git show "origin/${BASE_BRANCH}:${PLUGIN_JSON}" 2>/dev/null | jq -r '.version' 2>/dev/null || echo "null") | |
| BASE_MARKETPLACE_VERSION=$(git show "origin/${BASE_BRANCH}:${MARKETPLACE_JSON}" 2>/dev/null | jq -r --arg name "$plugin_name" '.plugins[] | select(.name == $name) | .version // "null"' 2>/dev/null || echo "null") | |
| echo "plugin.json: ${BASE_PLUGIN_VERSION:-new} → $PR_PLUGIN_VERSION" | |
| echo "marketplace.json: ${BASE_MARKETPLACE_VERSION:-new} → $PR_MARKETPLACE_VERSION" | |
| # Check if plugin exists in marketplace | |
| if [ "$PR_MARKETPLACE_VERSION" == "null" ] || [ -z "$PR_MARKETPLACE_VERSION" ]; then | |
| echo "❌ ERROR: Plugin $plugin_name not found in marketplace.json!" | |
| echo "Please add an entry for $plugin_name in $MARKETPLACE_JSON" | |
| ALL_PASSED=false | |
| continue | |
| fi | |
| # Check if versions match between plugin.json and marketplace.json | |
| if [ "$PR_PLUGIN_VERSION" != "$PR_MARKETPLACE_VERSION" ]; then | |
| echo "❌ ERROR: Version mismatch for $plugin_name!" | |
| echo "plugin.json version: $PR_PLUGIN_VERSION" | |
| echo "marketplace.json version: $PR_MARKETPLACE_VERSION" | |
| ALL_PASSED=false | |
| continue | |
| fi | |
| # Check if this is a new plugin (no base versions) | |
| if [ -z "$BASE_PLUGIN_VERSION" ] || [ "$BASE_PLUGIN_VERSION" == "null" ]; then | |
| echo "✅ New plugin. Version: $PR_PLUGIN_VERSION" | |
| continue | |
| fi | |
| # Check plugin.json version bump | |
| if [ "$PR_PLUGIN_VERSION" == "$BASE_PLUGIN_VERSION" ]; then | |
| echo "❌ ERROR: $plugin_name files changed but version not bumped!" | |
| echo "Current version: $BASE_PLUGIN_VERSION" | |
| ALL_PASSED=false | |
| continue | |
| fi | |
| if ! version_greater "$PR_PLUGIN_VERSION" "$BASE_PLUGIN_VERSION"; then | |
| echo "❌ ERROR: $plugin_name version downgraded!" | |
| echo "Base: $BASE_PLUGIN_VERSION → PR: $PR_PLUGIN_VERSION" | |
| ALL_PASSED=false | |
| continue | |
| fi | |
| echo "✅ $plugin_name version check passed" | |
| done | |
| echo "" | |
| if [ "$ALL_PASSED" = true ]; then | |
| echo "✅ All version checks passed!" | |
| else | |
| echo "❌ Some version checks failed" | |
| exit 1 | |
| fi |