Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

v1.4.0 #7

Merged
merged 4 commits into from
Jun 2, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
13 changes: 10 additions & 3 deletions .github/workflows/build-and-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ on:

env:
PROJECT_PATH: MinecraftJars/MinecraftJars.csproj
PROJECT_PATH_EXTENSION: MinecraftJars/MinecraftJars.csproj
PACKAGE_OUTPUT_DIR: ${{ github.workspace }}/output
NUGET_SOURCE_URL: "https://api.nuget.org/v3/index.json"

Expand All @@ -24,17 +25,23 @@ jobs:
dotnet-version: "7.0.x"

- name: "Restore packages"
run: dotnet restore ${{ env.PROJECT_PATH }}
run: |
dotnet restore ${{ env.PROJECT_PATH }}
dotnet restore ${{ env.PROJECT_PATH_EXTENSION }}

- name: "Build project"
run: dotnet build ${{ env.PROJECT_PATH }} --no-restore --configuration Release
run: |
dotnet build ${{ env.PROJECT_PATH }} --no-restore --configuration Release
dotnet build ${{ env.PROJECT_PATH_EXTENSION }} --no-restore --configuration Release

- name: "Get version"
id: version
uses: battila7/get-version-action@v2

- name: "Pack project"
run: dotnet pack ${{ env.PROJECT_PATH }} --no-restore --configuration Release --p:PackageVersion=${{ steps.version.outputs.version-without-v }} --output ${{ env.PACKAGE_OUTPUT_DIR }}
run: |
dotnet pack ${{ env.PROJECT_PATH }} --no-restore --configuration Release --p:PackageVersion=${{ steps.version.outputs.version-without-v }} --output ${{ env.PACKAGE_OUTPUT_DIR }}
dotnet pack ${{ env.PROJECT_PATH_EXTENSION }} --no-restore --configuration Release --p:PackageVersion=${{ steps.version.outputs.version-without-v }} --output ${{ env.PACKAGE_OUTPUT_DIR }}

- name: "Push package"
run: dotnet nuget push ${{ env.PACKAGE_OUTPUT_DIR }}/*.nupkg --api-key ${{ secrets.NUGET_AUTH_TOKEN }} --source ${{ env.NUGET_SOURCE_URL }}
Expand Down
13 changes: 12 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,21 @@ All notable changes to this project will be documented in this file.

## [Unreleased]

## [1.4.0] - 2023-06-01

### Changed
- Renamed MinecraftJarManager to MinecraftJar

### Added
- IMinecraftJar interface
- Extension for dependency injection
- Test case for dependency injection
- Automatic deployment of dependency injection injection to nuget.org


## [1.3.2] - 2023-06-01

### Fixed
### Added
- Fabric version snapshot test missing

### Fixed
Expand Down
4 changes: 2 additions & 2 deletions MinecraftJars.Demo/MinecraftJars.Demo.Console/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
using MinecraftJars;
using MinecraftJars.Core.Versions;

var providerManager = new MinecraftJarManager();
var minecraftJar = new MinecraftJar();

foreach (var provider in providerManager.GetProviders())
foreach (var provider in minecraftJar.GetProviders())
{
SetConsoleColor(ConsoleColor.White, ConsoleColor.Red);
Console.WriteLine($"{provider.Name}:");
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<PackageId>MinecraftJars.NET.Extensions.DependencyInjection</PackageId>
<Authors>Patrick Weiss</Authors>
<Product>MinecraftJars.NET.Extensions.DependencyInjection</Product>
<Title>MinecraftJars.NET Dependency Injection Extension</Title>
<PackageProjectUrl>https://github.com/tekgator/MinecraftJars.NET</PackageProjectUrl>
<PackageIcon>MinecraftJarsNET-Logo-128px.png</PackageIcon>
<PackageReadmeFile>README.md</PackageReadmeFile>
<RepositoryUrl>https://github.com/tekgator/MinecraftJars.NET</RepositoryUrl>
<RepositoryType>git</RepositoryType>
<PackageLicenseFile>LICENSE</PackageLicenseFile>
<Description>Dependency injection extension for MinecraftJars.NET</Description>
<Copyright>@Patrick Weiss 2023</Copyright>
<PackageTags>minecraftjars;minecraftjars.net;dependency injection;di</PackageTags>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="7.0.0" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\..\MinecraftJars.Core\MinecraftJars.Core.csproj" />
<ProjectReference Include="..\..\MinecraftJars\MinecraftJars.csproj" />
</ItemGroup>

<ItemGroup>
<None Include="..\..\LICENSE">
<Pack>True</Pack>
<PackagePath>\</PackagePath>
</None>
<None Include="..\..\Resources\MinecraftJarsNET-Logo-128px.png">
<Pack>True</Pack>
<PackagePath>\</PackagePath>
</None>
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
![MinecraftJars.NET dependency injection extensions](../../Resources/MinecraftJarsNET-Logo-64px.png "MinecraftJars.NET dependency injection extensions")
MinecraftJars.NET dependency injection extensions
======

## Installing

Multiple options are available to install within your project:

1. Install, using the [Nuget Gallery](https://www.nuget.org/packages/MinecraftJars.NET.Extensions.DependencyInjection)

2. Install using the Package Manager Console:
```ps
Install-Package MinecraftJars.NET.Extensions.DependencyInjection
```
3. Install using .NET CLI
```cmd
dotnet add package MinecraftJars.NET.Extensions.DependencyInjection
```

## Usage

As simple as

```CSharp

// Registering DI
services.AddMinecraftJar();

// Injecting e.g. via service provider
var minecraftJar = serviceProvider.GetRequiredService<IMinecraftJar>()

// Usage
var providers = minecraftJar.GetProviders();

```
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
using Microsoft.Extensions.DependencyInjection;
using MinecraftJars.Core.Providers;

namespace MinecraftJars.Extension.DependencyInjection;

public static class ServiceCollectionExtensions
{
public static IServiceCollection AddMinecraftJar(this IServiceCollection services)
{
services.AddHttpClient();
services.AddScoped<IMinecraftJar, MinecraftJar>(sp => new MinecraftJar(new ProviderOptions
{
HttpClientFactory = sp.GetRequiredService<IHttpClientFactory>()
}));

return services;
}
}
15 changes: 15 additions & 0 deletions MinecraftJars.Tests/DependencyInjectionTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
using Microsoft.Extensions.DependencyInjection;
using MinecraftJars.Extension.DependencyInjection;

namespace MinecraftJars.Tests;

[TestFixture, Order(5)]
public class DependencyInjectionTests
{
[Test]
public void DependencyInjection_Success()
{
using var serviceProvider = new ServiceCollection().AddMinecraftJar().BuildServiceProvider();
Assert.That(serviceProvider.GetService<IMinecraftJar>(), Is.Not.Null);
}
}
12 changes: 6 additions & 6 deletions MinecraftJars.Tests/DownloadTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,17 @@ namespace MinecraftJars.Tests;
[TestFixture, Order(4)]
public class DownloadTests
{
private static readonly MinecraftJarManager JarManager = new();
private static readonly MinecraftJar MinecraftJar = new();
private static IEnumerable<string> Projects() =>
JarManager.GetProviders().SelectMany(p => p.Projects.Select(t => t.Name));
MinecraftJar.GetProviders().SelectMany(p => p.Projects.Select(t => t.Name));

[Test, Order(1)]
[Ignore("Very time consuming should only be utilised when necessary")]
public async Task GetDownloads_Success(
[ValueSource(nameof(Projects))] string projectName,
[Values(true, false)] bool loadFileSize)
{
var project = JarManager.GetProjects().Single(p => p.Name.Equals(projectName));
var project = MinecraftJar.GetProjects().Single(p => p.Name.Equals(projectName));

foreach (var version in await project.GetVersions())
{
Expand All @@ -42,7 +42,7 @@ public class DownloadTests
[ValueSource(nameof(Projects))] string projectName,
[Values(true, false)] bool loadFileSize)
{
var project = JarManager.GetProjects().Single(p => p.Name.Equals(projectName));
var project = MinecraftJar.GetProjects().Single(p => p.Name.Equals(projectName));
var version = (await project.GetVersions(new VersionOptions { MaxRecords = 1 })).First();

TestContext.Progress.WriteLine("{0}: Retrieving download for version {1}",
Expand All @@ -63,7 +63,7 @@ public class DownloadTests
[Ignore("Very time consuming should only be utilised when necessary. Git and Java must be installed")]
public async Task BuildSpigot_Success(string projectName)
{
var project = JarManager.GetProjects().Single(p => p.Name.Equals(projectName));
var project = MinecraftJar.GetProjects().Single(p => p.Name.Equals(projectName));
var version = (await project.GetVersions(new VersionOptions { MaxRecords = 1 })).First();

TestContext.Progress.WriteLine("{0}: Start building {1} version {2}",
Expand Down Expand Up @@ -98,7 +98,7 @@ public async Task BuildSpigot_Success(string projectName)
[Ignore("Very time consuming should only be utilised when necessary. Git and Java must be installed")]
public async Task BuildSpigot_Cancel(string projectName)
{
var project = JarManager.GetProjects().Single(p => p.Name.Equals(projectName));
var project = MinecraftJar.GetProjects().Single(p => p.Name.Equals(projectName));
var version = (await project.GetVersions(new VersionOptions { MaxRecords = 1 })).First();

TestContext.Progress.WriteLine("{0}: Start building {1} version {2}",
Expand Down
1 change: 1 addition & 0 deletions MinecraftJars.Tests/MinecraftJars.Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@

<ItemGroup>
<ProjectReference Include="..\MinecraftJars.Core\MinecraftJars.Core.csproj" />
<ProjectReference Include="..\MinecraftJars.Extension\MinecraftJars.Extension.DependencyInjection\MinecraftJars.Extension.DependencyInjection.csproj" />
<ProjectReference Include="..\MinecraftJars.Plugin\MinecraftJars.Plugin.Fabric\MinecraftJars.Plugin.Fabric.csproj" />
<ProjectReference Include="..\MinecraftJars.Plugin\MinecraftJars.Plugin.Mohist\MinecraftJars.Plugin.Mohist.csproj" />
<ProjectReference Include="..\MinecraftJars.Plugin\MinecraftJars.Plugin.Mojang\MinecraftJars.Plugin.Mojang.csproj" />
Expand Down
12 changes: 6 additions & 6 deletions MinecraftJars.Tests/ProjectTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,18 @@ namespace MinecraftJars.Tests;
[TestFixture, Order(2)]
public class ProjectTests
{
private static readonly MinecraftJarManager JarManager = new();
private static IEnumerable<string> Providers() => JarManager.GetProviders().Select(p => p.Name);
private static readonly MinecraftJar MinecraftJar = new();
private static IEnumerable<string> Providers() => MinecraftJar.GetProviders().Select(p => p.Name);
private static IEnumerable<Group> Groups() => Enum.GetValues<Group>();

[TestCaseSource(nameof(Providers)), Order(1)]
public void GetProviderByProject_Success(string providerName)
{
var provider = JarManager.GetProvider(providerName);
var provider = MinecraftJar.GetProvider(providerName);

foreach (var project in provider.Projects)
{
var providerByProject = JarManager.GetProvider(project);
var providerByProject = MinecraftJar.GetProvider(project);
Assert.That(providerByProject, Is.SameAs(provider));

TestContext.Progress.WriteLine("{0}: Provider for project {1} is {2}",
Expand All @@ -27,7 +27,7 @@ public void GetProviderByProject_Success(string providerName)
[TestCase, Order(2)]
public void GetProjects_Success()
{
var projects = JarManager.GetProjects().ToList();
var projects = MinecraftJar.GetProjects().ToList();
Assert.That(projects, Is.Not.Empty);

TestContext.Progress.WriteLine("{0}: {1} projects found", nameof(GetProjects_Success), projects.Count);
Expand All @@ -36,7 +36,7 @@ public void GetProjects_Success()
[TestCaseSource(nameof(Groups)), Order(3)]
public void GetProjectsByGroup_Success(Group group)
{
var projects = JarManager.GetProjects(group).ToList();
var projects = MinecraftJar.GetProjects(group).ToList();
Assert.That(projects.All(p => p.Group == group), Is.True);

TestContext.Progress.WriteLine("{0}: {1} projects found for {2}", nameof(GetProjectsByGroup_Success), projects.Count, group);
Expand Down
14 changes: 7 additions & 7 deletions MinecraftJars.Tests/ProviderTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@ namespace MinecraftJars.Tests;
[TestFixture, Order(1)]
public class ProviderTests
{
private static readonly MinecraftJarManager JarManager = new();
private static readonly MinecraftJar MinecraftJar = new();
private static IEnumerable<Group> Groups() => Enum.GetValues<Group>();

[TestCase, Order(1)]
public void GetProviders_Success()
{
var providers = JarManager.GetProviders().ToList();
var providers = MinecraftJar.GetProviders().ToList();
Assert.That(providers, Is.Not.Empty);

TestContext.Progress.WriteLine("{0}: {1} providers found", nameof(GetProviders_Success), providers.Count);
Expand All @@ -20,7 +20,7 @@ public void GetProviders_Success()
[TestCaseSource(nameof(Groups)), Order(2)]
public void GetProvidersByGroup_Success(Group group)
{
var providers = JarManager.GetProviders(group).ToList();
var providers = MinecraftJar.GetProviders(group).ToList();
Assert.That(providers, Is.Not.Empty);

TestContext.Progress.WriteLine("{0}: {1} providers found for {2}", nameof(GetProvidersByGroup_Success), providers.Count, group);
Expand All @@ -29,16 +29,16 @@ public void GetProvidersByGroup_Success(Group group)
[TestCase(100), Order(3)]
public void GetProvidersByGroup_InvalidGroup(Group group)
{
Assert.That(JarManager.GetProviders(group), Is.Empty);
Assert.That(MinecraftJar.GetProviders(group), Is.Empty);
TestContext.Progress.WriteLine("{0}: Group {1} is invalid", nameof(GetProvidersByGroup_InvalidGroup), group);
}

[TestCase, Order(4)]
public void GetProviderByName_Success()
{
foreach (var name in JarManager.GetProviders().Select(p => p.Name))
foreach (var name in MinecraftJar.GetProviders().Select(p => p.Name))
{
var provider = JarManager.GetProvider(name);
var provider = MinecraftJar.GetProvider(name);
Assert.That(provider, Is.Not.Null);

TestContext.Progress.WriteLine("{0}: Provider for name {1} found", nameof(GetProviderByName_Success), name);
Expand All @@ -48,7 +48,7 @@ public void GetProviderByName_Success()
[TestCase("InvalidProviderName"), Order(5)]
public void GetProviderByName_InvalidProvider(string name)
{
Assert.Throws<InvalidOperationException>(() => JarManager.GetProvider(name));
Assert.Throws<InvalidOperationException>(() => MinecraftJar.GetProvider(name));
TestContext.Progress.WriteLine("{0}: Provider name {1} invalid", nameof(GetProviderByName_InvalidProvider), name);
}
}
14 changes: 7 additions & 7 deletions MinecraftJars.Tests/VersionTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@ namespace MinecraftJars.Tests;
[TestFixture, Order(3)]
public class VersionTests
{
private static readonly MinecraftJarManager JarManager = new MinecraftJarManager();
private static readonly MinecraftJar MinecraftJar = new();
private static IEnumerable<string> Projects() =>
JarManager.GetProviders().SelectMany(p => p.Projects.Select(t => t.Name));
MinecraftJar.GetProviders().SelectMany(p => p.Projects.Select(t => t.Name));

[TestCaseSource(nameof(Projects)), Order(1)]
public async Task GetVersions_Success(string projectName)
{
var project = JarManager.GetProjects().Single(p => p.Name.Equals(projectName));
var project = MinecraftJar.GetProjects().Single(p => p.Name.Equals(projectName));
var versions = (await project.GetVersions()).ToList();

Assert.That(versions, Is.Not.Empty);
Expand All @@ -28,7 +28,7 @@ public async Task GetVersions_Success(string projectName)
[ValueSource(nameof(Projects))] string projectName,
[Values(5, 10)] int maxRecords)
{
var project = JarManager.GetProjects().Single(p => p.Name.Equals(projectName));
var project = MinecraftJar.GetProjects().Single(p => p.Name.Equals(projectName));
var versions = (await project.GetVersions(new VersionOptions
{
MaxRecords = maxRecords
Expand All @@ -43,7 +43,7 @@ public async Task GetVersions_Success(string projectName)
[TestCaseSource(nameof(Projects)), Order(3)]
public async Task GetVersions_SpecificVersion(string projectName)
{
var project = JarManager.GetProjects().Single(p => p.Name.Equals(projectName));
var project = MinecraftJar.GetProjects().Single(p => p.Name.Equals(projectName));
var version = (await project.GetVersions()).First();
var versions = (await project.GetVersions(new VersionOptions
{
Expand All @@ -69,7 +69,7 @@ public async Task GetVersions_SpecificVersion(string projectName)
[Order(4)]
public async Task GetVersions_ContainsSnapshot(string projectName)
{
var project = JarManager.GetProjects().Single(p => p.Name.Equals(projectName));
var project = MinecraftJar.GetProjects().Single(p => p.Name.Equals(projectName));

var versions = (await project.GetVersions(new VersionOptions
{
Expand All @@ -92,7 +92,7 @@ public async Task GetVersions_ContainsSnapshot(string projectName)
[Order(5)]
public async Task GetVersions_ContainsNoSnapshot(string projectName)
{
var project = JarManager.GetProjects().Single(p => p.Name.Equals(projectName));
var project = MinecraftJar.GetProjects().Single(p => p.Name.Equals(projectName));
var versions = (await project.GetVersions(new VersionOptions
{
IncludeSnapshotBuilds = false
Expand Down