Commit Graph
24 Commits
Author SHA1 Message Date
Michael ClarkGitHubautofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>github-actions[bot] <github-actions[bot]@users.noreply.github.com>
355206128c 🆕 News feed feature (#8802)
* whats new experimental feature

* pointing preview builds at preview docs and fixing some niggles

* notification bell and fixing some bits

* moving the number down a bit

* update release notification

* optional feature flag so users can turn it off if they dont want it

* cleanup

* add discord link to page for more news

* feedback

* feedback

* filter all posts by a tag to ensure only the ones we tag are announcement

* feed should be served from github instead of docusaurus

* remove advertising rules in discord cause they're not app related

* [autofix.ci] apply automated fixes

* release pipeline update so the news is updated in the release pr

* fail instead of skip

* fix edge case where slugs are bad or no date

* remove experimental

* notifications intead of whats new

* adding hr styling

* docs

* Update VRT screenshots

Auto-generated by VRT workflow

PR: #8802

* Add in_app_notification flag to release blog post

* [autofix.ci] apply automated fixes

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-09-06 18:54:35 +00:00
Matt FiddamanandGitHub 62a18ba770 fix release automation with branch protection (#8842)
* open PRs instead of pushing

* use release notes on the release branch only
2026-09-01 21:44:31 +00:00
501bece3a1 [AI] migrations: enforce append-only migration files in CI (#8446)
* [AI] Enforce append-only migration files in CI

Shipped migrations are append-only: existing installs never re-run
them, so editing one silently forks the database schema across the user
base, and deleting one breaks the migration check for every existing
budget file. The CI migration check now diffs blob hashes against the
merge base to reject edits/deletions, keeps the existing
timestamp-ordering rule, emits advisory PR annotations for migrations
containing DROP/RENAME statements, and fails loudly when git commands
fail instead of passing on empty output.

First of a series that makes clients on different app versions sync
safely against the same budget file.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* [AI] Derive the newest upstream migration id with an explicit max

The ls-tree listing is alphabetical, so taking the last entry only
worked while every migration id has the same digit count.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* [AI] Post advisory migration warnings as a PR comment

The risky-SQL warnings were only visible as job annotations, and since
the job passes there was no prompt to look at them. The migrations job
now uploads its findings as an artifact, and a new workflow_run workflow
(trusted base-repo context, so it also works for fork PRs whose tokens
are read-only) validates the artifact against a fixed allowlist and
posts/updates a PR comment — removing it again once the warnings are
resolved.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* [AI] Align overview numbering with the inline check comments

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 06:08:46 +00:00
Matt FiddamanGitHubClaude Opus 4.8coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
b1d713ac55 [AI] resolve release-note PR links from base branch history (#8368)
* [AI] Resolve release-note PR links from base branch history

The release-note generator recovered each note's PR number by reading the
"(#NNNN)" suffix that GitHub appends to squash-merge commit subjects, searching
HEAD — the release-notes/X.Y.Z branch it commits to. That branch only carries
the note file *contents* (checked out from origin/release), not the commit
history, so any note added to the release branch after it was cut (e.g. release
cherry-picks) has no add-commit reachable from HEAD and silently loses its link.

Search origin/master instead, where every note traces back to its original
squash commit with the correct PR number. The release branch is unsuitable
because "bring release branch up to date" squashes collapse original PRs.

Verified across all 63 descriptively-named notes in the 26.7.0 set: 60 resolve
identically to before, 3 previously-unlinked cherry-picks (#8301, #8335, #8339)
are now linked, 0 regressions.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* make the note human

* Update upcoming-release-notes/release-notes-resolve-pr-link-from-master.md

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2026-07-01 17:42:41 +00:00
Matiss Janis AboltinsGitHubClaudegithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
ab35bd633b [AI] Remove AI-generated release notes workflow and support custom filenames (#7963)
* [AI] Relax release-notes filename convention

Allow descriptive filenames (e.g. add-payee-autocomplete.md) for
upcoming release notes instead of requiring {PR_NUMBER}.md.

The PR number was only used to build the [#1234](.../pull/1234) link in
the generated changelog. The generation script now resolves the PR per
file by finding the commit that added it (git log --diff-filter=A
--follow) and querying GitHub's commits/{sha}/pulls endpoint. Numeric
filenames remain valid via a fast path.

Also retires the CodeRabbit/OpenAI-triggered auto-creator workflow,
which existed to guess summaries and stamp the PR-numbered filename;
neither is needed once contributors can pick a slug up front.

* Add release notes for PR #7963

* [AI] Use execFile to look up release-note add-commits

resolvePrNumber() interpolated a path from fs.readdir into a shell-
evaluated `git log` command. Switch to execFile with an argv array so
filenames containing shell metacharacters can't break out of the
intended command.

* [AI] Drop duplicate release note added by the to-be-removed auto-creator

The CodeRabbit-triggered workflow ran one last time from master before
this PR removes it, and committed upcoming-release-notes/7963.md
duplicating the existing relax-release-notes-filenames.md entry. Keep
the slug-named note since it exercises the new flexible-filename code
introduced in this PR.

* [AI] Don't fail release-notes generation on transient API errors

fetchPrForCommit() handled non-OK HTTP responses but let fetch() and
res.json() exceptions propagate, so a single network blip or malformed
response would abort the whole release-notes generation. Wrap them in a
try/catch that logs and returns null, matching the pattern already used
in resolvePrNumber for execFile errors.

* [AI] Address CodeRabbit full-review nits

- bin/release-note-generator.ts: tighten slug regex to reject trailing
  and consecutive dashes (matching slugify output), and make slugify
  fall back to "untitled" so an all-non-alphanumeric input can't
  produce a hidden ".md" filename.
- packages/ci-actions/bin/release-notes-check.mjs: switch to execFile
  for git fetch/diff, matching release-notes-generate.mjs and removing
  shell interpolation of BASE_REF.
- packages/ci-actions/bin/release-notes-generate.mjs: explicitly check
  GITHUB_REPOSITORY before splitting, consistent with the other env
  var guards a few lines below.
- upcoming-release-notes/relax-release-notes-filenames.md: fix author
  casing (matiss -> MatissJanis) so changelog attribution is correct.

* [AI] Reject empty release-note bodies

content.trim().split('\n').length === 1 is true for the empty string
(''.split('\n') returns [''] of length 1), so blank notes slipped past
the single-line check. Reject empty trimmed content explicitly.

* [AI] Resolve PR numbers from commit subjects instead of GitHub's API

parseReleaseNotes was doing one GitHub API round-trip per non-numeric
release-note file. That scales badly for release generation, and the
docs site's generate-upcoming-release-notes.mjs runs on every docs
build — so contributors were hitting the GitHub API (or failing 401
without a token) every time they previewed docs locally.

actualbudget squash-merges every PR through the GitHub UI, which
appends "(#NNNN)" to the resulting commit subject. So:

  git log -1 --format=%s -- <path>

plus a /\(#(\d+)\)\s*$/ match recovers the PR number without touching
the network, and works offline / without a GITHUB_TOKEN.

Side effect: switched from "first commit that added this file" to
"most recent commit touching this file", which is what we actually
want — when a file is renamed (e.g. 7907.md -> 7954.md when a wrong
PR number is corrected), the changelog should point at the rename PR,
not the original add. The SHA->PR cache and fetchPrForCommit go away;
no longer needed.

If a file's subject doesn't match (direct push to master, manually
rewritten subject), the entry still emits without a PR-link prefix —
same graceful degradation as before.

* [AI] Pin PR-number lookup to each note's add commit

resolvePrNumber was using git log -1 with no diff filter, returning
the latest commit that touched the file. That's fine until someone
edits an existing release note in a follow-up PR (typo fix, author
correction) — at which point the changelog entry would suddenly
point at the wrong PR.

Add --diff-filter=A so the lookup pins to the commit that originally
added the path. Empirically verified against this repo: renames keep
working (git records a rename as A at the new path when --follow
isn't used), and the edit case now correctly returns the original
add commit instead of the most recent touch.

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-06-04 21:01:19 +00:00
Matiss Janis AboltinsGitHubClaudegithub-actions[bot] <github-actions[bot]@users.noreply.github.com>Cursor AgentMatiss Janis AboltinsMatt Fiddaman
75dd9f674a [AI] Add auto-generated Upcoming Release docs page (#8065)
* [AI] Add auto-generated Upcoming Release docs page

Adds a docs page that always reflects the current contents of the
repo-root upcoming-release-notes/ directory — the changes that have been
merged but not yet published in a stable release (i.e. what ships in the
nightly/edge builds).

- Extract parseReleaseNotes/formatNotes from the release-notes generator
  into the shared ci-actions util so both the release generator and the
  docs build reuse the same formatting.
- Add a docs build script that regenerates docs/upcoming-release-notes.md
  on every start/build, with an intro explaining the notes are unreleased
  and how to try them, plus the categorized notes list.
- Wire the generator into the docs start/build scripts, add a sidebar
  entry next to Release Notes, and gitignore the generated page.

https://claude.ai/code/session_01MuY9Phome8uJKH51HbrsQw

* [AI] Simplify upcoming-release-notes generator

- Declare @actual-app/ci-actions as a workspace dependency and import the
  shared util by package name instead of a relative cross-package path, so
  the dependency is registered in the workspace graph.
- Resolve the repo root once via new URL() and drop the dirname import.
- Use a ternary for the page body instead of let + if/else.

https://claude.ai/code/session_01MuY9Phome8uJKH51HbrsQw

* Add release notes for PR #8065

* [AI] Remove edge references, keep only nightly in docs

Co-authored-by: Matiss Janis Aboltins <MatissJanis@users.noreply.github.com>

* Update packages/docs/scripts/generate-upcoming-release-notes.mjs

Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Matiss Janis Aboltins <MatissJanis@users.noreply.github.com>
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
2026-06-03 20:45:11 +00:00
Matt FiddamanandGitHub ecfe43fdda split release into two branches (#7844)
* split release into two branches

* update docs to match the new process

* note

* zizmor comment

* Update check-spelling metadata

* use single long lived release branch

* coderabbit

* jfdoming suggestions
2026-05-19 12:47:08 +00:00
Matt FiddamanandGitHub c2987af64f fix lint (#7643) 2026-04-27 21:24:16 +00:00
Matt FiddamanandGitHub c7d39961cf fix cherrypicked commits not being respected and lint race in release note generation workflow (#7640)
* fix cherrypicked commits not being respected and lint race

* note

* coderabbit suggestions

* fix lint

* make double restore possibility safe
2026-04-27 20:52:07 +00:00
Matt FiddamanandGitHub a42b7c5777 fix release note generation script (#7635)
* fix release note generation script

* note
2026-04-27 19:32:24 +00:00
db72948d7c change release process to use a branch and add automation (#7418)
* release automation

* note

* harden tokens for release notes workflow

* fix yarn install on release notes check

* amend release docs

* address coderabbit

* change back to auto version resolution

* more coderabbit

* clarify a poorly worded comment

* drop cherry pick workflows

* fix docker tag

* coderabbit

* drop `v` from release branch name

Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>

* simplify release note workflows

---------

Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
2026-04-12 22:17:14 +00:00
Matt FiddamanandGitHub 5009f01218 generate docs from release notes directly (#7408)
* move workflows to use the local actions

* generate docs from release notes directly

* note

* fix create PR workflow from SHA
2026-04-07 21:00:32 +00:00
Matt FiddamanandGitHub d42f6c7437 improve release notes actions (#7407)
* consolidate find-comment, post-comment into single action

* use release notes in current branch for both generation and deletion

* note
2026-04-07 17:16:14 +00:00
Matt FiddamanandGitHub bb7d7275a6 migrate actualbudget/actions to the main repo (#7406)
* migrate release note actions

* move workflows to use the local actions

* note

* fix failing cleanup in release notes action

* fix codeQL violation
2026-04-07 10:28:30 +00:00
Julian Dominguez-SchatzandGitHub e1606b31ab Migrate get-next-package-version.js to TypeScript (#7227)
* Migrate `get-next-package-version.js` to TypeScript

* Add release notes

* Stronger type check

* Fix step ordering

* Fix typo

* Fix missed ordering
2026-03-17 13:56:47 +00:00
Julian Dominguez-SchatzandGitHub 448da13cf5 Move migrations script to typescript (#7075)
* Move migrations script to typescript

* Add release notes

* Setup

* Fix

* PR feedback

* Make imports work as expected

* Rabbit
2026-03-09 07:58:03 +00:00
Matt FiddamanandGitHub d768cfa508 update package versions with release action when explicit version passed (#6767)
* update package versions when explicit version passed

* note
2026-01-24 15:30:17 +00:00
Matt FiddamanGitHubautofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
502babd310 add separator between PR body and bundle stats (#6715)
* add seperator line before bundle stats post

* note

* [autofix.ci] apply automated fixes

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-01-19 16:39:36 +00:00
Matt FiddamanandGitHub fe624f0158 post bundle size comparison comment in the PR body instead (#6677)
* post size-compare comment in pr body instead of comment

* note
2026-01-18 18:07:48 +00:00
Matiss Janis AboltinsGitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>Cursor Agent
d9a1260c91 lint: actual/typography disallow using curly quotes (#6454)
* Update typography rule to disallow curly quotes with auto-fix

- Reverse typography rule to detect and flag curly quotes instead of straight quotes
- Add auto-fixer that converts curly quotes to straight quotes
- Fix auto-fixer to properly escape quotes when they match string delimiters

* Fix quotation marks in error messages and formatting strings across multiple files

- Standardize quotation marks from curly to straight in error messages and string formatting for consistency.
- Update various components and utility files to ensure proper string handling and improve readability.

* Standardize quotation marks across multiple files

- Replace curly quotes with straight quotes in various documentation and code files for consistency and improved readability.
- Update error messages, comments, and documentation to ensure uniformity in string formatting.

* Standardize month formatting across multiple components

- Update month formatting strings from "MMMM 'yy" to "MMMM ''yy" in various components and utility files for consistency.
- Ensure uniformity in how months are displayed throughout the application.

* Refactor typography rule to enhance curly quote handling

- Simplify the error reporting mechanism for curly quotes by creating a shared fix function.
- Update test cases to include various curly quote scenarios for improved coverage.
- Ensure consistent handling of curly quotes in formatting functions across multiple files.

* Refactor typography handling and update tests for curly quotes

- Replace curly quotes with their Unicode equivalents in typography rule and related test cases for consistency.
- Remove unnecessary eslint-disable comments to improve code clarity.
- Ensure proper handling of quotes in arithmetic and utility tests to align with updated typography standards.

* Update VRT screenshots

Auto-generated by VRT workflow

PR: #6454

* Fix: Correct typo in budget cell notification message

Co-authored-by: matiss <matiss@mja.lv>

* Update VRT screenshots

Auto-generated by VRT workflow

PR: #6454

* Temporarily disable i18n string extraction workflow

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2025-12-20 19:51:16 +00:00
Matiss Janis AboltinsandGitHub 3b41455ae3 refactor: replace eslint-plugin-import with eslint-plugin-perfectionist for import sorting (#6428) 2025-12-16 21:25:20 +00:00
Matiss Janis AboltinsandGitHub f84ebe668c Fix bundle stats comment markdown formatting (#6152)
Add missing newlines after summary tags in bundle stats comment to fix broken markdown rendering
2025-11-15 18:55:48 +00:00
Matiss Janis AboltinsandGitHub 7648fc6809 Combine bundle stats comments in PR (#6101)
* Combine bundle stats comments in PR

* Refactor bundle stats comment generation to use a mapping approach for base and head stats, improving argument parsing and validation in the CI action.

* Enhance size comparison workflow by adding steps to checkout the base branch and set up the environment, ensuring accurate build status checks for pull requests.

* Implement size comparison job in GitHub Actions workflow, replacing the deprecated size-compare.yml. This new job downloads build stats from both the base and head branches, processes the stats files, and generates a combined comment for pull requests, enhancing visibility into bundle size changes.

* Add release notes for bundle size stats update, consolidating workflow and PR comment generation.

* Refactor GitHub Actions workflows by removing the deprecated size comparison job from build.yml and introducing a new size-compare.yml workflow. This new workflow enhances build status checks and ensures accurate reporting of bundle size changes for pull requests.

* chore: update action versions and improve error messages in bundle stats scripts

- Updated GitHub Actions to specific commit versions for `upload-artifact` and `checkout`.
- Enhanced error messages in `bundle-stats-comment.mjs` and `update-bundle-stats-comment.mjs` for better clarity and consistency, replacing standard quotes with typographic quotes.

* fix: standardize error messages in bundle-stats-comment.mjs

- Updated error messages in `bundle-stats-comment.mjs` to remove typographic quotes for consistency and clarity.
2025-11-13 18:11:34 +00:00
Julian Dominguez-SchatzandGitHub 4df05aa37c Fix version bump logic to work if the month has rolled over (#5662)
* Fix version bump logic to work if the month has rolled over

* Refactor script to be more testable

* Add tests for regression

* Move tests to dedicated package

* Add release notes

* Coderabbit
2025-09-05 07:31:53 -04:00