mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-10-21 03:23:59 -07:00
[PR #9236/2b2872f0 backport][stable-10] Add android sdk module (#9293)
Add android sdk module (#9236) * adds simple implementation of adding and removing android sdk packages * adds package update * adds simple installed packages parsing * moves parsing logic to a separate class * adds absent state for sdkmanager packages and setup for tests * adds output for installing and removing packages * removes version from Package object since it is not possible to specify version for a package while using sdkmanager * adds 'latest' state * adds tests * fixes crash when sdkmanager is invoked from python with LC_ALL=C * fixes latest state * adds sdk_root parameter * adds channel parameter * simplifies regexps, removes unused named groups * minor refactoring of sdkmanager parsing * adds java dependency variable for different distributions * adds RETURN documentation * adds check for nonexisting package * adds check for non-accepted licenses * removes excessive methods from sdkmanager * removes unused 'update' module parameter, packages may be updated using 'latest' state * minor refactoring * adds EXAMPLES doc section * adds DOCUMENTATION section and license headers * fixes formatting issues * removes diff_params * adds maintainer * fixes sanity check issues in sdkmanager * adds java dependency for macos and moves some tests to a separate FreeBSD configuration * fixes dependencies setup for OSX * fixes dependencies setup for OSX (2) * fixes dependencies setup for OSX (3) * Apply minor suggestions from code review Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com> * applies code review suggestions * changes force_lang from C.UTF-8 to auto in sdkmanager (as per discussion https://github.com/ansible-collections/community.general/pull/9236#discussion_r1881114326) * Revert "changes force_lang from C.UTF-8 to auto in sdkmanager (as per discussion https://github.com/ansible-collections/community.general/pull/9236#discussion_r1881114326)" This reverts commit619f28dd58
. * fixes some more comments from review * minor sanity issue fix * uses the 'changed' test instead of checking the 'changed' attribute * adds 'accept_licenses' parameter. Installation is now performed independently for each package specified. * removes "Accept licenses" task from examples * fixes docs sanity issues * applies minor suggestions from code review * fixes regexps. The previous version didn't match versions like "32.1.0 rc1". Also, this allows to simplify the parsing logic as there is no need to skip table headers anymore. * renamed sdkmanager.py to android_sdkmanager.py * applies minor suggestions from code review Co-authored-by: Felix Fontein <felix@fontein.de> * updates BOTMETA * reordered BOTMETA --------- Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com> Co-authored-by: Felix Fontein <felix@fontein.de> (cherry picked from commit2b2872f0ef
) Co-authored-by: Stanislav Shamilov <shamilovstas@protonmail.com>
This commit is contained in:
parent
01dce04e33
commit
69aea38683
17 changed files with 711 additions and 0 deletions
|
@ -0,0 +1,92 @@
|
|||
---
|
||||
####################################################################
|
||||
# WARNING: These are designed specifically for Ansible tests #
|
||||
# and should not be used as examples of how to write Ansible roles #
|
||||
####################################################################
|
||||
|
||||
# Copyright (c) Ansible Project
|
||||
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
- name: Install build-tools;34.0.0
|
||||
android_sdk:
|
||||
accept_licenses: true
|
||||
name: build-tools;34.0.0
|
||||
state: present
|
||||
register: build_tools_installed
|
||||
|
||||
- name: Install build-tools;34.0.0 second time
|
||||
android_sdk:
|
||||
name: build-tools;34.0.0
|
||||
state: present
|
||||
register: build_tools_installed2
|
||||
|
||||
- name: Stat build-tools
|
||||
stat:
|
||||
path: "{{ android_sdk_location }}/build-tools/34.0.0"
|
||||
register: build_tools_34_0_0
|
||||
|
||||
- name: Delete build-tools;34.0.0
|
||||
android_sdk:
|
||||
name: build-tools;34.0.0
|
||||
state: absent
|
||||
register: build_tools_deleted
|
||||
|
||||
- name: Delete build-tools;34.0.0 second time
|
||||
android_sdk:
|
||||
name: build-tools;34.0.0
|
||||
state: absent
|
||||
register: build_tools_deleted2
|
||||
|
||||
- name: Download old platform-tools
|
||||
unarchive:
|
||||
src: https://dl.google.com/android/repository/platform-tools_r27.0.0-linux.zip
|
||||
remote_src: true
|
||||
dest: "{{ android_sdk_location }}"
|
||||
|
||||
- name: Try installing platform-tools from sdkmanager
|
||||
android_sdk:
|
||||
name: platform-tools
|
||||
accept_licenses: true
|
||||
state: present
|
||||
register: platform_tools_present
|
||||
|
||||
- name: Install (update) platform-tools
|
||||
android_sdk:
|
||||
name: platform-tools
|
||||
state: latest
|
||||
register: platform_tools_updated
|
||||
|
||||
- name: Install a package to a new root
|
||||
android_sdk:
|
||||
name: build-tools;34.0.0
|
||||
accept_licenses: true
|
||||
state: present
|
||||
sdk_root: "{{ remote_tmp_dir }}"
|
||||
register: new_root_package
|
||||
|
||||
- name: Check package is installed
|
||||
stat:
|
||||
path: "{{ remote_tmp_dir }}/build-tools/34.0.0"
|
||||
register: new_root_package_stat
|
||||
|
||||
- name: Install a package from canary channel
|
||||
android_sdk:
|
||||
name: build-tools;33.0.0
|
||||
state: present
|
||||
channel: canary
|
||||
register: package_canary
|
||||
|
||||
- name: Run tests
|
||||
assert:
|
||||
that:
|
||||
- build_tools_34_0_0.stat.exists
|
||||
- build_tools_installed is changed
|
||||
- build_tools_installed2 is not changed
|
||||
- build_tools_deleted is changed
|
||||
- build_tools_deleted2 is not changed
|
||||
- platform_tools_present is not changed
|
||||
- platform_tools_updated is changed
|
||||
- new_root_package is changed
|
||||
- new_root_package_stat.stat.exists
|
||||
- package_canary is changed
|
|
@ -0,0 +1,72 @@
|
|||
---
|
||||
####################################################################
|
||||
# WARNING: These are designed specifically for Ansible tests #
|
||||
# and should not be used as examples of how to write Ansible roles #
|
||||
####################################################################
|
||||
|
||||
# Copyright (c) Ansible Project
|
||||
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
- name: Install sources;android-26 (FreeBSD)
|
||||
android_sdk:
|
||||
name: sources;android-26
|
||||
accept_licenses: true
|
||||
state: present
|
||||
register: sources_android_26_installed
|
||||
|
||||
- name: Install sources;android-26 (FreeBSD)
|
||||
android_sdk:
|
||||
name: sources;android-26
|
||||
state: present
|
||||
register: sources_android_26_installed2
|
||||
|
||||
- name: Stat build-tools (FreeBSD)
|
||||
stat:
|
||||
path: "{{ android_sdk_location }}/sources/android-26"
|
||||
register: sources_android_26
|
||||
|
||||
- name: Delete sources;android-26 (FreeBSD)
|
||||
android_sdk:
|
||||
name: sources;android-26
|
||||
state: absent
|
||||
register: sources_android_26_deleted
|
||||
|
||||
- name: Delete sources;android-26 second time (FreeBSD)
|
||||
android_sdk:
|
||||
name: sources;android-26
|
||||
state: absent
|
||||
register: sources_android_26_deleted2
|
||||
|
||||
- name: Install a package to a new root (FreeBSD)
|
||||
android_sdk:
|
||||
name: sources;android-26
|
||||
accept_licenses: true
|
||||
state: present
|
||||
sdk_root: "{{ remote_tmp_dir }}"
|
||||
register: new_root_package
|
||||
|
||||
- name: Check package is installed (FreeBSD)
|
||||
stat:
|
||||
path: "{{ remote_tmp_dir }}/sources/android-26"
|
||||
register: new_root_package_stat
|
||||
|
||||
- name: Install a package from canary channel (FreeBSD)
|
||||
android_sdk:
|
||||
name: sources;android-26
|
||||
accept_licenses: true
|
||||
state: present
|
||||
channel: canary
|
||||
register: package_canary
|
||||
|
||||
- name: Run tests (FreeBSD)
|
||||
assert:
|
||||
that:
|
||||
- sources_android_26.stat.exists
|
||||
- sources_android_26_installed is changed
|
||||
- sources_android_26_installed2 is not changed
|
||||
- sources_android_26_deleted is changed
|
||||
- sources_android_26_deleted2 is not changed
|
||||
- new_root_package is changed
|
||||
- new_root_package_stat.stat.exists
|
||||
- package_canary is changed
|
31
tests/integration/targets/android_sdk/tasks/main.yml
Normal file
31
tests/integration/targets/android_sdk/tasks/main.yml
Normal file
|
@ -0,0 +1,31 @@
|
|||
---
|
||||
####################################################################
|
||||
# WARNING: These are designed specifically for Ansible tests #
|
||||
# and should not be used as examples of how to write Ansible roles #
|
||||
####################################################################
|
||||
|
||||
# Copyright (c) Ansible Project
|
||||
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
# java >= 17 is not available in RHEL and CentOS7 repos, which is required for sdkmanager to run
|
||||
- name: Bail out if not supported
|
||||
when:
|
||||
- "ansible_os_family == 'RedHat' and ansible_distribution_version is version('8.0', '<')"
|
||||
ansible.builtin.meta: end_play
|
||||
|
||||
- name: Run android_sdk tests
|
||||
environment:
|
||||
PATH: '{{ ansible_env.PATH }}:{{ android_sdk_location }}/cmdline-tools/latest/bin'
|
||||
block:
|
||||
- import_tasks: setup.yml
|
||||
|
||||
- name: Run default tests
|
||||
import_tasks: default-tests.yml
|
||||
when: ansible_os_family != 'FreeBSD'
|
||||
|
||||
# Most of the important Android SDK packages are not available on FreeBSD (like, build-tools, platform-tools and so on),
|
||||
# but at least some of the functionality can be tested (like, downloading sources)
|
||||
- name: Run FreeBSD tests
|
||||
import_tasks: freebsd-tests.yml
|
||||
when: ansible_os_family == 'FreeBSD'
|
86
tests/integration/targets/android_sdk/tasks/setup.yml
Normal file
86
tests/integration/targets/android_sdk/tasks/setup.yml
Normal file
|
@ -0,0 +1,86 @@
|
|||
---
|
||||
####################################################################
|
||||
# WARNING: These are designed specifically for Ansible tests #
|
||||
# and should not be used as examples of how to write Ansible roles #
|
||||
####################################################################
|
||||
|
||||
# Copyright (c) Ansible Project
|
||||
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
- name: Include OS-specific variables
|
||||
include_vars: '{{ ansible_os_family }}.yml'
|
||||
|
||||
- name: Install dependencies
|
||||
become: true
|
||||
package:
|
||||
name:
|
||||
- "{{ openjdk_pkg }}"
|
||||
- unzip
|
||||
state: present
|
||||
when: ansible_os_family != 'Darwin'
|
||||
|
||||
- name: Install dependencies (OSX)
|
||||
block:
|
||||
- name: Find brew binary
|
||||
command: which brew
|
||||
register: brew_which
|
||||
- name: Get owner of brew binary
|
||||
stat:
|
||||
path: "{{ brew_which.stdout }}"
|
||||
register: brew_stat
|
||||
- name: "Install package"
|
||||
homebrew:
|
||||
name:
|
||||
- "{{ openjdk_pkg }}"
|
||||
- unzip
|
||||
state: present
|
||||
update_homebrew: false
|
||||
become: true
|
||||
become_user: "{{ brew_stat.stat.pw_name }}"
|
||||
environment:
|
||||
HOMEBREW_NO_AUTO_UPDATE: "True"
|
||||
- name: Symlink java
|
||||
become: true
|
||||
file:
|
||||
src: "/usr/local/opt/openjdk@17/libexec/openjdk.jdk"
|
||||
dest: "/Library/Java/JavaVirtualMachines/openjdk-17.jdk"
|
||||
state: link
|
||||
when:
|
||||
- ansible_os_family == 'Darwin'
|
||||
|
||||
- name: Create Android SDK directory
|
||||
file:
|
||||
path: "{{ android_sdk_location }}"
|
||||
state: directory
|
||||
|
||||
- name: Check that sdkmanager is installed
|
||||
stat:
|
||||
path: "{{ android_sdk_location }}/cmdline-tools/latest/bin/sdkmanager"
|
||||
register: sdkmanager_installed
|
||||
|
||||
- name: Install Android command line tools
|
||||
when: not sdkmanager_installed.stat.exists
|
||||
block:
|
||||
- name: Create Android SDK dir structure
|
||||
file:
|
||||
path: "{{ item.path }}"
|
||||
state: "{{ item.state }}"
|
||||
with_items:
|
||||
- { path: "{{ android_cmdline_temp_dir }}", state: "directory" }
|
||||
- { path: "{{ android_sdk_location }}/cmdline-tools/latest", state: "directory" }
|
||||
|
||||
- name: Download Android command line tools
|
||||
unarchive:
|
||||
src: "{{ commandline_tools_link }}"
|
||||
dest: "{{ android_cmdline_temp_dir }}"
|
||||
remote_src: yes
|
||||
creates: "{{ android_cmdline_temp_dir }}/cmdline-tools"
|
||||
when: not sdkmanager_installed.stat.exists
|
||||
|
||||
|
||||
- name: Fix directory structure
|
||||
copy:
|
||||
src: "{{ android_cmdline_temp_dir }}/cmdline-tools/"
|
||||
dest: "{{ android_sdk_location }}/cmdline-tools/latest"
|
||||
remote_src: yes
|
Loading…
Add table
Add a link
Reference in a new issue