Skip to content

Commit 3ef67c3

Browse files
authored
Add ci lint job (#860)
* Improve Asserts on LintClientTests * Add Jobs details in LintCi response
1 parent b64cb44 commit 3ef67c3

File tree

4 files changed

+124
-15
lines changed

4 files changed

+124
-15
lines changed

NGitLab.Tests/LintClientTests.cs

Lines changed: 65 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,27 @@ public class LintClientTests
1111
private const string ValidCIYaml = @"
1212
variables:
1313
CI_DEBUG_TRACE: ""true""
14-
build:
14+
build-job:
15+
stage: build
16+
tags:
17+
- Runner-Build
18+
before_script:
19+
- echo before start
20+
- echo before end
1521
script:
16-
- echo test
22+
- echo test start
23+
- echo test end
24+
after_script:
25+
- echo after start
26+
- echo after end
27+
when: always
28+
allow_failure: true
1729
";
1830

1931
private const string InvalidCIYaml = @"
2032
variables:
2133
CI_DEBUG_TRACE: ""true""
22-
build:
34+
build-job:
2335
script:
2436
- echo test
2537
this_key_should_not_exist:
@@ -36,9 +48,38 @@ public async Task LintValidCIYaml()
3648

3749
var result = await context.Client.Lint.ValidateCIYamlContentAsync(project.Id.ToString(), ValidCIYaml, new(), CancellationToken.None);
3850

39-
Assert.That(result.Valid, Is.True);
40-
Assert.That(result.Errors.Length != 0, Is.False);
41-
Assert.That(result.Warnings.Length != 0, Is.False);
51+
Assert.Multiple(() =>
52+
{
53+
Assert.That(result.Valid, Is.True);
54+
Assert.That(result.Errors, Is.Empty);
55+
Assert.That(result.Warnings, Is.Empty);
56+
});
57+
}
58+
59+
[Test]
60+
[NGitLabRetry]
61+
public async Task LintValidCIYamlWithJobs()
62+
{
63+
using var context = await GitLabTestContext.CreateAsync();
64+
var project = context.CreateProject();
65+
var lintClient = context.Client.Lint;
66+
67+
var result = await context.Client.Lint.ValidateCIYamlContentAsync(project.Id.ToString(), ValidCIYaml, new() { IncludeJobs = true }, CancellationToken.None);
68+
69+
Assert.That(result.Jobs, Has.Length.EqualTo(1));
70+
var job = result.Jobs[0];
71+
Assert.Multiple(() =>
72+
{
73+
Assert.That(job.Name, Is.EqualTo("build-job"));
74+
Assert.That(job.Stage, Is.EqualTo("build"));
75+
Assert.That(job.BeforeScript, Is.EqualTo(["echo before start", "echo before end"]));
76+
Assert.That(job.Script, Is.EqualTo(["echo test start", "echo test end"]));
77+
Assert.That(job.AfterScript, Is.EqualTo(["echo after start", "echo after end"]));
78+
Assert.That(job.TagList, Is.EqualTo(["Runner-Build"]));
79+
Assert.That(job.Environment, Is.Null);
80+
Assert.That(job.When, Is.EqualTo("always"));
81+
Assert.That(job.AllowFailure, Is.True);
82+
});
4283
}
4384

4485
[Test]
@@ -51,9 +92,12 @@ public async Task LintInvalidCIYaml()
5192

5293
var result = await context.Client.Lint.ValidateCIYamlContentAsync(project.Id.ToString(), InvalidCIYaml, new(), CancellationToken.None);
5394

54-
Assert.That(result.Valid, Is.False);
55-
Assert.That(result.Errors.Length != 0, Is.True);
56-
Assert.That(result.Warnings.Length != 0, Is.False);
95+
Assert.Multiple(() =>
96+
{
97+
Assert.That(result.Valid, Is.False);
98+
Assert.That(result.Errors, Is.Not.Empty);
99+
Assert.That(result.Warnings, Is.Empty);
100+
});
57101
}
58102

59103
[Test]
@@ -74,9 +118,12 @@ public async Task LintValidCIProjectYaml()
74118

75119
var result = await context.Client.Lint.ValidateProjectCIConfigurationAsync(project.Id.ToString(), new(), CancellationToken.None);
76120

77-
Assert.That(result.Valid, Is.True);
78-
Assert.That(result.Errors.Length != 0, Is.False);
79-
Assert.That(result.Warnings.Length != 0, Is.False);
121+
Assert.Multiple(() =>
122+
{
123+
Assert.That(result.Valid, Is.True);
124+
Assert.That(result.Errors, Is.Empty);
125+
Assert.That(result.Warnings, Is.Empty);
126+
});
80127
}
81128

82129
[Test]
@@ -97,8 +144,11 @@ public async Task LintInvalidProjectCIYaml()
97144

98145
var result = await context.Client.Lint.ValidateProjectCIConfigurationAsync(project.Id.ToString(), new(), CancellationToken.None);
99146

100-
Assert.That(result.Valid, Is.False);
101-
Assert.That(result.Errors.Length != 0, Is.True);
102-
Assert.That(result.Warnings.Length != 0, Is.False);
147+
Assert.Multiple(() =>
148+
{
149+
Assert.That(result.Valid, Is.False);
150+
Assert.That(result.Errors, Is.Not.Empty);
151+
Assert.That(result.Warnings, Is.Empty);
152+
});
103153
}
104154
}

NGitLab/Models/LintCI.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,7 @@ public class LintCI
1717

1818
[JsonPropertyName("warnings")]
1919
public string[] Warnings { get; set; }
20+
21+
[JsonPropertyName("jobs")]
22+
public LintCIJob[] Jobs { get; set; }
2023
}

NGitLab/Models/LintCIJob.cs

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
using System.Text.Json.Serialization;
2+
3+
namespace NGitLab.Models;
4+
5+
public class LintCIJob
6+
{
7+
[JsonPropertyName("name")]
8+
public string Name { get; set; }
9+
10+
[JsonPropertyName("stage")]
11+
public string Stage { get; set; }
12+
13+
[JsonPropertyName("before_script")]
14+
public string[] BeforeScript { get; set; }
15+
16+
[JsonPropertyName("script")]
17+
public string[] Script { get; set; }
18+
19+
[JsonPropertyName("after_script")]
20+
public string[] AfterScript { get; set; }
21+
22+
[JsonPropertyName("tag_list")]
23+
public string[] TagList { get; set; }
24+
25+
[JsonPropertyName("environment")]
26+
public string Environment { get; set; }
27+
28+
[JsonPropertyName("when")]
29+
public string When { get; set; }
30+
31+
[JsonPropertyName("allow_failure")]
32+
public bool AllowFailure { get; set; }
33+
34+
}

NGitLab/PublicAPI.Unshipped.txt

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2578,13 +2578,35 @@ NGitLab.Models.LineRange.Start.set -> void
25782578
NGitLab.Models.LintCI
25792579
NGitLab.Models.LintCI.Errors.get -> string[]
25802580
NGitLab.Models.LintCI.Errors.set -> void
2581+
NGitLab.Models.LintCI.Jobs.get -> NGitLab.Models.LintCIJob[]
2582+
NGitLab.Models.LintCI.Jobs.set -> void
25812583
NGitLab.Models.LintCI.LintCI() -> void
25822584
NGitLab.Models.LintCI.MergedYaml.get -> string
25832585
NGitLab.Models.LintCI.MergedYaml.set -> void
25842586
NGitLab.Models.LintCI.Valid.get -> bool
25852587
NGitLab.Models.LintCI.Valid.set -> void
25862588
NGitLab.Models.LintCI.Warnings.get -> string[]
25872589
NGitLab.Models.LintCI.Warnings.set -> void
2590+
NGitLab.Models.LintCIJob
2591+
NGitLab.Models.LintCIJob.AfterScript.get -> string[]
2592+
NGitLab.Models.LintCIJob.AfterScript.set -> void
2593+
NGitLab.Models.LintCIJob.AllowFailure.get -> bool
2594+
NGitLab.Models.LintCIJob.AllowFailure.set -> void
2595+
NGitLab.Models.LintCIJob.BeforeScript.get -> string[]
2596+
NGitLab.Models.LintCIJob.BeforeScript.set -> void
2597+
NGitLab.Models.LintCIJob.Environment.get -> string
2598+
NGitLab.Models.LintCIJob.Environment.set -> void
2599+
NGitLab.Models.LintCIJob.LintCIJob() -> void
2600+
NGitLab.Models.LintCIJob.Name.get -> string
2601+
NGitLab.Models.LintCIJob.Name.set -> void
2602+
NGitLab.Models.LintCIJob.Script.get -> string[]
2603+
NGitLab.Models.LintCIJob.Script.set -> void
2604+
NGitLab.Models.LintCIJob.Stage.get -> string
2605+
NGitLab.Models.LintCIJob.Stage.set -> void
2606+
NGitLab.Models.LintCIJob.TagList.get -> string[]
2607+
NGitLab.Models.LintCIJob.TagList.set -> void
2608+
NGitLab.Models.LintCIJob.When.get -> string
2609+
NGitLab.Models.LintCIJob.When.set -> void
25882610
NGitLab.Models.LintCIOptions
25892611
NGitLab.Models.LintCIOptions.DryRun.get -> bool?
25902612
NGitLab.Models.LintCIOptions.DryRun.set -> void

0 commit comments

Comments
 (0)