mirror of
https://github.com/morluto/rea.git
synced 2026-11-09 00:07:18 +00:00
* docs: organize canonical documentation layout (URGENTE) Group all existing authored guides by domain and ownership, expose complete navigation, and preserve their public routes. Update physical path consumers and release configuration while retaining historical records. Document domain-based specs and ADR slugs without global numbering. Co-Authored-By: Codex <noreply@openai.com> * fix(docs): honor home layout in all-page route verification * style: format reviewed source changes * fix(docs): preserve routes and navigation cache inputs * fix: repair the static-check failures on the default branch (#2895) * fix: repair the static-check failures on the default branch The default branch fails its own required `Static checks` job three ways, so every pull request reports that job as failed regardless of its own change. - `npm run format:check` reports `src/domain/functionComparison.test.ts` and `src/ida/IdaOperationRunner.ts`. - `npm run lint` reports a duplicate `import { join } from "node:path"` in `tests/boundary/mcp/ghidraInventoryMcp.test.ts` (lines 4 and 17). - `npm run typecheck` reports `format: "devin"` missing from the client format union in `src/application/SupportedClients.ts`, and an unchecked index in `tests/boundary/cli/clientProfileLifecycle.test.ts`, whose pair array is inferred as `string[][]`. Apply the pinned formatter, drop the duplicate import, list the `"devin"` format that its own definition already uses, and mark the pair array `as const`. Validation: `npm run check:fast` and `npm run format:check` pass. * fix(setup): keep Devin on the JSON configuration dialect --------- Co-authored-by: 吴佳浩 <wujiahao@supremind.com> Co-authored-by: morluto <76467478+morluto@users.noreply.github.com> * fix(docs): update links after guide relocation * docs: correct verified documentation route counts * fix(docs): update browser capture guide link after move (#2820) Refresh gettext protected-link comments alongside the authored href. Co-authored-by: Codex <noreply@openai.com> * fix(docs): include http3 lab in stable routes * fix(docs): preserve historical release evidence and links * fix(ghidra): restore Windows verifier identity import * docs(wakaru): preserve pinned upstream policy link * docs(index): retain recently added guide links * docs(mcp): preserve parent retention clarification * fix(cli): preserve standalone import guidance * fix(test): preserve translated guide link drift coverage --------- Co-authored-by: Matheus Breguêz <matbrgz@gmail.com> Co-authored-by: Codex <noreply@openai.com> Co-authored-by: morluto <17176810+morluto@users.noreply.github.com> Co-authored-by: 吴佳浩Alben <35291372+XiaoBinGan@users.noreply.github.com> Co-authored-by: 吴佳浩 <wujiahao@supremind.com>
91 lines
5.7 KiB
Markdown
91 lines
5.7 KiB
Markdown
# Static analysis in GitHub Actions
|
|
|
|
The [minimal workflow](https://github.com/morluto/rea/blob/main/examples/github-actions/rea-analysis.yml) builds a small
|
|
JavaScript application, analyzes its files without executing them, and uploads
|
|
machine-readable results. It uses the existing CLI, not a separate GitHub Action
|
|
or an MCP client. It does not promise support for every REA provider.
|
|
|
|
## Run the example
|
|
|
|
1. Copy the example to `.github/workflows/rea-analysis.yml` in your repository and
|
|
commit it to the default branch. No existing application or package manifest is
|
|
needed for the self-contained demonstration.
|
|
2. Enable GitHub Actions if necessary. Select **REA static analysis example** in
|
|
the Actions tab and choose **Run workflow**.
|
|
3. Download the `rea-analysis` artifact after the run. Its files are:
|
|
|
|
| File | Meaning |
|
|
| ----------------- | -------------------------------------------------------------------------------------------------- |
|
|
| `analysis.json` | Original CLI JSON, including complete Evidence on success or the error report when one is emitted. |
|
|
| `analysis.stderr` | Original diagnostics/progress; an empty file is normal when there are none. |
|
|
| `exit-code.txt` | Original analysis process exit code. |
|
|
|
|
The example pins Node.js 24.22.1, REA 6.7.0, and action commit revisions. It installs
|
|
REA into the runner's temporary directory rather than changing the application's
|
|
dependencies. This pins the tool version, not every transitive npm dependency;
|
|
use a reviewed, committed package lock and `npm ci` if your integration requires
|
|
that stronger dependency-reproducibility guarantee.
|
|
|
|
## Prerequisites and trust
|
|
|
|
The runner is GitHub-hosted Ubuntu 24.04 with Bash, npm, and `ps` from `procps`.
|
|
Other Linux images must supply `procps`; REA's supervised process controls use it.
|
|
This static JavaScript operation needs no Hopper, Ghidra, IDA, Java, browser,
|
|
Docker, GPU, external API key, or user-supplied GitHub secret. The workflow only
|
|
requests `contents: read`; artifact upload uses the runner's normal Actions
|
|
credentials.
|
|
|
|
Replace **Build a known artifact** with your reviewed build, and set
|
|
`ARTIFACT_PATH` to its application directory (relative to the checkout) or an ASAR.
|
|
The demonstration creates its own tiny application; it deliberately throws if
|
|
executed. REA reads it statically. Your replacement build itself can execute code:
|
|
review it separately and do not add untrusted pull-request builds to a privileged
|
|
`pull_request_target` workflow. The example is manually triggered, not an
|
|
untrusted-PR execution policy.
|
|
|
|
Reports can contain paths, URLs, source-derived facts, and caller-selected data.
|
|
Only analyze artifacts and publish reports you are authorized to share. Do not
|
|
rely on REA inferring secrets from their names. Review artifact access and
|
|
retention for your repository; the example retains reports for seven days.
|
|
|
|
## Failure, partial results, and unsupported capabilities
|
|
|
|
The analysis step captures stdout and stderr separately, records `$?`, and exits
|
|
with that same status. There is no `continue-on-error`, `|| true`, output filter,
|
|
or pipeline that could turn a failed analysis green. Before checkout or other
|
|
fallible steps, the workflow creates a fresh report directory under `RUNNER_TEMP`.
|
|
Analysis and upload both use that directory, never a checked-in `reports/rea` or
|
|
other workspace files. The upload step uses `always()` when that directory was
|
|
prepared, so available diagnostics survive an analysis failure. If installation
|
|
or the build failed before analysis began, it is empty and upload warns rather
|
|
than publishing stale results or inventing a successful result. Runner loss or
|
|
cancellation can still prevent upload.
|
|
|
|
`--json --full-output` selects a machine-readable envelope; it does **not** mean
|
|
that analysis was complete. A successful operation can retain partial analysis,
|
|
unknowns, and limitations. Exit zero is not a security verdict, proof of complete
|
|
coverage, or a policy gate for those findings. Inspect the saved Evidence and
|
|
coverage before making such a decision. See [output and exit status](getting-started/cli.md#output-and-exit-status).
|
|
|
|
A nonzero exit can represent invalid input, unavailable tooling, an unsupported
|
|
host/capability, or another operation failure. Keep the original JSON error (when
|
|
emitted), stderr, and exit code, and use their category/message to diagnose it.
|
|
An early startup failure may leave `analysis.json` empty; do not parse that as
|
|
successful analysis. Select a supported operation or explicitly provision its
|
|
[documented prerequisites](getting-started/installation.md); do not silently switch providers,
|
|
execute the artifact, or ignore the failure to obtain a green job.
|
|
|
|
To exercise the failure path, temporarily set `ARTIFACT_PATH` to
|
|
`build/missing-artifact` without changing the demo build. Analysis must fail,
|
|
`exit-code.txt` must be nonzero, and the available reports must still upload.
|
|
To exercise unsupported input, set `ARTIFACT_PATH` to `build/rea-ci-demo/index.js`:
|
|
this operation accepts an application directory or ASAR, not a single source file.
|
|
The retained JSON error has category `unsupported_target`; the step exits nonzero.
|
|
Restore the correct path before using the example normally.
|
|
|
|
To exercise partial analysis, append `export const broken = ;` to the demo's
|
|
JavaScript. REA 6.7.0 retains `data.normalized_result.statistics.parse_failures`
|
|
and an incomplete-coverage limitation while the operation can still exit zero.
|
|
Inspect those facts instead of treating process success as full coverage. The
|
|
report JSON and diagnostics remain unfiltered in all three cases.
|