Skill240 repo starsupdated 20d ago
testdriver:ci-cd
Run TestDriver tests in CI/CD with parallel execution and cross-platform support
Install in Claude Code
Copygit clone --depth 1 https://github.com/testdriverai/testdriverai /tmp/testdriver-ci-cd && cp -r /tmp/testdriver-ci-cd/ai/skills/testdriver:ci-cd ~/.claude/skills/testdriver-ci-cdThen start a new Claude Code session; the skill loads automatically.
Definition
SKILL.md
<!-- Generated from ci-cd.mdx. DO NOT EDIT. -->
TestDriver integrates seamlessly with popular CI providers, enabling automated end-to-end testing on every push and pull request.
## Adding Your API Key
TestDriver requires an API key to authenticate with the TestDriver cloud. Store this securely as a secret in your CI provider.
<Steps>
<Step title="Get Your API Key">
Go to [console.testdriver.ai/team](https://console.testdriver.ai/team) and copy your team's API key
</Step>
<Step title="Add Secret to Your CI Provider">
Add `TD_API_KEY` as a secret environment variable in your CI provider's settings.
</Step>
</Steps>
<Note>
Never commit your API key directly in code. Always use your CI provider's secrets management.
</Note>
## CI Provider Examples
<Tabs>
<Tab title="GitHub Actions">
### Authenticate with OIDC (recommended)
If you've installed the [TestDriver GitHub App](https://console.testdriver.ai), your workflow can authenticate using GitHub's OIDC token — no long-lived `TD_API_KEY` secret to store or rotate. The workflow proves it's running inside your org, and TestDriver exchanges that proof for your team's API key at run time.
<Note>
This requires the TestDriver GitHub App to be authorized for your organization once (from the [console](https://console.testdriver.ai)). If your org authorized the App before OIDC support shipped, re-run the authorization once so the binding is created.
</Note>
Grant the job the `id-token: write` permission and exchange the OIDC token for your API key:
```yaml .github/workflows/testdriver.yml
name: TestDriver Tests
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
permissions:
id-token: write # required to mint an OIDC token
contents: read
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- run: npm ci
- name: Authenticate to TestDriver via OIDC
run: |
OIDC_TOKEN=$(curl -sS \
-H "Authorization: bearer $ACTIONS_ID_TOKEN_REQUEST_TOKEN" \
"$ACTIONS_ID_TOKEN_REQUEST_URL&audience=testdriver" | jq -r '.value')
API_KEY=$(curl -sS -X POST https://api.testdriver.ai/github/actions/auth \
-H "Content-Type: application/json" \
-d "{\"token\":\"$OIDC_TOKEN\"}" | jq -r '.apiKey')
echo "::add-mask::$API_KEY"
echo "TD_API_KEY=$API_KEY" >> "$GITHUB_ENV"
- name: Run TestDriver tests
env:
TD_API_KEY: ${{ env.TD_API_KEY }}
run: vitest --run
```
`ACTIONS_ID_TOKEN_REQUEST_TOKEN` and `ACTIONS_ID_TOKEN_REQUEST_URL` are injected automatically once `permissions: id-token: write` is set. `::add-mask::` keeps the resolved key out of the logs.
### Adding Secrets
Prefer OIDC above when possible. If you can't use the GitHub App (e.g. self-hosted runners without OIDC, or a non-GitHub registry), fall back to a stored API key:
1. Navigate to your GitHub repository
2. Go to **Settings** → **Secrets and variables** → **Actions**
3. Click **New repository secret**
4. Name: `TD_API_KEY`, Value: your API key
5. Click **Add secret**
### Basic Workflow
Create `.github/workflows/testdriver.yml`:
```yaml .github/workflows/testdriver.yml
name: TestDriver Tests
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- run: npm ci
- name: Run TestDriver tests
env:
TD_API_KEY: ${{ secrets.TD_API_KEY }}
run: vitest --run
```
### Parallel Execution
Use matrix strategy to run tests in parallel:
```yaml .github/workflows/testdriver-parallel.yml
name: TestDriver Tests (Parallel)
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
shard: [1, 2, 3, 4]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- run: npm ci
- name: Run tests (shard ${{ matrix.shard }}/4)
env:
TD_API_KEY: ${{ secrets.TD_API_KEY }}
run: vitest --run --shard=${{ matrix.shard }}/4
```
### Multi-Platform Testing
```yaml .github/workflows/testdriver-multiplatform.yml
name: TestDriver Tests (Multi-Platform)
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
td-os: [linux, windows]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- run: npm ci
- name: Run tests on ${{ matrix.td-os }}
env:
TD_API_KEY: ${{ secrets.TD_API_KEY }}
TD_OS: ${{ matrix.td-os }}
run: vitest --run
```
</Tab>
<Tab title="GitLab CI">
### Adding Secrets
1. Go to your GitLab project
2. Navigate to **Settings** → **CI/CD** → **Variables**
3. Click **Add variable**
4. Key: `TD_API_KEY`, Value: your API key
5. Check **Mask variable** and click **Add variable**
### Basic Pipeline
Create `.gitlab-ci.yml`:
```yaml .gitlab-ci.yml
stages:
- test
testdriver:
sMore from this repository
testdriver:aiSkill
Execute natural language tasks using AI
testdriver:assertSkill
Make AI-powered assertions about screen state
testdriver:aws-setupSkill
Deploy TestDriver on your AWS infrastructure using CloudFormation
testdriver:cacheSkill
Speed up tests with screenshot-based caching
testdriver:cachingSkill
1.7x faster test execution with intelligent caching and optimization
testdriver:captchaSkill
Solve captchas using 2captcha service
testdriver:clickSkill
Click at specific coordinates or on elements
testdriver:clientSkill
Initialize and configure the TestDriver SDK client