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

`ArangoDB <https://www.arangodb.com/>`__


This is detailed commit list of changes for versions provider package: ``arangodb``.
For high-level changelog, see :doc:`package information including changelog <index>`.



2.0.0
.....

Latest change: 2022-06-07

=================================================================================================  ===========  ==================================================================================
Commit                                                                                             Committed    Subject
=================================================================================================  ===========  ==================================================================================
`717a7588bc <https://github.com/apache/airflow/commit/717a7588bc8170363fea5cb75f17efcf68689619>`_  2022-06-07   ``Update package description to remove double min-airflow specification (#24292)``
`aeabe994b3 <https://github.com/apache/airflow/commit/aeabe994b3381d082f75678a159ddbb3cbf6f4d3>`_  2022-06-07   ``Prepare docs for May 2022 provider's release (#24231)``
`027b707d21 <https://github.com/apache/airflow/commit/027b707d215a9ff1151717439790effd44bab508>`_  2022-06-05   ``Add explanatory note for contributors about updating Changelog (#24229)``
`ec6761a5c0 <https://github.com/apache/airflow/commit/ec6761a5c0d031221d53ce213c0e42813606c55d>`_  2022-05-23   ``Clean up f-strings in logging calls (#23597)``
=================================================================================================  ===========  ==================================================================================

1.0.0
.....

Latest change: 2022-04-03

=================================================================================================  ===========  =====================================
Commit                                                                                             Committed    Subject
=================================================================================================  ===========  =====================================
`c758c76ac3 <https://github.com/apache/airflow/commit/c758c76ac336c054fd17d4b878378aa893b7a979>`_  2022-04-03   ``Adding ArangoDB Provider (#22548)``
=================================================================================================  ===========  =====================================
