2015-10-26 17:11:44 +01:00
|
|
|
#!/usr/bin/env python
|
|
|
|
from __future__ import absolute_import
|
|
|
|
|
2016-08-29 01:02:03 +02:00
|
|
|
import argparse
|
2015-10-26 17:11:44 +01:00
|
|
|
import os
|
|
|
|
import subprocess
|
|
|
|
import sys
|
2017-05-25 20:12:33 +02:00
|
|
|
import json
|
2015-10-26 17:11:44 +01:00
|
|
|
|
2017-02-05 21:24:28 +01:00
|
|
|
# check for the venv
|
|
|
|
from lib import sanity_check
|
|
|
|
sanity_check.check_venv(__file__)
|
|
|
|
|
2015-10-26 17:11:44 +01:00
|
|
|
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))
|
|
|
|
os.environ['DJANGO_SETTINGS_MODULE'] = 'zproject.settings'
|
|
|
|
from django.conf import settings
|
|
|
|
|
|
|
|
os.chdir(settings.DEPLOY_ROOT)
|
|
|
|
STATIC_PATH = 'static/'
|
|
|
|
|
2017-05-25 20:12:33 +02:00
|
|
|
|
2015-10-26 17:11:44 +01:00
|
|
|
def run():
|
2016-10-16 07:27:55 +02:00
|
|
|
# type: () -> None
|
|
|
|
"""Builds for production, writing the output to disk"""
|
2016-11-25 09:08:38 +01:00
|
|
|
subprocess.check_call(['node', 'node_modules/.bin/webpack'] +
|
2017-05-24 00:03:53 +02:00
|
|
|
['--config', 'tools/webpack.production.config.js', '-p'])
|
2015-10-26 17:11:44 +01:00
|
|
|
|
2016-04-13 04:19:56 +02:00
|
|
|
def run_watch(port):
|
2016-10-16 07:27:55 +02:00
|
|
|
# type: (str) -> None
|
|
|
|
"""watches and rebuilds on changes, serving files from memory via webpack-dev-server"""
|
2016-11-25 09:08:38 +01:00
|
|
|
subprocess.Popen(['node', 'node_modules/.bin/webpack-dev-server'] +
|
2017-05-23 21:51:04 +02:00
|
|
|
['--config', 'tools/webpack.dev.config.js', '--watch-poll', '--port', port])
|
2015-10-26 17:11:44 +01:00
|
|
|
|
2017-05-25 20:12:33 +02:00
|
|
|
def run_test():
|
|
|
|
# type: () -> None
|
|
|
|
"""Generates a stub asset stat file for django so backend test can render a page"""
|
|
|
|
entries = {}
|
|
|
|
with open('tools/webpack.assets.json') as json_data:
|
|
|
|
for entry in json.load(json_data).keys():
|
|
|
|
entries[entry] = [{
|
|
|
|
"name": "%s.js" % (entry,),
|
|
|
|
"publicPath": "http://localhost:3000/webpack-stub/%s-stubentry.js" % (entry,),
|
|
|
|
"path": "/stubfolder/%s-stubfile.js" % (entry,)
|
|
|
|
}]
|
|
|
|
stat_data = {
|
|
|
|
"status": "done",
|
|
|
|
"chunks": entries
|
|
|
|
}
|
|
|
|
directory = os.path.join(STATIC_PATH, 'webpack-bundles')
|
|
|
|
if not os.path.exists(directory):
|
|
|
|
os.makedirs(directory)
|
|
|
|
with open(os.path.join(directory, 'webpack-stats-test.json'), 'w') as outfile:
|
|
|
|
json.dump(stat_data, outfile)
|
|
|
|
|
|
|
|
|
2016-08-29 01:02:03 +02:00
|
|
|
parser = argparse.ArgumentParser()
|
2017-05-25 20:12:33 +02:00
|
|
|
parser.add_argument('--test',
|
|
|
|
action='store_true', dest='test', default=False,
|
|
|
|
help='generate a stub webpack-stats.json file (for backend testing)')
|
2016-08-29 01:02:03 +02:00
|
|
|
parser.add_argument('--watch',
|
2016-12-11 14:30:45 +01:00
|
|
|
action='store_true', dest='watch', default=False,
|
|
|
|
help='watch for changes to source files (for development)')
|
2016-08-29 01:02:03 +02:00
|
|
|
parser.add_argument('--port',
|
2016-12-11 14:30:45 +01:00
|
|
|
action='store', dest='port',
|
|
|
|
default='9994', help='set the port for the webpack server to run on')
|
2016-04-13 04:19:56 +02:00
|
|
|
|
2017-05-25 20:12:33 +02:00
|
|
|
args = parser.parse_args()
|
|
|
|
if args.test:
|
|
|
|
run_test()
|
|
|
|
elif args.watch:
|
2016-08-29 01:02:03 +02:00
|
|
|
run_watch(args.port)
|
2016-04-13 04:19:56 +02:00
|
|
|
else:
|
|
|
|
run()
|