Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,9 @@ jobs:
| create-comment | Whether the action should comment the output status. | false | true |
| working-directory | Working directory to run the action in | false | "." |
| coverage-pass-score | Coverage passing percentage | false | "90" |
| test-command | Command used to run test suite. | false | "" |

Test command is empty by default, and the command used is: `flutter test --coverage --reporter json --coverage-path ${coverageDir}/lcov.info`. This whole string is replaced with the content of test-command, so it is important to consider that `coverageDir` is not provided.

## Coverage

Expand Down
5 changes: 5 additions & 0 deletions action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,3 +55,8 @@ inputs:
description: "Coverage passing percentage"
required: false
default: "90"

test-command:
description: "Command used to run tests"
required: false
default: ""
52 changes: 20 additions & 32 deletions dist/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -95235,14 +95235,6 @@ const { isUint8Array, isArrayBuffer } = __nccwpck_require__(98253)
const { File: UndiciFile } = __nccwpck_require__(8750)
const { parseMIMEType, serializeAMimeType } = __nccwpck_require__(92147)

let random
try {
const crypto = __nccwpck_require__(77598)
random = (max) => crypto.randomInt(0, max)
} catch {
random = (max) => Math.floor(Math.random(max))
}

let ReadableStream = globalThis.ReadableStream

/** @type {globalThis['File']} */
Expand Down Expand Up @@ -95328,7 +95320,7 @@ function extractBody (object, keepalive = false) {
// Set source to a copy of the bytes held by object.
source = new Uint8Array(object.buffer.slice(object.byteOffset, object.byteOffset + object.byteLength))
} else if (util.isFormDataLike(object)) {
const boundary = `----formdata-undici-0${`${random(1e11)}`.padStart(11, '0')}`
const boundary = `----formdata-undici-0${`${Math.floor(Math.random() * 1e11)}`.padStart(11, '0')}`
const prefix = `--${boundary}\r\nContent-Disposition: form-data`

/*! formdata-polyfill. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> */
Expand Down Expand Up @@ -113312,6 +113304,7 @@ const run = async (isLocal) => {
}
const token = process.env.GITHUB_TOKEN || (0, core_1.getInput)("token");
const runTests = isLocal ? true : (0, core_1.getBooleanInput)("run-tests");
const testCommand = isLocal ? "" : (0, core_1.getInput)("test-command");
const runAnalyze = isLocal ? true : (0, core_1.getBooleanInput)("run-analyze");
const runCoverage = isLocal ? true : (0, core_1.getBooleanInput)("run-coverage");
const runPrevCoverage = isLocal ? true : (0, core_1.getBooleanInput)("run-prev-coverage");
Expand All @@ -113322,7 +113315,7 @@ const run = async (isLocal) => {
let prevCoverage;
if (runPrevCoverage) {
try {
prevCoverage = await (0, prevCoverage_1.retrievePreviousCoverage)(octokit, github_1.context, exports.COVERAGE_DIR);
prevCoverage = await (0, prevCoverage_1.retrievePreviousCoverage)(octokit, github_1.context, exports.COVERAGE_DIR, testCommand);
}
catch (e) {
console.error(e);
Expand All @@ -113331,7 +113324,7 @@ const run = async (isLocal) => {
const behindByStr = runBehindBy ? await (0, behind_1.checkBranchStatus)(octokit, github_1.context) : undefined;
await (0, setup_1.setup)();
const analyzeStr = runAnalyze ? await (0, analyze_1.getAnalyze)() : undefined;
const testStr = runTests ? await (0, runTests_1.getTest)(exports.COVERAGE_DIR) : undefined;
const testStr = runTests ? await (0, runTests_1.getTest)(exports.COVERAGE_DIR, testCommand) : undefined;
const coverageStr = runCoverage
? (0, coverage_1.getCoverage)(prevCoverage, exports.COVERAGE_DIR, score)
: undefined;
Expand Down Expand Up @@ -113722,7 +113715,7 @@ const ARTIFACT_NAME = "coverage";
* @param coverageDirectory - Directory to store coverage report
* @returns Lcov object
*/
const retrievePreviousCoverage = async (octokit, context, coverageDirectory) => {
const retrievePreviousCoverage = async (octokit, context, coverageDirectory, testCommand) => {
(0, core_1.startGroup)("Retrieving previous coverage");
let report;
let baseSHA, headBranch;
Expand Down Expand Up @@ -113769,7 +113762,7 @@ const retrievePreviousCoverage = async (octokit, context, coverageDirectory) =>
}
if (!report) {
(0, core_2.debug)("Artifact not found, will pull coverage from BASE");
report = await generatePreviousCoverage(baseSHA, headBranch, coverageDirectory);
report = await generatePreviousCoverage(baseSHA, headBranch, coverageDirectory, testCommand);
}
else {
try {
Expand All @@ -113787,19 +113780,19 @@ const retrievePreviousCoverage = async (octokit, context, coverageDirectory) =>
exports.retrievePreviousCoverage = retrievePreviousCoverage;
/**
* Generate coverage report from the base branch
* @param prev_sha - Base branch SHA
* @param current_branch - Current branch name
* @param coverage_directory - Directory to store coverage report
* @param prevSha - Base branch SHA
* @param currentBranch - Current branch name
* @param coverageDirectory - Directory to store coverage report
* @returns Previous coverage report as Lcov object
*/
const generatePreviousCoverage = async (prev_sha, current_branch, coverage_directory) => {
const generatePreviousCoverage = async (prevSha, currentBranch, coverageDirectory, testCommand) => {
const artifact = new artifact_1.DefaultArtifactClient();
await (0, exec_1.exec)(`git checkout ${prev_sha}`);
await (0, exec_1.exec)(`git checkout ${prevSha}`);
let report;
try {
await (0, runTests_1.getTest)(coverage_directory);
report = await (0, utils_1.importLcov)(coverage_directory);
const { id, size } = await artifact.uploadArtifact(ARTIFACT_NAME + "-" + prev_sha, [`${coverage_directory}/${utils_1.COV_FILE}`], ".", {});
await (0, runTests_1.getTest)(coverageDirectory, testCommand);
report = await (0, utils_1.importLcov)(coverageDirectory);
const { id, size } = await artifact.uploadArtifact(ARTIFACT_NAME + "-" + prevSha, [`${coverageDirectory}/${utils_1.COV_FILE}`], ".", {});
(0, core_2.debug)(`Artifact uploaded with id: ${id} and size: ${size}`);
}
catch (e) {
Expand All @@ -113808,7 +113801,7 @@ const generatePreviousCoverage = async (prev_sha, current_branch, coverage_direc
finally {
await (0, exec_1.exec)(`git reset --hard`);
await (0, exec_1.exec)(`git clean -d -f .`);
await (0, exec_1.exec)(`git checkout ${current_branch}`);
await (0, exec_1.exec)(`git checkout ${currentBranch}`);
return report;
}
};
Expand Down Expand Up @@ -113900,13 +113893,16 @@ exports.TEST_ERROR = "⚠️ - Error running tests";
* @param coverageDir - Directory to store coverage report
* @returns Test result as a stepResponse object
*/
const getTest = async (coverageDir) => {
const getTest = async (coverageDir, testCommand) => {
(0, core_1.startGroup)("Running tests");
let response;
let stdout = "";
let stderr = "";
try {
await (0, exec_1.exec)(`flutter test --coverage --reporter json --coverage-path ${coverageDir}/lcov.info`, [], {
const command = testCommand.length !== 0
? testCommand
: `flutter test --coverage --reporter json --coverage-path ${coverageDir}/lcov.info`;
await (0, exec_1.exec)(command, [], {
listeners: {
stdout: (data) => (stdout += data.toString()),
stderr: (data) => (stderr += data.toString()),
Expand Down Expand Up @@ -114213,14 +114209,6 @@ module.exports = require("node:child_process");

/***/ }),

/***/ 77598:
/***/ ((module) => {

"use strict";
module.exports = require("node:crypto");

/***/ }),

/***/ 78474:
/***/ ((module) => {

Expand Down
5 changes: 3 additions & 2 deletions src/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ const run = async (isLocal: boolean) => {
const token = process.env.GITHUB_TOKEN || getInput("token");

const runTests = isLocal ? true : getBooleanInput("run-tests");
const testCommand = isLocal ? "" : getInput("test-command");
const runAnalyze = isLocal ? true : getBooleanInput("run-analyze");
const runCoverage = isLocal ? true : getBooleanInput("run-coverage");
const runPrevCoverage = isLocal ? true : getBooleanInput("run-prev-coverage");
Expand All @@ -43,7 +44,7 @@ const run = async (isLocal: boolean) => {
let prevCoverage: Lcov | undefined;
if (runPrevCoverage) {
try {
prevCoverage = await retrievePreviousCoverage(octokit, context, COVERAGE_DIR);
prevCoverage = await retrievePreviousCoverage(octokit, context, COVERAGE_DIR, testCommand);
} catch (e) {
console.error(e);
}
Expand All @@ -53,7 +54,7 @@ const run = async (isLocal: boolean) => {
await setup();

const analyzeStr: stepResponse | undefined = runAnalyze ? await getAnalyze() : undefined;
const testStr: stepResponse | undefined = runTests ? await getTest(COVERAGE_DIR) : undefined;
const testStr: stepResponse | undefined = runTests ? await getTest(COVERAGE_DIR, testCommand) : undefined;
const coverageStr: stepResponse | undefined = runCoverage
? getCoverage(prevCoverage, COVERAGE_DIR, score)
: undefined;
Expand Down
30 changes: 16 additions & 14 deletions src/scripts/prevCoverage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@ const ARTIFACT_NAME = "coverage";
export const retrievePreviousCoverage = async (
octokit: InstanceType<typeof GitHub>,
context: Context,
coverageDirectory: string
coverageDirectory: string,
testCommand: string
): Promise<Lcov> => {
startGroup("Retrieving previous coverage");
let report: Lcov | undefined;
Expand Down Expand Up @@ -80,7 +81,7 @@ export const retrievePreviousCoverage = async (
}
if (!report) {
debug("Artifact not found, will pull coverage from BASE");
report = await generatePreviousCoverage(baseSHA, headBranch, coverageDirectory);
report = await generatePreviousCoverage(baseSHA, headBranch, coverageDirectory, testCommand);
} else {
try {
await exec(`rm ${coverageDirectory}/${COV_FILE}`);
Expand All @@ -96,26 +97,27 @@ export const retrievePreviousCoverage = async (

/**
* Generate coverage report from the base branch
* @param prev_sha - Base branch SHA
* @param current_branch - Current branch name
* @param coverage_directory - Directory to store coverage report
* @param prevSha - Base branch SHA
* @param currentBranch - Current branch name
* @param coverageDirectory - Directory to store coverage report
* @returns Previous coverage report as Lcov object
*/
const generatePreviousCoverage = async (
prev_sha: string,
current_branch: string,
coverage_directory: string
prevSha: string,
currentBranch: string,
coverageDirectory: string,
testCommand: string
): Promise<Lcov | undefined> => {
const artifact = new DefaultArtifactClient();
await exec(`git checkout ${prev_sha}`);
await exec(`git checkout ${prevSha}`);
let report: Lcov | undefined;
try {
await getTest(coverage_directory);
report = await importLcov(coverage_directory);
await getTest(coverageDirectory, testCommand);
report = await importLcov(coverageDirectory);

const { id, size } = await artifact.uploadArtifact(
ARTIFACT_NAME + "-" + prev_sha,
[`${coverage_directory}/${COV_FILE}`],
ARTIFACT_NAME + "-" + prevSha,
[`${coverageDirectory}/${COV_FILE}`],
".",
{}
);
Expand All @@ -126,7 +128,7 @@ const generatePreviousCoverage = async (
} finally {
await exec(`git reset --hard`);
await exec(`git clean -d -f .`);
await exec(`git checkout ${current_branch}`);
await exec(`git checkout ${currentBranch}`);
return report;
}
};
8 changes: 6 additions & 2 deletions src/scripts/runTests.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,18 @@ export const TEST_ERROR = "⚠️ - Error running tests";
* @param coverageDir - Directory to store coverage report
* @returns Test result as a stepResponse object
*/
export const getTest = async (coverageDir: string): Promise<stepResponse> => {
export const getTest = async (coverageDir: string, testCommand: string): Promise<stepResponse> => {
startGroup("Running tests");
let response: stepResponse | undefined;
let stdout: string = "";
let stderr: string = "";

try {
await exec(`flutter test --coverage --reporter json --coverage-path ${coverageDir}/lcov.info`, [], {
const command =
testCommand.length !== 0
? testCommand
: `flutter test --coverage --reporter json --coverage-path ${coverageDir}/lcov.info`;
await exec(command, [], {
listeners: {
stdout: (data) => (stdout += data.toString()),
stderr: (data) => (stderr += data.toString()),
Expand Down
Loading