Repository navigation
refactor(aidd-context): rework project-memory skill with capability model #512
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 | |
| 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 |