renamed GitVersion.js -> GitVersion.ts, added ToolInstaller and ToolLib

This commit is contained in:
Artur Stolear
2019-11-10 10:59:04 +02:00
parent 02c0ebd58a
commit a1dd63474d
10 changed files with 7694 additions and 3023 deletions

18
src/github/GitVersion.ts Normal file
View File

@@ -0,0 +1,18 @@
import * as core from '@actions/core';
import * as github from '@actions/github';
import { ToolInstaller } from '../ToolInstaller';
import { Proxy as utils } from './Proxy';
try {
let toolInstaller = new ToolInstaller(utils);
toolInstaller.downloadAndInstall('GitVersion.Tool', '5.1.2', false, false);
// `who-to-greet` input defined in action metadata file
const nameToGreet = core.getInput('who-to-greet');
console.log(`Hello ${nameToGreet}!`);
const time = (new Date()).toTimeString();
core.setOutput("time", time);
// Get the JSON webhook payload for the event that triggered the workflow
const payload = JSON.stringify(github.context.payload, undefined, 2)
console.log(`The event payload: ${payload}`);
} catch (error) {
core.setFailed(error.message);
}

20
src/github/Proxy.ts Normal file
View File

@@ -0,0 +1,20 @@
import { find, cacheDir } from '@actions/tool-cache';
import { debug, exportVariable, addPath } from '@actions/core';
import { which } from '@actions/io';
import { isExplicitVersion, evaluateVersions, createTempDir, cleanVersion, executeDotNet } from './ToolLib';
import { IProxy } from '../Interfaces';
export const Proxy: IProxy = {
find : find,
debug: debug,
exportVariable: exportVariable,
addPath: addPath,
which: which,
cacheDir: cacheDir,
isExplicitVersion: isExplicitVersion,
evaluateVersions: evaluateVersions,
cleanVersion: cleanVersion,
createTempDir: createTempDir,
executeDotNet: executeDotNet
}

114
src/github/ToolLib.ts Normal file
View File

@@ -0,0 +1,114 @@
import * as path from 'path';
import * as semver from 'semver';
import * as uuidV4 from "uuid/v4";
import * as io from '@actions/io';
import * as core from '@actions/core';
import * as exec from '@actions/exec';
import { IExecSyncResult } from '../Interfaces';
const cmp = require('semver-compare');
export async function createTempDir(): Promise<string> {
const IS_WINDOWS = process.platform === "win32";
let tempDirectory: string = process.env["RUNNER_TEMP"] || "";
if (!tempDirectory) {
let baseLocation: string;
if (IS_WINDOWS) {
// On Windows use the USERPROFILE env variable
baseLocation = process.env["USERPROFILE"] || "C:\\";
} else {
if (process.platform === "darwin") {
baseLocation = "/Users";
} else {
baseLocation = "/home";
}
}
tempDirectory = path.join(baseLocation, "actions", "temp");
}
const dest = path.join(tempDirectory, uuidV4());
await io.mkdirP(dest);
return dest;
}
/**
* Checks if a version spec is an explicit version (e.g. 1.0.1 or v1.0.1)
* As opposed to a version spec like 1.x
*
* @param versionSpec
*/
export function isExplicitVersion(versionSpec: string): boolean {
let c = semver.clean(versionSpec);
core.debug('isExplicit: ' + c);
let valid = semver.valid(c) != null;
core.debug('explicit? ' + valid);
return valid;
}
/**
* Returns cleaned (removed leading/trailing whitespace, remove '=v' prefix)
* and parsed version, or null if version is invalid.
*/
export function cleanVersion(version: string): string {
core.debug('cleaning: ' + version);
return semver.clean(version);
}
/**
* evaluates a list of versions and returns the latest version matching the version spec
*
* @param versions an array of versions to evaluate
* @param versionSpec a version spec (e.g. 1.x)
*/
export function evaluateVersions(versions: string[], versionSpec: string): string {
let version: string;
core.debug('evaluating ' + versions.length + ' versions');
versions = versions.sort(cmp);
for (let i = versions.length - 1; i >= 0; i--) {
let potential: string = versions[i];
let satisfied: boolean = semver.satisfies(potential, versionSpec);
if (satisfied) {
version = potential;
break;
}
}
if (version) {
core.debug('matched: ' + version);
}
else {
core.debug('match not found');
}
return version;
}
export async function executeDotNet(args: string[]) : Promise<IExecSyncResult> {
let dotnetPath = await io.which("dotnet", true);
let resultCode = 0;
let stdout = '';
let stderr = '';
resultCode = await exec.exec(
`"${dotnetPath}"`,
args,
{
listeners: {
stdout: (data: Buffer) => {
stdout += data.toString();
},
stderr: (data: Buffer) => {
stderr += data.toString();
}
}
});
return {
code: resultCode,
stdout: stdout,
stderr: stderr,
error: null
}
}