#!/usr/bin/env python3 import pathlib import subprocess RELEASE_FILE = "RELEASE.md" QA_FILE = "QA.md" def git_root(): """Get the root directory of the Git repo.""" # FIXME: Use a Git Python binding for this. # FIXME: Make this work if called outside the repo. path = subprocess.run( ["git", "rev-parse", "--show-toplevel"], check=True, stdout=subprocess.PIPE, ).stdout.decode().strip("\n") return pathlib.Path(path) def extract_checkboxes(filename): headers = [] result = [] with open(filename, 'r') as f: lines = f.readlines() current_level = 0 for line in lines: line = line.rstrip() # If it's a header, store it if line.startswith('#'): # Count number of # to determine header level level = len(line) - len(line.lstrip('#')) if level < current_level or not current_level: headers.extend(['', line, '']) current_level = level elif level > current_level: continue else: headers = ['', line, ''] # If it's a checkbox elif '- [ ]' in line or '- [x]' in line or '- [X]' in line: # Print the last header if we haven't already if headers: result.extend(headers) headers = [] current_level = 0 # If this is the "Do the QA tasks" line, recursively get QA tasks if "Do the QA tasks" in line: result.append(line) qa_tasks = extract_checkboxes(git_root() / QA_FILE) result.append(qa_tasks) else: result.append(line) return '\n'.join(result) if __name__ == '__main__': print(extract_checkboxes(git_root() / RELEASE_FILE))