private async Task PostAppBundleAsync(string packagePathname, ForgeAppBase config) { if (!File.Exists(packagePathname)) { throw new Exception($"App Bundle package is not found ({packagePathname})"); } try { // checking existence of the AppBundle await _client.GetAppBundleVersionsAsync(config.Bundle.Id); Alias oldVersion = null; try { // getting version of AppBundle for the particular Alias (label) oldVersion = await _client.GetAppBundleAliasAsync(config.Bundle.Id, config.Label); } catch (System.Net.Http.HttpRequestException e) when(e.Message.Contains("404")) { }; Trace($"Creating new app bundle '{config.Bundle.Id}' version."); await _client.UpdateAppBundleAsync(config.Bundle, config.Label, packagePathname); if (oldVersion != null) { await _client.DeleteAppBundleVersionAsync(config.Bundle.Id, oldVersion.Version); } } catch (System.Net.Http.HttpRequestException e) when(e.Message.Contains("404")) { Trace($"Creating app bundle '{config.Bundle.Id}'."); await _client.CreateAppBundleAsync(config.Bundle, config.Label, packagePathname); } }
/// <summary> /// Create app bundle and activity. /// </summary> /// <param name="packagePathname">Pathname to ZIP with app bundle.</param> /// <param name="config"></param> public async Task InitializeAsync(string packagePathname, ForgeAppBase config) { if (config.HasBundle) { await PostAppBundleAsync(packagePathname, config); } if (config.HasActivity) { await PublishActivityAsync(config); } }
/// <summary> /// Delete app bundle and activity. /// </summary> public async Task CleanUpAsync(ForgeAppBase config) { //remove activity Trace($"Removing '{config.ActivityId}' activity."); await _client.ActivitiesApi.DeleteActivityAsync(config.ActivityId, null, null, false); if (config.HasBundle) { //remove existed app bundle Trace($"Removing '{config.Bundle.Id}' app bundle."); await _client.AppBundlesApi.DeleteAppBundleAsync(config.Bundle.Id, throwOnError : false); } }
/// <summary> /// Create new activity. /// Throws an exception if the activity exists already. /// </summary> private async Task PublishActivityAsync(ForgeAppBase config) { // prepare activity definition var nickname = await _resourceProvider.Nickname; var activity = new Activity { Appbundles = config.GetBundles(nickname), Id = config.ActivityId, Engine = config.Engine, Description = config.Description, CommandLine = config.ActivityCommandLine, Parameters = config.GetActivityParams() }; try { // checking existence of Activity await _client.GetActivityVersionsAsync(config.ActivityId); Alias oldVersion = null; try { // getting version of Activity for the particular Alias (label) oldVersion = await _client.GetActivityAliasAsync(config.ActivityId, config.ActivityLabel); } catch (System.Net.Http.HttpRequestException e) when(e.Message.Contains("404")) { }; Trace($"Creating new activity '{config.ActivityId}' version."); await _client.UpdateActivityAsync(activity, config.ActivityLabel); if (oldVersion != null) { await _client.DeleteActivityVersionAsync(config.ActivityId, oldVersion.Version); } } catch (System.Net.Http.HttpRequestException e) when(e.Message.Contains("404")) { Trace($"Creating activity '{config.ActivityId}'"); await _client.CreateActivityAsync(activity, config.ActivityLabel); } }
public async Task <WorkItemStatus> RunWorkItemAsync(Dictionary <string, IArgument> workItemArgs, ForgeAppBase config) { // create work item var wi = new WorkItem { ActivityId = await GetFullActivityId(config), Arguments = workItemArgs }; // run WI and wait for completion System.Diagnostics.Stopwatch sw = System.Diagnostics.Stopwatch.StartNew(); WorkItemStatus status = await _client.CreateWorkItemAsync(wi); Trace($"Created WI {status.Id}"); while (status.Status == Status.Pending || status.Status == Status.Inprogress) { await Task.Delay(2000); status = await _client.GetWorkitemStatusAsync(status.Id); } Trace($"WI {status.Id} completed with {status.Status} in {sw.ElapsedMilliseconds} ms"); Trace($"{status.ReportUrl}"); await _postProcessing.HandleStatus(status); return(status); }
private async Task <string> GetFullActivityId(ForgeAppBase config) { var nickname = await _resourceProvider.Nickname; return($"{nickname}.{config.ActivityId}+{config.ActivityLabel}"); }