From 1400a396aeb14bf1460e9b50189eb9df91ae6b57 Mon Sep 17 00:00:00 2001 From: pyr0ball Date: Sun, 15 Mar 2026 15:39:45 -0700 Subject: [PATCH 1/6] ci: trigger runner From fd02c11441cea2b0b5cff44379f37a279cf4693b Mon Sep 17 00:00:00 2001 From: pyr0ball Date: Sun, 15 Mar 2026 15:48:35 -0700 Subject: [PATCH 2/6] ci: enable forgejo actions From 722661058a2060dfbcbfe140b12f53f5f46fb620 Mon Sep 17 00:00:00 2001 From: pyr0ball Date: Sun, 15 Mar 2026 15:54:27 -0700 Subject: [PATCH 3/6] ci: re-trigger after actions enabled From 5527fe9bf814da4b4bd8b5abb1f47071d6d922a9 Mon Sep 17 00:00:00 2001 From: pyr0ball Date: Sun, 15 Mar 2026 16:36:50 -0700 Subject: [PATCH 4/6] ci: install libsqlcipher-dev before pip install --- .github/workflows/ci.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ef6c962..f92a189 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,6 +13,9 @@ jobs: steps: - uses: actions/checkout@v4 + - name: Install system dependencies + run: sudo apt-get install -y libsqlcipher-dev + - name: Set up Python uses: actions/setup-python@v5 with: From 062f249ef9aa63b4d6ac90c8275ab670c995c2fa Mon Sep 17 00:00:00 2001 From: pyr0ball Date: Sun, 15 Mar 2026 16:37:46 -0700 Subject: [PATCH 5/6] ci: apt-get update before installing libsqlcipher-dev --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f92a189..f956e6c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,7 +14,7 @@ jobs: - uses: actions/checkout@v4 - name: Install system dependencies - run: sudo apt-get install -y libsqlcipher-dev + run: sudo apt-get update -q && sudo apt-get install -y libsqlcipher-dev - name: Set up Python uses: actions/setup-python@v5 From 922ede925834e4bc44f029102015f0517ce06b6c Mon Sep 17 00:00:00 2001 From: pyr0ball Date: Sun, 15 Mar 2026 16:43:27 -0700 Subject: [PATCH 6/6] fix: _trim_to_letter_end matches full name when no profile set When _profile is None the fallback pattern \w+ only matched the first word of a two-word sign-off (e.g. 'Alex' from 'Alex Rivera'), silently dropping the last name. Switch fallback to \w+(?:\s+\w+)? so a full first+last sign-off is preserved in no-config environments (CI, first run). --- scripts/generate_cover_letter.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/generate_cover_letter.py b/scripts/generate_cover_letter.py index 6fe018a..0e965bf 100644 --- a/scripts/generate_cover_letter.py +++ b/scripts/generate_cover_letter.py @@ -221,7 +221,7 @@ def _trim_to_letter_end(text: str) -> str: candidate_first = (_profile.name.split()[0] if _profile else "").strip() pattern = ( r'(?:Warm regards|Sincerely|Best regards|Kind regards|Thank you)[,.]?\s*\n+\s*' - + (re.escape(candidate_first) if candidate_first else r'\w+') + + (re.escape(candidate_first) if candidate_first else r'\w+(?:\s+\w+)?') + r'\b' ) m = re.search(pattern, text, re.IGNORECASE)