Skip to content

Commit

Permalink
pnpm: version should not be latest when state is latest (#7339)
Browse files Browse the repository at this point in the history
* (fix) don't set version at latest at state: latest

If version is forcefully set at latest when state is latest, the package
will always be changed, as there is no version "latest" will ever be
detected. It is better to keep it None.

* (fix) fixed tests to reflect recent changes

* Apply suggestions from code review

Co-authored-by: Felix Fontein <[email protected]>

* (feat) added changelog fragment for pull #7339

* (fix) apply correct punctuation to changelog

Co-authored-by: Felix Fontein <[email protected]>

---------

Co-authored-by: Felix Fontein <[email protected]>
  • Loading branch information
aretrosen and felixfontein authored Oct 4, 2023
1 parent 8c069f3 commit 39895a6
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 10 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
minor_changes:
- pnpm - set correct version when state is latest or version is not mentioned. Resolves previous idempotency problem (https://github.com/ansible-collections/community.general/pull/7339).
5 changes: 2 additions & 3 deletions plugins/modules/pnpm.py
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,8 @@ def __init__(self, module, **kwargs):
self.alias_name_ver = (self.alias_name_ver or "") + self.name
if self.version is not None:
self.alias_name_ver = self.alias_name_ver + "@" + str(self.version)
else:
self.alias_name_ver = self.alias_name_ver + "@latest"

def _exec(self, args, run_in_check_mode=False, check_rc=True):
if not self.module.check_mode or (self.module.check_mode and run_in_check_mode):
Expand Down Expand Up @@ -413,9 +415,6 @@ def main():
if state == "absent" and name is None:
module.fail_json(msg="Package name is required for uninstalling")

if state == "latest":
version = "latest"

if globally:
_rc, out, _err = module.run_command(executable + ["root", "-g"], check_rc=True)
path, _tail = os.path.split(out.strip())
Expand Down
3 changes: 2 additions & 1 deletion tests/integration/targets/pnpm/tasks/main.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
---
####################################################################
# WARNING: These are designed specifically for Ansible tests #
# and should not be used as examples of how to write Ansible roles #
Expand All @@ -13,7 +14,7 @@
# Setup steps

- name: Run tests on OSes
include_tasks: run.yml
ansible.builtin.include_tasks: run.yml
vars:
ansible_system_os: "{{ ansible_system | lower }}"
nodejs_version: "{{ item.node_version }}"
Expand Down
23 changes: 17 additions & 6 deletions tests/integration/targets/pnpm/tasks/run.yml
Original file line number Diff line number Diff line change
Expand Up @@ -127,11 +127,6 @@
- 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 }}"
Expand All @@ -146,7 +141,7 @@
ansible.builtin.assert:
that:
- pnpm_fix_install is success
- pnpm_fix_install is changed
- pnpm_fix_install is not changed

- name: Install package with version, without executable path
pnpm:
Expand Down Expand Up @@ -293,6 +288,22 @@
- pnpm_reinstall is success
- not (pnpm_reinstall is changed)

- name: Updating package globally, without explicit executable path
pnpm:
name: "{{ package }}"
state: latest
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
- pnpm_reinstall is not changed

- name: Remove package without dependency globally
pnpm:
name: "{{ package }}"
Expand Down

0 comments on commit 39895a6

Please sign in to comment.