LaneSync receives report files only — never your source code. This is identical on Full and Lite (Minimal) plans. The upload action strips code snippets from SARIF before sending, and tool-generated coverage HTML (which embeds source files) is never uploaded — LaneSync renders the coverage view from the parsed coverage numbers instead.
Overview
The action runs on your development branch (environmentdev), release branches (staging), and published releases (production). Pull request runs skip the upload.
Bootstrapped workflow
During bootstrap LaneSync pushes a language-specific CI workflow plus the upload action to.github/actions/lanesync-upload/action.yml. The workflow’s last step is:
if: always() uploads evidence even when tests fail, so failures are recorded for audit. The upload itself never fails your build — problems appear as workflow warnings and in the job summary.
Self-hosted customers set the
SDLC_API_URL repository variable. See Enterprise self-hosting.Action inputs
Outputs:
evidence-id and upload-status (success | failed | skipped).
Supported report formats
The action picks up these files from the workspace root (or standard build directories) automatically:
Coverage format is detected from file content, so a mislabeled file is still parsed correctly. Files larger than 5 MB are skipped with a warning.
LaneSync derives unit test counts, the coverage percentage, and SAST/CVE counts from the parsed reports, so the evidence badge, the detail view, and your
sdlc.yaml quality gates always agree. SARIF severities follow the same grading as Semgrep/OpenGrep and GitHub code scanning:
A numeric
security-severity always wins over the level. A result without a level inherits the rule’s defaultConfiguration.level, then warning (SARIF §3.27.10).
Bootstrapped workflows scan source only: OpenGrep excludes .github, coverage/, the generated unit-tests.html/integration-tests.html, and the language’s build and dependency directories (build, target, dist, node_modules, vendor, …). Tool-generated report HTML and third-party code never count against your SAST gates. Trivy reports every severity (CRITICAL,HIGH,MEDIUM,LOW) so the max_medium gate can be enforced. Gradle workflows resolve a gradle.lockfile for the scan when none is committed, because Trivy reads Gradle dependencies only from lockfiles.
Report views
The View full report and Download links on the Quality Insights page serve self-contained HTML that LaneSync renders from the parsed reports: unit tests (failures first, with messages and stack traces), coverage (lowest-covered files first), SAST findings, and CVEs (most severe first, with fixed versions). Each page records the repository, version, environment, and CI run, so a downloaded copy is self-describing audit evidence. Views open in a sandboxed page with no scripts. Code snippets are never stored.Authentication
LaneSync API key
- A workspace admin creates a key in Settings → System → CI API Keys
- Store it as the repository secret
LANESYNC_API_KEY - The bootstrapped workflow passes it to the action via
api-key
org in the payload must match the key’s workspace.
GitHub Actions OIDC
When no API key is set, the action requests a short-lived GitHub OIDC token with audiencelanesync. The job needs:
org field.
POST /api/evidence/upload
Auth:Authorization: Bearer <lsk_* API key | OIDC JWT>
Required fields: org, repo, version, pipeline, metrics
The body may be sent gzip-compressed with Content-Encoding: gzip (the action always does). The decompressed body may be up to 25 MB.
Response:
The action retries network errors,
429, and 5xx up to three times; other statuses are reported once as a warning.
Upload a single test report
POST /api/evidence/upload-report — multipart form, file fieldreport. Same CI auth required. Use this for ad-hoc JUnit uploads outside the standard pipeline.
Pipeline identity
Set the upload actionpipeline input to the exact GitHub check name for that workflow (the same name you list under required_checks in sdlc.yaml).
Bootstrapped CI always produces unit-tests.html, integration-tests.html, and coverage/index.html (placeholders on empty repos) so day-zero bootstrap never blocks, and uploads them together with sast.sarif, trivy.json, and the native test and coverage reports as a workflow artifact. That artifact stays in your GitHub account; coverage/index.html is not sent to LaneSync.
Custom pipelines
If you maintain your own workflow instead of the LaneSync template:Add LaneSync to an existing CI pipeline
Emit standard reports from your tests and scanners, then add the upload action as the last step.
Troubleshooting
See API Reference for full endpoint documentation.