UNPKG

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
"use strict"; /** * 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