kaxil opened a new pull request, #74420:
URL: https://github.com/apache/airflow/pull/74420

   Follow-up to #70298, which added Durable and Deferrable badges and filters 
to each provider's page. Finding every operator with either capability still 
meant opening providers one at a time. This adds `/durable/`: one page listing 
all of them (249 modules across 24 providers on today's data), grouped by 
provider, with filters for capability, provider, module type and a name search.
   
   ![Durable and deferrable operators page](./r2-1400-light.png)
   
   The page reads the `supports_durable_execution` and `supports_deferrable` 
flags that #70298 already writes to `modules.json`, so there is no extractor or 
schema change. It is a static Eleventy page like Explore and Stats, so it stays 
current without extra wiring: the incremental `registry-build.yml` run on each 
provider release merges that provider's fresh modules into `modules.json`, 
rebuilds the whole site, and the S3 sync uploads root pages such as 
`durable/index.html` alongside the target provider's pages.
   
   ## Design rationale
   
   - **The capability buttons mean exactly what the badges mean.** On a 
provider page, "Durable (includes deferrable)" is the union of both flags. Here 
"Durable" and "Deferrable" filter on the badge of the same name, and the 
default button is named for the union, "Durable or deferrable". Someone 
arriving from the Amazon page sees the same 105 modules under the default view.
   - **Each explainer states the default, because the badges are capabilities, 
not guarantees.** Durable is on by default for most operators but opt-in for 
`AgentOperator` and `@task.agent`, and several job-reconnect operators turn it 
off below Airflow 3.3. Deferrable is off unless `deferrable=True` is passed or 
`[operators] default_deferrable` is set, and a retried deferrable task starts 
`execute()` over. Without this the page would read as a promise that all 249 
operators never redo work.
   - **Compact rows grouped by provider instead of the provider page's cards.** 
A two-column grid of 249 cards was over 25,000px tall. Each row links to the 
module's anchor on its provider page, where the import path, docs and source 
links already are. Within a provider, Durable modules come first, since they 
are the rarer ones.
   - **Filter state is in the query string** 
(`?capability=durable&provider=amazon`), so a filtered view can be shared.
   
   The page is linked from the Explore quick links and from a line under the 
Modules header on every provider page that has at least one durable or 
deferrable module. It is not in the top nav. The provider page's module-card 
rules are now scoped to `:is(.provider-detail-page, .durable-page)`, which 
keeps their specificity, so the provider page renders as before.
   
   ## Screenshots
   
   Durable filter (desktop, light):
   
   ![Durable filter applied](./r2-1400-light-durable.png)
   
   Dark mode at 1024px, and mobile at 390px:
   
   ![Dark mode list](./r2-1024-dark-list.png) ![Mobile](./r2-390-dark.png)
   
   New link on a provider page:
   
   ![Provider page link](./pr-provider-link.png)
   
   ## Known issues
   
   - A change to the detection logic in `extract_parameters.py` reaches a 
provider's rows only when that provider is next extracted (its next release, or 
a full registry build). This is true of every registry page that reads 
`modules.json`.
   
   ---
   
   * Read the **[Pull Request 
Guidelines](https://github.com/apache/airflow/blob/main/contributing-docs/05_pull_requests.rst#pull-request-guidelines)**
 for more information. Note: commit author/co-author name and email in commits 
become permanently public when merged.
   * For fundamental code changes, an Airflow Improvement Proposal 
([AIP](https://cwiki.apache.org/confluence/display/AIRFLOW/Airflow+Improvement+Proposals))
 is needed.
   * When adding dependency, check compliance with the [ASF 3rd Party License 
Policy](https://www.apache.org/legal/resolved.html#category-x).
   * For significant user-facing changes create newsfragment: 
`{pr_number}.significant.rst`, in 
[airflow-core/newsfragments](https://github.com/apache/airflow/tree/main/airflow-core/newsfragments).
 You can add this file in a follow-up commit after the PR is created so you 
know the PR number.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to