diff --git a/dist/azure/gitreleasemanager/addasset/icon.png b/dist/azure/gitreleasemanager/addasset/icon.png new file mode 100644 index 0000000..ecca393 Binary files /dev/null and b/dist/azure/gitreleasemanager/addasset/icon.png differ diff --git a/dist/azure/gitreleasemanager/addasset/lib.json b/dist/azure/gitreleasemanager/addasset/lib.json new file mode 100644 index 0000000..4f761e8 --- /dev/null +++ b/dist/azure/gitreleasemanager/addasset/lib.json @@ -0,0 +1,46 @@ +{ + "messages": { + "LIB_UnhandledEx": "Unhandled: %s", + "LIB_FailOnCode": "Failure return code: %d", + "LIB_MkdirFailed": "Unable to create directory '%s'. %s", + "LIB_MkdirFailedFileExists": "Unable to create directory '%s'. Conflicting file exists: '%s'", + "LIB_MkdirFailedInvalidDriveRoot": "Unable to create directory '%s'. Root directory does not exist: '%s'", + "LIB_MkdirFailedInvalidShare": "Unable to create directory '%s'. Unable to verify the directory exists: '%s'. If directory is a file share, please verify the share name is correct, the share is online, and the current process has permission to access the share.", + "LIB_MultilineSecret": "Secrets cannot contain multiple lines", + "LIB_ProcessError": "There was an error when attempting to execute the process '%s'. This may indicate the process failed to start. Error: %s", + "LIB_ProcessExitCode": "The process '%s' failed with exit code %s", + "LIB_ProcessStderr": "The process '%s' failed because one or more lines were written to the STDERR stream", + "LIB_ReturnCode": "Return code: %d", + "LIB_ResourceFileNotExist": "Resource file doesn\\'t exist: %s", + "LIB_ResourceFileAlreadySet": "Resource file has already set to: %s", + "LIB_ResourceFileNotSet": "Resource file haven\\'t set, can\\'t find loc string for key: %s", + "LIB_StdioNotClosed": "The STDIO streams did not close within %s seconds of the exit event from process '%s'. This may indicate a child process inherited the STDIO streams and has not yet exited.", + "LIB_WhichNotFound_Linux": "Unable to locate executable file: '%s'. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also check the file mode to verify the file is executable.", + "LIB_WhichNotFound_Win": "Unable to locate executable file: '%s'. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also verify the file has a valid extension for an executable file.", + "LIB_LocStringNotFound": "Can\\'t find loc string for key: %s", + "LIB_ParameterIsRequired": "%s not supplied", + "LIB_InputRequired": "Input required: %s", + "LIB_InvalidPattern": "Invalid pattern: '%s'", + "LIB_EndpointNotExist": "Endpoint not present: %s", + "LIB_EndpointDataNotExist": "Endpoint data parameter %s not present: %s", + "LIB_EndpointAuthNotExist": "Endpoint auth data not present: %s", + "LIB_InvalidEndpointAuth": "Invalid endpoint auth: %s", + "LIB_InvalidSecureFilesInput": "Invalid secure file input: %s", + "LIB_PathNotFound": "Not found %s: %s", + "LIB_PathHasNullByte": "Path cannot contain null bytes", + "LIB_OperationFailed": "Failed %s: %s", + "LIB_UseFirstGlobMatch": "Multiple workspace matches. using first.", + "LIB_MergeTestResultNotSupported": "Merging test results from multiple files to one test run is not supported on this version of build agent for OSX/Linux, each test result file will be published as a separate test run in VSO/TFS.", + "LIB_PlatformNotSupported": "Platform not supported: %s", + "TOOL_LIB_CachingTool": "Caching tool: %s %s %s", + "_TOOL_LIB_CachingTool.comment": "This informational log message indicates that a tool, that was just downloaded, is being copied into the cache directory. %s %s %s represent the tool name, version information, and processor architecture.", + "TOOL_LIB_Downloading": "Downloading: %s", + "_TOOL_LIB_Downloading.comment": "This information log message indicates that a file is being downloaded. %s represents the URL being downloaded.", + "TOOL_LIB_ExtractingArchive": "Extracting archive", + "_TOOL_LIB_ExtractingArchive.comment": "This informational log message indicates that an archive file is being extracted. For example, a .zip file, .7z file, or .tar.gz file.", + "TOOL_LIB_FoundInCache": "Found tool in cache: %s %s %s", + "_TOOL_LIB_FoundInCache.comment": "This informational log message indicates that the request tool is already cached, and does not need to be downloaded again. %s %s %s represent the tool name, version information, and processor architecture.", + "TOOL_LIB_PrependPath": "Prepending PATH environment variable with directory: %s", + "_TOOL_LIB_PrependPath.comment": "This informational log message indicates that a directory is being prepended to the front of the PATH environment variable. The directories specified by the PATH environment variable are used to resolve the location of command line tools." + } +} \ No newline at end of file diff --git a/dist/azure/gitreleasemanager/addasset/task.json b/dist/azure/gitreleasemanager/addasset/task.json new file mode 100644 index 0000000..e104d40 --- /dev/null +++ b/dist/azure/gitreleasemanager/addasset/task.json @@ -0,0 +1,67 @@ +{ + "id": "b803651c-21ac-4851-9fbf-c75b0e82e4c5", + "name": "gitreleasemanager/addasset", + "friendlyName": "Add Asset GitReleaseManager Task", + "description": "Tool for creating and exporting releases for software applications hosted on GitHub", + "author": "GitTools Contributors", + "helpMarkDown": "See the [documentation](https://gittools.github.io/GitReleaseManager/docs/) for help", + "category": "Build", + "demands": [], + "version": { + "Major": "1", + "Minor": "0", + "Patch": "0" + }, + "minimumAgentVersion": "2.115.0", + "execution": { + "Node": { + "target": "bundle.js", + "argumentFormat": "", + "workingDirectory": "." + } + }, + "instanceNameFormat": "gitreleasemanager/addasset", + "inputs": [{ + "name": "owner", + "type": "string", + "label": "The owner of the repository", + "defaultValue": "", + "required": true, + "helpMarkDown": "The owner of the repository" + }, { + "name": "repository", + "type": "string", + "label": "The name of the repository", + "defaultValue": "", + "required": true, + "helpMarkDown": "The name of the repository" + }, { + "name": "token", + "type": "string", + "label": "The access token to access GitHub with", + "defaultValue": "", + "required": true, + "helpMarkDown": "The access token to access GitHub with" + }, { + "name": "tagName", + "type": "string", + "label": "The name of the release", + "defaultValue": "", + "required": true, + "helpMarkDown": "The name of the release" + }, { + "name": "assets", + "type": "multiLine", + "label": "Path(s) to the file(s) to include in the release", + "defaultValue": "", + "required": false, + "helpMarkDown": "Path(s) to the file(s) to include in the release. Separated by newline" + }, { + "name": "targetDirectory", + "type": "string", + "label": "The directory on which GitReleaseManager should be executed. Defaults to current directory", + "defaultValue": "", + "required": false, + "helpMarkDown": "The directory on which GitReleaseManager should be executed. Defaults to current directory" + }] +} \ No newline at end of file diff --git a/dist/azure/vss-extension.json b/dist/azure/vss-extension.json index 345f7b4..ac89f01 100644 --- a/dist/azure/vss-extension.json +++ b/dist/azure/vss-extension.json @@ -18,7 +18,8 @@ { "path": "gitreleasemanager/discard" }, { "path": "gitreleasemanager/close" }, { "path": "gitreleasemanager/open" }, - { "path": "gitreleasemanager/publish" } + { "path": "gitreleasemanager/publish" }, + { "path": "gitreleasemanager/addasset" } ], "categories": [ "Azure Pipelines" @@ -138,5 +139,14 @@ "properties": { "name": "gitreleasemanager/publish" } + }, { + "id": "addasset-gitreleasemanager-task", + "type": "ms.vss-distributed-task.task", + "targets": [ + "ms.vss-distributed-task.tasks" + ], + "properties": { + "name": "gitreleasemanager/addasset" + } }] } \ No newline at end of file diff --git a/gitreleasemanager/addasset/action.yml b/gitreleasemanager/addasset/action.yml new file mode 100644 index 0000000..abb7ad5 --- /dev/null +++ b/gitreleasemanager/addasset/action.yml @@ -0,0 +1,34 @@ +name: gitreleasemanager-addasset +description: GitHub Action for creating and exporting releases for software applications hosted on GitHub. Adds assets to a release +author: GitTools +branding: + color: gray-dark + icon: git-pull-request +runs: + using: node12 + main: ../../dist/github/gitreleasemanager/addasset/bundle.js +inputs: + owner: + description: The owner of the repository + required: true + default: '' + repository: + description: The name of the repository + required: true + default: '' + token: + description: The access token to access GitHub with + required: true + default: '' + milestone: + description: The milestone to use + required: true + default: '' + assets: + description: Path(s) to the file(s) to include in the release + required: true + default: '' + targetDirectory: + description: The directory on which GitReleaseManager should be executed. Defaults to current directory + required: false + default: '' diff --git a/src/tasks/gitreleasemanager/addasset.ts b/src/tasks/gitreleasemanager/addasset.ts new file mode 100644 index 0000000..e4a1272 --- /dev/null +++ b/src/tasks/gitreleasemanager/addasset.ts @@ -0,0 +1,4 @@ +import "reflect-metadata"; +import { addAsset } from "./main"; + +addAsset(); diff --git a/src/tasks/gitreleasemanager/main.ts b/src/tasks/gitreleasemanager/main.ts index d3a5c27..c8a5665 100644 --- a/src/tasks/gitreleasemanager/main.ts +++ b/src/tasks/gitreleasemanager/main.ts @@ -98,4 +98,19 @@ export async function publish() { } catch (error) { buildAgent.setFailed(error.message, true); } +} + +export async function addAsset() { + try { + + gitReleaseManagerTool.disableTelemetry(); + + const settings = Settings.getAddAssetSettings(buildAgent); + + await gitReleaseManagerTool.addAsset(settings); + + buildAgent.setSucceeded("GitVersionManager added assets to release successfully", true); + } catch (error) { + buildAgent.setFailed(error.message, true); + } } \ No newline at end of file diff --git a/src/tools/gitreleasemanager/models.ts b/src/tools/gitreleasemanager/models.ts index 0164a84..ff76f1f 100644 --- a/src/tools/gitreleasemanager/models.ts +++ b/src/tools/gitreleasemanager/models.ts @@ -30,6 +30,11 @@ export enum PublishFields { tagName = "tagName", } +export enum AddAssetFields { + tagName = "tagName", + assets = "assets", +} + export interface GitReleaseManagerSettings { [CommonFields.repository]: string; [CommonFields.owner]: string; @@ -60,4 +65,9 @@ export interface GitReleaseManagerOpenSettings extends GitReleaseManagerSettings export interface GitReleaseManagerPublishSettings extends GitReleaseManagerSettings { [PublishFields.tagName]: string; +} + +export interface GitReleaseManagerAddAssetSettings extends GitReleaseManagerSettings { + [AddAssetFields.tagName]: string; + [AddAssetFields.assets]: string[]; } \ No newline at end of file diff --git a/src/tools/gitreleasemanager/settings.ts b/src/tools/gitreleasemanager/settings.ts index 50d1023..4536f38 100644 --- a/src/tools/gitreleasemanager/settings.ts +++ b/src/tools/gitreleasemanager/settings.ts @@ -3,12 +3,14 @@ import { GitReleaseManagerSettings, CommonFields, CreateFields, DiscardFields, CloseFields, OpenFields, PublishFields, + AddAssetFields, GitReleaseManagerCreateSettings, GitReleaseManagerDiscardSettings, GitReleaseManagerCloseSettings, GitReleaseManagerOpenSettings, GitReleaseManagerPublishSettings, + GitReleaseManagerAddAssetSettings, } from "./models"; export class Settings { @@ -73,6 +75,18 @@ export class Settings { } } + public static getAddAssetSettings(buildAgent: IBuildAgent): GitReleaseManagerAddAssetSettings { + const tagName = buildAgent.getInput(AddAssetFields.tagName); + const assets = buildAgent.getListInput(AddAssetFields.assets); + + const commonSettings = Settings.getCommonSettings(buildAgent); + return { + ...commonSettings, + tagName, + assets + } + } + private static getCommonSettings(buildAgent: IBuildAgent): GitReleaseManagerSettings { const owner = buildAgent.getInput(CommonFields.owner, true); const repository = buildAgent.getInput(CommonFields.repository, true); diff --git a/src/tools/gitreleasemanager/tool.ts b/src/tools/gitreleasemanager/tool.ts index 9eb0a23..eca88e8 100644 --- a/src/tools/gitreleasemanager/tool.ts +++ b/src/tools/gitreleasemanager/tool.ts @@ -12,6 +12,7 @@ import { GitReleaseManagerCloseSettings, GitReleaseManagerOpenSettings, GitReleaseManagerPublishSettings, + GitReleaseManagerAddAssetSettings, } from "./models"; export interface IGitReleaseManagerTool extends IDotnetTool { @@ -21,6 +22,7 @@ export interface IGitReleaseManagerTool extends IDotnetTool { close(settings: GitReleaseManagerCloseSettings): Promise; open(settings: GitReleaseManagerOpenSettings): Promise; publish(settings: GitReleaseManagerPublishSettings): Promise; + addAsset(settings: GitReleaseManagerAddAssetSettings): Promise; } @injectable() @@ -67,6 +69,12 @@ export class GitReleaseManagerTool extends DotnetTool implements IGitReleaseMana return this.execute("dotnet-gitreleasemanager", args); } + public addAsset(settings: GitReleaseManagerAddAssetSettings): Promise { + const args = this.getAddAssetArguments(settings); + + return this.execute("dotnet-gitreleasemanager", args); + } + private getCommonArguments(settings: GitReleaseManagerSettings): string[] { const args: string[] = []; @@ -155,6 +163,23 @@ export class GitReleaseManagerTool extends DotnetTool implements IGitReleaseMana return args; } + private getAddAssetArguments(settings: GitReleaseManagerAddAssetSettings): string[] { + const args: string[] = ['addasset', ...this.getCommonArguments(settings)]; + + if (settings.tagName) { + args.push("--tagName", settings.tagName); + } + if (settings.assets && settings.assets.length > 0) { + settings.assets = settings.assets.map(asset => { + return path.join(settings.targetDirectory, asset) + }) + + args.push("--assets", settings.assets.join(",")); + } + + return args; + } + private getRepoDir(targetPath: string): string { let workDir: string; const srcDir = this.buildAgent.getSourceDir(); diff --git a/webpack.config.js b/webpack.config.js index b167557..ebbb48d 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -56,6 +56,7 @@ const entryPoints = [ 'gitreleasemanager/close', 'gitreleasemanager/open', 'gitreleasemanager/publish', + 'gitreleasemanager/addasset', ]; module.exports = (env) => {