kaxil commented on a change in pull request #13767:
URL: https://github.com/apache/airflow/pull/13767#discussion_r561398276



##########
File path: dev/provider_packages/PROVIDER_INDEX_TEMPLATE.rst.jinja2
##########
@@ -0,0 +1,84 @@
+{#
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+ NOTE! THIS FILE IS AUTOMATICALLY GENERATED AND WILL BE
+ OVERWRITTEN WHEN PREPARING PACKAGES.
+
+ IF YOU WANT TO MODIFY IT, YOU SHOULD MODIFY THE TEMPLATE
+ `PROVIDER_INDEX_TEMPLATE.rst.jinja2` IN the `provider_packages` DIRECTORY
+
+#}
+
+Package {{ PACKAGE_PIP_NAME }}
+------------------------------------------------------
+
+Release: {{ RELEASE }}{{ VERSION_SUFFIX }}
+
+Provider package
+----------------
+
+This is a provider package for ``{{PROVIDER_PACKAGE_ID}}`` provider. All 
classes for this provider package
+are in ``{{FULL_PACKAGE_NAME}}`` python package.
+
+Installation
+------------
+
+.. note::
+
+    On November 2020, new version of PIP (20.3) has been released with a new, 
2020 resolver. This resolver
+    does not yet work with Apache Airflow and might lead to errors in 
installation - depends on your choice
+    of extras. In order to install Airflow you need to either downgrade pip to 
version 20.2.4
+    ``pip install --upgrade pip==20.2.4`` or, in case you use Pip 20.3, you 
need to add option
+    ``--use-deprecated legacy-resolver`` to your pip install command.
+
+
+You can install this package on top of an existing airflow 2.* installation via
+``pip install {{PACKAGE_PIP_NAME}}``
+{%- if PIP_REQUIREMENTS %}
+
+PIP requirements
+----------------
+
+{{  PIP_REQUIREMENTS_TABLE_RST | safe}}
+{%- endif %}
+{%- if CROSS_PROVIDERS_DEPENDENCIES %}
+
+Cross provider package dependencies
+-----------------------------------
+
+Those are dependencies that might be needed in order to use all the features 
of the package.
+You need to install the specified backport providers package in order to use 
them.
+
+You can install such cross-provider dependencies when installing from PyPI. 
For example:
+
+.. code-block:: bash
+
+    pip install {{ PACKAGE_PIP_NAME }}[{{ CROSS_PROVIDERS_DEPENDENCIES[0] }}]
+
+
+{{ CROSS_PROVIDERS_DEPENDENCIES_TABLE_RST | safe }}
+
+{%- endif %}

Review comment:
       I like what you have suggested here Jarek.
   
   - Concise README
   - Link to commit changelog
   - detailed changelog is the Updating guide right?

##########
File path: BREEZE.rst
##########
@@ -2056,6 +2065,28 @@ This is the current syntax for  `./breeze <./breeze>`_:
 
   Flags:
 
+  -S, --version-suffix-for-pypi SUFFIX
+          Adds optional suffix to the version in the generated backport 
package. It can be used

Review comment:
       Is this only for backports or regular providers too?

##########
File path: BREEZE.rst
##########
@@ -2056,6 +2065,28 @@ This is the current syntax for  `./breeze <./breeze>`_:
 
   Flags:
 
+  -S, --version-suffix-for-pypi SUFFIX
+          Adds optional suffix to the version in the generated backport 
package. It can be used
+          to generate rc1/rc2 ... versions of the packages to be uploaded to 
PyPI.
+
+  -N, --version-suffix-for-svn SUFFIX
+          Adds optional suffix to the generated names of package. It can be 
used to generate
+          rc1/rc2 ... versions of the packages to be uploaded to SVN.
+
+  --package-format PACKAGE_FORMAT
+
+          Chooses format of packages to prepare.
+
+          One of:
+
+                 wheel,sdist,both
+
+          Default: 

Review comment:
       is there NO default?

##########
File path: airflow/providers/CHANGELOG.rst
##########
@@ -0,0 +1,25 @@
+ .. Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+ ..   http://www.apache.org/licenses/LICENSE-2.0
+
+ .. Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+
+
+Changelog
+---------
+
+1.0.0
+.....
+
+Initial version of the provider.

Review comment:
       Don't  think this is intended -- we don't want to have Changelog.rst in 
`airflow/providers`

##########
File path: airflow/providers/README.md
##########
@@ -1,28 +0,0 @@
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements.  See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership.  The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License.  You may obtain a copy of the License at
-
-   http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied.  See the License for the
- specific language governing permissions and limitations
- under the License.
- -->
-
-# Airflow Providers

Review comment:
       is this deletion intentional?

##########
File path: airflow/providers/amazon/README.md
##########
@@ -1,483 +0,0 @@
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements.  See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership.  The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License.  You may obtain a copy of the License at
-
-   http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied.  See the License for the
- specific language governing permissions and limitations
- under the License.
- -->
-
-
-# Package apache-airflow-providers-amazon

Review comment:
       We don't want this Readme, but I thought we will generate the new readme 
-- is that only during release ? Would be good to have it here

##########
File path: airflow/providers/res.txt
##########
@@ -0,0 +1,61 @@
+./salesforce
+./celery
+./amazon

Review comment:
       yeah not sure what this file is about

##########
File path: dev/provider_packages/BACKPORT_PROVIDER_README_TEMPLATE.md.jinja2
##########
@@ -88,6 +95,6 @@ You can install such cross-provider dependencies when 
installing from PyPI. For
 pip install {{ PACKAGE_PIP_NAME }}[{{ CROSS_PROVIDERS_DEPENDENCIES[0] }}]
 ```
 
-{{ CROSS_PROVIDERS_DEPENDENCIES_TABLE }}
+{{ CROSS_PROVIDERS_DEPENDENCIES_TABLE | safe }}

Review comment:
       what's the reason for `| safe`

##########
File path: dev/provider_packages/copy_provider_package_sources.py
##########
@@ -767,27 +781,38 @@ def do_refactor(self, in_process: bool = False) -> None:  
# noqa
         self.refactor_kubernetes_pod_operator()
         # In order to debug Bowler - set in_process to True
         self.qry.execute(write=True, silent=False, interactive=False, 
in_process=in_process)
+        print("[green]OK[/]")
+
+
+def get_parser():
+    cli_parser = argparse.ArgumentParser(
+        description="Copies sources and optionally refactors provider code to 
be Airflow 1.10 compatible.",
+        formatter_class=argparse.RawTextHelpFormatter,
+    )
+    cli_parser.add_argument(
+        "--backports",
+        action='store_true',
+        help=textwrap.dedent("Includes refactoring to prepare backport 
packages rather than regular ones"),
+    )
+    cli_parser.add_argument(
+        "--debug",
+        action='store_true',
+        help=textwrap.dedent(
+            "Run bowler refactoring in single process. Makes it debuggable 
with regular"
+            " IDE debugger (much slower)"
+        ),
+    )
+    return cli_parser
 
 
 if __name__ == '__main__':
-    BACKPORT_PACKAGES = os.getenv('BACKPORT_PACKAGES') == "true"
-    in_process = False
-    if len(sys.argv) > 1:
-        if sys.argv[1] in ['--help', '-h']:
-            print()
-            print("Refactors provider packages to be Airflow 1.10 compatible.")
-            print()
-            print(f"Usage: {sys.argv[0]} [--debug] | [-h] | [--help]")
-            print()
-            print("You can use --debug flag in order to run bowler refactoring 
in process.")
-            print("This allows you to debug bowler process as usual using your 
IDE debugger")
-            print("Otherwise it heavily uses multi-processing and is 
next-to-impossible to debug")
-            print()
-            print("Note - Bowler is also a lot slower in this mode.")
-            print()
-            sys.exit(0)
-        if sys.argv[1] == '--debug':
-            in_process = True
-    copy_provider_sources()
-    if BACKPORT_PACKAGES:
+    parser = get_parser()
+    args = parser.parse_args()
+
+    in_process = args.debug
+    copy_provider_sources(args.backports)
+    os.chdir(get_target_providers_folder())
+    if args.backports:
+        print("\nRefactoring code to be Airflow 1.10 - compatible\n")
         RefactorBackportPackages().do_refactor(in_process=in_process)
+        print("\n[green]Refactored code successfully[/]\n")

Review comment:
       ```suggestion
       copy_provider_sources(args.backports)
       os.chdir(get_target_providers_folder())
       if args.backports:
           print("\nRefactoring code to be Airflow 1.10 - compatible\n")
           RefactorBackportPackages().do_refactor(in_process=args.debug)
           print("\n[green]Refactored code successfully[/]\n")
   ```

##########
File path: dev/provider_packages/prepare_provider_packages.py
##########
@@ -1225,184 +1195,272 @@ def 
get_provider_info_from_provider_yaml(provider_package_id: str) -> Dict[str,
     return provider_info
 
 
-def update_generated_files_for_package(
+def get_backport_current_changes_table(previous_release_commit_ref: str, 
source_provider_package_path: str):
+    git_cmd = get_git_log_command(previous_release_commit_ref)
+    try:
+        changes = subprocess.check_output(git_cmd, 
cwd=source_provider_package_path, universal_newlines=True)
+        changes_table = convert_git_changes_to_table(
+            previous_release_commit_ref, changes, 
base_url="https://github.com/apache/airflow/commit/";
+        )
+    except subprocess.CalledProcessError:
+        changes_table = ''
+    return changes_table
+
+
+def get_version_tag(version: str, provider_package_id: str, version_suffix: 
str):
+    return 
f"providers-{provider_package_id.replace('.','-')}/{version}{version_suffix}"
+
+
+def print_changes_table(changes_table):
+    syntax = Syntax(changes_table, "rst", theme="light")
+    console = Console(width=200)
+    console.print(syntax)
+
+
+def get_all_changes_for_regular_packages(
+    versions: List[str],
     provider_package_id: str,
-    current_release_version: str,
+    source_provider_package_path: str,
     version_suffix: str,
-    imported_classes: List[str],
-    backport_packages: bool,
-    update_release_notes: bool,
-    update_setup: bool,
-) -> Tuple[int, int]:
-    """
-    Updates release notes (BACKPORT_PROVIDER_README.md/README.md) for the 
package.
-    Returns Tuple of total number of entities and badly named entities.
+) -> Tuple[bool, str]:
+    current_version = versions[0]
+    current_tag = get_version_tag(current_version, provider_package_id, 
version_suffix)
+    print(f"Checking if tag `{current_tag}` exists.")
+    if not subprocess.call(
+        get_git_tag_check_command(current_tag),
+        cwd=source_provider_package_path,
+        stderr=subprocess.DEVNULL,
+    ):
+        print(f"The tag {current_tag} exists.")
+        # The tag already exists
+        changes = subprocess.check_output(
+            get_git_log_command(current_tag, 'HEAD'),
+            cwd=source_provider_package_path,
+            universal_newlines=True,
+        )
+        if len(changes) > 0:
+            print(
+                f"[yellow]The provider {provider_package_id} has changes"
+                f" since last release but version is not updated[/]"
+            )
+            print()
+            print(
+                f'Please update version in 
`airflow/providers/{provider_package_id.replace("-","/")}/'
+                'provider.yaml` to prepare release.\n'
+            )
+            changes_table = convert_git_changes_to_table(
+                "UNKNOWN", changes, 
base_url="https://github.com/apache/airflow/commit/";, markdown=False
+            )
+            print_changes_table(changes_table)
+            return False, changes_table
+        else:
+            print(f"No changes for {provider_package_id}")
+            return False, ""
+    print("The tag does not exist. ")
+    if len(versions) == 1:
+        print("This provider has never been released!\n")
+    else:
+        print(f"The {provider_package_id} is ready to be released!\n")
+    current_version = 'HEAD'
+    changes_table = ''
+    print_version = versions[0]
+    for version in versions[1:]:
+        version_tag = get_version_tag(version, provider_package_id, 
version_suffix)
+        changes = subprocess.check_output(
+            get_git_log_command(version_tag, current_version),
+            cwd=source_provider_package_path,
+            universal_newlines=True,
+        )
+        changes_table += convert_git_changes_to_table(
+            print_version, changes, 
base_url="https://github.com/apache/airflow/commit/";, markdown=False
+        )
+        current_version = version
+        print_version = version
+    print_changes_table(changes_table)
+    return True, changes_table
+
+
+def get_provider_details(provider_package_id: str) -> ProviderPackageDetails:
+    return ProviderPackageDetails(
+        provider_package_id=provider_package_id,
+        full_package_name=f"airflow.providers.{provider_package_id}",
+        
source_provider_package_path=get_source_package_path(provider_package_id),
+        
documentation_provider_package_path=get_documentation_package_path(provider_package_id),
+    )
 
-    :param provider_package_id: id of the package
-    :param current_release_version: release version:
-    :param version_suffix: version suffix corresponding to the version in the 
code
-    :param imported_classes - entities that have been imported from providers
-    :param backport_packages: whether to prepare regular (False) or backport 
(True) packages
-    :param update_release_notes: whether to update release notes
-    :param update_setup: whether to update setup files
 
-    :return: Tuple of total/bad number of entities
-    """
-    verify_provider_package(provider_package_id)
-    full_package_name = f"airflow.providers.{provider_package_id}"
-    source_provider_package_path = get_source_package_path(provider_package_id)
-    entity_summaries = get_package_class_summary(full_package_name, 
imported_classes)
-    past_releases = get_all_releases(
-        provider_package_path=source_provider_package_path, 
backport_packages=backport_packages
+def get_provider_jinja_context(
+    provider_details: ProviderPackageDetails,
+    current_release_version: str,
+    version_suffix: str,
+    backport_packages: bool,
+):
+    verify_provider_package(provider_details.provider_package_id)
+    cross_providers_dependencies = get_cross_provider_dependent_packages(
+        provider_package_id=provider_details.provider_package_id
     )
-    current_release_version, previous_release = check_if_release_version_ok(
-        past_releases, current_release_version, backport_packages
+    release_version_no_leading_zeros = 
strip_leading_zeros(current_release_version)
+    pip_requirements_table = convert_pip_requirements_to_table(
+        PROVIDERS_REQUIREMENTS[provider_details.provider_package_id]
     )
-    cross_providers_dependencies = get_cross_provider_dependent_packages(
-        provider_package_id=provider_package_id
+    pip_requirements_table_rst = convert_pip_requirements_to_table(
+        PROVIDERS_REQUIREMENTS[provider_details.provider_package_id], 
markdown=False
     )
-    previous_release = get_previous_release_info(
-        previous_release_version=previous_release,
-        past_releases=past_releases,
-        current_release_version=current_release_version,
+    cross_providers_dependencies_table = 
convert_cross_package_dependencies_to_table(
+        cross_providers_dependencies,
+        backport_packages=backport_packages,
     )
-    release_version_no_leading_zeros = (
-        strip_leading_zeros_in_calver(current_release_version)
-        if backport_packages
-        else current_release_version
+    cross_providers_dependencies_table_rst = 
convert_cross_package_dependencies_to_table(
+        cross_providers_dependencies, backport_packages=backport_packages, 
markdown=False
     )
     context: Dict[str, Any] = {
         "ENTITY_TYPES": list(EntityType),
         "README_FILE": "BACKPORT_PROVIDER_README.md" if backport_packages else 
"README.md",
-        "PROVIDER_PACKAGE_ID": provider_package_id,
-        "PACKAGE_PIP_NAME": get_pip_package_name(provider_package_id, 
backport_packages),
-        "FULL_PACKAGE_NAME": full_package_name,
-        "PROVIDER_PATH": full_package_name.replace(".", "/"),
+        "PROVIDER_PACKAGE_ID": provider_details.provider_package_id,
+        "PACKAGE_PIP_NAME": get_pip_package_name(
+            provider_details.provider_package_id, 
backport_packages=backport_packages
+        ),
+        "FULL_PACKAGE_NAME": provider_details.full_package_name,
+        "PROVIDER_PATH": provider_details.full_package_name.replace(".", "/"),
         "RELEASE": current_release_version,
         "RELEASE_NO_LEADING_ZEROS": release_version_no_leading_zeros,
         "VERSION_SUFFIX": version_suffix,
-        "ADDITIONAL_INFO": 
get_additional_package_info(provider_package_path=source_provider_package_path),
+        "ADDITIONAL_INFO": get_additional_package_info(
+            provider_package_path=provider_details.source_provider_package_path
+        ),
+        "CHANGELOG": get_changelog_for_package(
+            provider_package_path=provider_details.source_provider_package_path
+        ),
         "CROSS_PROVIDERS_DEPENDENCIES": cross_providers_dependencies,
-        "PIP_REQUIREMENTS": PROVIDERS_REQUIREMENTS[provider_package_id],
-        "PROVIDER_TYPE": "Backport provider" if BACKPORT_PACKAGES else 
"Provider",
-        "PROVIDERS_FOLDER": "backport-providers" if BACKPORT_PACKAGES else 
"providers",
+        "PIP_REQUIREMENTS": 
PROVIDERS_REQUIREMENTS[provider_details.provider_package_id],
+        "PROVIDER_TYPE": "Backport provider" if backport_packages else 
"Provider",
+        "PROVIDERS_FOLDER": "backport-providers" if backport_packages else 
"providers",
         "INSTALL_REQUIREMENTS": get_install_requirements(
-            provider_package_id=provider_package_id, 
backport_packages=backport_packages
+            provider_package_id=provider_details.provider_package_id, 
backport_packages=backport_packages
         ),
         "SETUP_REQUIREMENTS": get_setup_requirements(),
         "EXTRAS_REQUIREMENTS": get_package_extras(
-            provider_package_id=provider_package_id, 
backport_packages=backport_packages
+            provider_package_id=provider_details.provider_package_id, 
backport_packages=backport_packages
         ),
-        "PROVIDER_INFO": 
get_provider_info_from_provider_yaml(provider_package_id),
+        "CROSS_PROVIDERS_DEPENDENCIES_TABLE": 
cross_providers_dependencies_table,
+        "CROSS_PROVIDERS_DEPENDENCIES_TABLE_RST": 
cross_providers_dependencies_table_rst,
+        "PIP_REQUIREMENTS_TABLE": pip_requirements_table,
+        "PIP_REQUIREMENTS_TABLE_RST": pip_requirements_table_rst,
     }
-    if update_release_notes:
-        git_cmd = get_git_command(previous_release)
-        try:
-            changes = subprocess.check_output(
-                git_cmd, cwd=source_provider_package_path, 
universal_newlines=True
-            )
-            changes_table = convert_git_changes_to_table(
-                changes, base_url="https://github.com/apache/airflow/commit/";
-            )
-        except subprocess.CalledProcessError:
-            # TODO(potiuk) fix me for both backport/provider package check
-            changes_table = ''
-        context["CURRENT_CHANGES_TABLE"] = changes_table
-        pip_requirements_table = convert_pip_requirements_to_table(
-            PROVIDERS_REQUIREMENTS[provider_package_id]
-        )
-        cross_providers_dependencies_table = 
convert_cross_package_dependencies_to_table(
-            cross_providers_dependencies,
-            backport_packages=backport_packages,
-        )
-        context["CROSS_PROVIDERS_DEPENDENCIES_TABLE"] = 
cross_providers_dependencies_table
-        context["PIP_REQUIREMENTS_TABLE"] = pip_requirements_table
+    return context
 
-    total, bad = check_if_classes_are_properly_named(entity_summaries)
+
+def prepare_readme_file(
+    context,
+):
+    readme_content = LICENCE
+    readme_template_name = PROVIDER_TEMPLATE_PREFIX + "README"
+    readme_content += render_template(template_name=readme_template_name, 
context=context, extension='.md')
+    readme_file_path = os.path.join(TARGET_PROVIDER_PACKAGES_PATH, "README.md")
+    with open(readme_file_path, "wt") as readme_file:
+        readme_file.write(readme_content)
+
+
+def update_generated_files_for_regular_package(
+    provider_package_id: str,
+    version_suffix: str,
+    update_release_notes: bool,
+    update_setup: bool,
+) -> None:
+    """
+    Updates generated files (readme, changes and/or 
setup.cfg/setup.py/manifest.in/provider_info)
+
+    :param provider_package_id: id of the package
+    :param version_suffix: version suffix corresponding to the version in the 
code
+    :param update_release_notes: whether to update release notes
+    :param update_setup: whether to update setup files
+    """
+    verify_provider_package(provider_package_id)
+    provider_details = get_provider_details(provider_package_id)
+    provider_info = get_provider_info_from_provider_yaml(provider_package_id)
+    versions: List[str] = provider_info['versions']
+    current_release_version = versions[0]
+    # previous_release = versions[1] if len(versions) > 1 else None
+    # previous_release_commit_ref = 
f"providers-{provider_package_id.replace('.','-')}/{previous_release}"

Review comment:
       this can go I guess

##########
File path: dev/provider_packages/PROVIDER_INDEX_TEMPLATE.rst.jinja2
##########
@@ -0,0 +1,84 @@
+{#
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+ NOTE! THIS FILE IS AUTOMATICALLY GENERATED AND WILL BE
+ OVERWRITTEN WHEN PREPARING PACKAGES.
+
+ IF YOU WANT TO MODIFY IT, YOU SHOULD MODIFY THE TEMPLATE
+ `PROVIDER_INDEX_TEMPLATE.rst.jinja2` IN the `provider_packages` DIRECTORY
+
+#}
+
+Package {{ PACKAGE_PIP_NAME }}
+------------------------------------------------------
+
+Release: {{ RELEASE }}{{ VERSION_SUFFIX }}
+
+Provider package
+----------------
+
+This is a provider package for ``{{PROVIDER_PACKAGE_ID}}`` provider. All 
classes for this provider package
+are in ``{{FULL_PACKAGE_NAME}}`` python package.
+
+Installation
+------------
+
+.. note::
+
+    On November 2020, new version of PIP (20.3) has been released with a new, 
2020 resolver. This resolver
+    does not yet work with Apache Airflow and might lead to errors in 
installation - depends on your choice
+    of extras. In order to install Airflow you need to either downgrade pip to 
version 20.2.4
+    ``pip install --upgrade pip==20.2.4`` or, in case you use Pip 20.3, you 
need to add option
+    ``--use-deprecated legacy-resolver`` to your pip install command.
+
+
+You can install this package on top of an existing airflow 2.* installation via
+``pip install {{PACKAGE_PIP_NAME}}``
+{%- if PIP_REQUIREMENTS %}
+
+PIP requirements
+----------------
+
+{{  PIP_REQUIREMENTS_TABLE_RST | safe}}
+{%- endif %}
+{%- if CROSS_PROVIDERS_DEPENDENCIES %}
+
+Cross provider package dependencies
+-----------------------------------
+
+Those are dependencies that might be needed in order to use all the features 
of the package.
+You need to install the specified backport providers package in order to use 
them.
+
+You can install such cross-provider dependencies when installing from PyPI. 
For example:
+
+.. code-block:: bash
+
+    pip install {{ PACKAGE_PIP_NAME }}[{{ CROSS_PROVIDERS_DEPENDENCIES[0] }}]
+
+
+{{ CROSS_PROVIDERS_DEPENDENCIES_TABLE_RST | safe }}
+
+{%- endif %}

Review comment:
       Oh yes, I agree with that @mik-laj -- My assumption was detailed 
changelog was updating guide but looks like it is just list of commits.
   
   So yeah, **Changelog** -> **Upgrading guide** and **Detailed changelog** -> 
**Changelog** . 

##########
File path: dev/provider_packages/PROVIDER_INDEX_TEMPLATE.rst.jinja2
##########
@@ -0,0 +1,84 @@
+{#
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+ NOTE! THIS FILE IS AUTOMATICALLY GENERATED AND WILL BE
+ OVERWRITTEN WHEN PREPARING PACKAGES.
+
+ IF YOU WANT TO MODIFY IT, YOU SHOULD MODIFY THE TEMPLATE
+ `PROVIDER_INDEX_TEMPLATE.rst.jinja2` IN the `provider_packages` DIRECTORY
+
+#}
+
+Package {{ PACKAGE_PIP_NAME }}
+------------------------------------------------------
+
+Release: {{ RELEASE }}{{ VERSION_SUFFIX }}
+
+Provider package
+----------------
+
+This is a provider package for ``{{PROVIDER_PACKAGE_ID}}`` provider. All 
classes for this provider package
+are in ``{{FULL_PACKAGE_NAME}}`` python package.
+
+Installation
+------------
+
+.. note::
+
+    On November 2020, new version of PIP (20.3) has been released with a new, 
2020 resolver. This resolver
+    does not yet work with Apache Airflow and might lead to errors in 
installation - depends on your choice
+    of extras. In order to install Airflow you need to either downgrade pip to 
version 20.2.4
+    ``pip install --upgrade pip==20.2.4`` or, in case you use Pip 20.3, you 
need to add option
+    ``--use-deprecated legacy-resolver`` to your pip install command.
+
+
+You can install this package on top of an existing airflow 2.* installation via
+``pip install {{PACKAGE_PIP_NAME}}``
+{%- if PIP_REQUIREMENTS %}
+
+PIP requirements
+----------------
+
+{{  PIP_REQUIREMENTS_TABLE_RST | safe}}
+{%- endif %}
+{%- if CROSS_PROVIDERS_DEPENDENCIES %}
+
+Cross provider package dependencies
+-----------------------------------
+
+Those are dependencies that might be needed in order to use all the features 
of the package.
+You need to install the specified backport providers package in order to use 
them.
+
+You can install such cross-provider dependencies when installing from PyPI. 
For example:
+
+.. code-block:: bash
+
+    pip install {{ PACKAGE_PIP_NAME }}[{{ CROSS_PROVIDERS_DEPENDENCIES[0] }}]
+
+
+{{ CROSS_PROVIDERS_DEPENDENCIES_TABLE_RST | safe }}
+
+{%- endif %}

Review comment:
       Oh we should definitely have a Changelog which contains the commit log 
whether it is automated or done manually




----------------------------------------------------------------
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.

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


Reply via email to