@flakiness/sdk
v2.7.0
Published
Comprehensive SDK for creating and managing Flakiness JSON Reports in Node.js
Downloads
7,641
Readme
Flakiness Node.js SDK
The Flakiness SDK provides a comprehensive set of tools for creating and managing Flakiness JSON Reports in Node.js.
Installation
npm i @flakiness/sdk @flakiness/flakiness-reportRequires Node.js ^20.17.0 or >=22.9.0.
Quick Start
Here's a minimal example of creating a Flakiness JSON Report:
import { FlakinessReport } from '@flakiness/flakiness-report';
import {
GitWorktree,
ReportUtils,
writeReport,
uploadReport,
CIUtils
} from '@flakiness/sdk';
// Initialize git worktree and environment
const worktree = GitWorktree.create(process.cwd());
const env = ReportUtils.createEnvironment({ name: 'CI' });
// Create a simple test report
const report: FlakinessReport.Report = {
category: 'testreport',
commitId: worktree.headCommitId(),
title: process.env.FLAKINESS_TITLE,
url: CIUtils.runUrl(),
environments: [env],
suites: [{
title: 'My Test Suite',
type: 'describe',
tests: [{
title: 'My Test',
location: { file: 'test.spec.ts', line: 10, column: 1 },
attempts: [{
environmentIdx: 0,
status: 'passed',
expectedStatus: 'passed',
duration: 100 as FlakinessReport.DurationMS,
}],
}],
}],
startTimestamp: Date.now() as FlakinessReport.UnixTimestampMS,
duration: 100 as FlakinessReport.DurationMS,
};
// Write report to disk or upload to Flakiness.io
await writeReport(report, [], './flakiness-report');
// Or: await uploadReport(report, [], { flakinessAccessToken: 'your-token' });Entry Points
The SDK provides two entry points:
@flakiness/sdk
The main entry point for Node.js environments. Provides full access to all SDK functionality including:
- Git repository utilities
- File system operations
- System resource monitoring
- Report upload/download
- Local report viewing
@flakiness/sdk/browser
A browser-compatible entry point with a subset of utilities that work in browser environments. Exports:
ReportUtils- Browser-safe utilities (normalizeReport, stripAnsi, visitTests)
Use this entry point when you need to process or manipulate reports in browser-based tools or web applications.
Top-Level Exports
Building Reports
CIUtils- Utilities to extract CI/CD information (run URLs, run titles, environment detection)GithubOIDC- GitHub Actions OIDC integration for passwordless Flakiness.io authenticationGitWorktree- Git repository utilities for path conversion and commit informationReportUtils- Namespace with utilities for report creation and manipulation:createEnvironment()- Create environment objects with system informationnormalizeReport()- Deduplicate environments, suites, and testscollectSources()- Extract source code snippets for locations in the reportstripAnsi()- Remove ANSI escape codes from stringsvisitTests()- Recursively visit all tests in a reportcreateFileAttachment()/createDataAttachment()- Create report attachments
CPUUtilization- Track CPU utilization over time via periodic samplingRAMUtilization- Track RAM utilization over time via periodic sampling
Working with Reports
readReport()- Read a Flakiness report and its attachments from diskshowReport()- Start a local server and open the report in your browsershowReportCommand()- Build a shell command for opening the report later with the Flakiness CLIuploadReport()- Upload reports and attachments to Flakiness.iowriteReport()- Write reports to disk in the standard Flakiness report format
Uploading Reports
uploadReport() authenticates using one of the following methods (in order of priority):
Access token — pass
flakinessAccessTokenoption or set theFLAKINESS_ACCESS_TOKENenvironment variable.GitHub Actions OIDC — when running inside GitHub Actions,
uploadReportcan authenticate automatically without an access token. This works when both conditions are met:- The report has
flakinessProjectset to a flakiness project identifier (e.g."org/proj"). - The flakiness project is bound to the GitHub repository that runs the action.
Your GitHub Actions workflow must grant the
id-token: writepermission:permissions: id-token: writeconst report: FlakinessReport.Report = { flakinessProject: 'my-org/my-project', // ... rest of the report }; // No access token needed — OIDC authentication is used automatically. await uploadReport(report, attachments);- The report has
If neither method is available, the upload is skipped with a 'skipped' status.
