tgstation-server 6.16.0
The /tg/station 13 server suite
Loading...
Searching...
No Matches
GitLabRemoteFeatures.cs
Go to the documentation of this file.
1using System;
2using System.Globalization;
3using System.Threading;
4using System.Threading.Tasks;
5
6using Microsoft.Extensions.Logging;
7
8using StrawberryShake;
9
12
14{
19 {
24 public const string GitLabUrl = "https://gitlab.com";
25
27 public override string TestMergeRefSpecFormatter => "merge-requests/{0}/head:{1}";
28
30 public override string TestMergeLocalBranchNameFormatter => "merge-requests/{0}/headrefs/heads/{1}";
31
33 public override RemoteGitProvider? RemoteGitProvider => Api.Models.RemoteGitProvider.GitLab;
34
40 public GitLabRemoteFeatures(ILogger<GitLabRemoteFeatures> logger, Uri remoteUrl)
41 : base(logger, remoteUrl)
42 {
43 }
44
46 protected override async ValueTask<Models.TestMerge> GetTestMergeImpl(
47 TestMergeParameters parameters,
48 RepositorySettings repositorySettings,
49 CancellationToken cancellationToken)
50 {
51 await using var client = await GraphQLGitLabClientFactory.CreateClient(repositorySettings.AccessToken);
52 try
53 {
54 var operationResult = await client.GraphQL.GetMergeRequest.ExecuteAsync(
55 $"{RemoteRepositoryOwner}/{RemoteRepositoryName}",
56 parameters.Number.ToString(CultureInfo.InvariantCulture),
57 cancellationToken);
58
59 operationResult.EnsureNoErrors();
60 var mr = operationResult.Data?.Project?.MergeRequest ?? throw new InvalidOperationException("GitLab MergeRequest check returned null!");
61
62 return new Models.TestMerge
63 {
64 Author = mr.Author?.Username,
65 BodyAtMerge = mr.Description,
66 TitleAtMerge = mr.Title,
67 Comment = parameters.Comment,
68 Number = parameters.Number,
69 TargetCommitSha = mr.DiffHeadSha,
70 Url = mr.WebUrl,
71 };
72 }
73 catch (Exception ex)
74 {
75 Logger.LogWarning(ex, "Error retrieving merge request metadata!");
76
77 return new Models.TestMerge
78 {
79 Author = ex.Message,
80 BodyAtMerge = ex.Message,
81 TitleAtMerge = ex.Message,
82 Comment = parameters.Comment,
83 Number = parameters.Number,
84 TargetCommitSha = parameters.TargetCommitSha,
85 Url = $"https://gitlab.com/{RemoteRepositoryOwner}/{RemoteRepositoryName}/-/merge_requests/{parameters.Number}",
86 };
87 }
88 }
89 }
90}
string? Author
The author of the test merge source.
Represents configurable settings for a git repository.
string? AccessToken
The token/password to access the git repository with. Can also be a TGS encoded app private key....
virtual ? string TargetCommitSha
The sha of the test merge revision to merge. If not specified, the latest commit from the source will...
string? Comment
Optional comment about the test.
int Number
The number of the test merge source.
override async ValueTask< Models.TestMerge > GetTestMergeImpl(TestMergeParameters parameters, RepositorySettings repositorySettings, CancellationToken cancellationToken)
GitLabRemoteFeatures(ILogger< GitLabRemoteFeatures > logger, Uri remoteUrl)
Initializes a new instance of the GitLabRemoteFeatures class.
override string TestMergeRefSpecFormatter
Gets a formatter string which creates the remote refspec for fetching the HEAD of passed in test merg...
ILogger< GitRemoteFeaturesBase > Logger
The ILogger for the GitRemoteFeaturesBase.
static async ValueTask< IGraphQLGitLabClient > CreateClient(string? bearerToken=null)
Sets up a IGraphQLGitLabClient.
RemoteGitProvider
Indicates the remote git host.