mirror of
https://github.com/actualbudget/actual.git
synced 2026-11-10 15:10:01 -06:00
future-buffer
6
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
ff0f5bdb35 |
[AI] lage - move browser build to using lage (#7602)
* Simplify desktop client browser build * [AI] Move browser build orchestration into vite config and lage Moves loot-core worker build, public/ staging (migrations, default-db, sql-wasm, data-file-index), and build-stats wiring from the deleted packages/desktop-client/bin/build-browser shell script into a lootCoreBackend vite plugin in packages/desktop-client/vite.config.mts. Adds a build:browser target to lage.config.js so bin/package-browser runs as a single `lage build:browser --to=@actual-app/web` call, with crdt + loot-core built via lage's ^build dependency before the desktop-client build. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * Refactor e2e-test workflow and update desktop-client configurations * [AI] Move plugins-service staging into desktop-client vite config Declares plugins-service as a workspace devDependency of @actual-app/web so lage's ^build edge picks it up automatically in the build:browser pipeline, and moves the cross-package file staging (production copy + dev serving) into vite.config.mts, mirroring the lootCoreBackend pattern. Drops the plugins-service shell wrapper script and simplifies its package.json scripts to invoke vite build directly. Updates root start:browser to run plugins-service watch in parallel with the dev server instead of pre-building once. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * [AI] Sync tsconfig project references for plugins-service edge Follow-up to the plugins-service workspace edge: adds the ../plugins-service project reference in packages/desktop-client/tsconfig.json via yarn sync:tsconfig-references. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * Release notes * [AI] Ignore .venv/ so lage's git hasher skips Electron CI's Python venv Electron CI provisions a Python virtualenv at the repo root for setuptools. With browser builds now routed through lage, lage's git hash-object pass walks untracked-not-ignored files and fails on the venv's broken lib64 symlink ("fatal: Unable to hash .../.venv/lib64"). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * [AI] Bake Weblate translations back into VRT/e2e bundle build-web set download-translations: false and relied on bin/package-browser's ad-hoc git clone + git pull. That path is fragile inside the playwright container, so vite's import.meta.glob('/locale/*.json') frequently produced an empty languages map and the bundle shipped with no en.json. VRTs then rendered source-code English and diffed against snapshots authored from Weblate strings. Route translation provisioning back through actions/checkout (download-translations: true) in build-web and vrt-update-generate, and add --skip-translations to bin/package-browser (mirroring bin/package-electron) so the in-script git pull is bypassed when CI has already staged the locale dir. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * [AI] Skip translation cloning in build-web bundle for VRT determinism bin/package-browser used to unconditionally clone actualbudget/translations before vite ran, baking Weblate en.json into the build artifact. With the e2e-test pipeline now serving that artifact via serve-build.mjs, VRT screenshots ended up rendering Weblate strings — drifting from the snapshots, which were authored against source-code English (master VRTs ran on vite dev without a locale dir). Pass --skip-translations to bin/package-browser from build-web so the bundle ships with no locale chunks. download-translations stays 'false' across the e2e-test and vrt-update-generate workflows, matching the prior behavior. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> |
||
|
|
c4f3fb0b93 |
[AI] Fix type errors for API consumers by shipping .d.ts declarations (#7468)
* [AI] Fix type errors for API consumers by shipping .d.ts declarations from loot-core Downstream consumers of @actual-app/api with strict: true get type errors because @actual-app/core exports raw .ts source files. Consumers' tsc follows the import chain into core's source (compiled with strict: false), and skipLibCheck doesn't help since it only skips .d.ts files. Add "types" conditions to all imports/exports entries in loot-core's package.json, pointing to the pre-built declarations in lib-dist/decl/. Add .npmignore to include lib-dist/decl/ in the published package. Fixes #7410 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * [AI] Use prepack/postpack scripts instead of inflating package.json Replace the inline "types" conditions in imports/exports with a prepack script that adds them at pack/publish time. This keeps the checked-in package.json clean while still shipping .d.ts declarations to npm consumers. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * [AI] Convert prepack/postpack scripts to TypeScript Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * [AI] Add release notes for #7468 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * [AI] Fix recursive ExportValue type and remove redundant comment Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * [AI] Rename scripts to .mts and inline types conditions Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * [AI] Make backup/restore scripts safer - Check if backup exists before creating it in prepack - Make restore idempotent by checking if backup exists in postpack - Prevents overwriting existing backups from interrupted runs - Addresses CodeRabbit review feedback Co-authored-by: Matiss Janis Aboltins <MatissJanis@users.noreply.github.com> * [AI] Type api-handlers.ts fields to drop implicit any The `fields` / export-args slots in the ApiHandlers contract were untyped, surfacing as TS7008 errors in strict consumers. Replace them with the `Partial<APIXxxEntity>` shapes the `@actual-app/api` wrappers already pass, and annotate the matching call sites in `api.ts` with `@ts-expect-error` where the legacy helpers still declare full-entity parameters despite accepting partial updates at runtime. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * [AI] Replace vite-plugin-dts with tsgo for api types Drops vite-plugin-dts in favor of running tsgo --emitDeclarationOnly after the vite bundle, eliminating a heavy dev dependency tree (api-extractor, volar, vue language-core) from the api package build. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * [AI] Add build script to loot-core to emit declarations via lage `yarn build:cli` failed in CI with TS6305 because api's `tsgo --emitDeclarationOnly` depends on loot-core's pre-built `lib-dist/decl/*.d.ts`, but loot-core had no `build` script, so lage's `^build` cascade silently skipped it. Add `"build": "tsgo -b"` so loot-core slots into the dependency chain; its tsconfig already has `emitDeclarationOnly: true`, so the output is declarations only. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * Simplify API build * [AI] Document TypeScript moduleResolution requirement for @actual-app/api The published declarations rely on package.json exports conditions, which classic node / node10 resolvers don't honor. Document the supported modes (bundler / nodenext / node16) in the package README and in the Getting Started section of the API docs. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * [AI] Type-guard default value in add-types-conditions prepack `value.default` is typed `ExportValue | undefined`, which allows nested conditional objects. The previous truthy check fell through to `shouldSkip(defaultValue)` and would crash on `.endsWith()` if that shape ever appeared. Replace with a `typeof === 'string'` narrowing and drop a now-redundant "Insert types as the first key" comment. No runtime change on current package.json — no nested `default` values exist today — but the script is not covered by loot-core's tsconfig include, so the latent type issue was silent. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * [AI] Allow "nodenext" in docs spellcheck expect list Referenced in the new TypeScript moduleResolution note in the API docs. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * [AI] Move loot-core declarations to @types and whitelist publish with files Relocate loot-core's composite TypeScript output from lib-dist/decl to the top-level @types directory, matching the api package's convention. Replace the old .npmignore blacklist with an explicit package.json files whitelist. - tsconfig.json: outDir @types, exclude test/mock dirs from decl emission - scripts/add-types-conditions.mts: rewrite paths to ./@types/src/... - package.json: files whitelist shipping only src, @types, migrations, typings, default-db.sqlite; drop legacy typesVersions (docs now require moduleResolution bundler/nodenext/node16, so the classic-resolution fallback is unused) - .gitignore: ignore the new @types build artifact - lage.config.js: factor outputGlob into a shared BUILD_OUTPUT_GLOBS constant and add @types/** so lage caches loot-core's decl output - root tsconfig.json: tighten exclude from packages/api/@types to packages/*/@types to cover both api and loot-core - delete .npmignore entirely Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * [AI] Build loot-core declarations inside prepack yarn workspace @actual-app/core pack is the first non-setup step in the publish workflow, running before any build. Without a build chained into prepack the @types/ tree is empty at pack time, so the tarball shipped a transformed package.json pointing at ./@types/src/... paths that didn't exist. npm publish doesn't re-run hooks on a pre-packed tarball, so the frozen snapshot must be self-contained; prepack now runs yarn build first to populate @types/ before add-types-conditions rewrites the exports. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Co-authored-by: Cursor Agent <cursoragent@cursor.com> Co-authored-by: Matiss Janis Aboltins <MatissJanis@users.noreply.github.com> |
||
|
|
a43b6f5c47 |
[AI] Experimental CLI tool for Actual (#7208)
* [AI] Add @actual-app/cli package New CLI tool wrapping the full @actual-app/api surface for interacting with Actual Budget from the command line. Connects to a sync server and supports all CRUD operations across accounts, budgets, categories, transactions, payees, tags, rules, schedules, and AQL queries. * Refactor CLI options: replace `--quiet` with `--verbose` for improved message control. Update related configurations and tests to reflect this change. Adjust build command in workflow for consistency. * Refactor tests: streamline imports in connection and accounts test files for improved clarity and consistency. Remove dynamic imports in favor of static imports. * Enhance package.json: Add exports configuration for module resolution and publish settings. This includes specifying types and default files for better compatibility and clarity in package usage. * Update package.json exports configuration to support environment-specific module resolution. Added 'development' and 'default' entries for improved clarity in file usage. * Enhance CLI functionality: Update configuration loading to support additional search places for config files. Refactor error handling in command options to improve validation and user feedback. Introduce new utility functions for parsing boolean flags and update related commands to utilize these functions. Add comprehensive tests for new utility functions to ensure reliability. * Update CLI TypeScript configuration to include Vitest globals and streamline test imports across multiple test files for improved clarity and consistency. * Update CLI dependencies and build workflow - Upgrade Vite to version 8.0.0 and Vitest to version 4.1.0 in package.json. - Add rollup-plugin-visualizer for bundle analysis. - Modify build workflow to prepare and upload CLI bundle stats. - Update size comparison workflow to include CLI stats. - Remove obsolete vitest.config.ts file as its configuration is now integrated into vite.config.ts. * Enhance size comparison workflow to include CLI build checks and artifact downloads - Added steps to wait for CLI build success in both base and PR workflows. - Included downloading of CLI build artifacts for comparison between base and PR branches. - Updated failure reporting to account for CLI build status. * Update documentation to replace "CLI tool" with "Server CLI" for consistency across multiple files. This change clarifies the distinction between the command-line interface for the Actual Budget application and the sync-server CLI tool. * Refactor configuration to replace "budgetId" with "syncId" across CLI and documentation * Enhance configuration validation by adding support for 'ACTUAL_ENCRYPTION_PASSWORD' and implementing a new validation function for config file content. Update documentation to clarify error output format for the CLI tool. * Enhance configuration tests to include 'encryptionPassword' checks for CLI options and environment variables, ensuring proper priority handling in the configuration resolution process. * Update nightly versioning script to use yarn * Align versions --------- Co-authored-by: Claude <noreply@anthropic.com> |
||
|
|
e968213977 |
Use TypeScript project references for incremental builds (#7180)
* [AI] Fix duplicate typechecking by consolidating into lage Previously `yarn typecheck` ran: 1. `tsc -b` (type-checks all packages via project references) 2. `tsc -p tsconfig.root.json --noEmit` (checks root bin/*.ts) 3. `lage typecheck` (runs `tsc --noEmit` per package - duplicate!) Now it runs: 1. `tsc -p tsconfig.root.json --noEmit` (checks root bin/*.ts) 2. `lage typecheck` (handles everything via dependency ordering) Changes: - Remove `tsc -b` from root typecheck script - Add `dependsOn: ["^typecheck"]` to lage config for correct ordering - Change per-package typecheck from `tsc --noEmit` to `tsc -b` so declarations are emitted for dependent packages https://claude.ai/code/session_01P7mtAHphD6f1FsnQRwWBaW * Add release notes for PR #7180 --------- Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> |
||
|
|
31a027fc64 |
[AI] Add per-package tsconfigs and typescript-strict-plugin for typecheck (#7019)
* [AI] Add per-package tsconfigs and typescript-strict-plugin for typecheck Co-authored-by: Cursor <cursoragent@cursor.com> * Update TypeScript configuration across multiple packages to correct plugin path key from "path" to "paths" and add reference to process-worker typings in index.electron.ts. * Remove reference to process-worker typings in index.electron.ts and add new process-worker typings file for global Process augmentation. * Refactor TypeScript build configurations across multiple packages by removing tsconfig.dist.json files and updating build scripts to use default TypeScript compilation. Adjusted compiler options to target ES2021 and enable declaration generation. * Update TypeScript configuration in api package to refine include and exclude patterns for better file management. * Update build script in api package to ensure migration SQL files are copied to the correct directory by creating the destination folder if it doesn't exist. * Update TypeScript configurations in crdt and desktop-electron packages to refine include and exclude patterns for improved file management. * Update TypeScript dependencies across multiple packages to include typescript-strict-plugin for enhanced type checking and maintain consistency in package.json files. --------- Co-authored-by: Cursor <cursoragent@cursor.com> |
||
|
|
57d01467ca | Refactor test execution to use lage task runner (#5964) |