tgstation-server 5.12.7
The /tg/station 13 server suite
Loading...
Searching...
No Matches
GitLabRemoteFeatures.cs
Go to the documentation of this file.
1using System;
2using System.Threading;
3using System.Threading.Tasks;
4
5using GitLabApiClient;
6using Microsoft.Extensions.Logging;
7
11
13{
18 {
23 public const string GitLabUrl = "https://gitlab.com";
24
26 public override string TestMergeRefSpecFormatter => "merge-requests/{0}/head:{1}";
27
29 public override string TestMergeLocalBranchNameFormatter => "merge-requests/{0}/headrefs/heads/{1}";
30
32 public override RemoteGitProvider? RemoteGitProvider => Api.Models.RemoteGitProvider.GitLab;
33
35 public override string RemoteRepositoryOwner { get; }
36
38 public override string RemoteRepositoryName { get; }
39
45 public GitLabRemoteFeatures(ILogger<GitLabRemoteFeatures> logger, Uri remoteUrl)
46 : base(logger, remoteUrl)
47 {
48 RemoteRepositoryOwner = remoteUrl.Segments[1].TrimEnd('/');
49 RemoteRepositoryName = remoteUrl.Segments[2].TrimEnd('/');
50 if (RemoteRepositoryName.EndsWith(".git", StringComparison.OrdinalIgnoreCase))
52 }
53
55 protected override async Task<Models.TestMerge> GetTestMergeImpl(
56 TestMergeParameters parameters,
57 RepositorySettings repositorySettings,
58 CancellationToken cancellationToken)
59 {
60 var client = repositorySettings.AccessToken != null
61 ? new GitLabClient(GitLabUrl, repositorySettings.AccessToken)
62 : new GitLabClient(GitLabUrl);
63
64 try
65 {
66 var mr = await client
67 .MergeRequests
68 .GetAsync($"{RemoteRepositoryOwner}/{RemoteRepositoryName}", parameters.Number)
69 .WithToken(cancellationToken);
70
71 var revisionToUse = parameters.TargetCommitSha == null
72 || mr.Sha.StartsWith(parameters.TargetCommitSha, StringComparison.OrdinalIgnoreCase)
73 ? mr.Sha
74 : parameters.TargetCommitSha;
75
76 return new Models.TestMerge
77 {
78 Author = mr.Author.Username,
79 BodyAtMerge = mr.Description,
80 TitleAtMerge = mr.Title,
81 Comment = parameters.Comment,
82 Number = parameters.Number,
83 TargetCommitSha = mr.Sha,
84 Url = mr.WebUrl,
85 };
86 }
87 catch (Exception ex)
88 {
89 Logger.LogWarning(ex, "Error retrieving merge request metadata!");
90
91 return new Models.TestMerge
92 {
93 Author = ex.Message,
94 BodyAtMerge = ex.Message,
95 TitleAtMerge = ex.Message,
96 Comment = parameters.Comment,
97 Number = parameters.Number,
98 TargetCommitSha = parameters.TargetCommitSha,
99 Url = ex.Message,
100 };
101 }
102 }
103 }
104}
Represents configurable settings for a git repository.
string? AccessToken
The token/password to access the git repository with.
string? Author
The author of the test merge source.
Parameters for creating a TestMerge.
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.
GitLabRemoteFeatures(ILogger< GitLabRemoteFeatures > logger, Uri remoteUrl)
Initializes a new instance of the GitLabRemoteFeatures class.
override string RemoteRepositoryOwner
If RemoteGitProvider is not RemoteGitProvider.Unknown this will be set with the owner of the reposito...
override string RemoteRepositoryName
If RemoteGitProvider is not RemoteGitProvider.Unknown this will be set with the name of the repositor...
override string TestMergeRefSpecFormatter
Gets a formatter string which creates the remote refspec for fetching the HEAD of passed in test merg...
override async Task< Models.TestMerge > GetTestMergeImpl(TestMergeParameters parameters, RepositorySettings repositorySettings, CancellationToken cancellationToken)
Implementation of GetTestMerge(TestMergeParameters, RepositorySettings, CancellationToken)....
ILogger< GitRemoteFeaturesBase > Logger
The ILogger for the GitRemoteFeaturesBase.
RemoteGitProvider
Indicates the remote git host.