---
- name: β
Ensure shared Playwright project dir exists
ansible.builtin.file:
path: "{{ TEST_E2E_PLAYWRIGHT_SHARED_DIR }}"
state: directory
mode: "0755"
- name: π Render shared package.json from central template
ansible.builtin.template: # nocheck: stack-host-template (per-host playwright stage dir, runs on every test host)
src: "{{ lookup('path_absolute', 'roles/test-e2e-playwright/templates/package.json.j2') }}"
dest: "{{ TEST_E2E_PLAYWRIGHT_SHARED_DIR }}/package.json"
mode: "0644"
- name: π¦ Pack the persona flows for a single transfer
ansible.builtin.command:
cmd: >-
tar -cf {{ TEST_E2E_PLAYWRIGHT_PERSONAS_ARCHIVE | quote }}
-C {{ lookup('path_absolute', 'roles/test-e2e-playwright/files/personas') | quote }} .
delegate_to: localhost
become: false
changed_when: false
- name: π¦ Pack the shared Playwright helpers for a single transfer per role
ansible.builtin.command:
argv: >-
{{
['tar', '-cf', TEST_E2E_PLAYWRIGHT_HELPERS_ARCHIVE, '-C', TEST_E2E_PLAYWRIGHT_HELPERS_DIR]
+ (query('fileglob', TEST_E2E_PLAYWRIGHT_HELPERS_DIR ~ '/*.js')
| map('basename') | reject('equalto', 'playwright.config.js') | list)
}}
delegate_to: localhost
become: false
changed_when: false
- name: β
Ensure the shared personas dir exists
ansible.builtin.file:
path: "{{ TEST_E2E_PLAYWRIGHT_SHARED_PERSONAS }}"
state: directory
mode: "0755"
- name: π Stage the persona flows once for every role of this run
ansible.builtin.unarchive:
src: "{{ TEST_E2E_PLAYWRIGHT_PERSONAS_ARCHIVE }}"
dest: "{{ TEST_E2E_PLAYWRIGHT_SHARED_PERSONAS }}/"
- name: π Probe shared install stamp
ansible.builtin.stat:
path: "{{ TEST_E2E_PLAYWRIGHT_SHARED_STAMP }}"
register: _playwright_shared_stamp_stat
- name: π Read shared install stamp
ansible.builtin.slurp:
src: "{{ TEST_E2E_PLAYWRIGHT_SHARED_STAMP }}"
register: _playwright_shared_stamp_content
when: _playwright_shared_stamp_stat.stat.exists
- name: π€ Decide whether the shared install is up to date
ansible.builtin.set_fact:
_playwright_shared_install_needed: >-
{{
(not _playwright_shared_stamp_stat.stat.exists)
or ((_playwright_shared_stamp_content.content | default('') | b64decode | trim)
!= TEST_E2E_PLAYWRIGHT_INSTALL_STAMP)
}}
- name: β¬οΈ Pull the Playwright image once for every role of this run
ansible.builtin.command:
argv:
- timeout
- -k
- "60"
- "{{ lookup('timeout', 1800) | int }}"
- container
- pull
- "{{ TEST_E2E_PLAYWRIGHT_IMAGE }}"
register: _playwright_shared_pull
changed_when: false
failed_when: false
retries: 3
delay: 5
until: _playwright_shared_pull.rc == 0
- name: π§ Provision the shared Playwright install (npm install + stamp)
when: _playwright_shared_install_needed | bool
block:
- name: π¦ Install @playwright/test and @axe-core/playwright into the shared dir
ansible.builtin.command:
argv:
- container
- run
- --rm
- -v
- "{{ TEST_E2E_PLAYWRIGHT_SHARED_DIR }}:/shared"
- -w
- /shared
- "{{ TEST_E2E_PLAYWRIGHT_IMAGE }}"
- /bin/bash
- -lc
- >-
npm install --no-fund --no-audit --prefer-offline
--fetch-retries 5
--fetch-retry-mintimeout 10000
--fetch-retry-maxtimeout 60000
register: _playwright_shared_install
changed_when: _playwright_shared_install.rc == 0
retries: 3
delay: 5
until: _playwright_shared_install.rc == 0
- name: βοΈ Write shared install stamp
ansible.builtin.copy:
dest: "{{ TEST_E2E_PLAYWRIGHT_SHARED_STAMP }}"
content: "{{ TEST_E2E_PLAYWRIGHT_INSTALL_STAMP }}"
mode: "0644"