Fix versioning for push event.
This commit is contained in:
@@ -1,10 +1,11 @@
|
||||
import * as core from '@actions/core';
|
||||
import Unity from './unity';
|
||||
import Input from './input';
|
||||
import Action from './action';
|
||||
|
||||
class Project {
|
||||
static get relativePath() {
|
||||
const projectPath = Input.getFromUser().then(result => result.projectPath);
|
||||
// Todo - properly use Input for this.
|
||||
const projectPath = core.getInput('projectPath') || '.';
|
||||
|
||||
return `${projectPath}`;
|
||||
}
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
import * as core from '@actions/core';
|
||||
import { exec } from '@actions/exec';
|
||||
|
||||
class System {
|
||||
static async run(command, arguments_, options) {
|
||||
let result = '';
|
||||
let error = '';
|
||||
let debug = '';
|
||||
|
||||
const listeners = {
|
||||
stdout: dataBuffer => {
|
||||
@@ -12,13 +14,29 @@ class System {
|
||||
stderr: dataBuffer => {
|
||||
error += dataBuffer.toString();
|
||||
},
|
||||
debug: dataString => {
|
||||
debug += dataString.toString();
|
||||
},
|
||||
};
|
||||
|
||||
const exitCode = await exec(command, arguments_, { ...options, listeners });
|
||||
|
||||
if (debug !== '') {
|
||||
core.debug(debug);
|
||||
}
|
||||
|
||||
if (result !== '') {
|
||||
core.info(result);
|
||||
}
|
||||
|
||||
if (exitCode !== 0) {
|
||||
throw new Error(error);
|
||||
}
|
||||
|
||||
if (error !== '') {
|
||||
core.warning(error);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -77,7 +77,7 @@ export default class Versioning {
|
||||
* @See: https://semver.org/
|
||||
*/
|
||||
static async generateSemanticVersion() {
|
||||
await this.fetchAll();
|
||||
await this.fetch();
|
||||
|
||||
if (await this.isDirty()) {
|
||||
throw new Error('Branch is dirty. Refusing to base semantic version on uncommitted changes');
|
||||
@@ -128,8 +128,11 @@ export default class Versioning {
|
||||
}
|
||||
}
|
||||
|
||||
static async fetchAll() {
|
||||
await System.run('git', ['fetch', '--all']);
|
||||
/**
|
||||
* Retrieves refs from the configured remote, unshallow (based on actions/checkout@v2+)
|
||||
*/
|
||||
static async fetch() {
|
||||
await System.run('git', ['fetch', '--unshallow']);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -141,7 +144,14 @@ export default class Versioning {
|
||||
* identifies the current commit.
|
||||
*/
|
||||
static async getVersionDescription() {
|
||||
return System.run('git', ['describe', '--long', '--tags', '--always', `origin/${this.branch}`]);
|
||||
return System.run('git', [
|
||||
'describe',
|
||||
'--long',
|
||||
'--tags',
|
||||
'--always',
|
||||
'--debug',
|
||||
`origin/${this.branch}`,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import * as core from '@actions/core';
|
||||
import NotImplementedException from './error/not-implemented-exception';
|
||||
import System from './system';
|
||||
import Versioning from './versioning';
|
||||
@@ -194,10 +195,46 @@ describe('Versioning', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe('fetchAll', () => {
|
||||
describe('fetch', () => {
|
||||
it('awaits the command', async () => {
|
||||
jest.spyOn(System, 'run').mockResolvedValue(null);
|
||||
await expect(Versioning.fetchAll()).resolves.not.toThrow();
|
||||
await expect(Versioning.fetch()).resolves.not.toThrow();
|
||||
});
|
||||
});
|
||||
|
||||
describe('generateSemanticVersion', () => {
|
||||
it('returns a proper version from description', async () => {
|
||||
jest.spyOn(System, 'run').mockResolvedValue(null);
|
||||
jest.spyOn(core, 'info').mockImplementation(() => {});
|
||||
jest.spyOn(Versioning, 'isDirty').mockResolvedValue(false);
|
||||
jest.spyOn(Versioning, 'hasAnyVersionTags').mockResolvedValue(true);
|
||||
jest.spyOn(Versioning, 'getTotalNumberOfCommits').mockResolvedValue(2);
|
||||
jest.spyOn(Versioning, 'parseSemanticVersion').mockResolvedValue({
|
||||
match: '0.1-2-g1b345678',
|
||||
tag: '0.1',
|
||||
commits: '2',
|
||||
hash: '1b345678',
|
||||
});
|
||||
|
||||
await expect(Versioning.generateSemanticVersion()).resolves.toStrictEqual('0.1.2');
|
||||
});
|
||||
|
||||
it('throws when dirty', async () => {
|
||||
jest.spyOn(System, 'run').mockResolvedValue(null);
|
||||
jest.spyOn(core, 'info').mockImplementation(() => {});
|
||||
jest.spyOn(Versioning, 'isDirty').mockResolvedValue(true);
|
||||
await expect(Versioning.generateSemanticVersion()).rejects.toThrowError();
|
||||
});
|
||||
|
||||
it('falls back to commits only, when no tags are present', async () => {
|
||||
const commits = Math.round(Math.random() * 10);
|
||||
jest.spyOn(System, 'run').mockResolvedValue(null);
|
||||
jest.spyOn(core, 'info').mockImplementation(() => {});
|
||||
jest.spyOn(Versioning, 'isDirty').mockResolvedValue(false);
|
||||
jest.spyOn(Versioning, 'hasAnyVersionTags').mockResolvedValue(false);
|
||||
jest.spyOn(Versioning, 'getTotalNumberOfCommits').mockResolvedValue(commits);
|
||||
|
||||
await expect(Versioning.generateSemanticVersion()).resolves.toStrictEqual(`0.0.${commits}`);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user