Fix versioning for push event.

This commit is contained in:
Webber
2020-05-01 13:57:42 +02:00
committed by Webber Takken
parent 40564afbaf
commit d01e844eea
6 changed files with 76 additions and 10 deletions

View File

@@ -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}`;
}

View File

@@ -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;
}
}

View File

@@ -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}`,
]);
}
/**

View File

@@ -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}`);
});
});