fern-jest-client
Version:
Jest test reporter client for Fern platform - captures and sends test execution data to fern-reporter
234 lines • 8.3 kB
JavaScript
;
/**
* Git utilities for extracting repository information
* Similar to fern-ginkgo-client utils
*/
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.findGitRoot = findGitRoot;
exports.getGitInfo = getGitInfo;
exports.getCIInfo = getCIInfo;
exports.toAbsolutePath = toAbsolutePath;
const path = __importStar(require("path"));
const fs = __importStar(require("fs"));
const simple_git_1 = require("simple-git");
const config_1 = require("../config");
/**
* Find the git root directory by walking up the directory tree
*/
function findGitRoot(startPath) {
const searchPath = startPath || (0, config_1.getWorkingDirectory)();
let currentPath = path.resolve(searchPath);
while (currentPath !== path.parse(currentPath).root) {
if (fs.existsSync(path.join(currentPath, '.git'))) {
return currentPath;
}
currentPath = path.dirname(currentPath);
}
return null;
}
/**
* Get git information from the repository
*/
async function getGitInfo() {
const defaultGitInfo = {
branch: 'unknown',
sha: 'unknown'
};
try {
// First try to get from CI environment variables
if ((0, config_1.isCI)()) {
const ciGitInfo = getGitInfoFromCI();
if (ciGitInfo.branch !== 'unknown' || ciGitInfo.sha !== 'unknown') {
return ciGitInfo;
}
}
// Fall back to git repository
const gitRoot = findGitRoot();
if (!gitRoot) {
console.warn('Git repository not found, using default values');
return defaultGitInfo;
}
const git = (0, simple_git_1.simpleGit)(gitRoot);
// Check if this is a git repository
const isRepo = await git.checkIsRepo();
if (!isRepo) {
console.warn('Not a git repository, using default values');
return defaultGitInfo;
}
// Get current branch
let branch = 'unknown';
try {
const branchSummary = await git.branch();
branch = branchSummary.current || 'unknown';
}
catch (error) {
console.warn('Failed to get git branch:', error);
}
// Get latest commit SHA
let sha = 'unknown';
try {
const log = await git.log({ maxCount: 1 });
sha = log.latest?.hash || 'unknown';
}
catch (error) {
console.warn('Failed to get git commit SHA:', error);
}
return {
branch,
sha,
repoPath: gitRoot
};
}
catch (error) {
console.warn('Failed to get git information:', error);
return defaultGitInfo;
}
}
/**
* Extract git information from CI environment variables
*/
function getGitInfoFromCI() {
// GitHub Actions
if ((0, config_1.getEnvVar)(config_1.ENV_VARS.GITHUB_SHA)) {
const ref = (0, config_1.getEnvVar)(config_1.ENV_VARS.GITHUB_REF) || '';
const branch = ref.replace('refs/heads/', '').replace('refs/pull/', 'pr-').replace('/merge', '');
return {
branch: branch || 'unknown',
sha: (0, config_1.getEnvVar)(config_1.ENV_VARS.GITHUB_SHA) || 'unknown'
};
}
// GitLab CI
if ((0, config_1.getEnvVar)(config_1.ENV_VARS.CI_COMMIT_SHA)) {
return {
branch: (0, config_1.getEnvVar)(config_1.ENV_VARS.CI_COMMIT_REF_NAME) || 'unknown',
sha: (0, config_1.getEnvVar)(config_1.ENV_VARS.CI_COMMIT_SHA) || 'unknown'
};
}
// Jenkins
if ((0, config_1.getEnvVar)(config_1.ENV_VARS.GIT_COMMIT)) {
return {
branch: (0, config_1.getEnvVar)(config_1.ENV_VARS.GIT_BRANCH) || 'unknown',
sha: (0, config_1.getEnvVar)(config_1.ENV_VARS.GIT_COMMIT) || 'unknown'
};
}
// CircleCI
if ((0, config_1.getEnvVar)(config_1.ENV_VARS.CIRCLE_SHA1)) {
return {
branch: (0, config_1.getEnvVar)(config_1.ENV_VARS.CIRCLE_BRANCH) || 'unknown',
sha: (0, config_1.getEnvVar)(config_1.ENV_VARS.CIRCLE_SHA1) || 'unknown'
};
}
return {
branch: 'unknown',
sha: 'unknown'
};
}
/**
* Get CI/CD information
*/
function getCIInfo() {
// Check CI providers in order of preference
// GitHub Actions
if ((0, config_1.getEnvVar)(config_1.ENV_VARS.GITHUB_ACTOR)) {
const serverUrl = (0, config_1.getEnvVar)(config_1.ENV_VARS.GITHUB_SERVER_URL) || 'https://github.com';
const repository = (0, config_1.getEnvVar)(config_1.ENV_VARS.GITHUB_REPOSITORY) || '';
const runId = (0, config_1.getEnvVar)(config_1.ENV_VARS.GITHUB_RUN_ID) || '';
return {
actor: (0, config_1.getEnvVar)(config_1.ENV_VARS.GITHUB_ACTOR) || 'github-actions',
buildUrl: `${serverUrl}/${repository}/actions/runs/${runId}`,
isCI: true,
provider: 'github-actions'
};
}
// GitLab CI
if ((0, config_1.getEnvVar)(config_1.ENV_VARS.GITLAB_USER_LOGIN)) {
const projectUrl = (0, config_1.getEnvVar)(config_1.ENV_VARS.CI_PROJECT_URL) || '';
const pipelineId = (0, config_1.getEnvVar)(config_1.ENV_VARS.CI_PIPELINE_ID) || '';
return {
actor: (0, config_1.getEnvVar)(config_1.ENV_VARS.GITLAB_USER_LOGIN) || 'gitlab-ci',
buildUrl: `${projectUrl}/-/pipelines/${pipelineId}`,
isCI: true,
provider: 'gitlab-ci'
};
}
// Jenkins
if ((0, config_1.getEnvVar)(config_1.ENV_VARS.BUILD_USER)) {
return {
actor: (0, config_1.getEnvVar)(config_1.ENV_VARS.BUILD_USER) || 'jenkins',
buildUrl: (0, config_1.getEnvVar)(config_1.ENV_VARS.BUILD_URL) || '',
isCI: true,
provider: 'jenkins'
};
}
// CircleCI
if ((0, config_1.getEnvVar)(config_1.ENV_VARS.CIRCLE_USERNAME)) {
return {
actor: (0, config_1.getEnvVar)(config_1.ENV_VARS.CIRCLE_USERNAME) || 'circleci',
buildUrl: (0, config_1.getEnvVar)(config_1.ENV_VARS.CIRCLE_BUILD_URL) || '',
isCI: true,
provider: 'circleci'
};
}
// Local development or unknown CI
if (!(0, config_1.isCI)()) {
return {
actor: 'local-developer',
buildUrl: '',
isCI: false
};
}
// Generic CI
return {
actor: 'ci-user',
buildUrl: '',
isCI: true,
provider: 'unknown'
};
}
/**
* Convert path to absolute path, expanding ~ for home directory
*/
function toAbsolutePath(inputPath) {
if (inputPath.startsWith('~')) {
const homeDir = process.env.HOME || process.env.USERPROFILE || '';
return path.join(homeDir, inputPath.slice(1));
}
if (path.isAbsolute(inputPath)) {
return inputPath;
}
return path.resolve(inputPath);
}
//# sourceMappingURL=git.js.map