more ansible playbooks improvements
Some checks failed
CodeQL / Analyze (python) (push) Has been cancelled
Build Debian package / build (push) Has been cancelled
Build Docker image / buildx (push) Has been cancelled
Build Homebrew package / build (push) Has been cancelled
Build GitHub Pages website / build (push) Has been cancelled
Run linters / lint (push) Has been cancelled
Build Pip package / build (push) Has been cancelled
Run tests / python_tests (ubuntu-22.04, 3.11) (push) Has been cancelled
Run tests / docker_tests (push) Has been cancelled
Build GitHub Pages website / deploy (push) Has been cancelled

This commit is contained in:
Nick Sweeting 2024-09-13 04:55:40 -07:00
parent 8557e77a70
commit 56b851ea1b
No known key found for this signature in database
7 changed files with 111 additions and 101 deletions

View file

@ -0,0 +1,8 @@
---
- import_playbook: install_ytdlp.yml
vars:
state: 'latest'
- import_playbook: install_singlefile.yml
vars:
state: 'latest'

View file

@ -1,4 +1,21 @@
--- ---
- import_playbook: install_package.yml
vars:
state: 'latest'
install_packages:
node:
bin_name: 'node'
packages: ['node']
when: BINARIES.node is not defined
- import_playbook: load_binaries.yml
vars:
load_binaries:
node: {bin_name: 'node', version_cmd: 'node --version'}
npm: {bin_name: 'npm', version_cmd: 'npm --version'}
when: BINARIES.npm is not defined
- name: "Install node, npm, and npx" - name: "Install node, npm, and npx"
hosts: localhost hosts: localhost
gather_facts: no gather_facts: no
@ -11,7 +28,7 @@
MIN_NODE_VERSION: '22.7.0' MIN_NODE_VERSION: '22.7.0'
MIN_NPM_VERSION: '10.8.3' MIN_NPM_VERSION: '10.8.3'
state: 'latest' state: 'latest'
packages: [] install_npm: {}
tasks: tasks:
# - package: update_cache=yes # - package: update_cache=yes
# when: ansible_facts['os_family'] == "Debian" # when: ansible_facts['os_family'] == "Debian"
@ -24,71 +41,39 @@
loop: loop:
- '{{LIB_DIR_NPM_BIN}}' - '{{LIB_DIR_NPM_BIN}}'
- '{{LIB_DIR_BIN}}' - '{{LIB_DIR_BIN}}'
when: BINPROVIDERS.npm is not defined
################################################################################### ###################################################################################
- name: "Install npm on system: [node, npm]"
ansible.builtin.package:
name: node
state: "{{state}}"
- name: "Install npm packages: {{packages}}" - name: Check that installed Node version matches expected version
assert:
that:
- BINARIES.node.version is version(MIN_NODE_VERSION, '<=')
- BINARIES.npm.version is version(MIN_NPM_VERSION, '<=')
quiet: true
when: BINPROVIDERS.npm is not defined
- name: "Install npm packages: {{install_npm}}"
community.general.npm: community.general.npm:
name: '{{item}}' name: '{{item}}'
state: "{{state}}" state: "{{state}}"
path: '{{LIB_DIR_NPM}}' path: '{{LIB_DIR_NPM}}'
loop: '{{packages}}' loop: "{{install_npm|dictsort|map(attribute='1')|map(attribute='packages')|flatten}}"
################################################################################### ###################################################################################
- name: Get installed node abspath
command: 'which node'
register: NODE_ABSPATH_FULL
changed_when: False
- name: Get installed node version
command: 'node --version'
register: NODE_VERSION_FULL
changed_when: False
- name: Get installed npm abspath
command: 'which npm'
register: NPM_ABSPATH_FULL
changed_when: False
- name: Get installed npm version
command: 'npm --version'
register: NPM_VERSION_FULL
changed_when: False
- set_fact:
NODE_ABSPATH: "{{NODE_ABSPATH_FULL.stdout_lines|first}}"
NODE_VERSION: "{{NODE_VERSION_FULL.stdout_lines|first|regex_replace('^.*?v?([\\d\\.]+).*$', '\\1')}}"
NPM_ABSPATH: "{{NPM_ABSPATH_FULL.stdout_lines|first}}"
NPM_VERSION: "{{NPM_VERSION_FULL.stdout_lines|first|regex_replace('^.*?v?([\\d\\.]+).*$', '\\1')}}"
- name: Check that installed Chrome matches expected version
assert:
that:
- NODE_VERSION is version(MIN_NODE_VERSION, '<=')
- NPM_VERSION is version(MIN_NPM_VERSION, '<=')
quiet: true
################################################################################### ###################################################################################
- set_fact: - set_fact:
NODE_BINARIES:
node:
abspath: "{{NODE_ABSPATH}}"
version: "{{NODE_VERSION}}"
npm:
abspath: "{{NPM_ABSPATH}}"
version: "{{NPM_VERSION}}"
NODE_BINPROVIDERS: NODE_BINPROVIDERS:
npm: npm:
installer_abspath: "{{NPM_ABSPATH}}" installer_abspath: "{{BINARIES.npm.abspath}}"
installer_version: "{{NPM_VERSION}}" installer_version: "{{BINARIES.npm.version}}"
PATH: "{{LIB_DIR_NPM_BIN}}" PATH: "{{LIB_DIR_NPM_BIN}}"
when: BINPROVIDERS.npm is not defined
- set_fact: - set_fact:
BINARIES: "{{ BINARIES | default({}) | combine(NODE_BINARIES) }}"
BINPROVIDERS: "{{ BINPROVIDERS | default({}) | combine(NODE_BINPROVIDERS) }}" BINPROVIDERS: "{{ BINPROVIDERS | default({}) | combine(NODE_BINPROVIDERS) }}"
when: BINPROVIDERS.npm is not defined
- debug: - debug:
msg: "{{ {'BINARIES': BINARIES, 'BINPROVIDERS': BINPROVIDERS} }}" msg: "{{ {'BINARIES': BINARIES, 'BINPROVIDERS': BINPROVIDERS} }}"

View file

@ -7,14 +7,12 @@
LIB_DIR: '{{DATA_DIR}}/lib' LIB_DIR: '{{DATA_DIR}}/lib'
LIB_DIR_BIN: '{{LIB_DIR}}/bin' LIB_DIR_BIN: '{{LIB_DIR}}/bin'
state: 'latest' state: 'latest'
install_packages: install_packages: {}
bash: # bash:
packages: ['bash'] # packages: ['bash']
# curl: ['curl']
# wget: ['wget']
# git: ['git']
PACKAGE_BINPROVIDERS: {} PACKAGE_BINPROVIDERS: {}
PACKAGE_BINARIES: {} PACKAGE_BINARIES: {}
BINPROVIDERS: {}
tasks: tasks:
# - package: update_cache=yes # - package: update_cache=yes
# when: ansible_facts['os_family'] == "Debian" # when: ansible_facts['os_family'] == "Debian"
@ -24,13 +22,16 @@
path: '{{LIB_DIR_BIN}}' path: '{{LIB_DIR_BIN}}'
state: directory state: directory
recurse: true recurse: true
when: BINPROVIDERS.ansible_package is not defined
- name: Get ansible binary abspath - name: Get ansible binary abspath
command: 'which ansible' command: 'which ansible'
register: ANSIBLE_INSTALLER_ABSPATH_FULL register: ANSIBLE_INSTALLER_ABSPATH_FULL
changed_when: false changed_when: false
when: BINPROVIDERS.ansible_package is not defined
- set_fact: - name: Calculate flat list of all packages to install
set_fact:
all_packages: "{{install_packages|dictsort|map(attribute='1')|map(attribute='packages')|flatten|unique}}" all_packages: "{{install_packages|dictsort|map(attribute='1')|map(attribute='packages')|flatten|unique}}"
################################################################################### ###################################################################################
@ -48,10 +49,12 @@
ansible_package: ansible_package:
installer_abspath: "{{ANSIBLE_INSTALLER_ABSPATH_FULL.stdout}}" installer_abspath: "{{ANSIBLE_INSTALLER_ABSPATH_FULL.stdout}}"
installer_version: "{{ansible_version.full}}" installer_version: "{{ansible_version.full}}"
PATH: "{{ LIB_DIR_BIN }}" PATH: "/opt/homebrew/bin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
when: BINPROVIDERS.ansible_package is not defined
- set_fact: - set_fact:
BINPROVIDERS: "{{ BINPROVIDERS | default({}) | combine(PACKAGE_BINPROVIDERS) }}" BINPROVIDERS: "{{ BINPROVIDERS | default({}) | combine(PACKAGE_BINPROVIDERS) }}"
when: BINPROVIDERS.ansible_package is not defined
- debug: - debug:
msg: "{{ {'BINPROVIDERS': BINPROVIDERS} }}" msg: "{{ {'BINPROVIDERS': BINPROVIDERS} }}"
@ -61,3 +64,4 @@
vars: vars:
load_binaries: load_binaries:
bash: bash:
when: BINARIES.bash is not defined

View file

@ -41,19 +41,16 @@
loop: loop:
- '{{LIB_DIR_PIP}}' - '{{LIB_DIR_PIP}}'
- '{{LIB_DIR_BIN}}' - '{{LIB_DIR_BIN}}'
when: BINPROVIDERS.pip is not defined
################################################################################### ###################################################################################
- debug:
msg:
- "{{BINARIES.python}}"
- "{{BINARIES.pip}}"
- assert: - assert:
that: that:
- BINARIES.python.version is version(MIN_PYTHON_VERSION, '<=') - BINARIES.python.version is version(MIN_PYTHON_VERSION, '<=')
- BINARIES.pip.version is version(MIN_PIP_VERSION, '<=') - BINARIES.pip.version is version(MIN_PIP_VERSION, '<=')
quiet: true quiet: true
when: BINPROVIDERS.pip is not defined
- name: "Install pip packages: {{install_pip}}" - name: "Install pip packages: {{install_pip}}"
ansible.builtin.pip: ansible.builtin.pip:
@ -72,13 +69,10 @@
installer_abspath: "{{BINARIES.pip.abspath}}" installer_abspath: "{{BINARIES.pip.abspath}}"
installer_version: "{{BINARIES.pip.version}}" installer_version: "{{BINARIES.pip.version}}"
PATH: "{{LIB_DIR_PIP_BIN}}" PATH: "{{LIB_DIR_PIP_BIN}}"
when: BINPROVIDERS.pip is not defined
- set_fact: - set_fact:
BINPROVIDERS: "{{ BINPROVIDERS | default({}) | combine(PIP_BINPROVIDERS) }}" BINPROVIDERS: "{{ BINPROVIDERS | default({}) | combine(PIP_BINPROVIDERS) }}"
when: BINPROVIDERS.pip is not defined
- debug: - debug:
msg: "{{ {'BINARIES': BINARIES, 'BINPROVIDERS': BINPROVIDERS} }}" msg: "{{ {'BINARIES': BINARIES, 'BINPROVIDERS': BINPROVIDERS} }}"
- import_playbook: load_binaries.yml
vars:
load_binaries:
bash:

View file

@ -1,35 +1,34 @@
--- ---
- name: Install node and single-file-cli
- import_playbook: install_npm.yml
vars:
install_npm:
singlefile: {packages: ['single-file-cli@1.1.54']}
state: 'present'
- import_playbook: load_binaries.yml
vars:
load_binaries:
singlefile: {bin_name: 'single-file', version_cmd: 'single-file --version', PATH: '{{BINPROVIDERS.npm.PATH}}'}
- name: "Install Singlefile"
hosts: localhost hosts: localhost
gather_facts: no gather_facts: no
vars: vars:
DATA_DIR: '/Volumes/NVME/Users/squash/Code/archiveboxes/archivebox7/data4' SINGLEFILE_VERSION_EXACT: '1.1.54'
NPM_BIN_DIR: '{{DATA_DIR}}/node_modules/.bin'
MIN_BIN_VERSION: '1.1.54'
tasks: tasks:
# - package: update_cache=yes - name: Make sure Node and NPM are installed
# when: ansible_facts['os_family'] == "Debian" assert:
that:
- BINARIES.node.version
- BINARIES.npm.version
quiet: true
- ansible.builtin.package: - name: Check that installed Singlefile version matches expected version
name: node assert:
state: present that: SINGLEFILE_VERSION_EXACT is version(BINARIES.singlefile.version, '==')
quiet: true
- community.general.npm:
name: 'single-file-cli'
version: '{{ MIN_BIN_VERSION }}'
path: '{{ NPM_BIN_DIR }}/../..'
- command: '{{ NPM_BIN_DIR }}/single-file --version'
register: BIN_VERSION_FULL
changed_when: False
- set_fact:
BIN_VERSION: "{{ BIN_VERSION_FULL.stdout_lines|first }}"
- debug: - debug:
msg: msg: "{{ {'BINARIES': BINARIES, 'BINPROVIDERS': BINPROVIDERS} }}"
- "BIN_ABSPATH={{ NPM_BIN_DIR }}/single-file"
- "BIN_VERSION={{ BIN_VERSION }}"
- assert:
that: BIN_VERSION is version(MIN_BIN_VERSION, '==', version_type='semver')

View file

@ -37,3 +37,6 @@
assert: assert:
that: YTDLP_VERSION_MIN is version(BINARIES.ytdlp.version, '>=') that: YTDLP_VERSION_MIN is version(BINARIES.ytdlp.version, '>=')
quiet: true quiet: true
- debug:
msg: "{{ {'BINARIES': BINARIES, 'BINPROVIDERS': BINPROVIDERS} }}"

View file

@ -6,18 +6,20 @@
DATA_DIR: '/Volumes/NVME/Users/squash/Code/archiveboxes/archivebox7/data4' DATA_DIR: '/Volumes/NVME/Users/squash/Code/archiveboxes/archivebox7/data4'
LIB_DIR: '{{DATA_DIR}}/lib' LIB_DIR: '{{DATA_DIR}}/lib'
LIB_DIR_BIN: '{{LIB_DIR}}/bin' LIB_DIR_BIN: '{{LIB_DIR}}/bin'
DEFAULT_PATH: '/bin'
load_binaries: load_binaries:
bash: bash:
bin_name: bash bin_name: bash
version_cmd: 'bash --version' version_cmd: 'bash --version'
# ffmpeg: # ffmpeg:
# version_cmd: 'ffmpeg -version' # version_cmd: 'ffmpeg -version'
# PATH: '/opt/homebrew/bin:/usr/local/bin'
# ytdlp: # ytdlp:
# bin_name: ytdlp # bin_name: ytdlp
# curl: # curl:
# wget: # wget:
# bin_name: wget # bin_name: wget
# version_cmd: 'wget --version' # version_cmd: 'wget --version']
tasks: tasks:
- name: Make sure lib folders exist - name: Make sure lib folders exist
file: file:
@ -27,14 +29,14 @@
################################################################################### ###################################################################################
- name: Get installed binary abspath - name: Get installed binary abspath
command: "which {{item.1.bin_name|default(item.0)}}" command: 'env PATH="{{item.1.PATH|default(DEFAULT_PATH)}}:$PATH" which {{item.1.bin_name|default(item.0)}}'
register: ABSPATHS_FULL register: ABSPATHS_FULL
changed_when: false changed_when: false
ignore_errors: true ignore_errors: true
loop: "{{load_binaries|dictsort}}" loop: "{{load_binaries|dictsort}}"
- name: Get installed binary version - name: Get installed binary version
command: "{{item.1.version_cmd|default((item.1.bin_name|default(item.0)) + ' --version')}}" command: 'env PATH="{{item.1.PATH|default(DEFAULT_PATH)}}:$PATH" {{item.1.version_cmd|default((item.1.bin_name|default(item.0)) + " --version")}}'
register: VERSIONS_FULL register: VERSIONS_FULL
changed_when: false changed_when: false
ignore_errors: true ignore_errors: true
@ -47,22 +49,37 @@
state: link state: link
loop: "{{ABSPATHS_FULL.results|map(attribute='stdout_lines')|map('first')}}" loop: "{{ABSPATHS_FULL.results|map(attribute='stdout_lines')|map('first')}}"
- set_fact: - name: Collecting abspath results
set_fact:
BINARY_ABSPATHS: "{{ BINARY_ABSPATHS | default({}) | combine({item.0: item.1}) }}" BINARY_ABSPATHS: "{{ BINARY_ABSPATHS | default({}) | combine({item.0: item.1}) }}"
loop: "{{ keys | zip(values) }}" loop: "{{ keys | zip(values) }}"
vars: vars:
keys: "{{load_binaries|dictsort|map(attribute='0')}}" keys: "{{load_binaries|dictsort|map(attribute='0')}}"
values: "{{ABSPATHS_FULL.results|map(attribute='stdout_lines')|map('first')}}" values: "{{ABSPATHS_FULL.results|map(attribute='stdout_lines')|map('first')}}"
- set_fact: - name: Collecting version results
set_fact:
BINARY_VERSIONS: "{{ BINARY_VERSIONS | default({}) | combine({item.0: item.1}) }}" BINARY_VERSIONS: "{{ BINARY_VERSIONS | default({}) | combine({item.0: item.1}) }}"
loop: "{{ keys | zip(values) }}" loop: "{{ keys | zip(values) }}"
vars: vars:
keys: "{{load_binaries|dictsort|map(attribute='0')}}" keys: "{{load_binaries|dictsort|map(attribute='0')}}"
values: "{{VERSIONS_FULL.results|map(attribute='stdout_lines')|map('first')|map('regex_replace', '^.*?v?([\\d\\.]+).*$', '\\1')}}" values: "{{VERSIONS_FULL.results|map(attribute='stdout_lines')|map('first')|map('regex_replace', '^.*?v?([\\d\\.]+).*$', '\\1')}}"
- set_fact: - name: Updating BINARIES with loaded abspaths & versions
BINARIES: "{{ BINARIES | default({}) | combine({item: { 'abspath': BINARY_ABSPATHS[item], 'version': BINARY_VERSIONS[item] }}) }}" set_fact:
BINARIES: "{{
BINARIES
| default({})
| combine({
item: load_binaries[item]|combine({
'bin_name': BINARY_ABSPATHS[item]|basename,
'abspath': BINARY_ABSPATHS[item],
'version': BINARY_VERSIONS[item],
'symlink': LIB_DIR_BIN + '/' + BINARY_ABSPATHS[item]|basename,
'version_cmd': load_binaries[item]['version_cmd']|default(item + ' --version'),
}),
})
}}"
loop: "{{load_binaries|dictsort|map(attribute='0')}}" loop: "{{load_binaries|dictsort|map(attribute='0')}}"
################################################################################### ###################################################################################