npm module compatible with npm5 (#26582)

* npm module compatible with npm5

Uses the `--long` flag in `npm list` to get the `missing` key back.

* npm: add integration tests

* npm: test the module with npm 4 as well

* Remove debug tasks, use variables

* Use tests instead of filters

* Adds xcambar as a maintainer of the npm module
This commit is contained in:
Xavier Cambar 2018-01-19 15:47:43 +01:00 committed by René Moser
parent 386c6b4051
commit cea681a5c0
7 changed files with 117 additions and 2 deletions

2
.github/BOTMETA.yml vendored
View file

@ -536,7 +536,7 @@ files:
$modules/packaging/language/maven_artifact.py: chrisisbeef tumbl3w33d
$modules/packaging/language/npm.py:
ignored: chrishoffman
maintainers: shane-walker
maintainers: shane-walker xcambar
$modules/packaging/language/pear.py:
$modules/packaging/language/pip.py: lujeni robinro
$modules/packaging/os/apk.py:

View file

@ -185,7 +185,7 @@ class Npm(object):
return ''
def list(self):
cmd = ['list', '--json']
cmd = ['list', '--json', '--long']
installed = list()
missing = list()

View file

@ -0,0 +1,3 @@
posix/ci/group2
destructive
skip/freebsd

View file

@ -0,0 +1,35 @@
# test code for the npm module
# This file is part of Ansible
#
# Ansible is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Ansible is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
# -------------------------------------------------------------
# Setup steps
# expand remote path
- command: 'echo {{ output_dir }}'
register: echo
- set_fact:
remote_dir: '{{ echo.stdout }}'
- include_tasks: run.yml
vars:
nodejs_version: '{{ item }}'
nodejs_path: 'node-v{{ nodejs_version }}-{{ ansible_system|lower }}-x{{ ansible_userspace_bits }}'
with_items:
- 7.10.1 # provides npm 4.2.0 (last npm < 5 released)
- 8.0.0 # provides npm 5.0.0
- 8.2.0 # provides npm 5.3.0 (output change with this version)

View file

@ -0,0 +1,2 @@
- include_tasks: setup.yml
- include_tasks: test.yml

View file

@ -0,0 +1,6 @@
- name: 'Download NPM'
unarchive:
src: 'https://nodejs.org/dist/v{{ nodejs_version }}/{{ nodejs_path }}.tar.gz'
dest: '{{ output_dir }}'
remote_src: yes
creates: '{{ output_dir }}/{{ nodejs_path }}.tar.gz'

View file

@ -0,0 +1,69 @@
- name: 'Remove any node modules'
file:
path: '{{ remote_dir }}/node_modules'
state: absent
- vars:
# sample: node-v8.2.0-linux-x64.tar.xz
node_path: '{{ remote_dir }}/{{ nodejs_path }}/bin'
package: 'iconv-lite'
block:
- shell: npm --version
environment:
PATH: '{{ node_path }}:{{ ansible_env.PATH }}'
register: npm_version
- debug:
var: npm_version.stdout
- name: 'Install simple package without dependency'
npm:
path: '{{ remote_dir }}'
executable: '{{ node_path }}/npm'
state: present
name: '{{ package }}'
environment:
PATH: '{{ node_path }}:{{ ansible_env.PATH }}'
register: npm_install
- assert:
that:
- npm_install is success
- npm_install is changed
- name: 'Reinstall simple package without dependency'
npm:
path: '{{ remote_dir }}'
executable: '{{ node_path }}/npm'
state: present
name: '{{ package }}'
environment:
PATH: '{{ node_path }}:{{ ansible_env.PATH }}'
register: npm_reinstall
- name: Check there is no change
assert:
that:
- npm_reinstall is success
- not (npm_reinstall is changed)
- name: 'Manually delete package'
file:
path: '{{ remote_dir }}/node_modules/{{ package }}'
state: absent
- name: 'reinstall simple package'
npm:
path: '{{ remote_dir }}'
executable: '{{ node_path }}/npm'
state: present
name: '{{ package }}'
environment:
PATH: '{{ node_path }}:{{ ansible_env.PATH }}'
register: npm_fix_install
- name: Check result is changed and successful
assert:
that:
- npm_fix_install is success
- npm_fix_install is changed