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:
parent
386c6b4051
commit
cea681a5c0
7 changed files with 117 additions and 2 deletions
2
.github/BOTMETA.yml
vendored
2
.github/BOTMETA.yml
vendored
|
@ -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:
|
||||
|
|
|
@ -185,7 +185,7 @@ class Npm(object):
|
|||
return ''
|
||||
|
||||
def list(self):
|
||||
cmd = ['list', '--json']
|
||||
cmd = ['list', '--json', '--long']
|
||||
|
||||
installed = list()
|
||||
missing = list()
|
||||
|
|
3
test/integration/targets/npm/aliases
Normal file
3
test/integration/targets/npm/aliases
Normal file
|
@ -0,0 +1,3 @@
|
|||
posix/ci/group2
|
||||
destructive
|
||||
skip/freebsd
|
35
test/integration/targets/npm/tasks/main.yml
Normal file
35
test/integration/targets/npm/tasks/main.yml
Normal 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)
|
2
test/integration/targets/npm/tasks/run.yml
Normal file
2
test/integration/targets/npm/tasks/run.yml
Normal file
|
@ -0,0 +1,2 @@
|
|||
- include_tasks: setup.yml
|
||||
- include_tasks: test.yml
|
6
test/integration/targets/npm/tasks/setup.yml
Normal file
6
test/integration/targets/npm/tasks/setup.yml
Normal 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'
|
69
test/integration/targets/npm/tasks/test.yml
Normal file
69
test/integration/targets/npm/tasks/test.yml
Normal 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
|
Loading…
Reference in a new issue