// Copyright Epic Games, Inc. All Rights Reserved. using System; using System.Collections.Generic; using EpicGames.Horde.Jobs.Graphs; namespace EpicGames.Horde.Issues { /// /// Configuration for an issue workflow /// public interface IWorkflow { /// /// Identifier for this workflow /// WorkflowId Id { get; } /// /// Times of day at which to send a report /// IReadOnlyList ReportTimes { get; } /// /// Name of the tab to post summary data to /// string? SummaryTab { get; } /// /// Channel to post summary information for these templates. /// string? ReportChannel { get; } /// /// Whether to include issues with a warning status in the summary /// bool ReportWarnings { get; } /// /// Whether to group issues by template in the report /// bool GroupIssuesByTemplate { get; } /// /// Channel to post threads for triaging new issues /// string? TriageChannel { get; } /// /// Prefix for all triage messages /// string? TriagePrefix { get; } /// /// Suffix for all triage messages /// string? TriageSuffix { get; } /// /// Instructions posted to triage threads /// string? TriageInstructions { get; } /// /// User id of a Slack user/alias to ping if there is nobody assigned to an issue by default. /// string? TriageAlias { get; } /// /// Whether to include issues with an error status in the triage /// bool TriageErrors { get; } /// /// Whether to include issues with a warning status in the triage /// bool TriageWarnings { get; } /// /// Slack user/alias to ping for specific issue types (such as Systemic), if there is nobody assigned to an issue by default. /// IReadOnlyDictionary? TriageTypeAliases { get; } /// /// Alias to ping if an issue has not been resolved for a certain amount of time /// string? EscalateAlias { get; } /// /// Times after an issue has been opened to escalate to the alias above, in minutes. Continues to notify on the last interval once reaching the end of the list. /// IReadOnlyList EscalateTimes { get; } /// /// Maximum number of people to mention on a triage thread /// int MaxMentions { get; } /// /// Whether to mention people on this thread. Useful to disable for testing. /// bool AllowMentions { get; } /// /// Uses the admin.conversations.invite API to invite users to the channel /// bool InviteRestrictedUsers { get; } /// /// Skips sending reports when there are no active issues. /// bool SkipWhenEmpty { get; } /// /// Whether to show warnings about merging changes into the origin stream. /// bool ShowMergeWarnings { get; } /// /// Additional node annotations implicit in this workflow /// IReadOnlyNodeAnnotations Annotations { get; } /// /// External issue tracking configuration for this workflow /// IWorkflowExternalIssues? ExternalIssues { get; } /// /// Additional issue handlers enabled for this workflow /// IReadOnlyList? IssueHandlers { get; } } /// /// External issue tracking configuration for a workflow /// public interface IWorkflowExternalIssues { /// /// Project key in external issue tracker /// string ProjectKey { get; } /// /// Default component id for issues using workflow /// string DefaultComponentId { get; } /// /// Default issue type id for issues using workflow /// string DefaultIssueTypeId { get; } } }