This is not too much different than what we already do. We deprecate then we remove. We almost never create breaking change without deprecating first.
I'd like to raise a few notes: 1. Major releases can happen frequently. I see no problem with it. This is more a question of what are the changes. If google has 3 major releases one with breaking change to ads, another to leveldb and 3rd to cloud these are not related one to another and unlikely that there is 1 user that uses all of these together. We create major releases when needed and we keep a close eye and challenge why a change must be a breaking change. If possible we will always prefer to be backward compatible. 2. Time based deprecations are not a good approach. Some changes require much more time to be acted upon and others may be trivial. As a rule we almost never cut a breaking change release just to remove deprecations. 3. Setting a policy per provider is not the right way to go. We have a shared governance model for provider handling and I as release manager will do what I can to accommodate requests from companies who participate in managing the provider. Which means that if Google wants to remove deprecations and ask for a breaking change release most likely we will accommodate their request. My point of view is that the company knows what is best for their own users. I don't think that what is right for Google must bind AWS or Microsoft. 1 policy goes against the shared governance idea. On Thu, Feb 29, 2024 at 11:04 AM Eugen Kosteev <eu...@kosteev.com> wrote: > Hi. > > I would like to discuss/propose a deprecation policy for > apache-airflow-providers-google package, mostly for deprecating Airflow > operators (but not limited to it). > > *Some background:* > Airflow google provider package (as most of other provider packages in > Airflow) has a tendency to constantly evolve. > There are cases when its features or operators/hooks have to be deprecated. > The typical example of such a case is “refactoring” which leads to the > renaming of operators, parameters or public methods. Such refactorings > maybe consequence of: > - using a new dependent library (that causes some methods to be deprecated) > - using a new version of API (that causes some parameters to be deprecated) > - restructuring/migration of the operators (that causes some operators to > be deprecated) > Given the need of a “deprecation” procedure, it looks essential to > establish policy around it to have users of Airflow google provider package > clearly understand when and how to adapt their DAGs. > > *Preambula (versioning of the package):* > As mentioned in “Airflow’s release process and version policy” ( > > https://airflow.apache.org/docs/apache-airflow/stable/release-process.html#airflow-s-release-process-and-version-policy > ) > google provider package (and others) should follow SemVer, meaning that any > breaking changes should be released together with bumping major version of > the package. > The change is considered to be a breaking (in the context of google > providers package) if a DAG that was working before, stops to work after > the change. > > *My proposal (for discussion):* > The entire procedure of deprecating (either method, parameter or operator) > consists of two steps: > - Emission of the deprecation warning message > Example of the message: > “”” > The “given” parameter is deprecated and will be removed after dd.mm.yyyy. > Please use “this” parameter instead. > “”” > - Once the date of the deprecated method/parameter/operator is passed, it > can be removed (together with bumping major version of the package) > > The format of the warning message may vary, but it has to contain: > - What should be used instead > - The date after which the method/parameter/operator will be removed > > *Additional considerations:* > - Bumping a major version of the Airflow google provider package shouldn’t > happen very frequently (presumably not more frequently than 6 months), > therefore when it happens it may accumulate removals of something that was > communicated to be removed even a couple of months ago. (related discussion > https://github.com/apache/airflow/blob/main/PROVIDERS.rst) > Example: if today is 2025-12-20 and we are releasing new major version of > the package, we can/should remove all deprecated > methods/parameters/operators which have date prior to 2025-12-20 - it can > be November 2025, October 2025 or even earlier, since previous bump of > major version happened e.g. in summer of 2025. > - By default all deprecations should allow a 6 months time period until > they will be removed and not available. This period will give Airflow users > enough time and flexibility to update their DAGs before actual removal > happens. > On a case by case basis this period can be adjusted given specific > circumstances (e.g. in case deprecation is because of underlying API sunset > which can happen earlier than in 6 months). > > Apart from deprecation warning messages that will be printed as logs, this > information will be put as well in: > - Airflow documentation > - Release notes of Airflow google provider package > > Please, let me know what you think about this. > > -- > Eugene >