diff --git a/doc/source/python-roles.rst b/doc/source/python-roles.rst index f7c8aacfc..f8fb8450c 100644 --- a/doc/source/python-roles.rst +++ b/doc/source/python-roles.rst @@ -4,6 +4,7 @@ Python Roles .. zuul:autorole:: build-python-release .. zuul:autorole:: build-releasenotes .. zuul:autorole:: ensure-babel +.. zuul:autorole:: ensure-if-python .. zuul:autorole:: ensure-python .. zuul:autorole:: ensure-sphinx .. zuul:autorole:: ensure-tox diff --git a/playbooks/releasenotes/run.yaml b/playbooks/releasenotes/run.yaml index 7f08a38c0..17d9a3111 100644 --- a/playbooks/releasenotes/run.yaml +++ b/playbooks/releasenotes/run.yaml @@ -1,6 +1,6 @@ - hosts: all roles: - - role: install-if-python + - role: ensure-if-python # Releasenotes do not need the package itself to be installed install_package: false - build-releasenotes diff --git a/playbooks/sphinx/run.yaml b/playbooks/sphinx/run.yaml index f831207de..1588e9df3 100644 --- a/playbooks/sphinx/run.yaml +++ b/playbooks/sphinx/run.yaml @@ -1,4 +1,4 @@ - hosts: all roles: - - install-if-python + - ensure-if-python - sphinx diff --git a/roles/ensure-if-python/README.rst b/roles/ensure-if-python/README.rst new file mode 100644 index 000000000..8b9fc5b96 --- /dev/null +++ b/roles/ensure-if-python/README.rst @@ -0,0 +1,30 @@ +Install the contents of a directory if they contain a python project. + +Installs into a virtualenv. + +**Role Variables** + +.. zuul:rolevar:: install_package + :default: true + + Flag indicating whether or not the software in the ``zuul_work_dir`` should + be installed. + +.. zuul:rolevar:: error_on_failure + + Flag that indicates installation errors should result in failure. Failures + in installing the target directory are ignored by default. + +.. zuul:rolevar:: constraints_file + + Optional path to a pip constraints file to use when installing. + +.. zuul:rolevar:: zuul_work_virtualenv + :default: ~/.venv + + Virtualenv location in which to install things. + +.. zuul:rolevar:: zuul_work_dir + :default: {{ zuul.project.src_dir }} + + Directory to operate in. diff --git a/roles/install-if-python/defaults/main.yaml b/roles/ensure-if-python/defaults/main.yaml similarity index 100% rename from roles/install-if-python/defaults/main.yaml rename to roles/ensure-if-python/defaults/main.yaml diff --git a/roles/ensure-if-python/tasks/main.yaml b/roles/ensure-if-python/tasks/main.yaml new file mode 100644 index 000000000..9719d8aad --- /dev/null +++ b/roles/ensure-if-python/tasks/main.yaml @@ -0,0 +1,74 @@ +# TODO(mordred) rework tox-siblings so it can be used here - probably by +# making it take a parameter as to what path to python/pip to use. + +- name: Find Constraints File + include_role: + name: find-constraints + +- name: Check to see if the project is a python project + find: + paths: "{{ zuul_work_dir }}" + patterns: + - setup.cfg + - setup.py + register: found_python_files + when: install_package + +# Installing the directory with the constraints flag can hit into problems +# with conflicting values between constraints and current project. So look +# for a requirements.txt file so we can install it directly. +- name: Check to see if the project has a requirements.txt file + stat: + get_checksum: false + get_mime: false + get_md5: false + path: "{{ zuul_work_dir }}/requirements.txt" + register: requirements_file + +- name: Install requirements if they exist + pip: + chdir: "{{ zuul_work_dir }}" + virtualenv: "{{ zuul_work_virtualenv }}" + requirements: requirements.txt + extra_args: "{{ upper_constraints|default(omit) }}" + register: requirements_install + when: + - install_package + - found_python_files.matched + - requirements_file.stat.exists + failed_when: + - error_on_failure is defined + - error_on_failure + - requirements_install is failed + +# Build an sdist. This is needed for pbr projects that may expect +# the ChangeLog to have been generated. +- name: Make sdist to generate ChangeLog + command: + cmd: "{{ zuul_work_virtualenv }}/bin/python setup.py sdist" + chdir: "{{ zuul_work_dir }}" + when: + - install_package + - found_python_files.matched + register: sdist_results + failed_when: + - error_on_failure is defined + - error_on_failure + - sdist_results is failed + +# Try installing current repo in case it needs to be available for +# example for version number calculation. Ignore any failures here. +- name: Install the project if it is a Python project + pip: + chdir: "{{ zuul_work_dir }}" + virtualenv: "{{ zuul_work_virtualenv }}" + name: . + extra_args: --no-deps + when: + - install_package + - found_python_files.matched + register: install_package_results + failed_when: + - error_on_failure is defined + - error_on_failure + - install_package_results is failed diff --git a/roles/install-if-python/README.rst b/roles/install-if-python/README.rst index 8b9fc5b96..93db1ffe4 100644 --- a/roles/install-if-python/README.rst +++ b/roles/install-if-python/README.rst @@ -1,30 +1 @@ -Install the contents of a directory if they contain a python project. - -Installs into a virtualenv. - -**Role Variables** - -.. zuul:rolevar:: install_package - :default: true - - Flag indicating whether or not the software in the ``zuul_work_dir`` should - be installed. - -.. zuul:rolevar:: error_on_failure - - Flag that indicates installation errors should result in failure. Failures - in installing the target directory are ignored by default. - -.. zuul:rolevar:: constraints_file - - Optional path to a pip constraints file to use when installing. - -.. zuul:rolevar:: zuul_work_virtualenv - :default: ~/.venv - - Virtualenv location in which to install things. - -.. zuul:rolevar:: zuul_work_dir - :default: {{ zuul.project.src_dir }} - - Directory to operate in. +.. warning:: Deprecated, use ensure-if-python instead. diff --git a/roles/install-if-python/tasks/main.yaml b/roles/install-if-python/tasks/main.yaml index 9719d8aad..41252f2f2 100644 --- a/roles/install-if-python/tasks/main.yaml +++ b/roles/install-if-python/tasks/main.yaml @@ -1,74 +1,3 @@ -# TODO(mordred) rework tox-siblings so it can be used here - probably by -# making it take a parameter as to what path to python/pip to use. - -- name: Find Constraints File +- name: Include ensure-if-python. include_role: - name: find-constraints - -- name: Check to see if the project is a python project - find: - paths: "{{ zuul_work_dir }}" - patterns: - - setup.cfg - - setup.py - register: found_python_files - when: install_package - -# Installing the directory with the constraints flag can hit into problems -# with conflicting values between constraints and current project. So look -# for a requirements.txt file so we can install it directly. -- name: Check to see if the project has a requirements.txt file - stat: - get_checksum: false - get_mime: false - get_md5: false - path: "{{ zuul_work_dir }}/requirements.txt" - register: requirements_file - -- name: Install requirements if they exist - pip: - chdir: "{{ zuul_work_dir }}" - virtualenv: "{{ zuul_work_virtualenv }}" - requirements: requirements.txt - extra_args: "{{ upper_constraints|default(omit) }}" - register: requirements_install - when: - - install_package - - found_python_files.matched - - requirements_file.stat.exists - failed_when: - - error_on_failure is defined - - error_on_failure - - requirements_install is failed - -# Build an sdist. This is needed for pbr projects that may expect -# the ChangeLog to have been generated. -- name: Make sdist to generate ChangeLog - command: - cmd: "{{ zuul_work_virtualenv }}/bin/python setup.py sdist" - chdir: "{{ zuul_work_dir }}" - when: - - install_package - - found_python_files.matched - register: sdist_results - failed_when: - - error_on_failure is defined - - error_on_failure - - sdist_results is failed - -# Try installing current repo in case it needs to be available for -# example for version number calculation. Ignore any failures here. -- name: Install the project if it is a Python project - pip: - chdir: "{{ zuul_work_dir }}" - virtualenv: "{{ zuul_work_virtualenv }}" - name: . - extra_args: --no-deps - when: - - install_package - - found_python_files.matched - register: install_package_results - failed_when: - - error_on_failure is defined - - error_on_failure - - install_package_results is failed + name: ensure-if-python