diff --git a/playbook.yml b/playbook.yml index 5e51b97..1101a5b 100644 --- a/playbook.yml +++ b/playbook.yml @@ -21,11 +21,14 @@ - import_tasks: 'tasks/main.yml' - import_tasks: 'tasks/dotfiles.yml' - import_tasks: 'tasks/neovim.yml' - - name: gather the package facts + - name: gather package facts package_facts: manager: pacman - import_tasks: 'tasks/aur.yml' when: aur_packages|map(attribute='package_name')|list is not subset(ansible_facts.packages) - import_tasks: 'tasks/docker.yml' + - name: setup python versions + include_tasks: 'tasks/python.yml' + loop: '{{ python_versions }}' vars_files: - 'vars.yml' diff --git a/tasks/python.yml b/tasks/python.yml new file mode 100644 index 0000000..72bfbff --- /dev/null +++ b/tasks/python.yml @@ -0,0 +1,65 @@ +- name: 'check for {{ item.binary }} binary' + command: 'which {{ item.binary }}' + changed_when: false + failed_when: python_installed.rc not in [ 0, 1 ] + register: python_installed + +- name: 'check for {{ item.binary }} download' + stat: + path: '{{ python_build_dir }}/python-{{ item.version }}.tgz' + register: python_download + +- block: + # TODO: verify for checksum + - name: 'retrieve python {{ item.version }} source' + become: true + get_url: + url: '{{ python_download_url }}/{{ item.version }}/Python-{{ item.version }}.tgz' + dest: '{{ python_build_dir }}/python-{{ item.version }}.tgz' + owner: '{{ ansible_user_id }}' + group: '{{ ansible_user_id }}' + when: not python_download.stat.exists + + - name: 'extract python {{ item.version }} sources' + become: true + unarchive: + src: '{{ python_build_dir }}/python-{{ item.version }}.tgz' + dest: '{{ python_build_dir }}' + include: 'Python-{{ item.version }}' + + - name: rename source directory + become: true + ansible.builtin.command: 'mv {{ python_build_dir}}/Python-{{ item.version }} {{ python_build_dir }}/{{ item.path }}' + + - name: set correct permissions + become: true + file: + path: '{{ python_build_dir }}/{{ item.path }}' + recurse: true + owner: '{{ ansible_user_id }}' + group: '{{ ansible_user_id }}' + state: directory + + - name: configure build + ansible.builtin.command: 'sh ./configure --prefix={{ python_install_dir }}/{{ item.path }}' + args: + chdir: '{{ python_build_dir }}/{{ item.path }}/' + + - name: make build + ansible.builtin.command: 'make' + args: + chdir: '{{ python_build_dir }}/{{ item.path }}/' + + - name: install build + become: true + ansible.builtin.command: 'make install' + args: + chdir: '{{ python_build_dir }}/{{ item.path }}/' + + - name: 'create symlink for python {{ item.version }}' + become: true + file: + src: '{{ python_install_dir }}/{{ item.path }}/bin/{{ item.binary }}' + dest: '/usr/bin/{{ item.binary }}' + state: link + when: python_installed.rc not in [ 0 ] diff --git a/vars.yml b/vars.yml index 33623d2..b8a49fe 100644 --- a/vars.yml +++ b/vars.yml @@ -2,7 +2,6 @@ ansible_connection: local ansible_python_interpreter: '/usr/bin/env python' packages: - - base-devel - python - git - vim @@ -29,6 +28,8 @@ aur_packages: } aur_build_dir: '/usr/local/src' +python_build_dir: '/usr/local/src' +python_install_dir: '/opt' xdg_config_dir: '{{ ansible_env.HOME }}/.config' xdg_data_dir: '{{ ansible_env.HOME }}/.local/share' @@ -68,5 +69,12 @@ language_servers: - vscode-langservers-extracted - typescript-language-server +python_download_url: 'https://www.python.org/ftp/python' +python_versions: + - { version: 3.9.14, path: 'python3.9', binary: 'python3.9' } + - { version: 3.8.14, path: 'python3.8', binary: 'python3.8' } + - { version: 3.7.14, path: 'python3.7', binary: 'python3.7' } + - { version: 3.6.15, path: 'python3.6', binary: 'python3.6' } + gitlab_domain: 'git.fudiggity.nl' gitlab_host_key: 'git.fudiggity.nl ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICNmvcxza79T7JZMkifmquwXH/kMUqDnKs9Oob+JrRvn'