Add nodejs.install() for "typical" nvm / node.js install
				
					
				
			also some related tweaks, necessary for that
This commit is contained in:
		
							parent
							
								
									21bdc2b391
								
							
						
					
					
						commit
						e81f4afa8f
					
				
					 2 changed files with 72 additions and 1 deletions
				
			
		
							
								
								
									
										57
									
								
								rattail_fabric2/nodejs.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								rattail_fabric2/nodejs.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,57 @@ | ||||||
|  | # -*- coding: utf-8; -*- | ||||||
|  | ################################################################################ | ||||||
|  | # | ||||||
|  | #  Rattail -- Retail Software Framework | ||||||
|  | #  Copyright © 2010-2019 Lance Edgar | ||||||
|  | # | ||||||
|  | #  This file is part of Rattail. | ||||||
|  | # | ||||||
|  | #  Rattail 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. | ||||||
|  | # | ||||||
|  | #  Rattail 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 | ||||||
|  | #  Rattail.  If not, see <http://www.gnu.org/licenses/>. | ||||||
|  | # | ||||||
|  | ################################################################################ | ||||||
|  | """ | ||||||
|  | Fabric library for Node.js | ||||||
|  | """ | ||||||
|  | 
 | ||||||
|  | import os | ||||||
|  | 
 | ||||||
|  | from rattail_fabric2 import append, exists | ||||||
|  | from rattail_fabric2.util import get_home_path | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def install(c, user=None): | ||||||
|  |     """ | ||||||
|  |     Install nvm and node.js for given user, or else "connection" user. | ||||||
|  |     """ | ||||||
|  |     home = get_home_path(c, user) | ||||||
|  |     nvm = os.path.join(home, '.nvm') | ||||||
|  | 
 | ||||||
|  |     if not exists(c, nvm): | ||||||
|  |         cmd = "bash -c 'curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.5/install.sh | bash'" | ||||||
|  |         if user: | ||||||
|  |             c.sudo(cmd, user=user) | ||||||
|  |         else: | ||||||
|  |             c.run(cmd) | ||||||
|  | 
 | ||||||
|  |     profile = os.path.join(home, '.profile') | ||||||
|  |     kwargs = {'use_sudo': bool(user)} | ||||||
|  |     append(c, profile, 'export NVM_DIR="{}"'.format(nvm), **kwargs) | ||||||
|  |     append(c, profile, '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"', **kwargs) | ||||||
|  |     append(c, profile, '[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"', **kwargs) | ||||||
|  | 
 | ||||||
|  |     cmd = "bash -l -c 'nvm install node'" | ||||||
|  |     if user: | ||||||
|  |         c.sudo(cmd, user=user) | ||||||
|  |     else: | ||||||
|  |         c.run(cmd) | ||||||
|  | @ -119,7 +119,10 @@ def append(c, filename, text, use_sudo=False, partial=False, escape=True, | ||||||
|             and contains(c, filename, regex, use_sudo=use_sudo, escape=False, |             and contains(c, filename, regex, use_sudo=use_sudo, escape=False, | ||||||
|                          shell=shell)): |                          shell=shell)): | ||||||
|             continue |             continue | ||||||
|         line = line.replace("'", r"'\\''") if escape else line |         if escape: | ||||||
|  |             line = line.replace("'", r"'\\''") # TODO: does this one even work? | ||||||
|  |             line = line.replace('"', r'\"') | ||||||
|  |             line = line.replace('$', r'\$') | ||||||
|         func("""bash -c "echo '%s' >> %s" """ % (line, _expand_path(c, filename))) |         func("""bash -c "echo '%s' >> %s" """ % (line, _expand_path(c, filename))) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -178,3 +181,14 @@ def _expand_path(c, path): | ||||||
|        This function is derived from one copied from fabric v1. |        This function is derived from one copied from fabric v1. | ||||||
|     """ |     """ | ||||||
|     return path if is_win(c) else '"$(echo %s)"' % path |     return path if is_win(c) else '"$(echo %s)"' % path | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def get_home_path(c, user=None): | ||||||
|  |     """ | ||||||
|  |     Retrieve the path to the home folder for the given user, or else the | ||||||
|  |     "connection" user. | ||||||
|  |     """ | ||||||
|  |     user = user or c.user | ||||||
|  |     home = c.run('getent passwd {} | cut -d: -f6'.format(user)).stdout.strip() | ||||||
|  |     home = home.rstrip('/') | ||||||
|  |     return home | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Lance Edgar
						Lance Edgar