1
0
mirror of https://github.com/ansible/awx.git synced 2024-10-31 06:51:10 +03:00
awx/awx/ui
2018-10-05 06:42:53 -06:00
..
build remove the network UI 2018-07-30 11:03:53 -04:00
client Ensure workflow graph width is 100% of container 2018-10-05 06:42:53 -06:00
grunt-tasks Update UI build system 2017-09-07 18:09:14 -04:00
po Update translations 2018-08-17 13:56:34 -04:00
test Fixes unit test failures 2018-08-28 11:01:04 -04:00
utils updated automated ui get license script to only look for nondev deps 2018-08-28 15:49:06 -04:00
__init__.py
.eslintignore De-lint test files and update test,build config 2017-10-10 16:59:42 -04:00
.eslintrc.js don't prefer destructuring for arrays within es-lint 2018-04-25 21:12:13 -04:00
.jshintrc
.npmrc
apps.py
conf.py Merge branch 'release_3.2.4' into release_3.3.0 2018-04-26 11:10:28 -04:00
context_processors.py
fields.py
Gruntfile.js Update UI build system 2017-09-07 18:09:14 -04:00
models.py
package-lock.json Use latest version of nvd3 instead 2018-08-13 14:49:25 -04:00
package.json Merge pull request #2113 from kialam/upgrade-node-lts 2018-09-18 12:46:30 -04:00
README.md Merge remote-tracking branch 'tower/release_3.3.0' into devel 2018-08-10 11:54:34 -04:00
urls.py Flake8 fixes and URL updates 2017-11-10 17:04:33 -05:00
views.py Merge branch 'release_3.2.4' into release_3.3.0 2018-04-26 11:10:28 -04:00

AWX UI

Requirements

Node / NPM

AWX currently requires the 6.x LTS version of Node and NPM.

macOS installer: https://nodejs.org/dist/latest-v6.x/

RHEL / CentOS / Fedora:

$ curl --silent --location https://rpm.nodesource.com/setup_6.x | bash -
$ yum install nodejs

Other Dependencies

On macOS, install the Command Line Tools:

$ xcode-select --install

RHEL / CentOS / Fedora:

$ yum install bzip2 gcc-c++ git make

Usage

Starting the UI

First, the AWX API will need to be running. See CONTRIBUTING.md.

When using Docker for Mac or native Docker on Linux:

$ make ui-docker

If you normally run awx on an external host/server (in this example, awx.local), you'll need to reconfigure the webpack proxy slightly for make ui-docker to work:

/awx/settings/development.py
+
+CSRF_TRUSTED_ORIGINS = ['awx.local:8043']

awx/ui/build/webpack.watch.js
-        host: '127.0.0.1',
+        host: '0.0.0.0',
+        disableHostCheck: true,

/awx/ui/package.json
@@ -7,7 +7,7 @@
   "config": {
     ...
+    "django_host": "awx.local"
   },

When using Docker Machine:

$ DOCKER_MACHINE_NAME=default make ui-docker-machine

Running Tests

Run unit tests locally, poll for changes to both source and test files, launch tests in supported browser engines:

$ make ui-test

Run unit tests in a CI environment (Jenkins)

$ make ui-test-ci

Adding new dependencies

Add / update a bundled vendor dependency

  1. npm install --prefix awx/ui --save some-frontend-package@1.2.3
  2. Add 'some-package' to var vendorFiles in ./grunt-tasks/webpack.js
  3. npm --prefix awx/ui shrinkwrap to freeze current dependency resolution

Add / update a dependecy in the build/test pipeline

  1. npm install --prefix awx/ui --save-dev some-toolchain-package@1.2.3
  2. npm --prefix awx/ui shrinkwrap to freeze current dependency resolution

Polyfills, shims, patches

The Webpack pipeline will prefer module patterns in this order: CommonJS, AMD, UMD. For a comparison of supported patterns, refer to [https://webpack.github.io/docs/comparison.html](Webpack's docs).

Some javascript libraries do not export their contents as a module, or depend on other third-party components. If the library maintainer does not wrap their lib in a factory that provides a CommonJS or AMD module, you will need to provide dependencies with a shim.

  1. Shim implicit dependencies using Webpack's ProvidePlugin. Example:
// AWX source code depends on the lodash library being available as _
_.uniq([1,2,3,1]) // will throw error undefined
// webpack.config.js
plugins: [
  new webpack.ProvidePlugin({
      '_': 'lodash',
  })
]
// the following requirement is inserted by webpack at build time
var _ = require('lodash');
_.uniq([1,2,3,1])
  1. Use imports-loader to inject requirements into the namespace of vendor code at import time. Use exports-loader to conventionally export vendor code lacking a conventional export pattern.
  2. Apply a functional patch. A webpack plugin is the correct choice for a functional patch if your patch needs to access events in a build's lifecycle. A webpack loader is preferable if you need to compile and export a custom pattern of library modules.
  3. Submit patches to libraries without modular exports - the internet will thank you

Some javascript libraries might only get one module pattern right.

Environment configuration - used in development / test builds

Build tasks are parameterized with environment variables.

package.json contains default environment configuration. When npm run myScriptName is executed, these variables will be exported to your environment with the prefix npm_package_config_. For example, my_variable will be exported to npm_package_config_my_variable.

Environment variables can accessed in a Javascript via PROCESS.env.

  "config": {
    "django_port": "8013",
    "websocket_port": "8080",
    "django_host": "0.0.0.0"
  }

Example usage in npm run build-docker-machine:

$ docker-machine ssh $DOCKER_MACHINE_NAME -f -N -L ${npm_package_config_websocket_port}:localhost:${npm_package_config_websocket_port}; ip=$(docker-machine ip $DOCKER_MACHINE_NAME); echo npm set awx:django_host ${ip}; $ grunt dev

Example usage in an npm test script target:

npm_package_config_websocket_port=mock_websocket_port npm_package_config_django_port=mock_api_port npm_package_config_django_host=mock_api_host npm run test:someMockIntegration

You'll usually want to pipe and set vars prior to running a script target:

$ npm set awx:websocket_host ${mock_host}; npm run script-name

NPM Scripts

Examples:

  {
    "scripts": {
      "pretest": "echo I run immediately before 'npm test' executes",
      "posttest": "echo I run immediately after 'npm test' exits",
      "test": "karma start karma.conf.js"
    }
  }

npm test is an alias for npm run test. Refer to script field docs for a list of other runtime events.