ArchiveBox/archivebox/playbooks/install_puppeteer.yml
2024-09-17 00:48:47 -07:00

112 lines
3.8 KiB
YAML
Executable file

#!/usr/bin/env ansible-playbook
---
- name: "Install puppeteer, puppeteer/browsers, and chrome"
hosts: localhost
gather_facts: no
vars:
DATA_DIR: '{{playbook_dir}}'
LIB_DIR: '{{DATA_DIR}}/lib'
LIB_DIR_BROWSERS: '{{LIB_DIR}}/browsers'
CHROME_RELEASE_CHANNEL: 'chrome@stable'
CHROME_VERSION_MIN: '128.0.6613.137'
tasks:
- include_role:
name: setup_lib_npm
vars:
MIN_NODE_VERSION: '20.0.0'
MIN_NPM_VERSION: '10.0.0'
- name: "Install npm packages: [puppeteer, @puppeteer/browsers]"
community.general.npm:
name: '{{item}}'
state: "present"
path: '{{BINPROVIDERS.npm.root_path}}'
loop:
- 'puppeteer'
- '@puppeteer/browsers'
- name: Make sure prerequisite folders exist
file:
path: '{{LIB_DIR_BROWSERS}}'
state: directory
recurse: true
- name: Load puppeteer binary from installed NPM package
include_role:
name: load_binaries
vars:
load_binaries:
- name: puppeteer
bin_name: 'puppeteer'
version_cmd: 'puppeteer --version'
PATH: '{{BINPROVIDERS.npm.PATH}}'
- name: Load chrome binary from environment PATH
include_role:
name: load_binaries
vars:
load_binaries:
- name: 'chrome'
bin_name: '{{item}}'
PATH: '{{ansible_env.PATH}}'
loop:
- chrome
- chrome-browser
- chromium
- chromium-browser
- google-chrome
- google-chrome-browser
- google-chrome-stable
- google-chrome-beta
- google-chrome-canary
- google-chrome-unstable
- google-chrome-dev
###################################################################################
- name: Install Chrome browser using puppeteer/browsers
command: 'npx @puppeteer/browsers install {{CHROME_RELEASE_CHANNEL}} --path {{LIB_DIR_BROWSERS}}'
register: CHROME_VERSION_FULL
environment:
PATH: "{{BINPROVIDERS.npm.PATH}}:{{ ansible_env.PATH }}"
changed_when: CHROME_VERSION_MIN not in CHROME_VERSION_FULL.stdout
when: BINARIES.chrome is not defined
# -> 'chrome@128.0.6613.137 /data/lib/browsers/chrome/linux_arm-128.0.6613.138/chrome-linux-arm64/...'
###################################################################################
- set_fact:
CHROME_ABSPATH: "{{ CHROME_VERSION_FULL.stdout_lines|last|split(' ', 1)|last }}"
CHROME_VERSION: "{{ CHROME_VERSION_FULL.stdout_lines|last|split('@', 1)|last|split(' ', 1)|first }}"
when: BINARIES.chrome is not defined
- name: Create ./bin/chrome symlink to ./browsers/chrome/... binary
copy:
content: |
#!/bin/bash
exec '{{CHROME_ABSPATH|default(BINARIES.chrome.abspath)}}' "$@"
dest: "{{LIB_DIR_BIN}}/chrome"
- file:
path: "{{LIB_DIR_BIN}}/chrome"
mode: u+rx,g-rx,o-rwx
state: 'file'
###################################################################################
- set_fact:
PUPPETEER_BINARIES:
chrome:
bin_name: 'chrome'
abspath: "{{CHROME_ABSPATH|default(BINARIES.chrome.abspath)}}"
version: "{{CHROME_VERSION|default(BINARIES.chrome.version)}}"
symlink: "{{LIB_DIR_BIN}}/chrome"
version_cmd: "chrome --version"
- name: Check that installed Chrome matches expected version
assert:
that: PUPPETEER_BINARIES.chrome.version is version(CHROME_VERSION_MIN, '>=')
quiet: true
- set_fact:
BINARIES: "{{ BINARIES | combine(PUPPETEER_BINARIES) }}"
cacheable: true
- debug:
msg: "{{ {'BINARIES': BINARIES, 'BINPROVIDERS': BINPROVIDERS} }}"