diff options
| author | Paul Buetow <paul@buetow.org> | 2026-03-11 10:07:25 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-03-11 10:07:25 +0200 |
| commit | 8e15ae233f6b4ffcb500de4b5f46120dbf7b1478 (patch) | |
| tree | 72dee32cacf061ae1c3d1dfd64d21e0cbe508ee9 /gemfeed/create-f3-sync-taskwarrior-tasks.sh | |
| parent | 2cee88b0ae5ac5dd10270bafe0a7ff22a373ff11 (diff) | |
Update content for md
Diffstat (limited to 'gemfeed/create-f3-sync-taskwarrior-tasks.sh')
| -rwxr-xr-x | gemfeed/create-f3-sync-taskwarrior-tasks.sh | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/gemfeed/create-f3-sync-taskwarrior-tasks.sh b/gemfeed/create-f3-sync-taskwarrior-tasks.sh new file mode 100755 index 00000000..ec896f60 --- /dev/null +++ b/gemfeed/create-f3-sync-taskwarrior-tasks.sh @@ -0,0 +1,102 @@ +#!/usr/bin/env bash +set -euo pipefail + +project_name() { + basename -s .git "$(git remote get-url origin 2>/dev/null)" 2>/dev/null || \ + basename "$(git rev-parse --show-toplevel)" +} + +PROJECT="$(project_name)" +PLAN_PATH="/home/paul/git/foo.zone-content/gemtext/gemfeed/f3-sync-plan.md" +TASK_FILTER="project:${PROJECT} +agent +f3sync" +COMMON_TAGS=(project:"${PROJECT}" +agent +f3sync +ops) +AGENT_ANNOTATION="Agent: be aware of taskwarrior-task-management skill. When working on this task, also load and apply: (1) the best-practices skill for the programming language used in the project, (2) solid-principles, and (3) beyond-solid-principles. When all tests and sub-agent reviews pass, automatically progress to the next task in the list." +PLAN_ANNOTATION="Plan: ${PLAN_PATH}" +REFS_ANNOTATION="Refs: ${PLAN_PATH}; 2024-12-03-f3s-kubernetes-with-freebsd-part-2.gmi.tpl; 2025-02-01-f3s-kubernetes-with-freebsd-part-3.gmi.tpl; 2025-04-05-f3s-kubernetes-with-freebsd-part-4.gmi.tpl; 2025-05-11-f3s-kubernetes-with-freebsd-part-5.gmi.tpl; 2025-07-14-f3s-kubernetes-with-freebsd-part-6.gmi.tpl; 2025-10-02-f3s-kubernetes-with-freebsd-part-7.gmi.tpl; 2025-12-07-f3s-kubernetes-with-freebsd-part-8.gmi.tpl" + +if ! command -v task >/dev/null 2>&1; then + echo "task command not found" >&2 + exit 1 +fi + +if ! command -v git >/dev/null 2>&1; then + echo "git command not found" >&2 + exit 1 +fi + +if [[ ! -f "${PLAN_PATH}" ]]; then + echo "plan file not found: ${PLAN_PATH}" >&2 + exit 1 +fi + +existing_count="$(task ${TASK_FILTER} count 2>/dev/null | tr -dc '0-9')" +if [[ -n "${existing_count}" && "${existing_count}" != "0" && "${FORCE:-0}" != "1" ]]; then + echo "Existing f3 sync tasks already present for project ${PROJECT}." >&2 + echo "Filter: ${TASK_FILTER}" >&2 + echo "Re-run with FORCE=1 to create another set." >&2 + exit 1 +fi + +extract_id() { + sed -n 's/Created task \([0-9][0-9]*\).*/\1/p' +} + +add_task() { + local description="$1" + local depends_arg="${2:-}" + local output + local id + + if [[ -n "${depends_arg}" ]]; then + output="$(task "${COMMON_TAGS[@]}" add "${description}" "depends:${depends_arg}")" + else + output="$(task "${COMMON_TAGS[@]}" add "${description}")" + fi + + id="$(printf '%s\n' "${output}" | extract_id)" + if [[ -z "${id}" ]]; then + echo "failed to parse task id from output:" >&2 + printf '%s\n' "${output}" >&2 + exit 1 + fi + + task project:"${PROJECT}" +agent "${id}" annotate "${AGENT_ANNOTATION}" >/dev/null + task project:"${PROJECT}" +agent "${id}" annotate "${PLAN_ANNOTATION}" >/dev/null + task project:"${PROJECT}" +agent "${id}" annotate "${REFS_ANNOTATION}" >/dev/null + task project:"${PROJECT}" +agent "${id}" annotate "UUID: $(task project:"${PROJECT}" +agent "${id}" _uuid)" >/dev/null + + printf '%s\n' "${id}" +} + +echo "Creating Taskwarrior tasks for project ${PROJECT}" +echo "Using plan ${PLAN_PATH}" + +id1="$(add_task "f3 sync: install FreeBSD on f3 and obtain initial access" "")" +id2="$(add_task "f3 sync: convert f3 from DHCP to static LAN networking in rc.conf" "${id1}")" +id3="$(add_task "f3 sync: apply the common FreeBSD baseline on f3" "${id2}")" +id4="$(add_task "f3 sync: update /etc/hosts on FreeBSD, Rocky, OpenBSD, and admin systems for f3" "${id3}")" +id5="$(add_task "f3 sync: configure apcupsd on f3 like f2 using f0 as UPS master" "${id4}")" +id6="$(add_task "f3 sync: add f3 to the WireGuard mesh and assign 192.168.2.133 and fd42:beef:cafe:2::133" "${id4},${id5}")" +id7="$(add_task "f3 sync: mirror the real local storage layout of f2 on f3 without introducing zrepl" "${id6}")" +id8="$(add_task "f3 sync: configure vm-bhyve and the optional host-local Rocky VM on f3 if f2 has it" "${id3},${id6},${id7}")" +id9="$(add_task "f3 sync: install node_exporter on f3 and add Prometheus scrape config" "${id6}")" +id10="$(add_task "f3 sync: mirror required local FreeBSD service users from f2 onto f3" "${id3},${id7}")" +id11="$(add_task "f3 sync: run final end-to-end validation for f3 rollout" "${id2},${id3},${id4},${id5},${id6},${id7},${id8},${id9},${id10}")" + +cat <<EOF +Created tasks: + ${id1} install FreeBSD on f3 and obtain initial access + ${id2} convert f3 from DHCP to static LAN networking in rc.conf + ${id3} apply the common FreeBSD baseline on f3 + ${id4} update /etc/hosts on all involved systems + ${id5} configure apcupsd on f3 + ${id6} add f3 to the WireGuard mesh + ${id7} mirror the real local storage layout of f2 on f3 + ${id8} configure vm-bhyve and optional host-local Rocky VM on f3 + ${id9} install node_exporter on f3 and update Prometheus + ${id10} mirror required local FreeBSD service users onto f3 + ${id11} final end-to-end validation + +List them with: + task ${TASK_FILTER} list +EOF |
