diff --git a/README.md b/README.md index 4d1f7ec..1eda138 100644 --- a/README.md +++ b/README.md @@ -1,363 +1,166 @@ # ForgeFlow -ForgeFlow 0.8 adds partial-hunk commits, guided conflict recovery, Gitea pull -requests and protected-branch awareness, configurable editor/terminal actions, -deployment policies and release notes, append-only audit export, encrypted -configuration backup, native tray/notifications and a guarded end-to-end -acceptance harness. +**Van lokale wijziging naar aantoonbaar juiste serverversie — zonder de Git- en deploymentcontext over verschillende tools te verspreiden.** -## Publish this release to the built-in updater repository +ForgeFlow is een desktopapp voor teams die met Git, Gitea en eigen servers werken. De app toont wat lokaal gewijzigd is, wat al op Gitea staat en welke exacte commit op de server draait. Daarna begeleidt ForgeFlow je door review, commit, push, deployment en verificatie. -Extract the full source ZIP to a folder under Downloads and run: +> Huidige release: **0.8.9** · [download de laatste Windows-release](https://gitea.itworx.tech/Jens/ForgeFlow/releases/latest) + +![ForgeFlow release-overzicht](docs/screenshots/overview.png) + +## Wat ForgeFlow voor je oplost + +- **Eén duidelijke actielijst:** zie meteen welke repository aandacht nodig heeft en waarom. +- **Veilige Git-flow:** review wijzigingen, stage volledige bestanden of afzonderlijke hunks, commit, push en herstel conflicten zonder contextwissel. +- **Deployment op een exacte commit:** ForgeFlow gebruikt volledige commit-SHA's en toont lokaal, Gitea en server naast elkaar. +- **Live serverwaarheid:** ontdekte containers worden aan repositories gekoppeld en opnieuw met Gitea vergeleken, ook wanneer een deployment buiten ForgeFlow gebeurde. +- **Ingebouwde Git Validator:** controleer repository-identiteit, branch protection, synchronisatie-instellingen, documentatie, geheimen en grote bestanden; veilige verbeteringen kunnen gericht worden toegepast. +- **Lokale controle:** configuratie en credentials blijven op het toestel en diagnostische exports worden lokaal geredigeerd. + +## Snel starten + +### Aanbevolen: de Windows-app installeren + +1. Open de [laatste ForgeFlow-release](https://gitea.itworx.tech/Jens/ForgeFlow/releases/latest). +2. Download de Windows-installer of portable executable. +3. Start ForgeFlow en doorloop de setupwizard. +4. Voeg je Gitea-server, token en lokale projectmappen toe. +5. Configureer optioneel een serververbinding en één of meer deploymentprofielen. + +Na installatie kun je nieuwe packaged releases vanuit **Settings → Updates** ophalen. Downloads worden tegen de gepubliceerde SHA-256-checksums gecontroleerd. Zie [UPDATING.md](docs/UPDATING.md) wanneer een oudere of source-only build nog niet binair kan updaten. + +### Eerst vrijblijvend bekijken + +De interactieve demomodus gebruikt uitsluitend representatieve voorbeelddata en maakt geen verbinding met Git, Gitea of een server: ```powershell -Set-ExecutionPolicy -Scope Process Bypass -.\Publish-ForgeFlow-Release.ps1 +npm install +npm run demo ``` -The script runs the complete quality gate, clones `git@gitea.itworx.tech:Jens/ForgeFlow.git` into a temporary folder, mirrors the verified source without `.git`, `node_modules` or release ZIPs, commits it on `main` and pushes it. A running older ForgeFlow source installation can then update through **Settings → Updates**. +Open daarna `http://127.0.0.1:4173`. +## De dagelijkse workflow +### 1. Begin bij wat aandacht vraagt -ForgeFlow is a desktop release cockpit that turns the complete path from a local -code change to a verified server deployment into one guided flow: +Het release-overzicht vertaalt technische status naar concrete acties: wijzigingen reviewen, commits pushen, synchroniseren, deployen of een ongezonde omgeving onderzoeken. De repositorylijst blijft beschikbaar zodat je snel van context kunt wisselen. -```text -Local working tree -> Gitea repository -> exact deployed server version -``` +### 2. Review en publiceer code -It is not an IDE and it does not replace Gitea Actions. ForgeFlow coordinates -local Git, a private Gitea instance and fixed deployment workflows while keeping -credentials on the user's own computer. +![Repositorywerkruimte met diff en volgende actie](docs/screenshots/repository-workspace.png) -![ForgeFlow overview](docs/screenshots/overview.png) +In de repositorywerkruimte zie je de volledige keten **Local → Gitea → Server**. Je kunt wijzigingen selecteren, diffs bekijken, gedeeltelijke hunk-staging behouden, branch protection controleren en een pull request openen. Destructieve of publicerende acties vereisen altijd expliciete bevestiging. -## Current status: v0.6.0 self-healing Git and Unraid operations +### 3. Deploy en verifieer de live versie -### Git recovery and repository truth +![Deploymentsoverzicht met herkenbare containerkaarten](docs/screenshots/deployments.png) -- serializes every mutating Git action per repository; -- waits through a short grace period and automatically retries after safely removing a proven stale lock; -- detects `HEAD.lock`, `index.lock`, ref locks and worktree locks while skipping object storage; -- provides repository-specific actions for fetch, fast-forward, push and backed-up divergence reset; -- creates a `forgeflow/backup-*` safety branch before any reset to upstream. +Elke deploymentkaart benoemt repository, container, omgeving, uitvoeringsmethode, live commit, Gitea-commit, vorige versie en healthstatus. ForgeFlow ondersteunt gecontroleerde deployments via Gitea Actions en SSH/Unraid, met preflightcontrole en rollback waar beschikbaar. -### SSH / Unraid and DockerMan +Bij server discovery probeert ForgeFlow bestaande containers aan Gitea-repositories te koppelen. Een exacte overeenkomst tussen de volledige live SHA en de actuele Gitea-SHA wordt als gelijklopende versie weergegeven; een runtime-healthcheck blijft een afzonderlijke voorwaarde voor een gezonde deployment. -- reconciles interrupted deployments against the live SHA, container state and health; -- applies DockerMan WebUI, icon and shell labels through an override and writes a persistent XML template fallback; -- keeps the visible container name such as `Portfolio` while enforcing lowercase internal service/image identities; -- includes a built-in high-contrast ITWorx icon, local PNG upload, persistent DockerMan image storage and cache refresh; -- exposes **Open Web UI**, **Repair DockerMan integration** and **Reconcile** directly on deployment cards. +### 4. Verbeter de repository met Git Validator -### Update reliability +![Git Validator met assurance score en veilige fixes](docs/screenshots/git-validator.png) -- confirms the external updater handshake before closing ForgeFlow; -- rejects malformed PowerShell update helpers before publication; -- validates the replacement source and keeps rollback/success status for the next launch; -- verifies that Gitea reports the exact published release commit. +Git Validator groepeert bevindingen per onderwerp en maakt onderscheid tussen geslaagde controles, aanbevelingen en kritieke problemen. Alleen fixes die ForgeFlow veilig en voorspelbaar kan uitvoeren worden als automatische actie aangeboden; governancewijzigingen zoals branch protection blijven zichtbaar en expliciet. -Read [SSH / Unraid deployment](docs/SSH_UNRAID_DEPLOYMENT.md) and the -[LumaOps audit](docs/LUMAOPS_SERVER_AUDIT.md). +## Wanneer is een release werkelijk in orde? -### v0.4.2 automatic clone workflow +ForgeFlow houdt drie soorten waarheid bewust apart: -**Clone from Gitea** now uses the first configured project root and creates the -repository-named subfolder automatically. The native folder picker is reserved -for the explicit **Choose another location** action. Existing matching checkouts -are linked; conflicting folders are never overwritten. +| Controle | Betekenis | +| --- | --- | +| **Local ↔ Gitea** | De lokale branch volgt de juiste upstream en is niet onverwacht ahead, behind of divergent. | +| **Gitea ↔ Server** | De volledige commit-SHA op de server is exact gelijk aan de relevante commit op Gitea. | +| **Runtime health** | De container of applicatie draait en de geconfigureerde healthcheck slaagt. | -The Windows environment doctor retains the v0.3.1 npm command-shim correction. +Een gelijke commit bewijst welke code draait; een geslaagde healthcheck bewijst dat die versie ook functioneert. ForgeFlow combineert beide signalen zonder het ene voor het andere te laten doorgaan. -Version 0.3.2 is designed so the user does not need to give a developer any -Gitea token, SSH key, server password or other credential. The application now -includes: +## Belangrijkste functies -- a five-step setup wizard; -- computer, Gitea and deployment preflights; -- protected local token entry; -- structured local diagnostics with aggressive secret redaction; -- standard and strict privacy support bundles; -- fail-closed bundle safety auditing; -- request IDs that correlate desktop, Actions and server events; -- root-owned allowlisted server target configuration; -- a complete setup guide from fresh checkout to first rollback test. +### Git en Gitea -Start with [START_HERE.md](START_HERE.md). The full installation and acceptance -procedure is in [docs/SETUP_GUIDE.md](docs/SETUP_GUIDE.md). +- repositories ontdekken, favorieten beheren en ontbrekende lokale clones koppelen; +- status, diff, staging, partial hunks, commit, push, fetch, pull, stash en conflict recovery; +- branches maken, wisselen, vergelijken en opruimen; +- branch protection controleren en pull requests openen; +- Git Validator met assurance score, bewijs per controle en gerichte veilige fixes. -## What ForgeFlow can do +### Deployments -### Repository workflow +- deploymentprofielen per repository en omgeving; +- Gitea Actions en SSH/Unraid als gecontroleerde uitvoeringsroutes; +- server discovery en herkenbare koppeling van bestaande containers aan repositories; +- verificatie op volledige SHA, runtime health en recente serverwaarheid; +- preflight, live logs, deploymenthistoriek en rollback naar de vorige bekende versie. -- Connect to a private Gitea instance and validate the account locally. -- Discover Git working trees beneath one or more project roots. -- Use the first project root as the automatic clone destination. -- Match local folders to Gitea repositories using normalized `origin` identity. -- Link existing repositories or clone directly into the default project root. -- Read real Git status through porcelain v2 and NUL-delimited output. -- Inspect diffs and select files. -- Stage and unstage changes. -- Commit locally or commit and push in one action. -- Push, fetch and use fast-forward-only pull. -- Review recent history. -- Create, switch and publish branches. -- Stash, list and restore local work. -- Mark favorites and prioritize repositories requiring attention. -- Refresh repository state automatically while the application is open. +### Veiligheid en beheer -### Deployment workflow +- credentials versleuteld via de beveiligde opslag van het besturingssysteem; +- origin-checks voorkomen dat een Gitea-token naar een andere host wordt gestuurd; +- updatepakketten worden alleen vanaf de geconfigureerde Gitea-origin gedownload en met checksums geverifieerd; +- lokale redactie van tokens, wachtwoorden en gevoelige diagnostische data; +- versleutelde configuratieback-up, herstelvoorbeeld en lokale audittrail; +- packaged builds als Windows-installer en portable executable. -- Configure multiple environments per repository. -- Bind each environment to a fixed branch and fixed Gitea Actions workflows. -- Run a visible deployment preflight before confirmation. -- Re-run mandatory checks in the privileged backend before dispatch. -- Verify a clean tree, correct branch, upstream and ahead/behind state. -- Verify that the exact full SHA exists on the allowed remote branch. -- Verify local and remote workflow files and Gitea Actions availability. -- Dispatch a unique request ID with the exact commit SHA. -- Poll Gitea Actions runs and jobs. -- Correlate the workflow with the server status endpoint. -- Verify that the requested SHA is actually live. -- Run an independent application healthcheck. -- Roll back through a separate fixed workflow to the previous exact SHA. -- Preserve a bounded local operation history. +Meer achtergrond staat in [SECURITY.md](docs/SECURITY.md) en [ARCHITECTURE.md](docs/ARCHITECTURE.md). -### Safe diagnostics +## Eerste configuratie -ForgeFlow stores structured JSONL diagnostics in the application-data folder. -They are intended to make development and troubleshooting possible without -requesting credentials. +Voor normaal gebruik heb je nodig: -The logger records useful operational facts such as: +- Windows 10 of 11; +- Git op het toestel; +- toegang tot een Gitea-account en een token met de benodigde repositoryrechten; +- minstens één lokale hoofdmap waarin ForgeFlow projecten mag ontdekken. -- timestamps, stable event names and duration; -- Git action outcomes and repository state; -- Gitea endpoint paths and HTTP status, but not authorization headers; -- deployment request IDs, workflow stages and health states; -- preflight results; -- sanitized error names, codes, messages and stacks. +Voor serverdetectie en SSH-deployments heb je daarnaast een bereikbare Docker- of Unraid-host en een werkende SSH-configuratie nodig. Begin bij: -It excludes or redacts: +- [SETUP_GUIDE.md](docs/SETUP_GUIDE.md) — Gitea, projectmappen en eerste ingebruikname; +- [DEPLOYMENT_SETUP.md](docs/DEPLOYMENT_SETUP.md) — deploymentprofielen en verificatie; +- [SSH_UNRAID_DEPLOYMENT.md](docs/SSH_UNRAID_DEPLOYMENT.md) — SSH- en Unraid-vereisten; +- [DIAGNOSTICS.md](docs/DIAGNOSTICS.md) — veilige controles en supportbundels. -- Gitea tokens and encrypted token blobs; -- passwords, authorization headers and credential-bearing URLs; -- private keys and common token patterns; -- arbitrary environment-variable dumps; -- local source contents and Git diffs; -- raw Gitea runner logs from support bundles; -- user-home paths. +## Ontwikkelen vanuit de broncode -Support bundles are audited before writing. If a known runtime secret, private -key marker or URL credential remains, ForgeFlow aborts the export instead of -creating the ZIP. Strict privacy mode also hashes repository and user -identifiers while keeping related events correlatable. - -Read [docs/DIAGNOSTICS.md](docs/DIAGNOSTICS.md) for the exact policy and its -limitations. - -## Security model - -- Electron main/preload/renderer separation. -- Sandboxed renderer with context isolation and no direct Node.js access. -- Narrow, frozen preload API. -- Trusted renderer-origin checks on privileged IPC. -- No arbitrary shell command field in the interface. -- Gitea token stored using Electron `safeStorage` when available. -- Blank token updates preserve the existing protected token. -- Atomic local configuration writes and schema migration. -- Repository-relative path validation for file actions. -- Supported-protocol and credential-in-URL validation. -- Fixed workflow, branch and environment allowlists. -- Root-owned server target configuration. -- Exact-SHA deployment and rollback. -- Server-side locking, health validation and status records. -- Local diagnostic retention, rotation and clear/export controls. - -More detail is available in [docs/SECURITY.md](docs/SECURITY.md). - -## Prerequisites - -For a Windows source setup: - -- Windows 10 or 11; -- Node.js 22 or newer; -- npm; -- Git on `PATH`; -- a normal signed-in desktop session; -- access to your own Gitea instance. - -For deployment: - -- Gitea Actions enabled; -- a trusted Gitea runner with an environment-specific label; -- a Linux target server reachable by that runner; -- Git, Docker Compose, `curl` and `flock` on the target server; -- an existing non-interactive server checkout of the application. - -## Fastest Windows start - -Extract the release, open PowerShell in the folder and run: +Vereisten: Node.js 22, npm en Git. ```powershell -Set-ExecutionPolicy -Scope Process Bypass -.\setup-windows.ps1 -``` - -The script: - -1. checks Node.js, npm and Git; -2. installs the exact dependency versions from `package-lock.json` when present; -3. runs the environment doctor; -4. validates the source tree; -5. runs all automated tests; -6. starts ForgeFlow. - -No Gitea or server credential is requested by the PowerShell script. Tokens are -entered later in the local desktop wizard. - -Manual equivalent: - -```bash -npm install --no-audit --no-fund -npm run doctor +npm ci npm run check npm start ``` -## Setup and first acceptance test +Handige opdrachten: -Follow these documents in order: +| Opdracht | Doel | +| --- | --- | +| `npm run dev` | Start Electron in ontwikkelmodus. | +| `npm run demo` | Start de browserdemo met voorbeelddata. | +| `npm run check` | Voert bronverificatie en de volledige testset uit. | +| `npm run doctor` | Controleert de lokale ontwikkelomgeving. | +| `npm run acceptance` | Voert de release-acceptatiecontroles uit. | +| `npm run dist:win` | Bouwt Windows installer + portable package, schrijft checksums en ruimt oude dist-artifacts op. | -1. [START_HERE.md](START_HERE.md) -2. [docs/SETUP_GUIDE.md](docs/SETUP_GUIDE.md) -3. [docs/UPDATING.md](docs/UPDATING.md) -4. [docs/DEPLOYMENT_SETUP.md](docs/DEPLOYMENT_SETUP.md) -5. [docs/STATUS_ENDPOINT.md](docs/STATUS_ENDPOINT.md) -6. [docs/DIAGNOSTICS.md](docs/DIAGNOSTICS.md) - -The recommended first test uses a non-critical staging deployment and validates: +De belangrijkste onderdelen zijn: ```text -preflight -> commit -> push -> deploy -> Actions -> server SHA -> healthcheck -> rollback +electron/ beveiligde desktopintegraties en IPC +src/ renderer, gebruikersflows en visuele componenten +scripts/ build-, release-, demo- en verificatiehulpmiddelen +tests/ unit- en integratietests +docs/ setup, deployment, beveiliging en release-informatie ``` -## Updating an existing source installation +Aanvullende kwaliteitsdocumentatie: -Close ForgeFlow, copy the v0.4.2 update overlay over the existing source folder -and run: +- [TEST_MATRIX.md](docs/TEST_MATRIX.md) +- [ACCEPTANCE.md](docs/ACCEPTANCE.md) +- [STATUS_ENDPOINT.md](docs/STATUS_ENDPOINT.md) +- [ROADMAP.md](docs/ROADMAP.md) -```powershell -Set-ExecutionPolicy -Scope Process Bypass -.\update-windows.ps1 -``` +## Licentie -Application configuration and protected credentials are stored outside the -source folder and are not reset. See [docs/UPDATING.md](docs/UPDATING.md). - -## Browser demo - -The standalone visual demo requires no Gitea connection or credentials: - -```bash -npm run demo -``` - -Open the printed local URL. The demo uses `src/renderer/mock-bridge.js`; the -packaged desktop application uses the privileged `preload.cjs` bridge. - -## Quality checks - -```bash -npm run verify -npm test -npm run check -npm run doctor -- --json -``` - -Version 0.3.2 contains 45 automated tests. Two integration suites create real -temporary bare Git remotes and exercise commit, push, branch, stash and exact -remote-SHA behavior. Detailed coverage is listed in -[docs/TEST_MATRIX.md](docs/TEST_MATRIX.md). - -## Development packages - -```bash -npm run dist:win -npm run dist:linux -npm run dist:mac -``` - -Windows users can run: - -```powershell -.\build-windows.ps1 -``` - -These commands create unsigned development packages. Public distribution still -requires platform code signing and platform-specific release acceptance. - -## Server-side deployment model - -ForgeFlow never sends a free-form deployment command. It dispatches a fixed -workflow with controlled inputs: - -```json -{ - "ref": "main", - "inputs": { - "environment": "staging", - "commit_sha": "0123456789abcdef0123456789abcdef01234567", - "request_id": "generated-by-forgeflow" - } -} -``` - -The workflow calls a root-owned allowlisted server script. Deployment targets -are defined in `/etc/forgeflow/targets.conf`, not supplied by the desktop app. -The server checks repository, environment, paths, branch, exact remote ancestry, -locking, Docker Compose result and health before it updates the public status -JSON. - -## Project structure - -```text -main.cjs Electron lifecycle and service composition -preload.cjs Whitelisted renderer API and event bridge -src/main/config-store.cjs State, migration and protected token storage -src/main/git-service.cjs Real Git CLI adapter -src/main/gitea-service.cjs Gitea REST and Actions adapter -src/main/repository-service.cjs Discovery, matching and repository aggregation -src/main/repository-monitor.cjs Background working-tree awareness -src/main/deployment-service.cjs Dispatch, polling, SHA checks and rollback -src/main/preflight-service.cjs Computer and deployment readiness checks -src/main/diagnostics-service.cjs Safe JSONL diagnostics and support bundles -src/main/log-redaction.cjs Recursive secret and privacy sanitizer -src/main/ipc.cjs Validated privileged operation boundary -src/shared/clone-target.cjs Safe automatic clone target planning -src/shared/zip-writer.cjs Dependency-free diagnostic ZIP writer -src/renderer/ Desktop UI and browser demo -examples/gitea-actions/ Fixed deploy and rollback workflow templates -examples/server/ Allowlisted Linux deployment implementation -tests/ Unit and real Git integration tests -docs/ Setup, diagnostics, security and architecture -``` - -## Scope and remaining acceptance - -The v0.4.2 logic is prepared for self-service configuration and testing, but no -source release can prove compatibility with a private environment it has never -connected to. The remaining acceptance is deliberately local to the user: - -- validate the exact Gitea version and Actions API; -- validate the runner label and runner permissions; -- adapt one target line in the root-owned server configuration; -- verify the application-specific Docker Compose and health endpoint; -- execute the documented staging deployment and rollback test; -- export a Strict support bundle if a failure occurs. - -No credential needs to be shared for that process. - -## License - -MIT. See [LICENSE](LICENSE). +ForgeFlow is beschikbaar onder de [MIT-licentie](LICENSE). diff --git a/SOURCE_MANIFEST.txt b/SOURCE_MANIFEST.txt index 7b488ce..266cc4a 100644 --- a/SOURCE_MANIFEST.txt +++ b/SOURCE_MANIFEST.txt @@ -51,8 +51,10 @@ ef049adcfa204908e6dc3a059124b39ba0e2739cc54e38945ce73a57049df0d8 1185 1ccde232c060395d7aedce27e89a7647b77afe28ab71de0a5a3efeded57369d3 140415 docs/screenshots/deploy-confirmation.png b39506254ffa2c73c389fb4795b3a745368bbeb7d8514cc47a636316d6d9a6aa 107166 docs/screenshots/deployment-run.png 070e6700bdae8c628c907ba181bbf0dde0bbbbb4208f7a875503f933ff1b882e 118819 docs/screenshots/deployment-success.png -bcb1e4daf1eeedc5b3f61d2406f1a65312dba130082528007e1629d9df99570a 153240 docs/screenshots/overview.png -224e34ab45877bbb97b07d2a14c4a5aa6e28339522a8015b33a2a81477177143 135102 docs/screenshots/repository-workspace.png +0663ca87cc886e938aa3aa538c1a63193eb5f8927d995a0ad3f9e521b545d4d5 107344 docs/screenshots/deployments.png +b5b77dfa2599099707f30d080a0e86103a96eac0fd9ad15753b03fb4c75d121b 105708 docs/screenshots/git-validator.png +fa6cb1ca4ea91fe99fd02f2f9e55c27c71241bef05ab253886912f785adb1843 85916 docs/screenshots/overview.png +23c3d2bd2f25a7405e5599e0ed957d6444cdb46c5422694a775255c97c7cde90 113048 docs/screenshots/repository-workspace.png 322624242d246d07180cc719e14c91e8fb69e123676a02e5046f4e576cca1ca1 5569 docs/SECURITY.md 32a34ec13a284d3f9ceebbc107b25a844e3db096f8cafa4e43951fc2050c9a03 13552 docs/SETUP_GUIDE.md 4dcdbd42550a4cc53fe948349b20bfe0e445d40144ef82df54b3aab8b00a8f46 5165 docs/SSH_UNRAID_DEPLOYMENT.md @@ -72,9 +74,9 @@ c230b931abf2293d2d44b7a69b94c35f1142c093cc46b88739a0de5cbd6d1896 1532 91a984a89dd57a084b9a2331763cacdb061582fb590f13df379d92c1a77a2ee1 352 OVERLAY-INSTRUCTIONS.md ab7c04a2df33ebe2861adc68c74d8f7b0eeb6a2d7c72410c26bc66b883d985c7 130466 package-lock.json 4256d59aa47ea13d9e305370c2602887930d6069f4db34dc91c1f738d4b79e97 3943 package.json -b5dc2b79453afbcd74fa94ddacf078bf22c00807ebc4eb648d2451de49634329 9668 preload.cjs +da0fef78350d4f924a8d960eaa2c363023ae21d76ade50fb478c70a22584c8a1 9674 preload.cjs b31c43d9355c13b5ae4efc0f3649d8cb8d509b2bb7ebb042ff546b7820fb7de8 8411 Publish-ForgeFlow-Release.ps1 -a6d32a742412b7836606be00f17be0465f1b6f55d3911f6c73a14029787ba206 14037 README.md +e51bd52dc36ee1351316020f5f60381f1e881970f78435682d8acd7c498c48c8 8455 README.md 509c7bcff5280349bd9f45ed6151f70372bad7010a9ea582c13e2ccab91fe0cd 6272 scripts/acceptance.mjs 00d57bda5af8c8eda294b72d18b318f024a307b81b0d9205a0821f5240151e31 3814 scripts/apply-binary-update.ps1 f8359a69d20deb2dfe10042d1bec7b12a95e76e58e36bc5f265f073c3111d056 10287 scripts/apply-source-update.ps1 @@ -137,7 +139,7 @@ e7aebcc0d484a6a59d463d5cb26c11b3ad56e28f6535e7c38a0fe166a41565ea 13690 c98cbe50a783e2a1cfecf9052f558aabe656add6a463899532dd59d743b720b2 3645 tests/git-validator.test.mjs 681ab7bcd02c4dd98d1d8d2092a3521c489d941131e7ffe5903971b940046474 2403 tests/git-workflows.test.mjs 8df055080e7166a52d36a6fdc0bab40c09b054d579c6848fcc076245de1573c4 6797 tests/gitea-actions.test.mjs -267d76b868d8d06ea031c14acd09a7715fb44668a25ade51a9e62e0170888bc8 1522 tests/ipc-contract.test.mjs +48bca4711e7c193d19c78a0cb45ea1c83179b3c23640195f66058268e8a11b52 1520 tests/ipc-contract.test.mjs caf98cbd9de9b119dae610ee53fa333a7a11214f34762247452fbb85e8bbf725 2392 tests/log-redaction.test.mjs 96432a97d313f331694900bf0a2c21e38c20eac96d59147977aeed9055a9e3ad 2287 tests/partial-staging.test.mjs c0f8f5a3784835f19d9ff1015185ccb385840b6fa1c9ec19f233393a7d952b65 3718 tests/preflight.test.mjs diff --git a/docs/screenshots/deployments.png b/docs/screenshots/deployments.png new file mode 100644 index 0000000..6f60f35 Binary files /dev/null and b/docs/screenshots/deployments.png differ diff --git a/docs/screenshots/git-validator.png b/docs/screenshots/git-validator.png new file mode 100644 index 0000000..d41168e Binary files /dev/null and b/docs/screenshots/git-validator.png differ diff --git a/docs/screenshots/overview.png b/docs/screenshots/overview.png index 18a0746..d1b98aa 100644 Binary files a/docs/screenshots/overview.png and b/docs/screenshots/overview.png differ diff --git a/docs/screenshots/repository-workspace.png b/docs/screenshots/repository-workspace.png index def0d4a..e4346a9 100644 Binary files a/docs/screenshots/repository-workspace.png and b/docs/screenshots/repository-workspace.png differ diff --git a/preload.cjs b/preload.cjs index d0d7de2..1a50d62 100644 --- a/preload.cjs +++ b/preload.cjs @@ -126,9 +126,9 @@ contextBridge.exposeInMainWorld( getOperation: (operationId) => invoke('operations:get', { operationId }), troubleshooterScan: (fullName = null) => invoke('troubleshooter:scan', { fullName }), troubleshooterRepair: (issue) => invoke('troubleshooter:repair', { issue }), - troubleshooterAutoRepair: (issues) => invoke('troubleshooter:auto-repair', { issues }), - gitValidatorScan: (fullName) => invoke('git-validator:scan', { fullName }), - gitValidatorRepair: (fullName, check) => invoke('git-validator:repair', { fullName, check }), + troubleshooterAutoRepair: (issues) => invoke('troubleshooter:auto-repair', { issues }), + gitValidatorScan: (fullName) => invoke('git-validator:scan', { fullName }), + gitValidatorRepair: (fullName, check) => invoke('git-validator:repair', { fullName, check }), diagnosticsStatus: () => invoke('diagnostics:status'), clearDiagnostics: () => invoke('diagnostics:clear'), openDiagnosticsFolder: () => invoke('diagnostics:open-folder'), diff --git a/tests/ipc-contract.test.mjs b/tests/ipc-contract.test.mjs index 586d76f..09c2b9e 100644 --- a/tests/ipc-contract.test.mjs +++ b/tests/ipc-contract.test.mjs @@ -41,7 +41,7 @@ test("every renderer bridge call is exposed by the preload contract", async () = ), ); const exposed = new Set( - [...preload.matchAll(/^\s{2}([A-Za-z0-9_]+):/gm)].map((match) => match[1]), + [...preload.matchAll(/^\s+([A-Za-z0-9_]+):/gm)].map((match) => match[1]), ); assert.ok(calls.size > 40, "expected the complete renderer bridge surface"); assert.deepEqual(