takt/docs/ci-cd.md
nrslib 4941f8eabf README を大幅改訂し、詳細情報を docs/ に分離
README を約950行から約270行に圧縮し、詳細は個別ドキュメントに分離した。
コンセプトを実態に合わせて再定義(4軸: すぐ始められる・実用的・再現可能・マルチエージェント)し、
基本ユースケースを takt → takt run のフローに修正した。
英語版・日本語版の両方を対応し、日本語版はネイティブ日本語で記述。
2026-02-19 21:20:31 +09:00

179 lines
5.5 KiB
Markdown

[日本語](./ci-cd.ja.md)
# CI/CD Integration
TAKT can be integrated into CI/CD pipelines to automate task execution, PR reviews, and code generation. This guide covers GitHub Actions setup, pipeline mode options, and configuration for other CI systems.
## GitHub Actions
TAKT provides the official [takt-action](https://github.com/nrslib/takt-action) for GitHub Actions integration.
### Complete Workflow Example
```yaml
name: TAKT
on:
issue_comment:
types: [created]
jobs:
takt:
if: contains(github.event.comment.body, '@takt')
runs-on: ubuntu-latest
permissions:
contents: write
issues: write
pull-requests: write
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Run TAKT
uses: nrslib/takt-action@main
with:
anthropic_api_key: ${{ secrets.TAKT_ANTHROPIC_API_KEY }}
github_token: ${{ secrets.GITHUB_TOKEN }}
```
### Permissions
The following permissions are required for `takt-action` to function correctly:
| Permission | Required For |
|------------|-------------|
| `contents: write` | Creating branches, committing, and pushing code |
| `issues: write` | Reading and commenting on issues |
| `pull-requests: write` | Creating and updating pull requests |
## Pipeline Mode
Specifying `--pipeline` enables non-interactive pipeline mode. It automatically creates a branch, runs the piece, commits, and pushes. This mode is designed for CI/CD automation where no human interaction is available.
In pipeline mode, PRs are **not** created unless `--auto-pr` is explicitly specified.
### All Pipeline Options
| Option | Description |
|--------|-------------|
| `--pipeline` | **Enable pipeline (non-interactive) mode** -- Required for CI/automation |
| `-t, --task <text>` | Task content (alternative to GitHub Issue) |
| `-i, --issue <N>` | GitHub issue number (same as `#N` in interactive mode) |
| `-w, --piece <name or path>` | Piece name or path to piece YAML file |
| `-b, --branch <name>` | Specify branch name (auto-generated if omitted) |
| `--auto-pr` | Create PR (interactive: skip confirmation, pipeline: enable PR) |
| `--skip-git` | Skip branch creation, commit, and push (pipeline mode, piece-only) |
| `--repo <owner/repo>` | Specify repository (for PR creation) |
| `-q, --quiet` | Minimal output mode: suppress AI output (for CI) |
| `--provider <name>` | Override agent provider (claude\|codex\|opencode\|mock) |
| `--model <name>` | Override agent model |
### Command Examples
**Basic pipeline execution:**
```bash
takt --pipeline --task "Fix bug"
```
**Pipeline execution with automatic PR creation:**
```bash
takt --pipeline --task "Fix bug" --auto-pr
```
**Link a GitHub issue and create a PR:**
```bash
takt --pipeline --issue 99 --auto-pr
```
**Specify piece and branch name:**
```bash
takt --pipeline --task "Fix bug" -w magi -b feat/fix-bug
```
**Specify repository for PR creation:**
```bash
takt --pipeline --task "Fix bug" --auto-pr --repo owner/repo
```
**Piece execution only (skip branch creation, commit, push):**
```bash
takt --pipeline --task "Fix bug" --skip-git
```
**Minimal output mode (suppress AI output for CI logs):**
```bash
takt --pipeline --task "Fix bug" --quiet
```
## Pipeline Template Variables
Pipeline configuration in `~/.takt/config.yaml` supports template variables for customizing commit messages and PR bodies:
```yaml
pipeline:
default_branch_prefix: "takt/"
commit_message_template: "feat: {title} (#{issue})"
pr_body_template: |
## Summary
{issue_body}
Closes #{issue}
```
| Variable | Available In | Description |
|----------|-------------|-------------|
| `{title}` | Commit message | Issue title |
| `{issue}` | Commit message, PR body | Issue number |
| `{issue_body}` | PR body | Issue body |
| `{report}` | PR body | Piece execution report |
## Other CI Systems
For CI systems other than GitHub Actions, install TAKT globally and use pipeline mode directly:
```bash
# Install takt
npm install -g takt
# Run in pipeline mode
takt --pipeline --task "Fix bug" --auto-pr --repo owner/repo
```
This approach works with any CI system that supports Node.js, including GitLab CI, CircleCI, Jenkins, Azure DevOps, and others.
## Environment Variables
For authentication in CI environments, set the appropriate API key environment variable. These use TAKT-specific prefixes to avoid conflicts with other tools.
```bash
# For Claude (Anthropic)
export TAKT_ANTHROPIC_API_KEY=sk-ant-...
# For Codex (OpenAI)
export TAKT_OPENAI_API_KEY=sk-...
# For OpenCode
export TAKT_OPENCODE_API_KEY=...
```
Priority: Environment variables take precedence over `config.yaml` settings.
> **Note**: If you set an API key via environment variable, installing Claude Code, Codex, or OpenCode CLI is not necessary. TAKT directly calls the respective API.
## Cost Considerations
TAKT uses AI APIs (Claude or OpenAI), which can incur significant costs, especially when tasks are auto-executed in CI/CD environments. Take the following precautions:
- **Monitor API usage**: Set up billing alerts with your AI provider to avoid unexpected charges.
- **Use `--quiet` mode**: Reduces output volume but does not reduce API calls.
- **Choose appropriate pieces**: Simpler pieces (e.g., `default-mini`) use fewer API calls than multi-stage pieces (e.g., `default` with parallel reviews).
- **Limit CI triggers**: Use conditional triggers (e.g., `if: contains(github.event.comment.body, '@takt')`) to prevent unintended executions.
- **Test with `--provider mock`**: Use mock provider during CI pipeline development to avoid real API costs.