Skip to content

Commit 4a42b44

Browse files
authored
Merge pull request #2 from GmodNET/dev
Implementation of Pull Request #1 specification
2 parents 0dd8c19 + 9b90f38 commit 4a42b44

23 files changed

+770
-87
lines changed

.config/dotnet-tools.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"version": 1,
3+
"isRoot": true,
4+
"tools": {
5+
"gmodnet.versiontool": {
6+
"version": "0.2.0-alpha.0",
7+
"commands": [
8+
"gmodnet-vt"
9+
]
10+
}
11+
}
12+
}

.github/workflows/CI.yml

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
name: CI/CD
2+
3+
on:
4+
push:
5+
pull_request:
6+
release:
7+
types: [published]
8+
9+
jobs:
10+
build:
11+
12+
name: Build, test, and deploy
13+
14+
runs-on: ubuntu-latest
15+
16+
steps:
17+
- name: Checkout
18+
uses: actions/checkout@v2
19+
20+
- name: Setup .NET Core SDK
21+
uses: actions/[email protected]
22+
with:
23+
dotnet-version: 5.0.101
24+
25+
- name: Test
26+
run: dotnet test -f net5.0
27+
28+
- name: Create NuGet packages
29+
run: dotnet pack -c Release -o nupkgs/
30+
31+
- name: Upload NuGet packages as artifacts
32+
uses: actions/upload-artifact@v2
33+
with:
34+
name: nugets
35+
path: nupkgs/
36+
37+
- name: Push NuGets to DevOps
38+
if: github.event_name == 'push'
39+
run: |
40+
dotnet nuget update source gmodnet-packages --username CI --password ${{ secrets.DEVOPS_TOKEN }} --store-password-in-clear-text
41+
dotnet nuget push nupkgs/GmodNET.VersionTool.*.nupkg --source gmodnet-packages --skip-duplicate --api-key az
42+
dotnet nuget push nupkgs/GmodNET.VersionTool.Core.*.nupkg --source gmodnet-packages --skip-duplicate --api-key az
43+
dotnet nuget push nupkgs/GmodNET.VersionTool.Target.*.nupkg --source gmodnet-packages --skip-duplicate --api-key az
44+
45+
- name: Push NuGets to NuGet.org
46+
if: github.event_name == 'release'
47+
run: |
48+
dotnet nuget push nupkgs/GmodNET.VersionTool.*.nupkg --source nuget --skip-duplicate --api-key ${{ secrets.NUGET_KEY }}
49+
dotnet nuget push nupkgs/GmodNET.VersionTool.Core.*.nupkg --source nuget --skip-duplicate --api-key ${{ secrets.NUGET_KEY }}
50+
dotnet nuget push nupkgs/GmodNET.VersionTool.Target.*.nupkg --source nuget --skip-duplicate --api-key ${{ secrets.NUGET_KEY }}

.gitignore

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1-
bin/
2-
obj/
3-
.vscode/
1+
**/bin/
2+
**/obj/
3+
**/.vscode/
4+
**/.vs/
5+
**/*.user
6+
nupkgs/
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<TargetFrameworks>netcoreapp3.1;net5.0</TargetFrameworks>
5+
6+
<IsPackable>false</IsPackable>
7+
</PropertyGroup>
8+
9+
<ItemGroup>
10+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.8.0-preview-20200812-03" />
11+
<PackageReference Include="xunit" Version="2.4.1" />
12+
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
13+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
14+
<PrivateAssets>all</PrivateAssets>
15+
</PackageReference>
16+
<PackageReference Include="coverlet.collector" Version="1.3.0">
17+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
18+
<PrivateAssets>all</PrivateAssets>
19+
</PackageReference>
20+
<ProjectReference Include="..\GmodNET.VersionTool.Core\GmodNET.VersionTool.Core.csproj" />
21+
<PackageReference Include="LibGit2Sharp" Version="0.26.2" />
22+
<PackageReference Include="semver" Version="2.0.6" />
23+
</ItemGroup>
24+
25+
<ItemGroup>
26+
<None Update="Test1.version.json">
27+
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
28+
</None>
29+
<None Update="Test2.version.json">
30+
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
31+
</None>
32+
<None Update="Test3.version.json">
33+
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
34+
</None>
35+
<None Update="Test4.version.json">
36+
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
37+
</None>
38+
</ItemGroup>
39+
40+
</Project>
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"Version": "1.1.1",
3+
"Codename": "Test1"
4+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"Version": "2.2.2"
3+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"Version": "3.0.2-alpha.1+bugfix",
3+
"Codename": "Test3"
4+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"Key": "value"
3+
}
Lines changed: 173 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,173 @@
1+
using NuGet.Frameworks;
2+
using System;
3+
using Xunit;
4+
using GmodNET.VersionTool.Core;
5+
using System.Text.RegularExpressions;
6+
using System.Threading;
7+
using LibGit2Sharp;
8+
using LibGit2Sharp.Handlers;
9+
using Semver;
10+
11+
namespace GmodNET.VersionTool.Core.Tests
12+
{
13+
public class UnitTests
14+
{
15+
[Fact]
16+
public void Test1()
17+
{
18+
VersionGenerator version_generator = new VersionGenerator("Test1.version.json");
19+
20+
Assert.Equal("1.1.1", version_generator.FullVersion.Split('+')[0]);
21+
}
22+
23+
[Fact]
24+
public void Test2()
25+
{
26+
VersionGenerator version_generator = new VersionGenerator("Test2.version.json");
27+
28+
Assert.Equal("2.2.2", version_generator.FullVersion.Split('+')[0]);
29+
}
30+
31+
[Fact]
32+
public void Test3()
33+
{
34+
VersionGenerator version_generator = new VersionGenerator("Test1.version.json");
35+
36+
Regex codename_checker = new Regex(@"\+codename\.Test1", RegexOptions.ECMAScript);
37+
38+
Assert.Matches(codename_checker, version_generator.FullVersion);
39+
}
40+
41+
[Fact]
42+
public void Test4()
43+
{
44+
VersionGenerator versionGenerator = new VersionGenerator("Test2.version.json");
45+
46+
Regex codename_checker = new Regex(@"codename", RegexOptions.ECMAScript);
47+
48+
Assert.DoesNotMatch(codename_checker, versionGenerator.FullVersion);
49+
}
50+
51+
[Fact]
52+
public void CommitHashTest()
53+
{
54+
using Repository repo = new Repository("../../../../");
55+
56+
VersionGenerator versionGenerator = new VersionGenerator("Test1.version.json");
57+
58+
Assert.Equal(repo.Head.Tip.Sha.Substring(0, 7), versionGenerator.CommitHash);
59+
}
60+
61+
[Fact]
62+
public void BranchTest()
63+
{
64+
using Repository repo = new Repository("../../../../");
65+
66+
VersionGenerator versionGenerator = new VersionGenerator("Test1.version.json");
67+
68+
Assert.Equal(repo.Head.FriendlyName, versionGenerator.BranchName);
69+
}
70+
71+
[Fact]
72+
public void SemVerCompatibilityTest()
73+
{
74+
VersionGenerator a = new VersionGenerator("Test1.version.json");
75+
VersionGenerator b = new VersionGenerator("Test2.version.json");
76+
VersionGenerator c = new VersionGenerator("Test3.version.json");
77+
78+
Assert.True(SemVersion.TryParse(a.FullVersion, out _, true) && SemVersion.TryParse(b.FullVersion, out _, true)
79+
&& SemVersion.TryParse(c.FullVersion, out _, true));
80+
}
81+
82+
[Fact]
83+
public void Test5()
84+
{
85+
VersionGenerator versionGenerator = new VersionGenerator("Test1.version.json");
86+
87+
using Repository repo = new Repository("../../../../");
88+
89+
string expected_version = "1.1.1+codename.Test1.head." + new Regex(@"[^0-9A-Za-z-]+", RegexOptions.ECMAScript).Replace(repo.Head.FriendlyName, "-")
90+
+ ".commit." + repo.Head.Tip.Sha.Substring(0, 7);
91+
92+
Assert.Equal(expected_version, versionGenerator.FullVersion);
93+
}
94+
95+
[Fact]
96+
public void Test6()
97+
{
98+
VersionGenerator versionGenerator = new VersionGenerator("Test2.version.json");
99+
100+
using Repository repo = new Repository("../../../../");
101+
102+
string expected_version = "2.2.2+head." + new Regex(@"[^0-9A-Za-z-]+", RegexOptions.ECMAScript).Replace(repo.Head.FriendlyName, "-")
103+
+ ".commit." + repo.Head.Tip.Sha.Substring(0, 7);
104+
105+
Assert.Equal(expected_version, versionGenerator.FullVersion);
106+
}
107+
108+
[Fact]
109+
public void Test7()
110+
{
111+
VersionGenerator versionGenerator = new VersionGenerator("Test3.version.json");
112+
113+
using Repository repo = new Repository("../../../../");
114+
115+
DateTime time = repo.Head.Tip.Committer.When.UtcDateTime;
116+
117+
string head_name_normalized = new Regex(@"[^0-9A-Za-z-]+", RegexOptions.ECMAScript).Replace(repo.Head.FriendlyName, "-");
118+
119+
string expected_string = "3.0.2-alpha.1."
120+
+ (new DateTimeOffset(time).ToUnixTimeSeconds() - new DateTimeOffset(new DateTime(2020, 1, 1), TimeSpan.Zero).ToUnixTimeSeconds())
121+
+ "." + head_name_normalized
122+
+ "+codename.Test3.head." + head_name_normalized + ".commit." + repo.Head.Tip.Sha.Substring(0, 7) + ".bugfix";
123+
124+
Assert.Equal(expected_string, versionGenerator.FullVersion);
125+
}
126+
127+
[Fact]
128+
public void Test8()
129+
{
130+
VersionGenerator versionGenerator = new VersionGenerator("Test1.version.json");
131+
132+
Assert.Equal("1.1.1", versionGenerator.VersionWithoutBuildData);
133+
}
134+
135+
[Fact]
136+
public void Test9()
137+
{
138+
VersionGenerator versionGenerator = new VersionGenerator("Test2.version.json");
139+
140+
Assert.Equal("2.2.2", versionGenerator.VersionWithoutBuildData);
141+
}
142+
143+
[Fact]
144+
public void Test10()
145+
{
146+
VersionGenerator versionGenerator = new VersionGenerator("Test3.version.json");
147+
148+
using Repository repo = new Repository("../../../../");
149+
150+
DateTime time = repo.Head.Tip.Committer.When.UtcDateTime;
151+
152+
string normalized_head_name = new Regex(@"[^0-9A-Za-z-]+", RegexOptions.ECMAScript).Replace(repo.Head.FriendlyName, "-");
153+
154+
string expected_version = "3.0.2-alpha.1."
155+
+ (new DateTimeOffset(time).ToUnixTimeSeconds() - new DateTimeOffset(new DateTime(2020, 1, 1), TimeSpan.Zero).ToUnixTimeSeconds())
156+
+ "." + normalized_head_name;
157+
158+
Assert.Equal(expected_version, versionGenerator.VersionWithoutBuildData);
159+
}
160+
161+
[Fact]
162+
public void ThrowOnNoFileTest()
163+
{
164+
Assert.ThrowsAny<Exception>(() => { new VersionGenerator("NonExistingFile.v"); });
165+
}
166+
167+
[Fact]
168+
public void IncorrectFileTest()
169+
{
170+
Assert.Throws<ArgumentException>(() => { new VersionGenerator("Test4.version.json"); });
171+
}
172+
}
173+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<Import Project="../GmodNET.VersionTool.Target/GmodNET.VersionTool.Target.targets" />
4+
5+
<PropertyGroup>
6+
<TargetFramework>netstandard2.0</TargetFramework>
7+
<VersionFilePath>../version.json</VersionFilePath>
8+
<PackageIcon>icon.png</PackageIcon>
9+
<Product>GmodNET.VersionTool.Core class library</Product>
10+
<Description>Core class library for GmodNET.VersionTool designed to be used in self-titled CLI tool or other apps/libs.</Description>
11+
<PackageLicenseExpression>MIT</PackageLicenseExpression>
12+
<PackageTags>build-tool; versioning</PackageTags>
13+
<RepositoryUrl>https://github.com/GmodNET/GmodNetVersionTool</RepositoryUrl>
14+
<Company>GmodNET</Company>
15+
<Copyright>Copyright (c) 2020 GmodNET</Copyright>
16+
</PropertyGroup>
17+
18+
<PropertyGroup>
19+
<DocumentationFile>C:\Users\glebc\OneDrive\Code\GmodNetVersionTool\GmodNET.VersionTool.Core\GmodNET.VersionTool.Core.xml</DocumentationFile>
20+
</PropertyGroup>
21+
22+
<ItemGroup>
23+
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
24+
<PackageReference Include="semver" Version="2.0.6" />
25+
<PackageReference Include="LibGit2Sharp" Version="0.26.2" />
26+
</ItemGroup>
27+
28+
<ItemGroup>
29+
<Content Include="../icon.png" PackagePath="/" />
30+
</ItemGroup>
31+
32+
</Project>

0 commit comments

Comments
 (0)