-
-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathapp.py
92 lines (82 loc) · 5.3 KB
/
app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import logging
import os
from core.settings import Settings
from core.utils.file_utils import Folder, File
from core.utils.json_utils import JsonUtils
from core.utils.npm import Npm
from core.utils.run import run
from core.enums.os_type import OSType
class App(object):
@staticmethod
def get_package_json(app_name):
return JsonUtils.read(os.path.join(Settings.TEST_RUN_HOME, app_name, 'package.json'))
@staticmethod
def is_dev_dependency(app_name, dependency):
json = App.get_package_json(app_name=app_name)
dev_deps = json.get('devDependencies')
if dev_deps is not None:
if dev_deps.get(dependency) is not None:
return True
return False
@staticmethod
def is_dependency(app_name, dependency):
json = App.get_package_json(app_name=app_name)
dev_deps = json.get('dependencies')
if dev_deps is not None:
if dev_deps.get(dependency) is not None:
return True
return False
@staticmethod
def install_dependency(app_name, dependency, version='latest'):
app_path = os.path.join(Settings.TEST_RUN_HOME, app_name)
Npm.uninstall(package=dependency, option='--save', folder=app_path)
Npm.install(package='{0}@{1}'.format(dependency, version), option='--save --save-exact', folder=app_path)
@staticmethod
def install_dev_dependency(app_name, dependency, version='latest'):
app_path = os.path.join(Settings.TEST_RUN_HOME, app_name)
Npm.uninstall(package=dependency, option='--save-dev', folder=app_path)
Npm.install(package='{0}@{1}'.format(dependency, version), option='--save-dev --save-exact', folder=app_path)
@staticmethod
def update(app_name, modules=True, angular=True, typescript=False, web_pack=True, vue=True, theme=True):
app_path = os.path.join(Settings.TEST_RUN_HOME, app_name)
modules_path = os.path.join(app_path, 'node_modules')
if modules and App.is_dependency(app_name=app_name, dependency='tns-core-modules'):
Npm.uninstall(package='tns-core-modules', option='--save', folder=app_path)
Npm.install(package=Settings.Packages.MODULES, option='--save --save-exact', folder=app_path)
if theme and App.is_dependency(app_name=app_name, dependency='@nativescript/theme'):
Npm.uninstall(package='@nativescript/theme', option='--save', folder=app_path)
Npm.install(package='@nativescript/theme@next', option='--save --save-exact', folder=app_path)
if angular and App.is_dependency(app_name=app_name, dependency='nativescript-angular'):
Npm.uninstall(package='nativescript-angular', option='--save', folder=app_path)
Npm.install(package=Settings.Packages.ANGULAR, option='--save --save-exact', folder=app_path)
update_script = os.path.join(modules_path, '.bin', 'update-app-ng-deps')
result = run(cmd=update_script, log_level=logging.INFO)
assert 'Angular dependencies updated' in result.output, 'Angular dependencies not updated.'
Npm.install(folder=app_path)
if typescript and App.is_dev_dependency(app_name=app_name, dependency='nativescript-dev-typescript'):
Npm.uninstall(package='nativescript-dev-typescript', option='--save-dev', folder=app_path)
Npm.install(package=Settings.Packages.TYPESCRIPT, option='--save-dev --save-exact', folder=app_path)
update_script = os.path.join(modules_path, 'nativescript-dev-typescript', 'bin', 'ns-upgrade-tsconfig')
result = run(cmd=update_script, log_level=logging.INFO)
assert "Adding 'es6' lib to tsconfig.json..." in result.output
assert "Adding 'dom' lib to tsconfig.json..." in result.output
assert 'Adding tns-core-modules path mappings lib' in result.output
if web_pack and App.is_dev_dependency(app_name=app_name, dependency='nativescript-dev-webpack'):
Npm.uninstall(package='nativescript-dev-webpack', option='--save-dev', folder=app_path)
Npm.install(package=Settings.Packages.WEBPACK, option='--save-dev --save-exact', folder=app_path)
Folder.clean(os.path.join(app_name, 'hooks'))
Folder.clean(os.path.join(app_name, 'node_modules'))
Npm.install(folder=app_path)
path_script = '"' + os.path.join(modules_path, '.bin', 'update-ns-webpack') + '"'
update_script = path_script + ' --deps --configs'
result = run(cmd=update_script, log_level=logging.INFO)
assert 'Updating dev dependencies...' in result.output, 'Webpack dependencies not updated.'
assert 'Updating configuration files...' in result.output, 'Webpack configs not updated.'
if vue and App.is_dependency(app_name=app_name, dependency='nativescript-vue'):
Npm.uninstall(package='nativescript-vue', option='--save', folder=app_path)
Npm.install(package='nativescript-vue', option='--save --save-exact', folder=app_path)
# on win when `npm i` is executed with path to .tgz it saves in package.json unix style path
# which cannot be resolved on win
if Settings.HOST_OS == OSType.WINDOWS:
package_json = os.path.join(Settings.TEST_RUN_HOME, app_name, 'package.json')
File.replace(package_json, 'file://', '\\\\\\\\', fail_safe=True)