Test Plan: buck targets --show_output polygerrit-ui/app:gr-app | \ cut -d " " -f 2 produces: buck-out/gen/polygerrit-ui/app/gr-app/gr-app.vulcanized.zip instead of: buck-out/gen/polygerrit-ui/app/gr-app/%s.vulcanized.zip Change-Id: I66d8a5d20434ae1f8911deac675afdd88a92224d
		
			
				
	
	
		
			170 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			170 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
# Copyright (C) 2015 The Android Open Source Project
 | 
						|
#
 | 
						|
# Licensed under the Apache License, Version 2.0 (the "License");
 | 
						|
# you may not use this file except in compliance with the License.
 | 
						|
# You may obtain a copy of the License at
 | 
						|
#
 | 
						|
# http://www.apache.org/licenses/LICENSE-2.0
 | 
						|
#
 | 
						|
# Unless required by applicable law or agreed to in writing, software
 | 
						|
# distributed under the License is distributed on an "AS IS" BASIS,
 | 
						|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
						|
# See the License for the specific language governing permissions and
 | 
						|
# limitations under the License.
 | 
						|
 | 
						|
NPMJS = 'NPMJS'
 | 
						|
GERRIT = 'GERRIT'
 | 
						|
 | 
						|
# NOTE: npm_binary rules do not get their licenses checked by gen_licenses.py,
 | 
						|
# as we would have to cut too many edges. DO NOT include these binaries in
 | 
						|
# build outputs. Using them in the build _process_ is ok.
 | 
						|
def npm_binary(
 | 
						|
    name,
 | 
						|
    version,
 | 
						|
    sha1 = '',
 | 
						|
    repository = NPMJS,
 | 
						|
    visibility = ['PUBLIC']):
 | 
						|
 | 
						|
  dir = '%s-%s' % (name, version)
 | 
						|
  filename = '%s.tgz' % dir
 | 
						|
  dest = '%s@%s.npm_binary.tgz' % (name, version)
 | 
						|
  if repository == GERRIT:
 | 
						|
    url = 'http://gerrit-maven.storage.googleapis.com/npm-packages/%s' % filename
 | 
						|
  elif repository == NPMJS:
 | 
						|
    url = 'http://registry.npmjs.org/%s/-/%s' % (name, filename)
 | 
						|
  else:
 | 
						|
    raise ValueError('invalid repository: %s' % repository)
 | 
						|
  cmd = ['$(exe //tools:download_file)', '-o', '$OUT', '-u', url]
 | 
						|
  if sha1:
 | 
						|
    cmd.extend(['-v', sha1])
 | 
						|
  genrule(
 | 
						|
    name = name,
 | 
						|
    cmd = ' '.join(cmd),
 | 
						|
    out = dest,
 | 
						|
    visibility = visibility,
 | 
						|
  )
 | 
						|
 | 
						|
 | 
						|
def run_npm_binary(target):
 | 
						|
  return '$(location //tools/js:run_npm_binary) $(location %s)' % target
 | 
						|
 | 
						|
 | 
						|
def bower_component(
 | 
						|
    name,
 | 
						|
    package,
 | 
						|
    version,
 | 
						|
    license,
 | 
						|
    deps = [],
 | 
						|
    semver = None,
 | 
						|
    sha1 = '',
 | 
						|
    visibility = ['PUBLIC']):
 | 
						|
  download_name = '%s__download_bower' % name
 | 
						|
  genrule(
 | 
						|
    name = download_name,
 | 
						|
    cmd = ' '.join([
 | 
						|
      '$(exe //tools/js:download_bower)',
 | 
						|
      '-b', '"%s"' % run_npm_binary('//lib/js:bower'),
 | 
						|
      '-n', name,
 | 
						|
      '-p', package,
 | 
						|
      '-v', version,
 | 
						|
      '-s', sha1,
 | 
						|
      '-o', '$OUT',
 | 
						|
    ]),
 | 
						|
    out = '%s.zip' % download_name,
 | 
						|
    license = license,
 | 
						|
    visibility = [],
 | 
						|
  )
 | 
						|
 | 
						|
  renamed_name = '%s__renamed' % name
 | 
						|
  genrule(
 | 
						|
    name = renamed_name,
 | 
						|
    cmd = ' && '.join([
 | 
						|
      'cd $TMP',
 | 
						|
      'mkdir bower_components',
 | 
						|
      'cd bower_components',
 | 
						|
      'unzip $(location :%s)' % download_name,
 | 
						|
      'cd ..',
 | 
						|
      'zip -r $OUT bower_components',
 | 
						|
    ]),
 | 
						|
    out = '%s.zip' % renamed_name,
 | 
						|
    visibility = [],
 | 
						|
  )
 | 
						|
 | 
						|
  genrule(
 | 
						|
    name = name,
 | 
						|
    cmd = _combine_components([':%s' % renamed_name] + deps),
 | 
						|
    out = '%s-%s.zip' % (name, version),
 | 
						|
    visibility = visibility,
 | 
						|
  )
 | 
						|
 | 
						|
  version_name = '%s__bower_version' % name
 | 
						|
  dep_version = semver if semver is not None else version
 | 
						|
  deps_json = '{"%s": "%s#%s"}' % (name, package, dep_version)
 | 
						|
  genrule(
 | 
						|
    name = version_name,
 | 
						|
    cmd = "echo '%s' > $OUT" % deps_json,
 | 
						|
    out = version_name,
 | 
						|
    visibility = visibility,
 | 
						|
  )
 | 
						|
 | 
						|
 | 
						|
def bower_components(
 | 
						|
    name,
 | 
						|
    deps,
 | 
						|
    visibility = ['PUBLIC']):
 | 
						|
  genrule(
 | 
						|
    name = name,
 | 
						|
    cmd = _combine_components(deps),
 | 
						|
    out = '%s.bower_components.zip' % name,
 | 
						|
    visibility = visibility,
 | 
						|
  )
 | 
						|
 | 
						|
 | 
						|
def _combine_components(deps):
 | 
						|
  cmds = ['cd $TMP']
 | 
						|
  for d in deps:
 | 
						|
    cmds.append('unzip -qo $(location %s)' % d)
 | 
						|
  cmds.append('zip -r $OUT bower_components')
 | 
						|
  return ' && '.join(cmds)
 | 
						|
 | 
						|
 | 
						|
VULCANIZE_FLAGS = [
 | 
						|
  '--inline-scripts',
 | 
						|
  '--inline-css',
 | 
						|
  '--strip-comments',
 | 
						|
]
 | 
						|
 | 
						|
def vulcanize(
 | 
						|
    name,
 | 
						|
    app,
 | 
						|
    srcs,
 | 
						|
    components,
 | 
						|
    extra_flags = [],
 | 
						|
    visibility = ['PUBLIC']):
 | 
						|
  genrule(
 | 
						|
    name = '%s__vulcanized' % name,
 | 
						|
    cmd = ' '.join([
 | 
						|
      'unzip', '-qd', '$SRCDIR', '$(location %s)' % components,
 | 
						|
      '&&', run_npm_binary('//lib/js:vulcanize')
 | 
						|
    ] + VULCANIZE_FLAGS + extra_flags + [
 | 
						|
      '--out-html', '$OUT',
 | 
						|
      '$SRCDIR/%s' % app,
 | 
						|
    ]),
 | 
						|
    srcs = srcs,
 | 
						|
    out = '%s.vulcanized.html' % name,
 | 
						|
    visibility = visibility,
 | 
						|
  )
 | 
						|
 | 
						|
  genrule(
 | 
						|
    name = name,
 | 
						|
    cmd = ' '.join([
 | 
						|
      'cd', '$TMP',
 | 
						|
      '&&', run_npm_binary('//lib/js:crisper'), '--always-write-script',
 | 
						|
      '--source', '$(location :%s__vulcanized)' % name,
 | 
						|
      '--html', '%s.html' % name,
 | 
						|
      '--js', '%s.js' % name,
 | 
						|
      '&&', 'zip', '$OUT', '%s.html' % name, '%s.js' % name,
 | 
						|
    ]),
 | 
						|
    out = '%s.vulcanized.zip' % name,
 | 
						|
  )
 |