1
0
Fork 0
mirror of https://github.com/ansible-collections/community.general.git synced 2024-09-14 20:13:21 +02:00
community.general/tests/integration/targets/pnpm/tasks/run.yml
Aritra Sen 568814fc3e
New module: pnpm package manager (#6741)
* (feat) New module pnpm added

A new module for pnpm is added. Necessary entries were written to
BOTMETA.yml.

* (feat) Basic tests added

* (feat) reduced nesting of ifs

* (fix) trying to fix up CI pipelines

* (fix) incorrect indentation of alias fixed

* (feat) fixed further indentations

* Apply suggestions from code review

Co-authored-by: Felix Fontein <felix@fontein.de>

* (fix) various linting and CI errors fixed/ignored

* (feat) reduced restriction, new install method

Some restrictions on OS are reduced. New installation method, similar to
the official installation method, is provided.

* (fix) ignoring CentOS 6 for CI.

* retrigger checks

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-09-08 13:15:34 +02:00

311 lines
9.4 KiB
YAML

---
# Copyright (c) 2023 Aritra Sen <aretrosen@proton.me>
# Copyright (c) Ansible Project
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later
- name: Download nodejs
ansible.builtin.unarchive:
src: "https://nodejs.org/dist/v{{ nodejs_version }}/{{ nodejs_path }}.tar.gz"
dest: "{{ remote_tmp_dir }}"
remote_src: true
creates: "{{ remote_tmp_dir }}/{{ nodejs_path }}.tar.gz"
- name: Create a temporary directory for pnpm binary
ansible.builtin.tempfile:
state: directory
register: tmp_dir
- name: Download pnpm binary to the temporary directory
ansible.builtin.get_url:
url: "https://github.com/pnpm/pnpm/releases/download/v{{ pnpm_version }}/{{ pnpm_path }}"
dest: "{{ tmp_dir.path }}/pnpm"
mode: "755"
- name: Setting up pnpm via command
ansible.builtin.command: "{{ tmp_dir.path }}/pnpm setup --force"
environment:
PNPM_HOME: "{{ ansible_env.HOME }}/.local/share/pnpm"
SHELL: /bin/sh
ENV: "{{ ansible_env.HOME }}/.shrc"
- name: Remove the temporary directory
ansible.builtin.file:
path: "{{ tmp_dir.path }}"
state: absent
- name: Remove any previous Nodejs modules
ansible.builtin.file:
path: "{{ remote_tmp_dir }}/node_modules"
state: absent
- name: CI tests to run
vars:
node_bin_path: "{{ remote_tmp_dir }}/{{ nodejs_path }}/bin"
pnpm_bin_path: "{{ ansible_env.HOME }}/.local/share/pnpm"
package: "tailwindcss"
environment:
PATH: "{{ node_bin_path }}:{{ ansible_env.PATH }}"
block:
- name: Create dummy package.json
ansible.builtin.template:
src: package.j2
dest: "{{ remote_tmp_dir }}/package.json"
mode: "644"
- name: Install reading-time package via package.json
pnpm:
path: "{{ remote_tmp_dir }}"
executable: "{{ pnpm_bin_path }}/pnpm"
state: present
environment:
PATH: "{{ node_bin_path }}:{{ ansible_env.PATH }}"
- name: Install the same package from package.json again
pnpm:
path: "{{ remote_tmp_dir }}"
executable: "{{ pnpm_bin_path }}/pnpm"
name: "reading-time"
state: present
environment:
PATH: "{{ node_bin_path }}:{{ ansible_env.PATH }}"
register: pnpm_install
- name: Assert that result is not changed
ansible.builtin.assert:
that:
- not (pnpm_install is changed)
- name: Install all packages in check mode
pnpm:
path: "{{ remote_tmp_dir }}"
executable: "{{ pnpm_bin_path }}/pnpm"
state: present
environment:
PATH: "{{ node_bin_path }}:{{ ansible_env.PATH }}"
check_mode: true
register: pnpm_install_check
- name: Verify test pnpm global installation in check mode
ansible.builtin.assert:
that:
- pnpm_install_check.err is defined
- pnpm_install_check.out is defined
- pnpm_install_check.err is none
- pnpm_install_check.out is none
- name: Install package without dependency
pnpm:
path: "{{ remote_tmp_dir }}"
executable: "{{ pnpm_bin_path }}/pnpm"
state: present
name: "{{ package }}"
environment:
PATH: "{{ node_bin_path }}:{{ ansible_env.PATH }}"
register: pnpm_install
- name: Assert that result is changed and successful
ansible.builtin.assert:
that:
- pnpm_install is success
- pnpm_install is changed
- name: Reinstall package without dependency
pnpm:
path: "{{ remote_tmp_dir }}"
executable: "{{ pnpm_bin_path }}/pnpm"
state: present
name: "{{ package }}"
environment:
PATH: "{{ node_bin_path }}:{{ ansible_env.PATH }}"
register: pnpm_reinstall
- name: Assert that there is no change
ansible.builtin.assert:
that:
- pnpm_reinstall is success
- not (pnpm_reinstall is changed)
- name: Manually delete package
ansible.builtin.file:
path: "{{ remote_tmp_dir }}/node_modules/{{ package }}"
state: absent
- name: Reinstall package
pnpm:
path: "{{ remote_tmp_dir }}"
executable: "{{ pnpm_bin_path }}/pnpm"
state: latest
name: "{{ package }}"
environment:
PATH: "{{ node_bin_path }}:{{ ansible_env.PATH }}"
register: pnpm_fix_install
- name: Assert that result is changed and successful
ansible.builtin.assert:
that:
- pnpm_fix_install is success
- pnpm_fix_install is changed
- name: Install package with version, without executable path
pnpm:
name: "{{ package }}"
version: 0.1.3
path: "{{ remote_tmp_dir }}"
state: present
environment:
PATH: "{{ pnpm_bin_path }}:{{ node_bin_path }}:{{ ansible_env.PATH }}"
register: pnpm_install
- name: Assert that package with version is installed
ansible.builtin.assert:
that:
- pnpm_install is success
- pnpm_install is changed
- name: Reinstall package with version, without explicit executable path
pnpm:
name: "{{ package }}"
version: 0.1.3
path: "{{ remote_tmp_dir }}"
state: present
environment:
PATH: "{{ pnpm_bin_path }}:{{ node_bin_path }}:{{ ansible_env.PATH }}"
register: pnpm_reinstall
- name: Assert that there is no change
ansible.builtin.assert:
that:
- pnpm_reinstall is success
- not (pnpm_reinstall is changed)
- name: Update package, without executable path
pnpm:
name: "{{ package }}"
path: "{{ remote_tmp_dir }}"
state: latest
environment:
PATH: "{{ pnpm_bin_path }}:{{ node_bin_path }}:{{ ansible_env.PATH }}"
register: pnpm_update
- name: Assert that result is changed and successful
ansible.builtin.assert:
that:
- pnpm_update is success
- pnpm_update is changed
- name: Remove package, without executable path
pnpm:
name: "{{ package }}"
path: "{{ remote_tmp_dir }}"
state: absent
environment:
PATH: "{{ pnpm_bin_path }}:{{ node_bin_path }}:{{ ansible_env.PATH }}"
register: pnpm_absent
- name: Assert that result is changed and successful
ansible.builtin.assert:
that:
- pnpm_absent is success
- pnpm_absent is changed
- name: Install package with version and alias, without executable path
pnpm:
name: "{{ package }}"
alias: tailwind-1
version: 0.1.3
path: "{{ remote_tmp_dir }}"
state: present
environment:
PATH: "{{ pnpm_bin_path }}:{{ node_bin_path }}:{{ ansible_env.PATH }}"
register: pnpm_install
- name: Assert that package with version and alias is installed
ansible.builtin.assert:
that:
- pnpm_install is success
- pnpm_install is changed
- name: Reinstall package with version and alias, without explicit executable path
pnpm:
name: "{{ package }}"
alias: tailwind-1
version: 0.1.3
path: "{{ remote_tmp_dir }}"
state: present
environment:
PATH: "{{ pnpm_bin_path }}:{{ node_bin_path }}:{{ ansible_env.PATH }}"
register: pnpm_reinstall
- name: Assert that there is no change
ansible.builtin.assert:
that:
- pnpm_reinstall is success
- not (pnpm_reinstall is changed)
- name: Remove package with alias, without executable path
pnpm:
name: tailwindcss
alias: tailwind-1
path: "{{ remote_tmp_dir }}"
state: absent
environment:
PATH: "{{ pnpm_bin_path }}:{{ node_bin_path }}:{{ ansible_env.PATH }}"
register: pnpm_absent
- name: Assert that result is changed and successful
ansible.builtin.assert:
that:
- pnpm_absent is success
- pnpm_absent is changed
- name: Install package without dependency globally
pnpm:
name: "{{ package }}"
executable: "{{ pnpm_bin_path }}/pnpm"
state: present
global: true
environment:
PATH: "{{ pnpm_bin_path }}:{{ node_bin_path }}:{{ ansible_env.PATH }}"
PNPM_HOME: "{{ pnpm_bin_path }}"
register: pnpm_install
- name: Assert that result is changed and successful
ansible.builtin.assert:
that:
- pnpm_install is success
- pnpm_install is changed
- name: Reinstall package globally, without explicit executable path
pnpm:
name: "{{ package }}"
state: present
global: true
environment:
PATH: "{{ pnpm_bin_path }}:{{ node_bin_path }}:{{ ansible_env.PATH }}"
PNPM_HOME: "{{ pnpm_bin_path }}"
register: pnpm_reinstall
- name: Assert that there is no change
ansible.builtin.assert:
that:
- pnpm_reinstall is success
- not (pnpm_reinstall is changed)
- name: Remove package without dependency globally
pnpm:
name: "{{ package }}"
executable: "{{ pnpm_bin_path }}/pnpm"
global: true
state: absent
environment:
PATH: "{{ pnpm_bin_path }}:{{ node_bin_path }}:{{ ansible_env.PATH }}"
PNPM_HOME: "{{ pnpm_bin_path }}"
register: pnpm_absent
- name: Assert that result is changed and successful
ansible.builtin.assert:
that:
- pnpm_absent is success
- pnpm_absent is changed