Following up on Achieve 300 contributions in Apache Airflow.
Just a quick reflection on what I did between 300 and 400 contributions.
The count is now quite inaccurate. I never really understood the difference between the PR I created and the number of commits I contributed. However, I decided to include PRs from feat(api_fastapi): include asset ID in asset nodes when calling "/ui/dependencies" and "/ui/structure/structure_data" #47381 to build(pre-commit): upgrade node version to 22.18.0 and flynt 1.0.6 #54009 as part of my 300 to 400 contributions. This should be approximately correct. Next time, we'll start from build(pre-commit): upgrade node version to 22.18.0 and flynt 1.0.6 #54009.
This time, I created the following script to help me list the PRs I need in my preferred format. Itβs quite convenient.
START_PR_NUMBER=47381
END_PR_NUMBER=54009
START_MERGED_AT=$(gh pr view $START_PR_NUMBER --json mergedAt --jq .mergedAt)
END_MERGED_AT=$(gh pr view $END_PR_NUMBER --json mergedAt --jq .mergedAt)
echo "Start merged at: $START_MERGED_AT"
echo "End merged at: $END_MERGED_AT"
gh pr list \
-A @me \
-s merged \
--json title,mergedAt,number,url \
-L 1000 \
--jq "[.[]
| select(.mergedAt > \"$START_MERGED_AT\" and .mergedAt < \"$END_MERGED_AT\")]
| sort_by(.mergedAt)[]
| \"1. [\(.title) #\(.number)](\(.url))\"" |
> output.md
Migration Tooling
- feat(migrations): remove dataset with duplicate uri when downgrading #48501
- docs(newsfragment): update the base operator path changed in #48529 #48540
- docs(newsfragments): uncheck rules modified in #48551 #48559
- Fix newsfragments migration rules content error #48566
- docs(newsfragments): mark implemented AIR302 rules as Done #48618
- Add missing
airflow config lint
rules and update/fix newsfragments #49048 - docs(upgrading_to_airflow3): add instruction to use ruff >= 0.11.13 for more auto fixes #51603
Asset/Asset Alias related
- feat(UI): add asset-name-ref and asset-uri-ref to BaseNodeResponse #48920
- feat(task-sdk): add for_asset, for_asset_alias to event accessors #48999
- fix(serialized_dag): skip asset dag dep when the asset ref cannot be resolved into a valid asset #48795
- fix(example_dags): fix how asset events can be accessed through template #49044
- Remove asset-name-ref and asset-uri-ref node after resolving them #49008
- fix(serialized_dag): return original DagDependency if Asset Alias has not yet been resolved into asset #49204
- fix(AssetSchedule): fix how asset_expression is accessed #49214
- fix(AssetSchedule): use asset.name if exists #49225
- fix(serialized_objects): handle both inlet and outlet in v1 to v2 convert #49286
- fix(serialized_objects): fix how dataset/asset dag_dependency is converted from v1 to v2 #49281
- fix(airflow.datasets): Fix DatasetAny fallback typo #50383
- feat(dag_dependency): add unresolved asset ref node #49231
- docs(ruff): fix outdated content and add airflow rule list, ruff configuration links #50232
- fix(migrations): from 2.2.0 to 2.11.0 for Sqlite #50745
- Add back invalid inlet and outlet check before running tasks #50773
- Remove logical_date check when validate inlets and outlets #51464
Taiwanese Mandarin translation
- docs(CODEOWNERS): Add Lee-W as Mandarian translation code owner #50951
- fix(CODEOWNERS): update TW translation path #51159
- fix(i18n): replace ζδ»Ά as ε€ζ #51230
- Replace "Directly" with "Manually" zh-tw/assets.json #51726
- Add @jason810496 as a code owner and translation owner and @RoyLee1224, @guan404ming as Non-Committer Translation Owners #51728
Fix Airflow 2 to 3 db migration for SQLite
- fix(serialized_object): fix how timetable and schedule_interval are handled during v1 to v2 conversion #49344
- fix(migrations): from 2.7.0 to 3.0.0 for SQLite #51336
- fix(migrations): from 2.7.0 to 3.0.0 for SQLite #51431
- fix(migrations): only ignore ValueError when interacting with constraints in sqlite #51529
- [v3-0-test] fix(serialized_objects): try to infer data interval if it's none (#51530) #51913
- [v3-0-test] fix(migrations): only ignore value error when interacting with constraints in sqlite (#51529) #51641
AIP-90: Human in the loop
- feat(hitl): add HITLBranchOperator #53960
- Add Human-in-the-loop logic to core Airflow and implement
HITLOperator
,ApprovalOperator
,HITLEntryOperator
in standard provider #52868 - fix(hitl): Fix HITLEntryOperator "options" and "defaults" handling #53184
- feat(hitl): include task_instance detail in hitl detail response #53373
- Add example Dags for Human in the loop operators #53360
- Support Query in GetHITLDetails Public api #53376
- fix(hitl): handle
HITLDetail
when task instance is retried #53824 - fix(hitl): rename
/hitl-details
endpoints as/hitlDetails
#53885 - feat(hitl): add "timedout" column to HITLTriggerEventSuccessPayload #53852
- fix(hitl): Handle task instance clearing when getting and updating an existing HITLDetail #53863
- feat(HITL): improve hitl trigger logging message #53850
- test(hitl): fix test_update_hitl_detail_without_ti and test_get_hitl_detail_without_ti failure #53921
- feat(hitl): allow filtering by taskIdPattern in "GET /hitlDetails" #53923
- refactor(HITL): make default options class variables to avoid typo #53849
main branch CI failure
- Fix default deferrable checking script #50934
- docs: add comments to pytest 8.4.0 limitation #51340
- [v3-0-test] Add sqlalchemy-spanner limitation for broken 1.12.0 release #51432
- Exclude libcst 1.8.1 for Python 3.9 #51606
- fix(ui): rebuild ts assets #51911
- fix(dev): guard missing --language if --add-missing is used in dev/i18n/check_translations_completeness.py #51981
misc
- Handle MappedTaskGroup map indexes #49996
- fix(task_instances): handle upstream_mapped_index when xcom access is needed #50641
- fix(breeze): fix missing ` in warning message #49000
- fix(serialized_dag): handle compressing serialized_dag for get_dag_dependencies #48924
- fix(serialized_dag): expand DagDependency generation and add fallback value #49327
- Update the default value of
PubSubPullOperator.deferrable
toconf.getboolean("operators", "default_deferrable", fallback=False)
#50935 - docs: replace constraints-3.8.txt as constraints-3.9.txt as constraints-3.8.txt does not exist in 2.11 #51049
- feat(task_instances): guard ti update state and set task to fail if exception encountered #51295
- docs(providers): fix contributing-doc reference #51616
- docs(dagfile-processing): fix outdated scheduler and DAG usage #53183
- docs: Update DAG author as Dag author #53857