Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
        /// <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);
            }
        }
Beispiel #3
0
        /// <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);
            }
        }
Beispiel #4
0
        /// <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);
            }
        }
Beispiel #5
0
        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);
        }
Beispiel #6
0
        private async Task <string> GetFullActivityId(ForgeAppBase config)
        {
            var nickname = await _resourceProvider.Nickname;

            return($"{nickname}.{config.ActivityId}+{config.ActivityLabel}");
        }