원클릭으로
tiger-data
Used for querying CI/CD build and test data from Azure DevOps
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Used for querying CI/CD build and test data from Azure DevOps
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Use the tiger cli tool to query live Azure DevOps and Helix CI/CD data
Identify and access crash dumps from CI test failures in Azure DevOps, for both normal test runs and Helix-based tests.
File a "Known Build Error" GitHub issue to track a recurring build or test failure in the dotnet infrastructure
Access CI/CD health reports and state-of-the-build summaries produced by the Tiger health agent
| name | tiger-data |
| description | Used for querying CI/CD build and test data from Azure DevOps |
You have access to a SQLite database containing CI/CD build, test, and timeline data from Azure DevOps.
The database is located at ~/.tiger/tiger.db. Use sqlite3 ~/.tiger/tiger.db to query it.
Completed CI builds from Azure DevOps.
| Column | Type | Description |
|---|---|---|
| organization | TEXT | AzDO organization (e.g. "dnceng-public") |
| project | TEXT | AzDO project (e.g. "public") |
| build_id | INTEGER | Unique build ID |
| build_number | TEXT | Build number string |
| definition_name | TEXT | Pipeline/definition name |
| definition_id | INTEGER | Pipeline definition ID |
| status | TEXT | Build status (always "completed") |
| result | TEXT | "succeeded", "failed", "partiallySucceeded", "canceled" |
| source_branch | TEXT | Branch (e.g. "refs/heads/main", "refs/pull/123/merge") |
| source_version | TEXT | Git commit SHA |
| repository_name | TEXT | Repository (e.g. "dotnet/roslyn") |
| pr_number | INTEGER | PR number if this is a PR build, NULL otherwise |
| finish_time | TEXT | ISO 8601 finish time |
| ingested_at | TEXT | When the build was added to the DB |
Primary key: (organization, build_id) — build IDs are unique within an organization
Test run summaries per build. A build can have multiple test runs (one per job/leg).
| Column | Type | Description |
|---|---|---|
| organization | TEXT | AzDO organization |
| project | TEXT | AzDO project |
| build_id | INTEGER | FK to builds |
| run_id | INTEGER | Test run ID |
| run_name | TEXT | Test run/job name |
| total_tests | INTEGER | Total test count |
| passed_tests | INTEGER | Passed count |
| failed_tests | INTEGER | Failed count |
| skipped_tests | INTEGER | Skipped count |
Primary key: (organization, run_id)
Individual test failure results. Only failed tests are stored.
| Column | Type | Description |
|---|---|---|
| organization | TEXT | AzDO organization |
| project | TEXT | AzDO project |
| run_id | INTEGER | FK to test_runs |
| result_id | INTEGER | Test result ID |
| test_case_title | TEXT | Fully qualified test name |
| outcome | TEXT | Always "Failed" (only failures stored) |
| error_message | TEXT | Error message (may be NULL) |
| stack_trace | TEXT | Stack trace (may be NULL) |
| helix_job_name | TEXT | Helix job ID if test ran on Helix |
| helix_work_item_name | TEXT | Helix work item name if applicable |
| is_helix_work_item | INTEGER | 1 if this is a synthetic test result created by Helix infrastructure (not a real test) |
Primary key: (organization, run_id, result_id)
Errors and warnings from the AzDO build timeline (jobs and tasks).
| Column | Type | Description |
|---|---|---|
| organization | TEXT | AzDO organization |
| build_id | INTEGER | FK to builds |
| record_name | TEXT | Job or task name that produced the issue |
| record_type | TEXT | "Job" or "Task" |
| parent_name | TEXT | Parent job name (for Task records) |
| record_result | TEXT | "failed", "succeeded", etc. |
| issue_type | TEXT | "error" or "warning" |
| issue_message | TEXT | The error/warning message |
| issue_category | TEXT | Issue category (may be NULL) |
| log_url | TEXT | AzDO timeline log URL for the record (may be NULL) |
Tracks async ingestion of detailed data per build.
| Column | Type | Description |
|---|---|---|
| organization | TEXT | AzDO organization |
| build_id | INTEGER | FK to builds |
| task_type | TEXT | "tests", "timeline", or "pr_info" |
| status | TEXT | "pending", "running", "complete", "failed", "abandoned" |
| is_complete | INTEGER | 1 when task is terminal (complete or abandoned), 0 otherwise. A build is fully ingested when all its tasks have is_complete = 1. |
| attempts | INTEGER | Number of attempts so far |
| last_error | TEXT | Last error message if failed |
| last_attempt_time | TEXT | ISO 8601 time of last attempt |
| next_retry_time | TEXT | ISO 8601 time when a failed task can be retried |
| completed_time | TEXT | ISO 8601 time when the task completed |
Primary key: (organization, build_id, task_type)
Cached PR metadata fetched from GitHub.
| Column | Type | Description |
|---|---|---|
| repository | TEXT | GitHub repository (e.g. "dotnet/roslyn") |
| pr_number | INTEGER | Pull request number |
| title | TEXT | PR title |
| author | TEXT | PR author login |
| fetched_at | TEXT | When the PR info was cached |
Primary key: (repository, pr_number)
Known build errors from GitHub issues labeled "Known Build Error". Refreshed every 15 minutes.
| Column | Type | Description |
|---|---|---|
| repository | TEXT | GitHub repository |
| issue_number | INTEGER | GitHub issue number |
| title | TEXT | Issue title |
| error_message | TEXT | String or JSON array for contains matching |
| error_pattern | TEXT | Regex string or JSON array for pattern matching |
| build_retry | INTEGER | 1 if build should be retried |
| exclude_console_log | INTEGER | 1 to skip console log matching |
| state | TEXT | "open" or "closed" |
| closed_at | TEXT | When the issue was detected as closed |
| fetched_at | TEXT | Last refresh time |
Primary key: (repository, issue_number)
Cached Helix work item details for failed tests that ran on Helix.
| Column | Type | Description |
|---|---|---|
| job_name | TEXT | Helix job ID |
| work_item_name | TEXT | Helix work item name |
| state | TEXT | Work item state (e.g. "Finished") |
| exit_code | INTEGER | Process exit code (NULL if not finished) |
| console_output_uri | TEXT | URI to console output log |
| files | TEXT | JSON array of attached files (crash dumps, etc.), excluding the console log. Each entry has fileName and uri. NULL if no extra files. |
| is_deadletter | INTEGER | 1 if the work item was dead-lettered (Helix infrastructure failure, not a real test failure) |
Primary key: (job_name, work_item_name)
Tracks Copilot Coding Agent tasks submitted from Tiger via gh agent-task create.
| Column | Type | Description |
|---|---|---|
| session_id | TEXT | Agent session GUID (primary key) |
| repository | TEXT | GitHub repository (owner/repo format) |
| test_name | TEXT | Test case title that triggered the task (NULL if not test-related) |
| file_path | TEXT | Path to the markdown task file on disk |
| created_at | TEXT | ISO 8601 timestamp when the task was submitted |
Primary key: (session_id)
SELECT build_id, definition_name, result, repository_name, finish_time
FROM builds
WHERE result = 'failed'
ORDER BY finish_time DESC
LIMIT 20;
SELECT tr.test_case_title, COUNT(DISTINCT r.build_id) as build_count
FROM test_results tr
JOIN test_runs r ON tr.organization = r.organization
AND tr.run_id = r.run_id
WHERE tr.outcome = 'Failed'
GROUP BY tr.test_case_title
ORDER BY build_count DESC
LIMIT 20;
SELECT tr.test_case_title, tr.error_message, tr.helix_job_name
FROM test_results tr
JOIN test_runs r ON tr.organization = r.organization
AND tr.run_id = r.run_id
WHERE r.build_id = BUILD_ID AND tr.outcome = 'Failed'
ORDER BY tr.test_case_title;
SELECT parent_name, record_name, issue_type, issue_message
FROM build_timeline_issues
WHERE build_id = BUILD_ID AND issue_type = 'error'
ORDER BY parent_name, record_name;
SELECT b.build_id, b.definition_name, b.result, b.finish_time, b.source_branch
FROM test_results tr
JOIN test_runs r ON tr.organization = r.organization
AND tr.run_id = r.run_id
JOIN builds b ON r.organization = b.organization
AND r.build_id = b.build_id
WHERE tr.test_case_title = 'FULL_TEST_NAME' AND tr.outcome = 'Failed'
ORDER BY b.finish_time DESC;
SELECT tr.test_case_title, COUNT(*) as fail_count
FROM test_results tr
JOIN test_runs r ON tr.organization = r.organization
AND tr.run_id = r.run_id
JOIN builds b ON r.organization = b.organization
AND r.build_id = b.build_id
WHERE tr.outcome = 'Failed' AND b.source_branch = 'refs/heads/main'
GROUP BY tr.test_case_title
ORDER BY fail_count DESC
LIMIT 20;
SELECT build_id, definition_name, result, finish_time, pr_number
FROM builds
WHERE repository_name = 'dotnet/roslyn' AND result = 'failed'
ORDER BY finish_time DESC
LIMIT 20;
SELECT task_type, status, COUNT(*) as count
FROM build_ingestion_tasks
GROUP BY task_type, status
ORDER BY task_type, status;
SELECT tr.test_case_title, tr.helix_job_name, tr.helix_work_item_name, hw.state, hw.exit_code
FROM test_results tr
LEFT JOIN helix_work_items hw ON tr.helix_job_name = hw.job_name
AND tr.helix_work_item_name = hw.work_item_name
WHERE tr.helix_job_name IS NOT NULL AND tr.outcome = 'Failed'
ORDER BY tr.test_case_title
LIMIT 20;
The Helix console log URL can be constructed as:
https://helix.dot.net/api/2019-06-17/jobs/{helix_job_name}/workitems/{helix_work_item_name}/console
SELECT b.build_id, b.definition_name, b.pr_number, pr.title, pr.author
FROM builds b
LEFT JOIN pull_requests pr ON b.repository_name = pr.repository AND b.pr_number = pr.pr_number
WHERE b.pr_number IS NOT NULL
ORDER BY b.finish_time DESC
LIMIT 20;
SELECT issue_number, title, state, error_message, error_pattern
FROM known_issues
WHERE repository = 'dotnet/roslyn' AND state = 'open'
ORDER BY issue_number;
SELECT b.build_id, b.definition_name, b.result, b.finish_time
FROM builds b
WHERE b.repository_name = 'dotnet/roslyn' AND b.pr_number = 12345
ORDER BY b.finish_time DESC;
(organization, project) for multi-org supportpull_requests, known_issues, and helix_work_items are keyed by repository or job (not org/project)build_ingestion_tasks table shows whether test/timeline data is available for a buildLIKE '%pattern%' for fuzzy matching on test names, definition names, etc.source_branch like refs/pull/123/merge and pr_number setbuilds to pull_requests on repository_name = repository AND pr_number = pr_number for PR details