You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
155 lines
4.6 KiB
155 lines
4.6 KiB
- block:
|
|
- name: validate input
|
|
fail:
|
|
msg: package must be defined and a dictionary
|
|
when: package is not defined or package is not mapping
|
|
|
|
|
|
- name: define package dict
|
|
set_fact:
|
|
pkg: "{{ {'assets': false, 'sources': false} | combine(package) }}"
|
|
|
|
|
|
- name: fail if package name is not defined
|
|
fail:
|
|
msg: package name is not defined
|
|
when: pkg.name is not defined
|
|
|
|
|
|
- name: fail if both assets and sources are enabled
|
|
fail:
|
|
msg: both assets and sources are enabled
|
|
when: (pkg.assets | d(false) == true) and (pkg.sources | d(false) == true)
|
|
|
|
|
|
- block:
|
|
- name: install pip3
|
|
include_tasks: tasks/install_packages.yml
|
|
vars:
|
|
package:
|
|
- alpine: py3-pip
|
|
debian: python3-pip
|
|
|
|
- name: install lastversion from pip
|
|
pip:
|
|
name: lastversion
|
|
|
|
- name: set lastversion install result for caching purposes
|
|
set_fact:
|
|
lastversion_installed: yes
|
|
|
|
when: lastversion_installed | d(false) == false
|
|
|
|
|
|
- name: construct lastversion parameters
|
|
set_fact:
|
|
lv_params: "{%- if pkg.major_branch is defined and pkg.major_branch is string -%}--major {{ pkg.major_branch | quote }}\ {% endif -%}\
|
|
{%- if pkg.location is defined and pkg.location is string -%}--at {{ pkg.location | quote }}\ {% endif -%}\
|
|
{%- if pkg.prerelease | d(false) == true -%}--pre\ {% endif -%}\
|
|
{%- if pkg.release_filter is defined and pkg.release_filter is string -%}--only {{ pkg.release_filter | quote }}\ {% endif -%}"
|
|
|
|
|
|
- name: invoke lastversion
|
|
shell:
|
|
cmd: "lastversion {{ lv_params }}{{ pkg.name | quote }}"
|
|
changed_when: false
|
|
environment: "{{ {'GITHUB_API_TOKEN': github_api_token} if (github_api_token is defined) else {} }}"
|
|
register: lv_result
|
|
|
|
|
|
- name: save last version
|
|
set_fact:
|
|
package_last_version: "{{ lv_result.stdout.strip() }}"
|
|
|
|
|
|
- block:
|
|
- name: add asset-related lastversion parameters
|
|
set_fact:
|
|
lv_params_new: "{{ lv_params }}\
|
|
{%- if pkg.assets | d(false) == true -%}--assets\ {% endif -%}\
|
|
{%- if pkg.asset_filter is defined and pkg.asset_filter is string -%}--filter {{ pkg.asset_filter | quote }}\ {% endif -%}"
|
|
|
|
- name: invoke lastversion
|
|
shell:
|
|
cmd: "lastversion {{ lv_params_new }}{{ pkg.name | quote }}"
|
|
changed_when: false
|
|
environment: "{{ {'GITHUB_API_TOKEN': github_api_token} if (github_api_token is defined) else {} }}"
|
|
register: lv_result
|
|
|
|
- name: save asset urls
|
|
set_fact:
|
|
package_url: "{{ lv_result.stdout.strip().split('\n') }}"
|
|
|
|
when: pkg.assets | d(false) == true
|
|
|
|
|
|
- block:
|
|
- name: add source-related lastversion parameters
|
|
set_fact:
|
|
lv_params_new: "{{ lv_params }}\
|
|
{%- if pkg.sources | d(false) == true -%}--source\ {% endif -%}"
|
|
|
|
- name: invoke lastversion
|
|
shell:
|
|
cmd: "lastversion {{ lv_params_new }}{{ pkg.name | quote }}"
|
|
changed_when: false
|
|
environment: "{{ {'GITHUB_API_TOKEN': github_api_token} if (github_api_token is defined) else {} }}"
|
|
register: lv_result
|
|
|
|
- name: save source urls
|
|
set_fact:
|
|
package_url: "{{ lv_result.stdout.strip().split('\n') }}"
|
|
|
|
when: pkg.sources | d(false) == true
|
|
|
|
|
|
delegate_to: localhost
|
|
|
|
|
|
- block:
|
|
- name: save last version info to file
|
|
copy:
|
|
content: "{{ package_last_version }}"
|
|
dest: "{{ pkg.file }}"
|
|
mode: "{{ pkg.mode | d(omit) }}"
|
|
owner: "{{ pkg.user | d(omit) }}"
|
|
group: "{{ pkg.group | d(omit) }}"
|
|
register: lv_copy
|
|
notify: "{{ pkg.notify | d(omit) }}"
|
|
|
|
- name: check if the file was changed
|
|
set_fact:
|
|
package_changed: "{{ lv_copy.changed }}"
|
|
|
|
when: pkg.file is defined
|
|
|
|
|
|
- block:
|
|
- name: ensure there is only one url
|
|
fail:
|
|
msg: multiple asset urls or no asset urls found
|
|
when: (package_url | length) != 1
|
|
|
|
- name: install tar
|
|
include_tasks: tasks/install_packages.yml
|
|
vars:
|
|
package:
|
|
- tar
|
|
|
|
- pause:
|
|
when: interactive | d(true) == true
|
|
|
|
- name: download and extract assets
|
|
unarchive:
|
|
src: "{{ package_url[0] }}"
|
|
dest: "{{ pkg.extract }}/"
|
|
remote_src: yes
|
|
mode: "{{ pkg.mode | d(omit) }}"
|
|
owner: "{{ pkg.user | d(omit) }}"
|
|
group: "{{ pkg.group | d(omit) }}"
|
|
extra_opts: "{%- if pkg.strip_first_dir | d(false) == true -%}{{ [ '--strip-components=1' ] }}\
|
|
{%- else -%}{{ [] }}\
|
|
{%- endif -%}"
|
|
notify: "{{ pkg.notify | d(omit) }}"
|
|
|
|
when: (lv_copy.changed or (pkg.force_download | d(false) == true)) and pkg.extract is defined
|
|
|