| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- "use strict";
- var __create = Object.create;
- var __defProp = Object.defineProperty;
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
- var __getOwnPropNames = Object.getOwnPropertyNames;
- var __getProtoOf = Object.getPrototypeOf;
- var __hasOwnProp = Object.prototype.hasOwnProperty;
- var __export = (target, all) => {
- for (var name in all)
- __defProp(target, name, { get: all[name], enumerable: true });
- };
- var __copyProps = (to, from, except, desc) => {
- if (from && typeof from === "object" || typeof from === "function") {
- for (let key of __getOwnPropNames(from))
- if (!__hasOwnProp.call(to, key) && key !== except)
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
- }
- return to;
- };
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
- // If the importer is in node compatibility mode or this is not an ESM
- // file that has been converted to a CommonJS file using a Babel-
- // compatible transform (i.e. "__esModule" has not been set), then set
- // "default" to the CommonJS "module.exports" for node compatibility.
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
- mod
- ));
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
- var gitCommitInfoPlugin_exports = {};
- __export(gitCommitInfoPlugin_exports, {
- addGitCommitInfoPlugin: () => addGitCommitInfoPlugin
- });
- module.exports = __toCommonJS(gitCommitInfoPlugin_exports);
- var fs = __toESM(require("fs"));
- var import_utils = require("playwright-core/lib/utils");
- const GIT_OPERATIONS_TIMEOUT_MS = 3e3;
- const addGitCommitInfoPlugin = (fullConfig) => {
- fullConfig.plugins.push({ factory: gitCommitInfoPlugin.bind(null, fullConfig) });
- };
- function print(s, ...args) {
- console.log("GitCommitInfo: " + s, ...args);
- }
- function debug(s, ...args) {
- if (!process.env.DEBUG_GIT_COMMIT_INFO)
- return;
- print(s, ...args);
- }
- const gitCommitInfoPlugin = (fullConfig) => {
- return {
- name: "playwright:git-commit-info",
- setup: async (config, configDir) => {
- const metadata = config.metadata;
- const ci = await ciInfo();
- if (!metadata.ci && ci) {
- debug("ci info", ci);
- metadata.ci = ci;
- }
- if (fullConfig.captureGitInfo?.commit || fullConfig.captureGitInfo?.commit === void 0 && ci) {
- const git = await gitCommitInfo(configDir).catch((e) => print("failed to get git commit info", e));
- if (git) {
- debug("commit info", git);
- metadata.gitCommit = git;
- }
- }
- if (fullConfig.captureGitInfo?.diff || fullConfig.captureGitInfo?.diff === void 0 && ci) {
- const diffResult = await gitDiff(configDir, ci).catch((e) => print("failed to get git diff", e));
- if (diffResult) {
- debug(`diff length ${diffResult.length}`);
- metadata.gitDiff = diffResult;
- }
- }
- }
- };
- };
- async function ciInfo() {
- if (process.env.GITHUB_ACTIONS) {
- let pr;
- try {
- const json = JSON.parse(await fs.promises.readFile(process.env.GITHUB_EVENT_PATH, "utf8"));
- pr = { title: json.pull_request.title, number: json.pull_request.number, baseHash: json.pull_request.base.sha };
- } catch {
- }
- return {
- commitHref: `${process.env.GITHUB_SERVER_URL}/${process.env.GITHUB_REPOSITORY}/commit/${process.env.GITHUB_SHA}`,
- commitHash: process.env.GITHUB_SHA,
- prHref: pr ? `${process.env.GITHUB_SERVER_URL}/${process.env.GITHUB_REPOSITORY}/pull/${pr.number}` : void 0,
- prTitle: pr?.title,
- prBaseHash: pr?.baseHash,
- buildHref: `${process.env.GITHUB_SERVER_URL}/${process.env.GITHUB_REPOSITORY}/actions/runs/${process.env.GITHUB_RUN_ID}`
- };
- }
- if (process.env.GITLAB_CI) {
- return {
- commitHref: `${process.env.CI_PROJECT_URL}/-/commit/${process.env.CI_COMMIT_SHA}`,
- commitHash: process.env.CI_COMMIT_SHA,
- buildHref: process.env.CI_JOB_URL,
- branch: process.env.CI_COMMIT_REF_NAME
- };
- }
- if (process.env.JENKINS_URL && process.env.BUILD_URL) {
- return {
- commitHref: process.env.BUILD_URL,
- commitHash: process.env.GIT_COMMIT,
- branch: process.env.GIT_BRANCH
- };
- }
- }
- async function gitCommitInfo(gitDir) {
- const separator = `---786eec917292---`;
- const tokens = [
- "%H",
- // commit hash
- "%h",
- // abbreviated commit hash
- "%s",
- // subject
- "%B",
- // raw body (unwrapped subject and body)
- "%an",
- // author name
- "%ae",
- // author email
- "%at",
- // author date, UNIX timestamp
- "%cn",
- // committer name
- "%ce",
- // committer email
- "%ct",
- // committer date, UNIX timestamp
- ""
- // branch
- ];
- const output = await runGit(`git log -1 --pretty=format:"${tokens.join(separator)}" && git rev-parse --abbrev-ref HEAD`, gitDir);
- if (!output)
- return void 0;
- const [hash, shortHash, subject, body, authorName, authorEmail, authorTime, committerName, committerEmail, committerTime, branch] = output.split(separator);
- return {
- shortHash,
- hash,
- subject,
- body,
- author: {
- name: authorName,
- email: authorEmail,
- time: +authorTime * 1e3
- },
- committer: {
- name: committerName,
- email: committerEmail,
- time: +committerTime * 1e3
- },
- branch: branch.trim()
- };
- }
- async function gitDiff(gitDir, ci) {
- const diffLimit = 1e5;
- if (ci?.prBaseHash) {
- await runGit(`git fetch origin ${ci.prBaseHash} --depth=1 --no-auto-maintenance --no-auto-gc --no-tags --no-recurse-submodules`, gitDir);
- const diff2 = await runGit(`git diff ${ci.prBaseHash} HEAD`, gitDir);
- if (diff2)
- return diff2.substring(0, diffLimit);
- }
- if (ci)
- return;
- const uncommitted = await runGit("git diff", gitDir);
- if (uncommitted === void 0) {
- return;
- }
- if (uncommitted)
- return uncommitted.substring(0, diffLimit);
- const diff = await runGit("git diff HEAD~1", gitDir);
- return diff?.substring(0, diffLimit);
- }
- async function runGit(command, cwd) {
- debug(`running "${command}"`);
- const start = (0, import_utils.monotonicTime)();
- const result = await (0, import_utils.spawnAsync)(
- command,
- [],
- { stdio: "pipe", cwd, timeout: GIT_OPERATIONS_TIMEOUT_MS, shell: true }
- );
- if ((0, import_utils.monotonicTime)() - start > GIT_OPERATIONS_TIMEOUT_MS) {
- print(`timeout of ${GIT_OPERATIONS_TIMEOUT_MS}ms exceeded while running "${command}"`);
- return;
- }
- if (result.code)
- debug(`failure, code=${result.code}
- ${result.stderr}`);
- else
- debug(`success`);
- return result.code ? void 0 : result.stdout.trim();
- }
- // Annotate the CommonJS export names for ESM import in node:
- 0 && (module.exports = {
- addGitCommitInfoPlugin
- });
|