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

Image build arguments reference
-------------------------------

The following build arguments (``--build-arg`` in docker build command) can be used for production images.
Those arguments are used when you want to customize the image. You can see some examples of it in
:ref:`Building from PyPI packages<image-build-pypi>`.

Basic arguments
...............

Those are the most common arguments that you use when you want to build a custom image.

+------------------------------------------+------------------------------------------+---------------------------------------------+
| Build argument                           | Default value                            | Description                                 |
+==========================================+==========================================+=============================================+
| ``PYTHON_BASE_IMAGE``                    | ``python:3.7-slim-bullseye``             | Base python image.                          |
+------------------------------------------+------------------------------------------+---------------------------------------------+
| ``AIRFLOW_VERSION``                      | :subst-code:`|airflow-version|`          | version of Airflow.                         |
+------------------------------------------+------------------------------------------+---------------------------------------------+
| ``AIRFLOW_EXTRAS``                       | (see below the table)                    | Default extras with which airflow is        |
|                                          |                                          | installed.                                  |
+------------------------------------------+------------------------------------------+---------------------------------------------+
| ``ADDITIONAL_AIRFLOW_EXTRAS``            |                                          | Optional additional extras with which       |
|                                          |                                          | airflow is installed.                       |
+------------------------------------------+------------------------------------------+---------------------------------------------+
| ``AIRFLOW_HOME``                         | ``/opt/airflow``                         | Airflow’s HOME (that’s where logs and       |
|                                          |                                          | SQLite databases are stored).               |
+------------------------------------------+------------------------------------------+---------------------------------------------+
| ``AIRFLOW_USER_HOME_DIR``                | ``/home/airflow``                        | Home directory of the Airflow user.         |
+------------------------------------------+------------------------------------------+---------------------------------------------+
| ``AIRFLOW_PIP_VERSION``                  | ``22.1.2``                               |  PIP version used.                          |
+------------------------------------------+------------------------------------------+---------------------------------------------+
| ``PIP_PROGRESS_BAR``                     | ``on``                                   | Progress bar for PIP installation           |
+------------------------------------------+------------------------------------------+---------------------------------------------+
| ``AIRFLOW_UID``                          | ``50000``                                | Airflow user UID.                           |
+------------------------------------------+------------------------------------------+---------------------------------------------+
| ``AIRFLOW_CONSTRAINTS``                  | ``constraints``                          | Type of constraints to build the image.     |
|                                          |                                          | This can be ``constraints`` for regular     |
|                                          |                                          | images or ``constraints-no-providers`` for  |
|                                          |                                          | slim images.                                |
+------------------------------------------+------------------------------------------+---------------------------------------------+
| ``AIRFLOW_CONSTRAINTS_REFERENCE``        |                                          | Reference (branch or tag) from GitHub       |
|                                          |                                          | where constraints file is taken from        |
|                                          |                                          | It can be ``constraints-main`` or           |
|                                          |                                          | ``constraints-2-0`` for                     |
|                                          |                                          | 2.0.* installation. In case of building     |
|                                          |                                          | specific version you want to point it       |
|                                          |                                          | to specific tag, for example                |
|                                          |                                          | :subst-code:`constraints-|airflow-version|`.|
|                                          |                                          | Auto-detected if empty.                     |
+------------------------------------------+------------------------------------------+---------------------------------------------+

.. note::

    Before Airflow 2.2, the image also had ``AIRFLOW_GID`` parameter, but it did not provide any additional
    functionality - only added confusion - so it has been removed.

List of default extras in the production Dockerfile:

.. BEGINNING OF EXTRAS LIST UPDATED BY PRE COMMIT

* amazon
* async
* celery
* cncf.kubernetes
* dask
* docker
* elasticsearch
* ftp
* google
* google_auth
* grpc
* hashicorp
* http
* ldap
* microsoft.azure
* mysql
* odbc
* pandas
* postgres
* redis
* sendgrid
* sftp
* slack
* ssh
* statsd
* virtualenv

.. END OF EXTRAS LIST UPDATED BY PRE COMMIT

Image optimization options
..........................

The main advantage of Customization method of building Airflow image, is that it allows to build highly optimized image because
the final image (RUNTIME) might not contain all the dependencies that are needed to build and install all other dependencies
(DEV). Those arguments allow to control what is installed in the DEV image and what is installed in RUNTIME one, thus
allowing to produce much more optimized images. See :ref:`Building optimized images<image-build-optimized>`.
for examples of using those arguments.

+------------------------------------------+------------------------------------------+------------------------------------------+
| Build argument                           | Default value                            | Description                              |
+==========================================+==========================================+==========================================+
| ``UPGRADE_TO_NEWER_DEPENDENCIES``        | ``false``                                | If set to a value different than "false" |
|                                          |                                          | the dependencies are upgraded to newer   |
|                                          |                                          | versions. In CI it is set to build id    |
|                                          |                                          | to make sure subsequent builds are not   |
|                                          |                                          | reusing cached images with same value.   |
+------------------------------------------+------------------------------------------+------------------------------------------+
| ``ADDITIONAL_PYTHON_DEPS``               |                                          | Optional python packages to extend       |
|                                          |                                          | the image with some extra dependencies.  |
+------------------------------------------+------------------------------------------+------------------------------------------+
| ``DEV_APT_COMMAND``                      | (see Dockerfile)                         | Dev apt command executed before dev deps |
|                                          |                                          | are installed in the Build image.        |
+------------------------------------------+------------------------------------------+------------------------------------------+
| ``ADDITIONAL_DEV_APT_COMMAND``           |                                          | Additional Dev apt command executed      |
|                                          |                                          | before dev dep are installed             |
|                                          |                                          | in the Build image. Should start with    |
|                                          |                                          | ``&&``.                                  |
+------------------------------------------+------------------------------------------+------------------------------------------+
| ``DEV_APT_DEPS``                         | (see Dockerfile)                         | Dev APT dependencies installed           |
|                                          |                                          | in the Build image.                      |
+------------------------------------------+------------------------------------------+------------------------------------------+
| ``ADDITIONAL_DEV_APT_DEPS``              |                                          | Additional apt dev dependencies          |
|                                          |                                          | installed in the Build image.            |
+------------------------------------------+------------------------------------------+------------------------------------------+
| ``ADDITIONAL_DEV_APT_ENV``               |                                          | Additional env variables defined         |
|                                          |                                          | when installing dev deps.                |
+------------------------------------------+------------------------------------------+------------------------------------------+
| ``RUNTIME_APT_COMMAND``                  | (see Dockerfile)                         | Runtime apt command executed before deps |
|                                          |                                          | are installed in the Main image.         |
+------------------------------------------+------------------------------------------+------------------------------------------+
| ``ADDITIONAL_RUNTIME_APT_COMMAND``       |                                          | Additional Runtime apt command executed  |
|                                          |                                          | before runtime dep are installed         |
|                                          |                                          | in the Main image. Should start with     |
|                                          |                                          | ``&&``.                                  |
+------------------------------------------+------------------------------------------+------------------------------------------+
| ``RUNTIME_APT_DEPS``                     | (see Dockerfile)                         | Runtime APT dependencies installed       |
|                                          |                                          | in the Main image.                       |
+------------------------------------------+------------------------------------------+------------------------------------------+
| ``ADDITIONAL_RUNTIME_APT_DEPS``          |                                          | Additional apt runtime dependencies      |
|                                          |                                          | installed in the Main image.             |
+------------------------------------------+------------------------------------------+------------------------------------------+
| ``ADDITIONAL_RUNTIME_APT_ENV``           |                                          | Additional env variables defined         |
|                                          |                                          | when installing runtime deps.            |
+------------------------------------------+------------------------------------------+------------------------------------------+
| ``INSTALL_MYSQL_CLIENT``                 | ``true``                                 | Whether MySQL client should be installed |
|                                          |                                          | The mysql extra is removed from extras   |
|                                          |                                          | if the client is not installed.          |
+------------------------------------------+------------------------------------------+------------------------------------------+
| ``INSTALL_MSSQL_CLIENT``                 | ``true``                                 | Whether MsSQL client should be installed |
+------------------------------------------+------------------------------------------+------------------------------------------+
| ``INSTALL_POSTGRES_CLIENT``              | ``true``                                 | Whether Postgres client should be        |
|                                          |                                          | installed                                |
+------------------------------------------+------------------------------------------+------------------------------------------+

Installing Airflow using different methods
..........................................

Those parameters are useful only if you want to install Airflow using different installation methods than the default
(installing from PyPI packages).

This is usually only useful if you have your own fork of Airflow and want to build the images locally from
those sources - either locally or directly from GitHub sources. This way you do not need to release your
Airflow and Providers via PyPI - they can be installed directly from sources or from GitHub repository.
Another option of installation is to build Airflow from previously prepared binary Python packages which might
be useful if you need to build Airflow in environments that require high levels of security.

You can see some examples of those in:
  * :ref:`Building from GitHub<image-build-github>`,
  * :ref:`Using custom installation sources<image-build-custom>`,
  * :ref:`Build images in security restricted environments<image-build-secure-environments>`

+------------------------------------+------------------------------------------+------------------------------------------+
| Build argument                     | Default value                            | Description                              |
+====================================+==========================================+==========================================+
| ``AIRFLOW_INSTALLATION_METHOD``    | ``apache-airflow``                       | Installation method of Apache Airflow.   |
|                                    |                                          | ``apache-airflow`` for installation from |
|                                    |                                          | PyPI. It can be GitHub repository URL    |
|                                    |                                          | including branch or tag to install from  |
|                                    |                                          | that repository or "." to install from   |
|                                    |                                          | local sources. Installing from sources   |
|                                    |                                          | requires appropriate values of the       |
|                                    |                                          | ``AIRFLOW_SOURCES_FROM`` and             |
|                                    |                                          | ``AIRFLOW_SOURCES_TO`` variables (see    |
|                                    |                                          | below)                                   |
+------------------------------------+------------------------------------------+------------------------------------------+
| ``AIRFLOW_SOURCES_FROM``           | ``Dockerfile``                           | Sources of Airflow. Set it to "." when   |
|                                    |                                          | you install Airflow from local sources   |
+------------------------------------+------------------------------------------+------------------------------------------+
| ``AIRFLOW_SOURCES_TO``             | ``/Dockerfile``                          | Target for Airflow sources. Set to       |
|                                    |                                          | "/opt/airflow" when you install Airflow  |
|                                    |                                          | from local sources.                      |
+------------------------------------+------------------------------------------+------------------------------------------+
| ``AIRFLOW_SOURCES_WWW_FROM``       | ``Dockerfile``                           | Sources of Airflow WWW files used for    |
|                                    |                                          | asset compilation. Set it to             |
|                                    |                                          | "./airflow/www" when                     |
|                                    |                                          | you install Airflow from local sources   |
+------------------------------------+------------------------------------------+------------------------------------------+
| ``AIRFLOW_SOURCES_WWW_TO``         | ``/Dockerfile``                          | Target for Airflow files used for        |
|                                    |                                          | asset compilation. Set it to             |
|                                    |                                          | "/opt/airflow/airflow/www" when          |
|                                    |                                          | you install Airflow from local sources.  |
+------------------------------------+------------------------------------------+------------------------------------------+
| ``AIRFLOW_VERSION_SPECIFICATION``  |                                          | Optional - might be used for using limit |
|                                    |                                          | for Airflow version installation - for   |
|                                    |                                          | example ``<2.0.2`` for automated builds. |
+------------------------------------+------------------------------------------+------------------------------------------+
| ``INSTALL_PROVIDERS_FROM_SOURCES`` | ``false``                                | If set to ``true`` and image is built    |
|                                    |                                          | from sources, all provider packages are  |
|                                    |                                          | installed from sources rather than from  |
|                                    |                                          | packages. It has no effect when          |
|                                    |                                          | installing from PyPI or GitHub repo.     |
+------------------------------------+------------------------------------------+------------------------------------------+
| ``AIRFLOW_CONSTRAINTS_LOCATION``   |                                          | If not empty, it will override the       |
|                                    |                                          | source of the constraints with the       |
|                                    |                                          | specified URL or file. Note that the     |
|                                    |                                          | file has to be in Docker context so      |
|                                    |                                          | it's best to place such file in          |
|                                    |                                          | one of the folders included in           |
|                                    |                                          | ``.dockerignore`` file.                  |
+------------------------------------+------------------------------------------+------------------------------------------+
| ``DOCKER_CONTEXT_FILES``           | ``Dockerfile``                           | If set to a folder (for example to       |
|                                    |                                          | ``docker-context-files`` folder), then   |
|                                    |                                          | this folder will be copied to the        |
|                                    |                                          | ``docker-context-files`` inside the      |
|                                    |                                          | context of docker and you will be able   |
|                                    |                                          | to install from binary files present     |
|                                    |                                          | there. By default we set it to           |
|                                    |                                          | Dockerfile as we know the file is there, |
|                                    |                                          | otherwise the COPY instruction fails.    |
+------------------------------------+------------------------------------------+------------------------------------------+
| ``INSTALL_PACKAGES_FROM_CONTEXT``  | ``false``                                | If set to true, Airflow, providers and   |
|                                    |                                          | all dependencies are installed from      |
|                                    |                                          | from locally built/downloaded            |
|                                    |                                          | .whl and .tar.gz files placed in the     |
|                                    |                                          | ``docker-context-files``.                |
+------------------------------------+------------------------------------------+------------------------------------------+
| ``AIRFLOW_IS_IN_CONTEXT``          | ``false``                                | If set to true, it means that Airflow    |
|                                    |                                          | and providers are available in context   |
|                                    |                                          | and the image will not attempt to        |
|                                    |                                          | install Airflow from PyPI or sources.    |
+------------------------------------+------------------------------------------+------------------------------------------+

Pre-caching PIP dependencies
............................

When image is build from PIP, by default pre-caching of PIP dependencies is used. This is in order to speed-up incremental
builds during development. When pre-cached PIP dependencies are used and ``setup.py`` or ``setup.cfg`` changes, the
PIP dependencies are already pre-installed, thus resulting in much faster image rebuild. This is purely an optimization
of time needed to build the images and should be disabled if you want to install Airflow from
Docker context files.

+------------------------------------------+------------------------------------------+------------------------------------------+
| Build argument                           | Default value                            | Description                              |
+==========================================+==========================================+==========================================+
| ``AIRFLOW_BRANCH``                       | ``main``                                 | the branch from which PIP dependencies   |
|                                          |                                          | are pre-installed initially.             |
+------------------------------------------+------------------------------------------+------------------------------------------+
| ``AIRFLOW_REPO``                         | ``apache/airflow``                       | the repository from which PIP            |
|                                          |                                          | dependencies are pre-installed.          |
+------------------------------------------+------------------------------------------+------------------------------------------+
| ``AIRFLOW_PRE_CACHED_PIP_PACKAGES``      | ``false``                                | Allows to pre-cache airflow PIP packages |
|                                          |                                          | from the GitHub of Apache Airflow        |
|                                          |                                          | This allows to optimize iterations for   |
|                                          |                                          | Image builds and speeds up CI builds.    |
+------------------------------------------+------------------------------------------+------------------------------------------+
