' '\n'
+ '\n'
+ 'Like previously, I have included the `git log` output with direct '
+ 'links to commits, along with a web link to browse the history '
+ 'there.' '\n'
+ '\n'
+ '' '\n'
+ f"boot-utils ({links['boot_utils_log']})
" '\n'
+ '' '\n'
+ f"{boot_utils_links}"
+ '
' '\n'
+ ' ' '\n'
+ '\n'
+ '' '\n'
+ f"continuous-integration2 ({links['ci_log']})
" '\n'
+ '' '\n'
+ f"{ci_links}"
+ '
' '\n'
+ ' ' '\n'
+ '\n'
+ '' '\n'
+ f"tc-build ({links['tc_build_log']})
" '\n'
+ '' '\n'
+ f"{tc_build_links}"
+ '
' '\n'
+ ' ' '\n'
+ '\n'
+ '' '\n'
+ f"TuxMake ({links['tuxmake_log']})
" '\n'
+ '' '\n'
+ f"{tuxmake_links}"
+ '
' '\n'
+ ' ' '\n'
+ '\n'
+ '## Behind the scenes' '\n'
+ '\n'
+ 'There are always things that require time but do not always show '
+ 'tangible results. There are three things that I think fall under '
+ 'this category:' '\n'
+ '\n'
+ '- __Issue tracker management:__ Keeping a clean and accurate issue'
+ ' tracker is critical for few reason.' '\n'
+ ' 1. It gives a good high level overview of the "health" of the '
+ 'project. We want our issue tracker to be an accurate '
+ 'representation of how much help we need (since we always need '
+ 'it...)' '\n'
+ ' 2. It helps assign priority to certain issues. If we have a lot '
+ 'of open but resolved issues, it can be hard to decide what needs '
+ 'to be worked on next.' '\n'
+ ' 3. The issue tracker is a wonderful historical reference. We use'
+ ' the issue tracker to keep track of mailing list posts and such so'
+ ' it is important that those links are as acccurate as possible and'
+ ' have as much information as possible in case we have to look back'
+ ' five years later to wonder why we did something the way that we '
+ 'did.' '\n'
+ "- __Mailing list reading:__ We are not Cc'd on every issue related"
+ " to `clang`, even though sometimes it is the compiler's problem or"
+ ' a known difference between the toolchains that we have already '
+ 'figured out. By monitoring the mailing list for certain phrases, '
+ 'we can provide assistance without being initially notified, '
+ f"{links['testimonial']}."'\n'
+ '- __Hardware testing:__ Every linux-next release, I built and boot'
+ ' kernels on a variety of hardware to test for issues, as some '
+ 'problems only show up on bare metal or with a full distribution. '
+ 'I wrote a script to drive a full distribution QEMU on a variety of'
+ ' architectures to make some of that testing and debugging easier '
+ 'but bare metal is always an important testing target, since that '
+ 'is where the kernel will run the majority of the time.' '\n'
+ '\n'
+ '\n'
+ '## Special thanks' '\n'
+ '\n'
+ f"Special thanks to {links['google']} and {links['lf']} for "
+ f"{links['sponsor']}. I am in a very fortunate position thanks to "
+ 'the work of many great and suppportive folks at those '
+ 'organizations and I look forward to continuing to contribute under'
+ f" this umbrella for {year + 1}!" '\n'
+ '\n'
+ 'To view individual monthly reports, click on one of the links '
+ 'below:' '\n'
+ '\n'
+ + '\n'.join(report_links) + '\n'
+ )
+ # yapf: enable
+
+ report_file.write_text(template, encoding='utf-8')
+
+
def finalize_report(args):
# Get the source and destination paths and branch based on current time
repo = get_report_repo()
@@ -475,13 +801,13 @@ def new_report(args):
if not worktree.exists():
raise RuntimeError(f"{worktree} does not exist when creating report file?")
- report = get_report_path(date)
+ report = get_monthly_report_path(date)
if not report.exists():
report_date = get_initial_report_date()
commit_title = f"content/posts: ClangBuiltLinux work in {report_date.strftime('%B')} {report_date.year}"
commit_date = report_date.strftime('%a %b %d %H:%M:%S %Y %z')
- create_report_file(report, report_date)
+ create_monthly_report_file(report, report_date)
git(worktree, ['add', report])
git(worktree, ['commit', '-m', commit_title, '--date', commit_date])
@@ -493,7 +819,7 @@ def update_report(args):
# Get branch based on user's request
date = get_prev_datetime() if args.prev_month else get_current_datetime()
- if not (report := get_report_path(date)).exists():
+ if not (report := get_monthly_report_path(date)).exists():
raise RuntimeError(f"{report} does not exist when updating?")
if args.edit or args.all:
@@ -509,6 +835,19 @@ def update_report(args):
git(worktree, ['push'])
+def yearly_report(args):
+ repo = get_report_repo()
+ report = get_yearly_report_path(args.year)
+ if not report.exists():
+ report_date = get_initial_report_date()
+ commit_title = f"content/posts: {args.year} ClangBuiltLinux retrospective"
+ commit_date = report_date.strftime('%a %b %d %H:%M:%S %Y %z')
+
+ create_yearly_report_file(report, report_date, args.year)
+ git(repo, ['add', report])
+ git(repo, ['commit', '-m', commit_title, '--date', commit_date])
+
+
if __name__ == '__main__':
main_args = parse_parameters()
main_args.func(main_args)