You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

Sandbox.cs 3.7 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. // Copyright (c) Microsoft Corporation. All rights reserved.
  2. // Sandbox.cs
  3. // namespace DevTeam.Backend;
  4. // public sealed class Sandbox : AgentBase
  5. // {
  6. // private const string ReminderName = "SandboxRunReminder";
  7. // private readonly IManageAzure _azService;
  8. // // private readonly IPersistentState<SandboxMetadata> _state;
  9. // public Sandbox(IManageAzure azService)
  10. // {
  11. // _azService = azService;
  12. // _state = state;
  13. // }
  14. // public override async Task HandleEvent(Event item)
  15. // {
  16. // ArgumentNullException.ThrowIfNull(item);
  17. // switch (item.Type)
  18. // {
  19. // case nameof(EventTypes.SandboxRunCreated):
  20. // {
  21. // var context = item.ToGithubContext();
  22. // await ScheduleCommitSandboxRun(context.Org, context.Repo, context.ParentNumber!.Value, context.IssueNumber);
  23. // break;
  24. // }
  25. // default:
  26. // break;
  27. // }
  28. // }
  29. // public async Task ScheduleCommitSandboxRun(string org, string repo, long parentIssueNumber, long issueNumber)
  30. // {
  31. // await StoreState(org, repo, parentIssueNumber, issueNumber);
  32. // _reminder = await _reminderRegistry.RegisterOrUpdateReminder(
  33. // callingGrainId: this.GetGrainId(),
  34. // reminderName: ReminderName,
  35. // dueTime: TimeSpan.Zero,
  36. // period: TimeSpan.FromMinutes(1));
  37. // }
  38. // async Task IRemindable.ReceiveReminder(string reminderName, TickStatus status)
  39. // {
  40. // if (!_state.State.IsCompleted)
  41. // {
  42. // var sandboxId = $"sk-sandbox-{_state.State.Org}-{_state.State.Repo}-{_state.State.ParentIssueNumber}-{_state.State.IssueNumber}".ToUpperInvariant();
  43. // if (await _azService.IsSandboxCompleted(sandboxId))
  44. // {
  45. // await _azService.DeleteSandbox(sandboxId);
  46. // await PublishEventAsync(new Event
  47. // {
  48. // Namespace = this.GetPrimaryKeyString(),
  49. // Type = nameof(GithubFlowEventType.SandboxRunFinished),
  50. // Data = new Dictionary<string, string>
  51. // {
  52. // ["org"] = _state.State.Org,
  53. // ["repo"] = _state.State.Repo,
  54. // ["issueNumber"] = _state.State.IssueNumber.ToString(),
  55. // ["parentNumber"] = _state.State.ParentIssueNumber.ToString()
  56. // }
  57. // });
  58. // await Cleanup();
  59. // }
  60. // }
  61. // else
  62. // {
  63. // await Cleanup();
  64. // }
  65. // }
  66. // private async Task StoreState(string org, string repo, long parentIssueNumber, long issueNumber)
  67. // {
  68. // _state.State.Org = org;
  69. // _state.State.Repo = repo;
  70. // _state.State.ParentIssueNumber = parentIssueNumber;
  71. // _state.State.IssueNumber = issueNumber;
  72. // _state.State.IsCompleted = false;
  73. // await _state.WriteStateAsync();
  74. // }
  75. // private async Task Cleanup()
  76. // {
  77. // _state.State.IsCompleted = true;
  78. // await _reminderRegistry.UnregisterReminder(
  79. // this.GetGrainId(), _reminder);
  80. // await _state.WriteStateAsync();
  81. // }
  82. // }
  83. // public class SandboxMetadata
  84. // {
  85. // public string Org { get; set; } = default!;
  86. // public string Repo { get; set; } = default!;
  87. // public long ParentIssueNumber { get; set; }
  88. // public long IssueNumber { get; set; }
  89. // public bool IsCompleted { get; set; }
  90. // }