// 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; }
}
}