Repository navigation
feat(framework): add review checklist consumed by the reviewer agent #607
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: CI | |
| on: | |
| push: | |
| branches: [main] | |
| pull_request: | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} | |
| permissions: | |
| contents: write | |
| pull-requests: write | |
| jobs: | |
| commitlint: | |
| name: Commitlint | |
| runs-on: ubuntu-latest | |
| if: "!startsWith(github.head_ref, 'release-please--')" | |
| permissions: | |
| contents: read | |
| pull-requests: read | |
| steps: | |
| - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 | |
| with: | |
| fetch-depth: 0 | |
| - uses: wagoid/commitlint-github-action@b948419dd99f3fd78a6548d48f94e3df7f6bf3ed # v6.2.1 | |
| with: | |
| configFile: commitlint.config.cjs | |
| commitDepth: 1 | |
| release-please: | |
| name: Release Please | |
| runs-on: ubuntu-latest | |
| needs: [commitlint] | |
| if: | | |
| always() && | |
| github.event_name == 'push' && | |
| (needs.commitlint.result == 'success' || needs.commitlint.result == 'skipped') | |
| outputs: | |
| release_created: ${{ steps.release.outputs.release_created }} | |
| tag_name: ${{ steps.release.outputs.tag_name }} | |
| version: ${{ steps.release.outputs.version }} | |
| paths_released: ${{ steps.release.outputs.paths_released }} | |
| aidd_context_release_created: ${{ steps.release.outputs['plugins/aidd-context--release_created'] }} | |
| aidd_context_version: ${{ steps.release.outputs['plugins/aidd-context--version'] }} | |
| aidd_context_tag_name: ${{ steps.release.outputs['plugins/aidd-context--tag_name'] }} | |
| aidd_dev_release_created: ${{ steps.release.outputs['plugins/aidd-dev--release_created'] }} | |
| aidd_dev_version: ${{ steps.release.outputs['plugins/aidd-dev--version'] }} | |
| aidd_dev_tag_name: ${{ steps.release.outputs['plugins/aidd-dev--tag_name'] }} | |
| aidd_vcs_release_created: ${{ steps.release.outputs['plugins/aidd-vcs--release_created'] }} | |
| aidd_vcs_version: ${{ steps.release.outputs['plugins/aidd-vcs--version'] }} | |
| aidd_vcs_tag_name: ${{ steps.release.outputs['plugins/aidd-vcs--tag_name'] }} | |
| aidd_pm_release_created: ${{ steps.release.outputs['plugins/aidd-pm--release_created'] }} | |
| aidd_pm_version: ${{ steps.release.outputs['plugins/aidd-pm--version'] }} | |
| aidd_pm_tag_name: ${{ steps.release.outputs['plugins/aidd-pm--tag_name'] }} | |
| aidd_orchestrator_release_created: ${{ steps.release.outputs['plugins/aidd-orchestrator--release_created'] }} | |
| aidd_orchestrator_version: ${{ steps.release.outputs['plugins/aidd-orchestrator--version'] }} | |
| aidd_orchestrator_tag_name: ${{ steps.release.outputs['plugins/aidd-orchestrator--tag_name'] }} | |
| aidd_refine_release_created: ${{ steps.release.outputs['plugins/aidd-refine--release_created'] }} | |
| aidd_refine_version: ${{ steps.release.outputs['plugins/aidd-refine--version'] }} | |
| aidd_refine_tag_name: ${{ steps.release.outputs['plugins/aidd-refine--tag_name'] }} | |
| steps: | |
| - uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0 | |
| id: app-token | |
| with: | |
| app-id: ${{ secrets.AIDD_BOT_APP_ID }} | |
| private-key: ${{ secrets.AIDD_BOT_PRIVATE_KEY }} | |
| - uses: googleapis/release-please-action@45996ed1f6d02564a971a2fa1b5860e934307cf7 # v5.0.0 | |
| id: release | |
| with: | |
| token: ${{ steps.app-token.outputs.token }} | |
| config-file: release-please-config.json | |
| manifest-file: .release-please-manifest.json | |
| # Auto-merge the Release PR release-please just opened/updated, with the | |
| # App token. `--admin` is required: a plain `gh pr merge` is refused by the | |
| # branch policy ("base branch policy prohibits the merge") even for a | |
| # bypass actor (verified in a sandbox). `--admin` performs the override | |
| # merge that the ruleset's bypass_actors entry permits for this App. | |
| # An App-token merge also re-fires the `push: main` and `release: published` | |
| # workflows that a GITHUB_TOKEN merge would not. | |
| # Guard on prs_created (PR opened), not releases_created (fires on merge). | |
| - name: Auto-merge the Release PR | |
| if: ${{ steps.release.outputs.prs_created == 'true' }} | |
| env: | |
| GH_TOKEN: ${{ steps.app-token.outputs.token }} | |
| run: gh pr merge "${{ fromJSON(steps.release.outputs.pr).number }}" --squash --admin --repo "${{ github.repository }}" | |
| build-and-attach: | |
| name: Build and attach marketplace | |
| needs: [release-please] | |
| if: needs.release-please.outputs.release_created == 'true' | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 | |
| - name: Build clean marketplace bundle | |
| # A self-contained marketplace a user can extract and register with | |
| # `/plugin marketplace add ./aidd-framework-marketplace-<version>`. | |
| # Contains only what the marketplace needs: the catalog manifest and | |
| # the plugins. No framework-internal files (aidd_docs/, scripts/, etc.). | |
| run: | | |
| VERSION="${{ needs.release-please.outputs.version }}" | |
| STAGE_PARENT="$(mktemp -d)" | |
| STAGE="${STAGE_PARENT}/aidd-framework-marketplace-${VERSION}" | |
| mkdir -p "${STAGE}" | |
| cp -R .claude-plugin "${STAGE}/" | |
| cp -R plugins "${STAGE}/" | |
| ( cd "${STAGE_PARENT}" && zip -q -r "/tmp/aidd-framework-marketplace-${VERSION}.zip" "aidd-framework-marketplace-${VERSION}" ) | |
| - name: Attach marketplace bundle to release | |
| env: | |
| GH_TOKEN: ${{ github.token }} | |
| run: | | |
| VERSION="${{ needs.release-please.outputs.version }}" | |
| TAG="${{ needs.release-please.outputs.tag_name }}" | |
| gh release upload "${TAG}" \ | |
| "/tmp/aidd-framework-marketplace-${VERSION}.zip" \ | |
| --clobber | |
| build-per-tool: | |
| name: Build and attach per-tool distribution | |
| needs: [release-please] | |
| if: needs.release-please.outputs.release_created == 'true' | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| # 9-cell matrix: 4 marketplace (claude/cursor/copilot/codex) + 5 flat | |
| # (+opencode, which is flat-only). Mirrors the CLI golden snapshot matrix. | |
| matrix: | |
| include: | |
| - { tool: claude, mode: marketplace, flag: "" } | |
| - { tool: cursor, mode: marketplace, flag: "" } | |
| - { tool: copilot, mode: marketplace, flag: "" } | |
| - { tool: codex, mode: marketplace, flag: "" } | |
| - { tool: claude, mode: flat, flag: "--flat" } | |
| - { tool: cursor, mode: flat, flag: "--flat" } | |
| - { tool: copilot, mode: flat, flag: "--flat" } | |
| - { tool: codex, mode: flat, flag: "--flat" } | |
| - { tool: opencode, mode: flat, flag: "--flat" } | |
| steps: | |
| - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 | |
| - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 | |
| with: | |
| node-version: "22" | |
| - name: Build the target-native distribution | |
| # Pin the CLI version: a future CLI release must not silently change | |
| # framework dist output. Bump deliberately alongside a framework change. | |
| run: | | |
| VERSION="${{ needs.release-please.outputs.version }}" | |
| NAME="aidd-framework-${{ matrix.tool }}-${{ matrix.mode }}-${VERSION}" | |
| # --out must live outside --source: the CLI refuses to build when one | |
| # path contains the other. Stage under RUNNER_TEMP, not the repo tree. | |
| OUT="${RUNNER_TEMP}/dist/${{ matrix.tool }}/${{ matrix.mode }}" | |
| mkdir -p "$OUT" | |
| npx --yes @ai-driven-dev/cli@4.6.1 framework build \ | |
| --source . --target ${{ matrix.tool }} --out "$OUT" ${{ matrix.flag }} | |
| STAGE="$(mktemp -d)/${NAME}" | |
| mkdir -p "$STAGE" | |
| cp -R "$OUT"/. "$STAGE"/ | |
| ( cd "$(dirname "$STAGE")" && zip -q -r "/tmp/${NAME}.zip" "${NAME}" ) | |
| - name: Attach per-tool distribution to release | |
| env: | |
| GH_TOKEN: ${{ github.token }} | |
| run: | | |
| VERSION="${{ needs.release-please.outputs.version }}" | |
| TAG="${{ needs.release-please.outputs.tag_name }}" | |
| NAME="aidd-framework-${{ matrix.tool }}-${{ matrix.mode }}-${VERSION}" | |
| gh release upload "${TAG}" "/tmp/${NAME}.zip" --clobber | |
| build-plugin: | |
| name: Build and attach plugin | |
| needs: [release-please] | |
| if: needs.release-please.outputs.paths_released != '' && needs.release-please.outputs.paths_released != '[]' | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| plugin: [aidd-context, aidd-dev, aidd-vcs, aidd-pm, aidd-orchestrator, aidd-refine] | |
| steps: | |
| - name: Check if this plugin was released | |
| id: check | |
| run: | | |
| PATHS='${{ needs.release-please.outputs.paths_released }}' | |
| if echo "$PATHS" | jq -e --arg p "plugins/${{ matrix.plugin }}" 'map(. == $p) | any' > /dev/null 2>&1; then | |
| echo "released=true" >> $GITHUB_OUTPUT | |
| else | |
| echo "released=false" >> $GITHUB_OUTPUT | |
| fi | |
| - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 | |
| if: steps.check.outputs.released == 'true' | |
| - name: Get plugin version | |
| id: version | |
| if: steps.check.outputs.released == 'true' | |
| run: | | |
| VERSION=$(jq -r '.version' "plugins/${{ matrix.plugin }}/.claude-plugin/plugin.json") | |
| echo "version=$VERSION" >> $GITHUB_OUTPUT | |
| - name: Build plugin bundle | |
| if: steps.check.outputs.released == 'true' | |
| # Clean, self-contained plugin directory. A user extracts it and | |
| # installs the plugin locally. No framework-internal files. | |
| run: | | |
| PLUGIN="${{ matrix.plugin }}" | |
| VERSION="${{ steps.version.outputs.version }}" | |
| ( cd plugins && zip -q -r "/tmp/${PLUGIN}-v${VERSION}.zip" "${PLUGIN}" ) | |
| - name: Attach plugin bundle to release | |
| if: steps.check.outputs.released == 'true' | |
| env: | |
| GH_TOKEN: ${{ github.token }} | |
| run: | | |
| PLUGIN="${{ matrix.plugin }}" | |
| VERSION="${{ steps.version.outputs.version }}" | |
| TAG="${PLUGIN}-v${VERSION}" | |
| gh release upload "${TAG}" \ | |
| "/tmp/${PLUGIN}-v${VERSION}.zip" \ | |
| --clobber |