diff --git a/detection_rules/packaging.py b/detection_rules/packaging.py index 9b565555494..064f1b66439 100644 --- a/detection_rules/packaging.py +++ b/detection_rules/packaging.py @@ -19,6 +19,7 @@ RELEASE_DIR = get_path("releases") PACKAGE_FILE = get_etc_path('packages.yml') RULE_VERSIONS = get_etc_path('version.lock.json') +NOTICE_FILE = get_path('NOTICE.txt') def filter_rule(rule, config_filter): # type: (Rule,dict) -> bool # rule.contents (not api), filter_dict -> match @@ -122,12 +123,20 @@ def _add_versions(self, current_versions, update_versions_lock=False): """Add versions to rules at load time.""" return manage_versions(self.rules, current_versions=current_versions, save_changes=update_versions_lock) + @staticmethod + def _package_notice_file(save_dir): + """Convert and save notice file with package.""" + with open(NOTICE_FILE, 'rt') as f: + notice_txt = f.read() + + with open(os.path.join(save_dir, 'notice.ts'), 'w') as f: + commented_notice = [' * ' + line for line in notice_txt.splitlines()] + lines = ['/* eslint-disable @kbn/eslint/require-license-header */', '', '/* @notice'] + lines = lines + commented_notice + [' */', ''] + f.write('\n'.join(lines)) + def save_release_files(self, directory, changed_rules, new_rules): """Release a package.""" - # TODO: - # xslx of mitre coverage - # release notes - with open(os.path.join(directory, '{}-summary.txt'.format(self.name)), 'w') as f: f.write(self.generate_summary(changed_rules, new_rules)) with open(os.path.join(directory, '{}-consolidated.json'.format(self.name)), 'w') as f: @@ -155,6 +164,8 @@ def save(self, verbose=True): for rule in self.rules: rule.save(new_path=os.path.join(rules_dir, os.path.basename(rule.path))) + self._package_notice_file(rules_dir) + if self.release: self.save_release_files(extras_dir, self.changed_rules, self.new_rules) @@ -228,9 +239,6 @@ def generate_summary(self, changed_rules, new_rules): modified_rules = 'Modified Rules: \n{}'.format('\n'.join(' - ' + s for s in sorted(changed)) if new else 'N/A') return '\n'.join([total, sha256, ecs_versions, indices, new_rules, modified_rules]) - def generate_change_notes(self): - """Generate change release notes.""" - def bump_versions(self, save_changes=False, current_versions=None): """Bump the versions of all production rules included in a release and optionally save changes.""" return manage_versions(self.rules, current_versions=current_versions, save_changes=save_changes)