mirror of
https://github.com/actualbudget/actual.git
synced 2026-05-06 20:15:33 -05:00
* 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>
123 lines
5.0 KiB
JSON
123 lines
5.0 KiB
JSON
{
|
|
"name": "actual",
|
|
"version": "0.0.1",
|
|
"private": true,
|
|
"description": "A local-first personal finance system",
|
|
"homepage": "https://github.com/actualbudget/actual/",
|
|
"bugs": {
|
|
"url": "https://github.com/actualbudget/actual/issues/"
|
|
},
|
|
"license": "MIT",
|
|
"repository": {
|
|
"type": "git",
|
|
"url": "git@github.com:actualbudget/actual.git"
|
|
},
|
|
"workspaces": {
|
|
"packages": [
|
|
"packages/*"
|
|
]
|
|
},
|
|
"scripts": {
|
|
"start": "yarn start:browser",
|
|
"start:server": "yarn workspace @actual-app/sync-server start",
|
|
"start:server-monitor": "yarn workspace @actual-app/sync-server start-monitor",
|
|
"start:server-dev": "NODE_ENV=development BROWSER_OPEN=localhost:5006 yarn npm-run-all --parallel 'start:server-monitor' 'start'",
|
|
"start:desktop": "yarn desktop-dependencies && npm-run-all --parallel 'start:desktop-*'",
|
|
"start:docs": "yarn workspace docs start",
|
|
"desktop-dependencies": "npm-run-all --parallel rebuild-electron build:plugins-service",
|
|
"start:desktop-node": "yarn workspace @actual-app/core watch:node",
|
|
"start:desktop-client": "yarn workspace @actual-app/web watch",
|
|
"start:desktop-server-client": "yarn workspace @actual-app/web build:browser",
|
|
"start:desktop-electron": "yarn workspace desktop-electron watch",
|
|
"start:browser": "npm-run-all --parallel 'start:browser-*' 'start:service-plugins'",
|
|
"start:service-plugins": "yarn workspace plugins-service watch",
|
|
"start:browser-frontend": "yarn workspace @actual-app/web start:browser",
|
|
"start:storybook": "yarn workspace @actual-app/components start:storybook",
|
|
"build": "lage build",
|
|
"build:server": "yarn build:browser && yarn workspace @actual-app/sync-server build",
|
|
"build:browser": "./bin/package-browser",
|
|
"build:desktop": "./bin/package-electron",
|
|
"build:plugins-service": "yarn workspace plugins-service build",
|
|
"build:api": "yarn build --scope=@actual-app/api",
|
|
"build:cli": "yarn build --scope=@actual-app/cli",
|
|
"build:docs": "yarn workspace docs build",
|
|
"build:storybook": "yarn workspace @actual-app/components build:storybook",
|
|
"deploy:docs": "yarn workspace docs deploy",
|
|
"generate:i18n": "yarn workspace @actual-app/web generate:i18n",
|
|
"generate:release-notes": "ts-node ./bin/release-note-generator.ts",
|
|
"test": "lage test --continue",
|
|
"test:debug": "lage test --no-cache --continue",
|
|
"e2e": "yarn workspace @actual-app/web run e2e",
|
|
"e2e:desktop": "yarn build:desktop --skip-exe-build --skip-translations && yarn workspace desktop-electron e2e",
|
|
"playwright": "yarn workspace @actual-app/web run playwright",
|
|
"vrt": "yarn workspace @actual-app/web run vrt",
|
|
"vrt:docker": "./bin/run-vrt",
|
|
"rebuild-electron": "./node_modules/.bin/electron-rebuild -m ./packages/loot-core && ./node_modules/.bin/electron-rebuild -m ./packages/desktop-electron -o better-sqlite3,bcrypt",
|
|
"rebuild-node": "yarn workspace @actual-app/core rebuild",
|
|
"lint": "oxfmt --check . && oxlint --type-aware --quiet",
|
|
"lint:fix": "oxfmt . && oxlint --fix --type-aware --quiet",
|
|
"install:server": "yarn workspaces focus @actual-app/sync-server --production",
|
|
"constraints": "yarn constraints",
|
|
"typecheck": "tsgo -p tsconfig.root.json --noEmit && lage typecheck",
|
|
"check:tsconfig-references": "workspaces-to-typescript-project-references --check",
|
|
"sync:tsconfig-references": "workspaces-to-typescript-project-references",
|
|
"prepare": "husky"
|
|
},
|
|
"devDependencies": {
|
|
"@monorepo-utils/workspaces-to-typescript-project-references": "^2.10.3",
|
|
"@octokit/rest": "^22.0.1",
|
|
"@types/node": "^22.19.17",
|
|
"@types/prompts": "^2.4.9",
|
|
"@typescript/native-preview": "beta",
|
|
"@yarnpkg/types": "^4.0.1",
|
|
"eslint": "^10.2.0",
|
|
"eslint-plugin-perfectionist": "^5.8.0",
|
|
"eslint-plugin-typescript-paths": "^0.0.33",
|
|
"husky": "^9.1.7",
|
|
"lage": "^2.15.5",
|
|
"lint-staged": "^16.4.0",
|
|
"minimatch": "^10.2.5",
|
|
"npm-run-all": "^4.1.5",
|
|
"oxfmt": "^0.44.0",
|
|
"oxlint": "^1.59.0",
|
|
"oxlint-tsgolint": "^0.20.0",
|
|
"p-limit": "^7.3.0",
|
|
"prompts": "^2.4.2",
|
|
"ts-node": "^10.9.2",
|
|
"typescript": "^6.0.2",
|
|
"vitest": "^4.1.2"
|
|
},
|
|
"resolutions": {
|
|
"adm-zip": "patch:adm-zip@npm%3A0.5.16#~/.yarn/patches/adm-zip-npm-0.5.16-4556fea098.patch",
|
|
"minimatch@10.2.1": "10.2.5",
|
|
"minimatch@3.1.2": "3.1.5",
|
|
"minimatch@>=10.0.0 <11.0.0": "10.2.5",
|
|
"minimatch@>=3.0.0 <4.0.0": "3.1.5",
|
|
"minimatch@>=5.0.0 <6.0.0": "5.1.9",
|
|
"minimatch@>=9.0.0 <10.0.0": "9.0.9",
|
|
"rollup": "4.40.1",
|
|
"socks": ">=2.8.3"
|
|
},
|
|
"lint-staged": {
|
|
"packages/*/{package.json,tsconfig.json}": [
|
|
"ts-node ./bin/validate-publish-imports.ts --fix",
|
|
"yarn sync:tsconfig-references"
|
|
],
|
|
"*.{js,mjs,jsx,ts,tsx,md,json,yml,yaml}": [
|
|
"oxfmt --no-error-on-unmatched-pattern"
|
|
],
|
|
"*.{js,mjs,jsx,ts,tsx}": [
|
|
"oxlint --fix --type-aware --quiet"
|
|
]
|
|
},
|
|
"browserslist": [
|
|
"electron >= 35.0",
|
|
"defaults"
|
|
],
|
|
"engines": {
|
|
"node": ">=22",
|
|
"yarn": "^4.9.1"
|
|
},
|
|
"packageManager": "yarn@4.13.0"
|
|
}
|