Implementation:Apache Airflow Boring Cyborg Config
| Knowledge Sources | |
|---|---|
| Domains | CI_CD, Automation |
| Last Updated | 2026-02-08 21:00 GMT |
Overview
Auto-labeling configuration for the boring-cyborg GitHub bot that automatically triages pull requests by applying labels based on which files are changed.
Description
The .github/boring-cyborg.yml file is a 614-line YAML configuration for the boring-cyborg GitHub bot. It defines a mapping from file path glob patterns to GitHub labels. When a pull request is opened or updated, the bot inspects the changed files and automatically applies the corresponding labels. The configuration covers three primary label categories:
- Provider labels (
provider:*): Over 70 provider-specific labels mapping paths likeproviders/amazon/**toprovider:amazon. - Area labels (
area:*): Functional area labels such asarea:API,area:dev-tools,area:UI,area:Scheduler,area:Logging,area:helm-chart,area:task-sdk,area:providers,area:CLI,area:Secrets,area:Triggerer,area:db-migrations, and others. - Kind and translation labels: Labels like
kind:documentation,translation:*for localization files, andbackport-to-v3-1-test.
The file also configures welcome comments for first-time contributors, first merged PR congratulations, and first issue greetings.
Usage
This configuration is consumed automatically by the boring-cyborg GitHub App installed on the apache/airflow repository. No manual invocation is required. When a PR is opened or its files change, the bot reads this YAML and applies matching labels. The labelOnPRUpdates flag is set to false, meaning labels are only applied on initial PR creation.
Code Reference
Source Location
- Repository: Apache_Airflow
- File:
.github/boring-cyborg.yml - Lines: 614
Signature
# Top-level structure of boring-cyborg.yml
labelPRBasedOnFilePath:
provider:airbyte:
- providers/airbyte/**
provider:amazon:
- providers/amazon/**
area:API:
- airflow-core/src/airflow/api/**/*
- airflow-core/src/airflow/api_fastapi/core_api/**/*
- clients/**/*
area:dev-tools:
- scripts/**/*
- dev/**/*
- .github/**/*
kind:documentation:
- airflow-core/docs/**/*
- providers/**/docs/**/*
area:helm-chart:
- chart/**/*
area:task-sdk:
- task-sdk/**/*
labelerFlags:
labelOnPRUpdates: false
firstPRWelcomeComment: >
Congratulations on your first Pull Request and welcome to the Apache Airflow community!
...
firstPRMergeComment: >
Awesome work, congrats on your first merged pull request!
...
firstIssueWelcomeComment: >
Thanks for opening your first issue here!
...
checkUpToDate:
targetBranch: main
files: []
I/O Contract
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
| PR file changes | File path list | Yes | List of files modified in a pull request, provided by GitHub webhook events |
| PR metadata | GitHub event | Yes | Pull request open/synchronize event triggering the bot |
Outputs
| Name | Type | Description |
|---|---|---|
| GitHub labels | Label set | One or more labels applied to the PR (e.g., provider:amazon, area:API)
|
| Welcome comment | PR comment | First-time contributor welcome message posted on first PR |
| Merge comment | PR comment | Congratulatory message posted when first PR is merged |
| Issue comment | Issue comment | Welcome message posted on first issue |
Usage Examples
Sample Provider Label Mapping
# When files under providers/google/** are changed,
# the label "provider:google" is automatically applied
labelPRBasedOnFilePath:
provider:google:
- providers/google/**
Sample Area Label Mapping
# When files in the scheduler source or docs are changed,
# the label "area:Scheduler" is applied
labelPRBasedOnFilePath:
area:Scheduler:
- airflow-core/src/airflow/jobs/scheduler_job_runner.py
- airflow-core/docs/administration-and-deployment/scheduler.rst
- airflow-core/tests/unit/jobs/test_scheduler_job.py
Label Categories Summary
| Category | Example Labels | Count |
|---|---|---|
| Provider labels | provider:amazon, provider:google, provider:celery |
70+ |
| Area labels | area:API, area:UI, area:Scheduler, area:task-sdk |
15+ |
| Kind labels | kind:documentation |
1 |
| Translation labels | translation:zh-CN, translation:ja, translation:fr |
18+ |