mirror of
https://github.com/ArchiveBox/ArchiveBox.git
synced 2025-05-12 22:25:44 -04:00
127 lines
4.4 KiB
YAML
Executable file
127 lines
4.4 KiB
YAML
Executable file
#!/usr/bin/env ansible-playbook
|
|
---
|
|
- name: "Install puppeteer, puppeteer/browsers, and chrome"
|
|
hosts: localhost
|
|
gather_facts: true
|
|
vars:
|
|
LIB_DIR: '{{DATA_DIR}}/lib'
|
|
LIB_DIR_BIN: '{{LIB_DIR}}/bin'
|
|
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.lib_dir_npm}}'
|
|
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_binary
|
|
vars:
|
|
name: puppeteer
|
|
PATH: '{{BINPROVIDERS.npm.PATH}}'
|
|
|
|
- name: Load chrome binaries from environment PATH
|
|
include_tasks: roles/load_binary/tasks/main.yml
|
|
vars:
|
|
name: 'chrome'
|
|
bin_name: '{{chrome_executable}}'
|
|
PATH: '{{ansible_env.PATH}}'
|
|
with_items:
|
|
- 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
|
|
loop_control:
|
|
loop_var: chrome_executable
|
|
# break_when:
|
|
# - BINARIES.chrome.version|default('')
|
|
|
|
# - debug:
|
|
# msg: "{{ {'BINARIES': BINARIES, 'BINPROVIDERS': BINPROVIDERS} }}"
|
|
|
|
|
|
###################################################################################
|
|
- name: 'Install Chrome browser: npx @puppeteer/browsers install {{CHROME_RELEASE_CHANNEL}}'
|
|
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: not BINARIES.chrome.version|default('')
|
|
# -> 'chrome@128.0.6613.137 /data/lib/browsers/chrome/linux_arm-128.0.6613.138/chrome-linux-arm64/...'
|
|
|
|
###################################################################################
|
|
- name: Parse Chrome version and abspath from npx @puppeteer/browsers install output
|
|
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: not BINARIES.chrome.version|default('')
|
|
|
|
- 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"
|
|
changed_when: False
|
|
|
|
- name: Ensure ./bin/chrome symlink is executable
|
|
file:
|
|
path: "{{LIB_DIR_BIN}}/chrome"
|
|
mode: u+rx,g-rx,o-rwx
|
|
state: 'file'
|
|
changed_when: False
|
|
|
|
###################################################################################
|
|
- set_fact:
|
|
PUPPETEER_BINARIES:
|
|
chrome:
|
|
bin_name: 'chrome'
|
|
abspath: "{{CHROME_ABSPATH|default(BINARIES.chrome.abspath) or None}}"
|
|
version: "{{CHROME_VERSION|default(BINARIES.chrome.version) or None}}"
|
|
symlink: "{{LIB_DIR_BIN}}/chrome"
|
|
version_cmd: "chrome --version"
|
|
binprovider: 'puppeteer'
|
|
PUPPETEER_BINPROVIDERS:
|
|
puppeteer:
|
|
installer_abspath: "{{BINARIES.puppeteer.abspath}}"
|
|
installer_version: "{{BINARIES.puppeteer.version}}"
|
|
PATH: "{{LIB_DIR_BIN}}"
|
|
lib_dir_browsers: "{{LIB_DIR_BROWSERS}}"
|
|
|
|
- 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} }}"
|