--- - name: "✅ EXT | Ensure download dir exists on the hosting node" file: path: "{{ MEDIAWIKI_EXT_CFG_BASE }}" state: directory mode: "0755" - name: "⬇️ EXT | Download extension tarballs ({{ MEDIAWIKI_EXT_BRANCH }})" get_url_retry: url: "{{ ext.url }}" dest: "{{ MEDIAWIKI_EXT_CFG_BASE }}/{{ ext.name }}.tar.gz" mode: "0644" loop: "{{ MEDIAWIKI_EXT_LIST }}" loop_control: loop_var: ext label: "{{ ext.name }}" - name: "📋 EXT | Copy & extract into container if not installed" script: install/extension.sh environment: EXT_NAME: "{{ ext.name }}" EXT_TARBALL: "{{ MEDIAWIKI_EXT_CFG_BASE }}/{{ ext.name }}.tar.gz" MEDIAWIKI_HTML_DIR: "{{ MEDIAWIKI_HTML_DIR }}" MEDIAWIKI_USER: "{{ MEDIAWIKI_USER }}" MW_CID: "{{ MEDIAWIKI_LOCAL_CID }}" loop: "{{ MEDIAWIKI_EXT_LIST }}" loop_control: loop_var: ext label: "{{ ext.name }}" register: _install_results changed_when: "'INSTALLED:' in _install_results.stdout" - name: "📋 EXT | Stage the container-side composer helpers on the hosting node" ansible.builtin.copy: src: install/helpers/ dest: "{{ MEDIAWIKI_EXT_HELPER_DIR }}/" mode: "0644" - name: "📦 EXT | composer install in each extension when needed" script: >- shell/composer_install_extension.sh "{{ MEDIAWIKI_USER }}" "{{ MEDIAWIKI_HTML_DIR }}" "{{ ext.name }}" "{{ MEDIAWIKI_EXT_BRANCH }}" environment: MW_CID: "{{ MEDIAWIKI_LOCAL_CID }}" MEDIAWIKI_EXT_HELPER_DIR: "{{ MEDIAWIKI_EXT_HELPER_DIR }}" loop: "{{ MEDIAWIKI_EXT_LIST }}" loop_control: loop_var: ext label: "{{ ext.name }}" register: _vendor changed_when: "'COMPOSER_INSTALLED:' in _vendor.stdout" - name: "✅ EXT | Sanity check: Jumbojett OpenIDConnect client present" shell: > # nocheck: container-exec-resolver runtime-resolved CID, delegated to the hosting node container exec {{ MEDIAWIKI_LOCAL_CID | quote }} bash -lc 'php -r "(@require \"{{ MEDIAWIKI_HTML_DIR }}/vendor/autoload.php\"); @require \"{{ MEDIAWIKI_HTML_DIR }}/extensions/OpenIDConnect/vendor/autoload.php\"; exit(class_exists(\"Jumbojett\\\\OpenIDConnectClient\")?0:1);"' args: executable: /bin/bash register: _oidc_class changed_when: false failed_when: _oidc_class.rc != 0 when: MEDIAWIKI_OIDC_ENABLED | bool