|  | BASE = get_base_path() | 
|  | CORE = [ | 
|  | 'commit-message-length-validator', | 
|  | 'download-commands', | 
|  | 'replication', | 
|  | 'reviewnotes', | 
|  | 'singleusergroup' | 
|  | ] | 
|  | CUSTOM = [ | 
|  | # Add custom core plugins here | 
|  | ] | 
|  |  | 
|  | # buck audit parses and resolves all deps even if not reachable | 
|  | # from the root(s) passed to audit. Filter dependencies to only | 
|  | # the ones that currently exist to allow buck to parse cleanly. | 
|  | # TODO(sop): buck should more lazily resolve deps | 
|  | def core_plugins(names): | 
|  | from os import path | 
|  | h, n = [], [] | 
|  | for p in names: | 
|  | if path.exists(path.join(BASE, p, 'BUCK')): | 
|  | h.append(p) | 
|  | else: | 
|  | n.append(p) | 
|  | return h, n | 
|  | HAVE, NEED = core_plugins(CORE + CUSTOM) | 
|  |  | 
|  | genrule( | 
|  | name = 'core', | 
|  | cmd = '' + | 
|  | ';'.join(['echo >&2 plugins/'+n+' is required.' for n in NEED]) + | 
|  | (';echo >&2;exit 1;' if NEED else '') + | 
|  | 'mkdir -p $TMP/WEB-INF/plugins;' + | 
|  | 'for s in ' + | 
|  | ' '.join(['$(location //%s/%s:%s)' % (BASE, n, n) for n in HAVE]) + | 
|  | ';do ln -s $s $TMP/WEB-INF/plugins;done;' + | 
|  | 'cd $TMP;' + | 
|  | 'zip -qr $OUT .', | 
|  | out = 'core.zip', | 
|  | visibility = ['//:release'], | 
|  | ) |