refactor: vcs detector over branch detector
parent
ccf0047c1c
commit
4cf1810c70
|
|
@ -5,7 +5,7 @@ import { CommandInterface } from './command/command-interface.ts';
|
|||
import { configureLogger } from './middleware/logger-verbosity/index.ts';
|
||||
import { CommandFactory } from './command/command-factory.ts';
|
||||
import { Engine } from './model/engine/engine.ts';
|
||||
import { branchDetection } from './middleware/branch-detection/index.ts';
|
||||
import { vcsDetection } from './middleware/vcs-detection/index.ts';
|
||||
|
||||
export class Cli {
|
||||
private readonly yargs: YargsInstance;
|
||||
|
|
@ -119,7 +119,7 @@ export class Cli {
|
|||
.coerce('projectPath', async (arg) => {
|
||||
return arg.replace(/^~/, getHomeDir()).replace(/\/$/, '');
|
||||
})
|
||||
.middleware([engineDetection, branchDetection])
|
||||
.middleware([engineDetection, vcsDetection])
|
||||
|
||||
// Todo - remove these lines with release 3.0.0
|
||||
.option('unityVersion', {
|
||||
|
|
|
|||
|
|
@ -1,13 +0,0 @@
|
|||
import System from '../../model/system/system.ts';
|
||||
import { BranchDetector } from './branch-detector.ts';
|
||||
|
||||
export const branchDetection = async (argv) => {
|
||||
const { projectPath } = argv;
|
||||
|
||||
const branch = await BranchDetector.getCurrentBranch(projectPath);
|
||||
|
||||
// Todo - determine if we ever want to run the cli on a project that has no git repo.
|
||||
if (!branch) throw new Error('Running GameCI CLI on a project without a git repository is not supported.');
|
||||
|
||||
argv.branch = branch;
|
||||
};
|
||||
|
|
@ -13,6 +13,7 @@ export default class BuildVersionGenerator {
|
|||
this.currentBranch = currentBranch;
|
||||
}
|
||||
|
||||
// Todo - move more of the get detection logic to the vcs detection class
|
||||
public async determineBuildVersion(strategy: string, inputVersion: string, allowDirtyBuild: boolean) {
|
||||
log.info('Versioning strategy:', strategy);
|
||||
|
||||
|
|
@ -116,8 +117,7 @@ export default class BuildVersionGenerator {
|
|||
const [major, minor, patch] = `${tag}.${commits}`.split('.');
|
||||
const threeDigitVersion = /^\d+$/.test(patch) ? `${major}.${minor}.${patch}` : `${major}.0.${minor}`;
|
||||
|
||||
const branch = await this.getCurrentBranch();
|
||||
log.info(`Found semantic version ${threeDigitVersion} for ${branch}@${hash}`);
|
||||
log.info(`Found semantic version ${threeDigitVersion} for ${this.currentBranch}@${hash}`);
|
||||
|
||||
return `${threeDigitVersion}`;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,13 +1,25 @@
|
|||
import System from '../../model/system/system.ts';
|
||||
|
||||
export class BranchDetector {
|
||||
public static async getCurrentBranch(projectPath) {
|
||||
export class GitDetector {
|
||||
private readonly projectPath: string;
|
||||
|
||||
constructor(projectPath) {
|
||||
this.projectPath = projectPath;
|
||||
}
|
||||
|
||||
public async isGitRepository() {
|
||||
const { status } = await System.shellRun(`git -C '${this.projectPath}' rev-parse 2>/dev/null`);
|
||||
|
||||
return status.code === 0;
|
||||
}
|
||||
|
||||
public async getCurrentBranch() {
|
||||
// GitHub pull request, GitHub non pull request
|
||||
let branchName = this.headRef || this.ref?.slice(11);
|
||||
|
||||
// Local
|
||||
if (!branchName) {
|
||||
const { status, output } = await System.shellRun('git branch --show-current', { cwd: projectPath });
|
||||
const { status, output } = await System.shellRun('git branch --show-current', { cwd: this.projectPath });
|
||||
if (!status.success) throw new Error('did not expect "git branch --show-current"');
|
||||
branchName = output;
|
||||
}
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
import { GitDetector } from './git-detector.ts';
|
||||
|
||||
export const vcsDetection = async (argv) => {
|
||||
const { projectPath } = argv;
|
||||
|
||||
const gitDetector = new GitDetector(projectPath);
|
||||
if (await gitDetector.isGitRepository()) {
|
||||
argv.branch = await gitDetector.getCurrentBranch(projectPath);
|
||||
}
|
||||
};
|
||||
Loading…
Reference in New Issue