refactor: updated logging messages (#65)

This commit is contained in:
Andrea Lamparelli 2023-07-20 10:05:07 +02:00 committed by GitHub
parent e29dae5073
commit a8db0755a8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
18 changed files with 88 additions and 85 deletions

53
dist/cli/index.js vendored
View file

@ -256,11 +256,11 @@ class ConfigsParser {
// apply validation, throw errors if something is wrong // apply validation, throw errors if something is wrong
// if pr is opened check if the there exists one single commit // if pr is opened check if the there exists one single commit
if (configs.originalPullRequest.state == "open") { if (configs.originalPullRequest.state == "open") {
this.logger.warn("Trying to backport an open pull request!"); this.logger.warn("Trying to backport an open pull request");
} }
// if PR is closed and not merged log a warning // if PR is closed and not merged throw an error
if (configs.originalPullRequest.state == "closed" && !configs.originalPullRequest.merged) { if (configs.originalPullRequest.state == "closed" && !configs.originalPullRequest.merged) {
throw new Error("Provided pull request is closed and not merged!"); throw new Error("Provided pull request is closed and not merged");
} }
return Promise.resolve(configs); return Promise.resolve(configs);
} }
@ -412,7 +412,7 @@ class GitCLIService {
* @param branch branch which should be cloned * @param branch branch which should be cloned
*/ */
async clone(from, to, branch) { async clone(from, to, branch) {
this.logger.info(`Cloning repository ${from} to ${to}.`); this.logger.info(`Cloning repository ${from} to ${to}`);
if (!fs_1.default.existsSync(to)) { if (!fs_1.default.existsSync(to)) {
await (0, simple_git_1.default)().clone(this.remoteWithAuth(from), to, ["--quiet", "--shallow-submodules", "--no-tags", "--branch", branch]); await (0, simple_git_1.default)().clone(this.remoteWithAuth(from), to, ["--quiet", "--shallow-submodules", "--no-tags", "--branch", branch]);
} }
@ -426,7 +426,7 @@ class GitCLIService {
* @param newBranch new branch name * @param newBranch new branch name
*/ */
async createLocalBranch(cwd, newBranch) { async createLocalBranch(cwd, newBranch) {
this.logger.info(`Creating branch ${newBranch}.`); this.logger.info(`Creating branch ${newBranch}`);
await this.git(cwd).checkoutLocalBranch(newBranch); await this.git(cwd).checkoutLocalBranch(newBranch);
} }
/** /**
@ -436,7 +436,7 @@ class GitCLIService {
* @param remoteName [optional] name of the remote, by default 'fork' is used * @param remoteName [optional] name of the remote, by default 'fork' is used
*/ */
async addRemote(cwd, remote, remoteName = "fork") { async addRemote(cwd, remote, remoteName = "fork") {
this.logger.info(`Adding new remote ${remote}.`); this.logger.info(`Adding new remote ${remote}`);
await this.git(cwd).addRemote(remoteName, this.remoteWithAuth(remote)); await this.git(cwd).addRemote(remoteName, this.remoteWithAuth(remote));
} }
/** /**
@ -446,7 +446,7 @@ class GitCLIService {
* @param remote [optional] the remote to fetch, by default origin * @param remote [optional] the remote to fetch, by default origin
*/ */
async fetch(cwd, branch, remote = "origin") { async fetch(cwd, branch, remote = "origin") {
this.logger.info(`Fetching ${remote} ${branch}.`); this.logger.info(`Fetching ${remote} ${branch}`);
await this.git(cwd).fetch(remote, branch, ["--quiet"]); await this.git(cwd).fetch(remote, branch, ["--quiet"]);
} }
/** /**
@ -455,7 +455,7 @@ class GitCLIService {
* @param sha commit sha * @param sha commit sha
*/ */
async cherryPick(cwd, sha, strategy = "recursive", strategyOption = "theirs") { async cherryPick(cwd, sha, strategy = "recursive", strategyOption = "theirs") {
this.logger.info(`Cherry picking ${sha}.`); this.logger.info(`Cherry picking ${sha}`);
const options = ["cherry-pick", "-m", "1", `--strategy=${strategy}`, `--strategy-option=${strategyOption}`, sha]; const options = ["cherry-pick", "-m", "1", `--strategy=${strategy}`, `--strategy-option=${strategyOption}`, sha];
try { try {
await this.git(cwd).raw(options); await this.git(cwd).raw(options);
@ -475,7 +475,7 @@ class GitCLIService {
* @param remote [optional] remote to which the branch should be pushed to, by default 'origin' * @param remote [optional] remote to which the branch should be pushed to, by default 'origin'
*/ */
async push(cwd, branch, remote = "origin", force = false) { async push(cwd, branch, remote = "origin", force = false) {
this.logger.info(`Pushing ${branch} to ${remote}.`); this.logger.info(`Pushing ${branch} to ${remote}`);
const options = ["--quiet"]; const options = ["--quiet"];
if (force) { if (force) {
options.push("--force-with-lease"); options.push("--force-with-lease");
@ -505,9 +505,10 @@ const gitlab_client_1 = __importDefault(__nccwpck_require__(4077));
* Singleton git service factory class * Singleton git service factory class
*/ */
class GitClientFactory { class GitClientFactory {
// this method assumes there already exists a singleton client instance, otherwise it will fail
static getClient() { static getClient() {
if (!GitClientFactory.instance) { if (!GitClientFactory.instance) {
throw new Error("You must call `getOrCreate` method first!"); throw new Error("You must call `getOrCreate` method first");
} }
return GitClientFactory.instance; return GitClientFactory.instance;
} }
@ -518,7 +519,7 @@ class GitClientFactory {
*/ */
static getOrCreate(type, authToken, apiUrl) { static getOrCreate(type, authToken, apiUrl) {
if (GitClientFactory.instance) { if (GitClientFactory.instance) {
GitClientFactory.logger.warn("Git service already initialized!"); GitClientFactory.logger.warn("Git service already initialized");
return GitClientFactory.instance; return GitClientFactory.instance;
} }
this.logger.debug(`Setting up ${type} client: apiUrl=${apiUrl}, token=****`); this.logger.debug(`Setting up ${type} client: apiUrl=${apiUrl}, token=****`);
@ -534,8 +535,9 @@ class GitClientFactory {
} }
return GitClientFactory.instance; return GitClientFactory.instance;
} }
// this is used for testing purposes
static reset() { static reset() {
GitClientFactory.logger.warn("Resetting git service!"); GitClientFactory.logger.warn("Resetting git service");
GitClientFactory.instance = undefined; GitClientFactory.instance = undefined;
} }
} }
@ -641,7 +643,7 @@ class GitHubClient {
return "noreply@github.com"; return "noreply@github.com";
} }
async getPullRequest(owner, repo, prNumber, squash = true) { async getPullRequest(owner, repo, prNumber, squash = true) {
this.logger.info(`Getting pull request ${owner}/${repo}/${prNumber}.`); this.logger.debug(`Fetching pull request ${owner}/${repo}/${prNumber}`);
const { data } = await this.octokit.rest.pulls.get({ const { data } = await this.octokit.rest.pulls.get({
owner: owner, owner: owner,
repo: repo, repo: repo,
@ -670,7 +672,7 @@ class GitHubClient {
} }
// WRITE // WRITE
async createPullRequest(backport) { async createPullRequest(backport) {
this.logger.info(`Creating pull request ${backport.head} -> ${backport.base}.`); this.logger.info(`Creating pull request ${backport.head} -> ${backport.base}`);
this.logger.info(`${JSON.stringify(backport, null, 2)}`); this.logger.info(`${JSON.stringify(backport, null, 2)}`);
const { data } = await this.octokit.pulls.create({ const { data } = await this.octokit.pulls.create({
owner: backport.owner, owner: backport.owner,
@ -809,7 +811,6 @@ const rest_1 = __nccwpck_require__(5375);
class OctokitFactory { class OctokitFactory {
static getOctokit(token, apiUrl) { static getOctokit(token, apiUrl) {
if (!OctokitFactory.octokit) { if (!OctokitFactory.octokit) {
OctokitFactory.logger.info("Creating octokit instance.");
OctokitFactory.octokit = new rest_1.Octokit({ OctokitFactory.octokit = new rest_1.Octokit({
auth: token, auth: token,
userAgent: "kiegroup/git-backporting", userAgent: "kiegroup/git-backporting",
@ -885,7 +886,7 @@ class GitLabClient {
} }
// WRITE // WRITE
async createPullRequest(backport) { async createPullRequest(backport) {
this.logger.info(`Creating pull request ${backport.head} -> ${backport.base}.`); this.logger.info(`Creating pull request ${backport.head} -> ${backport.base}`);
this.logger.info(`${JSON.stringify(backport, null, 2)}`); this.logger.info(`${JSON.stringify(backport, null, 2)}`);
const projectId = this.getProjectId(backport.owner, backport.repo); const projectId = this.getProjectId(backport.owner, backport.repo);
const { data } = await this.client.post(`/projects/${projectId}/merge_requests`, { const { data } = await this.client.post(`/projects/${projectId}/merge_requests`, {
@ -1075,21 +1076,21 @@ class ConsoleLoggerService {
this.verbose = verbose; this.verbose = verbose;
} }
trace(message) { trace(message) {
this.logger.log("[TRACE]", message); this.logger.log("TRACE", message);
} }
debug(message) { debug(message) {
if (this.verbose) { if (this.verbose) {
this.logger.log("[DEBUG]", message); this.logger.log("DEBUG", message);
} }
} }
info(message) { info(message) {
this.logger.log("[INFO]", message); this.logger.log("INFO", message);
} }
warn(message) { warn(message) {
this.logger.log("[WARN]", message); this.logger.log("WARN", message);
} }
error(message) { error(message) {
this.logger.log("[ERROR]", message); this.logger.log("ERROR", message);
} }
} }
exports["default"] = ConsoleLoggerService; exports["default"] = ConsoleLoggerService;
@ -1135,7 +1136,7 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
class Logger { class Logger {
log(prefix, ...str) { log(prefix, ...str) {
// eslint-disable-next-line no-console // eslint-disable-next-line no-console
console.log.apply(console, [prefix, ...str]); console.log.apply(console, [`[${prefix.padEnd(5)}]`, ...str]);
} }
emptyLine() { emptyLine() {
this.log("", ""); this.log("", "");
@ -1175,12 +1176,12 @@ class Runner {
async run() { async run() {
try { try {
await this.execute(); await this.execute();
this.logger.info("Process succeeded!"); this.logger.info("Process succeeded");
process.exit(0); process.exit(0);
} }
catch (error) { catch (error) {
this.logger.error(`${error}`); this.logger.error(`${error}`);
this.logger.info("Process failed!"); this.logger.info("Process failed");
process.exit(1); process.exit(1);
} }
} }
@ -1191,7 +1192,7 @@ class Runner {
// 1. parse args // 1. parse args
const args = this.argsParser.parse(); const args = this.argsParser.parse();
if (args.dryRun) { if (args.dryRun) {
this.logger.warn("Dry run enabled!"); this.logger.warn("Dry run enabled");
} }
// 2. init git service // 2. init git service
const gitClientType = (0, git_util_1.inferGitClient)(args.pullRequest); const gitClientType = (0, git_util_1.inferGitClient)(args.pullRequest);
@ -1252,7 +1253,7 @@ class Runner {
this.logger.info(`Pull request created: ${prUrl}`); this.logger.info(`Pull request created: ${prUrl}`);
} }
else { else {
this.logger.warn("Pull request creation and remote push skipped!"); this.logger.warn("Pull request creation and remote push skipped");
this.logger.info(`${JSON.stringify(backport, null, 2)}`); this.logger.info(`${JSON.stringify(backport, null, 2)}`);
} }
} }

53
dist/gha/index.js vendored
View file

@ -227,11 +227,11 @@ class ConfigsParser {
// apply validation, throw errors if something is wrong // apply validation, throw errors if something is wrong
// if pr is opened check if the there exists one single commit // if pr is opened check if the there exists one single commit
if (configs.originalPullRequest.state == "open") { if (configs.originalPullRequest.state == "open") {
this.logger.warn("Trying to backport an open pull request!"); this.logger.warn("Trying to backport an open pull request");
} }
// if PR is closed and not merged log a warning // if PR is closed and not merged throw an error
if (configs.originalPullRequest.state == "closed" && !configs.originalPullRequest.merged) { if (configs.originalPullRequest.state == "closed" && !configs.originalPullRequest.merged) {
throw new Error("Provided pull request is closed and not merged!"); throw new Error("Provided pull request is closed and not merged");
} }
return Promise.resolve(configs); return Promise.resolve(configs);
} }
@ -383,7 +383,7 @@ class GitCLIService {
* @param branch branch which should be cloned * @param branch branch which should be cloned
*/ */
async clone(from, to, branch) { async clone(from, to, branch) {
this.logger.info(`Cloning repository ${from} to ${to}.`); this.logger.info(`Cloning repository ${from} to ${to}`);
if (!fs_1.default.existsSync(to)) { if (!fs_1.default.existsSync(to)) {
await (0, simple_git_1.default)().clone(this.remoteWithAuth(from), to, ["--quiet", "--shallow-submodules", "--no-tags", "--branch", branch]); await (0, simple_git_1.default)().clone(this.remoteWithAuth(from), to, ["--quiet", "--shallow-submodules", "--no-tags", "--branch", branch]);
} }
@ -397,7 +397,7 @@ class GitCLIService {
* @param newBranch new branch name * @param newBranch new branch name
*/ */
async createLocalBranch(cwd, newBranch) { async createLocalBranch(cwd, newBranch) {
this.logger.info(`Creating branch ${newBranch}.`); this.logger.info(`Creating branch ${newBranch}`);
await this.git(cwd).checkoutLocalBranch(newBranch); await this.git(cwd).checkoutLocalBranch(newBranch);
} }
/** /**
@ -407,7 +407,7 @@ class GitCLIService {
* @param remoteName [optional] name of the remote, by default 'fork' is used * @param remoteName [optional] name of the remote, by default 'fork' is used
*/ */
async addRemote(cwd, remote, remoteName = "fork") { async addRemote(cwd, remote, remoteName = "fork") {
this.logger.info(`Adding new remote ${remote}.`); this.logger.info(`Adding new remote ${remote}`);
await this.git(cwd).addRemote(remoteName, this.remoteWithAuth(remote)); await this.git(cwd).addRemote(remoteName, this.remoteWithAuth(remote));
} }
/** /**
@ -417,7 +417,7 @@ class GitCLIService {
* @param remote [optional] the remote to fetch, by default origin * @param remote [optional] the remote to fetch, by default origin
*/ */
async fetch(cwd, branch, remote = "origin") { async fetch(cwd, branch, remote = "origin") {
this.logger.info(`Fetching ${remote} ${branch}.`); this.logger.info(`Fetching ${remote} ${branch}`);
await this.git(cwd).fetch(remote, branch, ["--quiet"]); await this.git(cwd).fetch(remote, branch, ["--quiet"]);
} }
/** /**
@ -426,7 +426,7 @@ class GitCLIService {
* @param sha commit sha * @param sha commit sha
*/ */
async cherryPick(cwd, sha, strategy = "recursive", strategyOption = "theirs") { async cherryPick(cwd, sha, strategy = "recursive", strategyOption = "theirs") {
this.logger.info(`Cherry picking ${sha}.`); this.logger.info(`Cherry picking ${sha}`);
const options = ["cherry-pick", "-m", "1", `--strategy=${strategy}`, `--strategy-option=${strategyOption}`, sha]; const options = ["cherry-pick", "-m", "1", `--strategy=${strategy}`, `--strategy-option=${strategyOption}`, sha];
try { try {
await this.git(cwd).raw(options); await this.git(cwd).raw(options);
@ -446,7 +446,7 @@ class GitCLIService {
* @param remote [optional] remote to which the branch should be pushed to, by default 'origin' * @param remote [optional] remote to which the branch should be pushed to, by default 'origin'
*/ */
async push(cwd, branch, remote = "origin", force = false) { async push(cwd, branch, remote = "origin", force = false) {
this.logger.info(`Pushing ${branch} to ${remote}.`); this.logger.info(`Pushing ${branch} to ${remote}`);
const options = ["--quiet"]; const options = ["--quiet"];
if (force) { if (force) {
options.push("--force-with-lease"); options.push("--force-with-lease");
@ -476,9 +476,10 @@ const gitlab_client_1 = __importDefault(__nccwpck_require__(4077));
* Singleton git service factory class * Singleton git service factory class
*/ */
class GitClientFactory { class GitClientFactory {
// this method assumes there already exists a singleton client instance, otherwise it will fail
static getClient() { static getClient() {
if (!GitClientFactory.instance) { if (!GitClientFactory.instance) {
throw new Error("You must call `getOrCreate` method first!"); throw new Error("You must call `getOrCreate` method first");
} }
return GitClientFactory.instance; return GitClientFactory.instance;
} }
@ -489,7 +490,7 @@ class GitClientFactory {
*/ */
static getOrCreate(type, authToken, apiUrl) { static getOrCreate(type, authToken, apiUrl) {
if (GitClientFactory.instance) { if (GitClientFactory.instance) {
GitClientFactory.logger.warn("Git service already initialized!"); GitClientFactory.logger.warn("Git service already initialized");
return GitClientFactory.instance; return GitClientFactory.instance;
} }
this.logger.debug(`Setting up ${type} client: apiUrl=${apiUrl}, token=****`); this.logger.debug(`Setting up ${type} client: apiUrl=${apiUrl}, token=****`);
@ -505,8 +506,9 @@ class GitClientFactory {
} }
return GitClientFactory.instance; return GitClientFactory.instance;
} }
// this is used for testing purposes
static reset() { static reset() {
GitClientFactory.logger.warn("Resetting git service!"); GitClientFactory.logger.warn("Resetting git service");
GitClientFactory.instance = undefined; GitClientFactory.instance = undefined;
} }
} }
@ -612,7 +614,7 @@ class GitHubClient {
return "noreply@github.com"; return "noreply@github.com";
} }
async getPullRequest(owner, repo, prNumber, squash = true) { async getPullRequest(owner, repo, prNumber, squash = true) {
this.logger.info(`Getting pull request ${owner}/${repo}/${prNumber}.`); this.logger.debug(`Fetching pull request ${owner}/${repo}/${prNumber}`);
const { data } = await this.octokit.rest.pulls.get({ const { data } = await this.octokit.rest.pulls.get({
owner: owner, owner: owner,
repo: repo, repo: repo,
@ -641,7 +643,7 @@ class GitHubClient {
} }
// WRITE // WRITE
async createPullRequest(backport) { async createPullRequest(backport) {
this.logger.info(`Creating pull request ${backport.head} -> ${backport.base}.`); this.logger.info(`Creating pull request ${backport.head} -> ${backport.base}`);
this.logger.info(`${JSON.stringify(backport, null, 2)}`); this.logger.info(`${JSON.stringify(backport, null, 2)}`);
const { data } = await this.octokit.pulls.create({ const { data } = await this.octokit.pulls.create({
owner: backport.owner, owner: backport.owner,
@ -780,7 +782,6 @@ const rest_1 = __nccwpck_require__(5375);
class OctokitFactory { class OctokitFactory {
static getOctokit(token, apiUrl) { static getOctokit(token, apiUrl) {
if (!OctokitFactory.octokit) { if (!OctokitFactory.octokit) {
OctokitFactory.logger.info("Creating octokit instance.");
OctokitFactory.octokit = new rest_1.Octokit({ OctokitFactory.octokit = new rest_1.Octokit({
auth: token, auth: token,
userAgent: "kiegroup/git-backporting", userAgent: "kiegroup/git-backporting",
@ -856,7 +857,7 @@ class GitLabClient {
} }
// WRITE // WRITE
async createPullRequest(backport) { async createPullRequest(backport) {
this.logger.info(`Creating pull request ${backport.head} -> ${backport.base}.`); this.logger.info(`Creating pull request ${backport.head} -> ${backport.base}`);
this.logger.info(`${JSON.stringify(backport, null, 2)}`); this.logger.info(`${JSON.stringify(backport, null, 2)}`);
const projectId = this.getProjectId(backport.owner, backport.repo); const projectId = this.getProjectId(backport.owner, backport.repo);
const { data } = await this.client.post(`/projects/${projectId}/merge_requests`, { const { data } = await this.client.post(`/projects/${projectId}/merge_requests`, {
@ -1046,21 +1047,21 @@ class ConsoleLoggerService {
this.verbose = verbose; this.verbose = verbose;
} }
trace(message) { trace(message) {
this.logger.log("[TRACE]", message); this.logger.log("TRACE", message);
} }
debug(message) { debug(message) {
if (this.verbose) { if (this.verbose) {
this.logger.log("[DEBUG]", message); this.logger.log("DEBUG", message);
} }
} }
info(message) { info(message) {
this.logger.log("[INFO]", message); this.logger.log("INFO", message);
} }
warn(message) { warn(message) {
this.logger.log("[WARN]", message); this.logger.log("WARN", message);
} }
error(message) { error(message) {
this.logger.log("[ERROR]", message); this.logger.log("ERROR", message);
} }
} }
exports["default"] = ConsoleLoggerService; exports["default"] = ConsoleLoggerService;
@ -1106,7 +1107,7 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
class Logger { class Logger {
log(prefix, ...str) { log(prefix, ...str) {
// eslint-disable-next-line no-console // eslint-disable-next-line no-console
console.log.apply(console, [prefix, ...str]); console.log.apply(console, [`[${prefix.padEnd(5)}]`, ...str]);
} }
emptyLine() { emptyLine() {
this.log("", ""); this.log("", "");
@ -1146,12 +1147,12 @@ class Runner {
async run() { async run() {
try { try {
await this.execute(); await this.execute();
this.logger.info("Process succeeded!"); this.logger.info("Process succeeded");
process.exit(0); process.exit(0);
} }
catch (error) { catch (error) {
this.logger.error(`${error}`); this.logger.error(`${error}`);
this.logger.info("Process failed!"); this.logger.info("Process failed");
process.exit(1); process.exit(1);
} }
} }
@ -1162,7 +1163,7 @@ class Runner {
// 1. parse args // 1. parse args
const args = this.argsParser.parse(); const args = this.argsParser.parse();
if (args.dryRun) { if (args.dryRun) {
this.logger.warn("Dry run enabled!"); this.logger.warn("Dry run enabled");
} }
// 2. init git service // 2. init git service
const gitClientType = (0, git_util_1.inferGitClient)(args.pullRequest); const gitClientType = (0, git_util_1.inferGitClient)(args.pullRequest);
@ -1223,7 +1224,7 @@ class Runner {
this.logger.info(`Pull request created: ${prUrl}`); this.logger.info(`Pull request created: ${prUrl}`);
} }
else { else {
this.logger.warn("Pull request creation and remote push skipped!"); this.logger.warn("Pull request creation and remote push skipped");
this.logger.info(`${JSON.stringify(backport, null, 2)}`); this.logger.info(`${JSON.stringify(backport, null, 2)}`);
} }
} }

View file

@ -24,12 +24,12 @@ import LoggerServiceFactory from "../logger/logger-service-factory";
// if pr is opened check if the there exists one single commit // if pr is opened check if the there exists one single commit
if (configs.originalPullRequest.state == "open") { if (configs.originalPullRequest.state == "open") {
this.logger.warn("Trying to backport an open pull request!"); this.logger.warn("Trying to backport an open pull request");
} }
// if PR is closed and not merged log a warning // if PR is closed and not merged throw an error
if (configs.originalPullRequest.state == "closed" && !configs.originalPullRequest.merged) { if (configs.originalPullRequest.state == "closed" && !configs.originalPullRequest.merged) {
throw new Error("Provided pull request is closed and not merged!"); throw new Error("Provided pull request is closed and not merged");
} }
return Promise.resolve(configs); return Promise.resolve(configs);

View file

@ -60,7 +60,7 @@ export default class GitCLIService {
* @param branch branch which should be cloned * @param branch branch which should be cloned
*/ */
async clone(from: string, to: string, branch: string): Promise<void> { async clone(from: string, to: string, branch: string): Promise<void> {
this.logger.info(`Cloning repository ${from} to ${to}.`); this.logger.info(`Cloning repository ${from} to ${to}`);
if (!fs.existsSync(to)) { if (!fs.existsSync(to)) {
await simpleGit().clone(this.remoteWithAuth(from), to, ["--quiet", "--shallow-submodules", "--no-tags", "--branch", branch]); await simpleGit().clone(this.remoteWithAuth(from), to, ["--quiet", "--shallow-submodules", "--no-tags", "--branch", branch]);
} else { } else {
@ -74,7 +74,7 @@ export default class GitCLIService {
* @param newBranch new branch name * @param newBranch new branch name
*/ */
async createLocalBranch(cwd: string, newBranch: string): Promise<void> { async createLocalBranch(cwd: string, newBranch: string): Promise<void> {
this.logger.info(`Creating branch ${newBranch}.`); this.logger.info(`Creating branch ${newBranch}`);
await this.git(cwd).checkoutLocalBranch(newBranch); await this.git(cwd).checkoutLocalBranch(newBranch);
} }
@ -85,7 +85,7 @@ export default class GitCLIService {
* @param remoteName [optional] name of the remote, by default 'fork' is used * @param remoteName [optional] name of the remote, by default 'fork' is used
*/ */
async addRemote(cwd: string, remote: string, remoteName = "fork"): Promise<void> { async addRemote(cwd: string, remote: string, remoteName = "fork"): Promise<void> {
this.logger.info(`Adding new remote ${remote}.`); this.logger.info(`Adding new remote ${remote}`);
await this.git(cwd).addRemote(remoteName, this.remoteWithAuth(remote)); await this.git(cwd).addRemote(remoteName, this.remoteWithAuth(remote));
} }
@ -96,7 +96,7 @@ export default class GitCLIService {
* @param remote [optional] the remote to fetch, by default origin * @param remote [optional] the remote to fetch, by default origin
*/ */
async fetch(cwd: string, branch: string, remote = "origin"): Promise<void> { async fetch(cwd: string, branch: string, remote = "origin"): Promise<void> {
this.logger.info(`Fetching ${remote} ${branch}.`); this.logger.info(`Fetching ${remote} ${branch}`);
await this.git(cwd).fetch(remote, branch, ["--quiet"]); await this.git(cwd).fetch(remote, branch, ["--quiet"]);
} }
@ -106,7 +106,7 @@ export default class GitCLIService {
* @param sha commit sha * @param sha commit sha
*/ */
async cherryPick(cwd: string, sha: string, strategy = "recursive", strategyOption = "theirs"): Promise<void> { async cherryPick(cwd: string, sha: string, strategy = "recursive", strategyOption = "theirs"): Promise<void> {
this.logger.info(`Cherry picking ${sha}.`); this.logger.info(`Cherry picking ${sha}`);
const options = ["cherry-pick", "-m", "1", `--strategy=${strategy}`, `--strategy-option=${strategyOption}`, sha]; const options = ["cherry-pick", "-m", "1", `--strategy=${strategy}`, `--strategy-option=${strategyOption}`, sha];
try { try {
@ -128,7 +128,7 @@ export default class GitCLIService {
* @param remote [optional] remote to which the branch should be pushed to, by default 'origin' * @param remote [optional] remote to which the branch should be pushed to, by default 'origin'
*/ */
async push(cwd: string, branch: string, remote = "origin", force = false): Promise<void> { async push(cwd: string, branch: string, remote = "origin", force = false): Promise<void> {
this.logger.info(`Pushing ${branch} to ${remote}.`); this.logger.info(`Pushing ${branch} to ${remote}`);
const options = ["--quiet"]; const options = ["--quiet"];
if (force) { if (force) {

View file

@ -13,9 +13,10 @@ export default class GitClientFactory {
private static logger: LoggerService = LoggerServiceFactory.getLogger(); private static logger: LoggerService = LoggerServiceFactory.getLogger();
private static instance?: GitClient; private static instance?: GitClient;
// this method assumes there already exists a singleton client instance, otherwise it will fail
public static getClient(): GitClient { public static getClient(): GitClient {
if (!GitClientFactory.instance) { if (!GitClientFactory.instance) {
throw new Error("You must call `getOrCreate` method first!"); throw new Error("You must call `getOrCreate` method first");
} }
return GitClientFactory.instance; return GitClientFactory.instance;
@ -29,7 +30,7 @@ export default class GitClientFactory {
public static getOrCreate(type: GitClientType, authToken: string | undefined, apiUrl: string): GitClient { public static getOrCreate(type: GitClientType, authToken: string | undefined, apiUrl: string): GitClient {
if (GitClientFactory.instance) { if (GitClientFactory.instance) {
GitClientFactory.logger.warn("Git service already initialized!"); GitClientFactory.logger.warn("Git service already initialized");
return GitClientFactory.instance; return GitClientFactory.instance;
} }
@ -49,8 +50,9 @@ export default class GitClientFactory {
return GitClientFactory.instance; return GitClientFactory.instance;
} }
// this is used for testing purposes
public static reset(): void { public static reset(): void {
GitClientFactory.logger.warn("Resetting git service!"); GitClientFactory.logger.warn("Resetting git service");
GitClientFactory.instance = undefined; GitClientFactory.instance = undefined;
} }
} }

View file

@ -32,7 +32,7 @@ export default class GitHubClient implements GitClient {
} }
async getPullRequest(owner: string, repo: string, prNumber: number, squash = true): Promise<GitPullRequest> { async getPullRequest(owner: string, repo: string, prNumber: number, squash = true): Promise<GitPullRequest> {
this.logger.info(`Getting pull request ${owner}/${repo}/${prNumber}.`); this.logger.debug(`Fetching pull request ${owner}/${repo}/${prNumber}`);
const { data } = await this.octokit.rest.pulls.get({ const { data } = await this.octokit.rest.pulls.get({
owner: owner, owner: owner,
repo: repo, repo: repo,
@ -66,7 +66,7 @@ export default class GitHubClient implements GitClient {
// WRITE // WRITE
async createPullRequest(backport: BackportPullRequest): Promise<string> { async createPullRequest(backport: BackportPullRequest): Promise<string> {
this.logger.info(`Creating pull request ${backport.head} -> ${backport.base}.`); this.logger.info(`Creating pull request ${backport.head} -> ${backport.base}`);
this.logger.info(`${JSON.stringify(backport, null, 2)}`); this.logger.info(`${JSON.stringify(backport, null, 2)}`);
const { data } = await this.octokit.pulls.create({ const { data } = await this.octokit.pulls.create({

View file

@ -12,7 +12,6 @@ export default class OctokitFactory {
public static getOctokit(token: string | undefined, apiUrl: string): Octokit { public static getOctokit(token: string | undefined, apiUrl: string): Octokit {
if (!OctokitFactory.octokit) { if (!OctokitFactory.octokit) {
OctokitFactory.logger.info("Creating octokit instance.");
OctokitFactory.octokit = new Octokit({ OctokitFactory.octokit = new Octokit({
auth: token, auth: token,
userAgent: "kiegroup/git-backporting", userAgent: "kiegroup/git-backporting",

View file

@ -69,7 +69,7 @@ export default class GitLabClient implements GitClient {
// WRITE // WRITE
async createPullRequest(backport: BackportPullRequest): Promise<string> { async createPullRequest(backport: BackportPullRequest): Promise<string> {
this.logger.info(`Creating pull request ${backport.head} -> ${backport.base}.`); this.logger.info(`Creating pull request ${backport.head} -> ${backport.base}`);
this.logger.info(`${JSON.stringify(backport, null, 2)}`); this.logger.info(`${JSON.stringify(backport, null, 2)}`);
const projectId = this.getProjectId(backport.owner, backport.repo); const projectId = this.getProjectId(backport.owner, backport.repo);

View file

@ -12,25 +12,25 @@ export default class ConsoleLoggerService implements LoggerService {
} }
trace(message: string): void { trace(message: string): void {
this.logger.log("[TRACE]", message); this.logger.log("TRACE", message);
} }
debug(message: string): void { debug(message: string): void {
if (this.verbose) { if (this.verbose) {
this.logger.log("[DEBUG]", message); this.logger.log("DEBUG", message);
} }
} }
info(message: string): void { info(message: string): void {
this.logger.log("[INFO]", message); this.logger.log("INFO", message);
} }
warn(message: string): void { warn(message: string): void {
this.logger.log("[WARN]", message); this.logger.log("WARN", message);
} }
error(message: string): void { error(message: string): void {
this.logger.log("[ERROR]", message); this.logger.log("ERROR", message);
} }
} }

View file

@ -6,7 +6,7 @@
log(prefix: string, ...str: string[]) { log(prefix: string, ...str: string[]) {
// eslint-disable-next-line no-console // eslint-disable-next-line no-console
console.log.apply(console, [prefix, ...str]); console.log.apply(console, [`[${prefix.padEnd(5)}]`, ...str]);
} }
emptyLine() { emptyLine() {

View file

@ -30,13 +30,13 @@ export default class Runner {
try { try {
await this.execute(); await this.execute();
this.logger.info("Process succeeded!"); this.logger.info("Process succeeded");
process.exit(0); process.exit(0);
} catch (error) { } catch (error) {
this.logger.error(`${error}`); this.logger.error(`${error}`);
this.logger.info("Process failed!"); this.logger.info("Process failed");
process.exit(1); process.exit(1);
} }
} }
@ -50,7 +50,7 @@ export default class Runner {
const args: Args = this.argsParser.parse(); const args: Args = this.argsParser.parse();
if (args.dryRun) { if (args.dryRun) {
this.logger.warn("Dry run enabled!"); this.logger.warn("Dry run enabled");
} }
// 2. init git service // 2. init git service
@ -123,7 +123,7 @@ export default class Runner {
this.logger.info(`Pull request created: ${prUrl}`); this.logger.info(`Pull request created: ${prUrl}`);
} else { } else {
this.logger.warn("Pull request creation and remote push skipped!"); this.logger.warn("Pull request creation and remote push skipped");
this.logger.info(`${JSON.stringify(backport, null, 2)}`); this.logger.info(`${JSON.stringify(backport, null, 2)}`);
} }
} }

View file

@ -247,7 +247,7 @@ describe("github pull request config parser", () => {
inheritReviewers: true, inheritReviewers: true,
}; };
await expect(() => configParser.parseAndValidate(args)).rejects.toThrow("Provided pull request is closed and not merged!"); await expect(() => configParser.parseAndValidate(args)).rejects.toThrow("Provided pull request is closed and not merged");
}); });
test("override backport pr data inheriting reviewers", async () => { test("override backport pr data inheriting reviewers", async () => {

View file

@ -253,7 +253,7 @@ describe("gitlab merge request config parser", () => {
inheritReviewers: true, inheritReviewers: true,
}; };
await expect(() => configParser.parseAndValidate(args)).rejects.toThrow("Provided pull request is closed and not merged!"); await expect(() => configParser.parseAndValidate(args)).rejects.toThrow("Provided pull request is closed and not merged");
}); });
test("override backport pr data inheriting reviewers", async () => { test("override backport pr data inheriting reviewers", async () => {

View file

@ -289,7 +289,7 @@ describe("cli runner", () => {
"https://github.com/owner/reponame/pull/6666" "https://github.com/owner/reponame/pull/6666"
]); ]);
await expect(() => runner.execute()).rejects.toThrow("Provided pull request is closed and not merged!"); await expect(() => runner.execute()).rejects.toThrow("Provided pull request is closed and not merged");
}); });
test("open pull request", async () => { test("open pull request", async () => {

View file

@ -193,7 +193,7 @@ describe("cli runner", () => {
"https://my.gitlab.host.com/superuser/backporting-example/-/merge_requests/3" "https://my.gitlab.host.com/superuser/backporting-example/-/merge_requests/3"
]); ]);
await expect(() => runner.execute()).rejects.toThrow("Provided pull request is closed and not merged!"); await expect(() => runner.execute()).rejects.toThrow("Provided pull request is closed and not merged");
}); });
test("merged pull request", async () => { test("merged pull request", async () => {

View file

@ -135,7 +135,7 @@ describe("gha runner", () => {
"pull-request": "https://github.com/owner/reponame/pull/6666" "pull-request": "https://github.com/owner/reponame/pull/6666"
}); });
await expect(() => runner.execute()).rejects.toThrow("Provided pull request is closed and not merged!"); await expect(() => runner.execute()).rejects.toThrow("Provided pull request is closed and not merged");
}); });
test("open pull request", async () => { test("open pull request", async () => {

View file

@ -146,7 +146,7 @@ describe("gha runner", () => {
"pull-request": "https://my.gitlab.host.com/superuser/backporting-example/-/merge_requests/3" "pull-request": "https://my.gitlab.host.com/superuser/backporting-example/-/merge_requests/3"
}); });
await expect(() => runner.execute()).rejects.toThrow("Provided pull request is closed and not merged!"); await expect(() => runner.execute()).rejects.toThrow("Provided pull request is closed and not merged");
}); });
test("merged pull request", async () => { test("merged pull request", async () => {

View file

@ -79,7 +79,7 @@ export const putAxiosMocked = async (url: string, _data?: unknown) => {
// GITHUB - OCTOKIT // GITHUB - OCTOKIT
export const mockGitHubClient = (apiUrl = "https://api.github.com"): Moctokit => { export const mockGitHubClient = (apiUrl = "https://api.github.com"): Moctokit => {
logger.debug("Setting up moctokit."); logger.debug("Setting up moctokit..");
const mock = new Moctokit(apiUrl); const mock = new Moctokit(apiUrl);