Skip to content

Status of testing of Apache Airflow CTL 0.1.4rc2 #65497

Description

@potiuk

We are kindly requesting that contributors to Apache Airflow CTL RC 0.1.4rc2 help test the RC.

Please let us know by commenting if the issue is addressed in the latest RC.

Thanks to all who contributed to the release (probably not a complete list!):
@potiuk @bugraoz93 @henry3260 @atul-astronomer @dheerajturaga @Lee-W @pierrejeambrun @jscheffl @rjgoyln @justinpakzad @shubhamraj-git @Dev-iL @YoannAbriel @jason810496 @yzhangyext

Activity

  1. added
    kind:metaHigh-level information important to the community
    on Apr 19, 2026
  2. Dev-iL commented on Apr 19, 2026

    @Dev-iL
    Collaborator

    Add is_backfillable property to DAG API responses (#64644): @Dev-iL

    Is it not a problem that this change targets airflow-core 3.3.0?

  3. srchilukoori commented on Apr 19, 2026

    @srchilukoori
    Contributor

    RC Testing Results — apache-airflow-ctl 0.1.4rc2

    Environment: Breeze (Docker), Python 3.10, SQLite backend
    Date: 2026-04-19
    Install note: Required httpx==0.28.1 pin — RC ships httpx==1.0.dev3 which removed HTTPStatusError, crashing on startup.

    uv tool install 'apache-airflow-ctl==0.1.4rc2' --prerelease=allow --with 'httpx==0.28.1' --force-reinstall
    
    PR Fix Result Notes
    #63772 version no keyring prompt ✅ Pass Returns immediately, no credential prompts
    #64071 --limit returns ≤N results ✅ Pass Verified with 7 queued runs: --limit 2 → 2 rows, --limit 5 → 5 rows
    #64582 Negative --limit no infinite loop ✅ Pass Exits in <1s; API validates and rejects -1 cleanly
    #65052 Non-zero exit on failure ✅ Pass dags get --dag-id nonexistent-dag exits 1
    #65065 jobs list is_alive default ✅ Pass Returns DagProcessorJob, SchedulerJob, TriggererJob without error
    #64935 plugins list command exists ✅ Pass Returns plugin list
    #63259 Backfill no serialization error ✅ Pass backfill list returns empty list cleanly
    #63733 run_type in dag-run response ✅ Pass run_type: "manual" present in dagrun list response
    #64362 Variable falsy values preserved ✅ Pass "0" → "0" and "false" → "false" on create + get

    New bug found: dagrun list crashes without --state

    Command: airflowctl dagrun list --limit 5

    Error:

    Server error: Invalid value for state. Valid values are queued, running, success, failed
    

    Root cause: DagRunOperations.list() declares state: str as a required parameter with no default. When --state is omitted, argparse passes None. The operation unconditionally converts it with str(state) (line 630 of operations.py), which produces the literal string "None" — an invalid state value that the API rejects.

    Reproduce:

    airflowctl dagrun list --limit 5
    # → Server error: Invalid value for state. Valid values are queued, running, success, failed

    Fix: Change the state parameter to optional and skip it when not provided:

    # operations.py, DagRunOperations.list()
    def list(self, state: str | None = None, limit: int = 100, ...):
        params: dict[str, Any] = {"limit": limit}
        if state is not None:
            params["state"] = state

    Workaround: Pass --state explicitly, e.g. airflowctl dagrun list --state running --limit 5.

    Note: This also means --limit and --limit=-1 tests for PRs #64071 and #64582 required --state to be passed explicitly to isolate those behaviors.


    Generated with assistance from Claude (Anthropic). All commands run and verified manually against a live Breeze environment.

  4. potiuk commented on Apr 20, 2026

    @potiuk
    MemberAuthor

    Install note: Required httpx==0.28.1 pin — RC ships httpx==1.0.dev3 which removed HTTPStatusError, crashing on startup.

    That's interesting - it likely means we will have to upper bind it or pin it (BTW. You do not need to use pre-release flag - you can just install the version with ==0.1.4rc2 - then it will not use the pre-release httpx.

    Add is_backfillable property to DAG API responses (#64644): @Dev-iL
    Is it not a problem that this change targets airflow-core 3.3.0?

    This is a good question - and one of the problems that we anticipated might happen @bugraoz93 ? It was supposed to be backwards compatible, so the question is whether it is and how.

    I thought about relesing from v3-2-0-test - but it has a bit different issue, there 3.2.0-test is just a "test" branch that shoudl be actually reviewed before merging withv3-2-0-stable so maybe we need some kind of airfflow-ctl/v-1-4-test and stable ? I'd love to hear your thougts on it @bugraoz93 :) ?

  5. justinpakzad commented on Apr 20, 2026

    @justinpakzad
    Contributor

    My changes are all good!

  6. bugraoz93 commented on Apr 20, 2026

    @bugraoz93
    Contributor

    Install note: Required httpx==0.28.1 pin — RC ships httpx==1.0.dev3 which removed HTTPStatusError, crashing on startup.

    That's interesting - it likely means we will have to upper bind it or pin it (BTW. You do not need to use pre-release flag - you can just install the version with ==0.1.4rc2 - then it will not use the pre-release httpx.

    Yes, indeed. Pinning or capping with highest version until we are compatible with newer versions sounds great!

    Add is_backfillable property to DAG API responses (#64644): @Dev-iL
    Is it not a problem that this change targets airflow-core 3.3.0?

    This is a good question - and one of the problems that we anticipated might happen @bugraoz93 ? It was supposed to be backwards compatible, so the question is whether it is and how.

    I thought about relesing from v3-2-0-test - but it has a bit different issue, there 3.2.0-test is just a "test" branch that shoudl be actually reviewed before merging withv3-2-0-stable so maybe we need some kind of airfflow-ctl/v-1-4-test and stable ? I'd love to hear your thougts on it @bugraoz93 :) ?

    That is a great question indeed :D This could be a breaking change for release from main with any 3.2.x versions if we wait to release the API side. This can impact all the airflowctl dags commands, as it has been added to most core DAGResponse model.
    Not last but previous Sunday, I compared datamodels between main and v3-2-test datamodels, which were in sync #65069 and thought it is safe to release. It seems that after check and before release, this has been merged and I have missed it :D

    To be honest, after hearing your thoughts on releasing from v3-2-0-test, I backported everything to be ready there :) So ideally, we are ready to release from v3-2-test and populate the release notes, etc. from main, but still have the problem of polluting the actual Airflow release commits and the flow, as you mentioned on the sync review part.
    I like the idea of having separate branches for test and stable. One friction we would add is syncing Airflow core changes into airflow-ctl/v-1-4-test, but that could rather be the safer option, as we can either fast-forward core changes directly from the v3-2-test branch or cherry-pick and can revert from there when needed.

    I am still even considering your last suggestion, merging releases with Airflow and TaskSDK, as we also join as RMs to core to reduce the total amount of effort to release packages. It can make this even safer and could be the safest among all, even though making releases highly coupled will also have its own cons and some effort by the side :) Of course, this requires broader discussion

    First approach, your current suggestions, we can make it rather easily to have a separate test branch (as we did for Helm as well). Branching from v3-2-test to airflow-ctl/v-1-4-test and creating a stable branch from it when we release the first version from the new test branch should do the trick. I still need to check shifting integration tests, as we won't run canary other than the v3-2-test branch, which could be the only friction in my mind for shifting the release approach

  7. bugraoz93 commented on Apr 20, 2026

    @bugraoz93
    Contributor

    In the light of this breaking change has been merged which already carrying the risk while releasing from main. I think we should cancal the release @potiuk and decide to release it safely with compatible way from thee release approach.

    I think your both suggestion looks viable. It would be still good to have independent release process to flexible release bugfixes amendments and security fixes as we can release more than Airflow core. Since the dependencies also managed separately, stayin flexible also would helps a lot with security fixes

  8. potiuk commented on Apr 20, 2026

    @potiuk
    MemberAuthor

    Agree. Will do the airflow-ctl/v-1-4-test and airflow-ctl/v1-4-stable mirroring the core release.

  9. potiuk commented on Apr 20, 2026

    @potiuk
    MemberAuthor

    #65574 @bugraoz93 -> proposed process.

  10. potiuk commented on Apr 21, 2026

    @potiuk
    MemberAuthor

    Thanks everyone for testing rc2! Heads up: preparing 0.1.4rc3 now — rc2 will be superseded once rc3 ships. rc3 will fix the following items surfaced here (and anywhere else):

    Once those five PRs land on main, the code fixes (B/C) will be cherry-picked onto airflow-ctl/v0-1-test, synced to -stable, and tagged as airflow-ctl/0.1.4rc3. I'll post a fresh testing-status issue with the rc3 tag and notify here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    kind:metaHigh-level information important to the communitytesting statusStatus of testing releases

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions