Added modrinth-featured input (#9)

This commit is contained in:
Kir_Antipov 2022-06-06 18:17:42 +03:00
parent 24a3f2d11e
commit 44e418ffe7
5 changed files with 22 additions and 8 deletions

View file

@ -90,6 +90,7 @@ jobs:
|------|-------------|---------------|----------| |------|-------------|---------------|----------|
| [modrinth-id](#user-content-modrinth-id) | The ID of the Modrinth project to upload to | A value specified in the config file | `AANobbMI` | | [modrinth-id](#user-content-modrinth-id) | The ID of the Modrinth project to upload to | A value specified in the config file | `AANobbMI` |
| [modrinth-token](#user-content-modrinth-token) | A valid token for the Modrinth API | ❌ | `${{ secrets.MODRINTH_TOKEN }}` | | [modrinth-token](#user-content-modrinth-token) | A valid token for the Modrinth API | ❌ | `${{ secrets.MODRINTH_TOKEN }}` |
| [modrinth-featured](#user-content-modrinth-featured) | Indicates whether the version should be featured on Modrinth or not | `true` | `true` <br> `false` |
| [curseforge-id](#user-content-curseforge-id) | The ID of the CurseForge project to upload to | A value specified in the config file | `394468` | | [curseforge-id](#user-content-curseforge-id) | The ID of the CurseForge project to upload to | A value specified in the config file | `394468` |
| [curseforge-token](#user-content-curseforge-token) | A valid token for the CurseForge API | ❌ | `${{ secrets.CURSEFORGE_TOKEN }}` | | [curseforge-token](#user-content-curseforge-token) | A valid token for the CurseForge API | ❌ | `${{ secrets.CURSEFORGE_TOKEN }}` |
| [github-tag](#user-content-github-tag) | The tag name of the release to upload assets to | A tag of the release that triggered the action | `mc1.17.1-0.3.2` | | [github-tag](#user-content-github-tag) | The tag name of the release to upload assets to | A tag of the release that triggered the action | `mc1.17.1-0.3.2` |
@ -218,6 +219,14 @@ A valid token for the Modrinth API. It's required if you want to publish your as
modrinth-token: ${{ secrets.MODRINTH_TOKEN }} modrinth-token: ${{ secrets.MODRINTH_TOKEN }}
``` ```
#### modrinth-featured
Indicates whether the version should be featured on Modrinth or not.
```yaml
modrinth-featured: true
```
#### curseforge-id #### curseforge-id
The ID of the CurseForge project to upload to. The ID of the CurseForge project to upload to.

View file

@ -13,6 +13,10 @@ inputs:
description: A valid token for the Modrinth API description: A valid token for the Modrinth API
required: false required: false
default: ${undefined} default: ${undefined}
modrinth-featured:
description: Indicates whether the version should be featured on Modrinth or not
required: false
default: ${undefined}
curseforge-id: curseforge-id:
description: The ID of the CurseForge project to upload to description: The ID of the CurseForge project to upload to

View file

@ -115,8 +115,8 @@ export default abstract class ModPublisher extends Publisher<ModPublisherOptions
: metadata?.dependencies || []; : metadata?.dependencies || [];
const uniqueDependencies = dependencies.filter((x, i, self) => !x.ignore && self.findIndex(y => y.id === x.id && y.kind === x.kind) === i); const uniqueDependencies = dependencies.filter((x, i, self) => !x.ignore && self.findIndex(y => y.id === x.id && y.kind === x.kind) === i);
await this.publishMod(id, token, name, version, versionType, loaders, gameVersions, java, changelog, files, uniqueDependencies); await this.publishMod(id, token, name, version, versionType, loaders, gameVersions, java, changelog, files, uniqueDependencies, <Record<string, unknown>><unknown>options);
} }
protected abstract publishMod(id: string, token: string, name: string, version: string, versionType: string, loaders: string[], gameVersions: string[], java: string[], changelog: string, files: File[], dependencies: Dependency[]): Promise<void>; protected abstract publishMod(id: string, token: string, name: string, version: string, versionType: string, loaders: string[], gameVersions: string[], java: string[], changelog: string, files: File[], dependencies: Dependency[], options: Record<string, unknown>): Promise<void>;
} }

View file

@ -4,6 +4,7 @@ import ModPublisher from "../mod-publisher";
import PublisherTarget from "../publisher-target"; import PublisherTarget from "../publisher-target";
import Dependency from "../../metadata/dependency"; import Dependency from "../../metadata/dependency";
import DependencyKind from "../../metadata/dependency-kind"; import DependencyKind from "../../metadata/dependency-kind";
import { mapBooleanInput } from "../../utils/input-utils";
const modrinthDependencyKinds = new Map([ const modrinthDependencyKinds = new Map([
[DependencyKind.Depends, "required"], [DependencyKind.Depends, "required"],
@ -18,7 +19,8 @@ export default class ModrinthPublisher extends ModPublisher {
return PublisherTarget.Modrinth; return PublisherTarget.Modrinth;
} }
protected async publishMod(id: string, token: string, name: string, version: string, channel: string, loaders: string[], gameVersions: string[], _java: string[], changelog: string, files: File[], dependencies: Dependency[]): Promise<void> { protected async publishMod(id: string, token: string, name: string, version: string, channel: string, loaders: string[], gameVersions: string[], _java: string[], changelog: string, files: File[], dependencies: Dependency[], options: Record<string, unknown>): Promise<void> {
const featured = mapBooleanInput(options.featured, true);
const projects = (await Promise.all(dependencies const projects = (await Promise.all(dependencies
.filter((x, _, self) => (x.kind !== DependencyKind.Suggests && x.kind !== DependencyKind.Includes) || !self.find(y => y.id === x.id && y.kind !== DependencyKind.Suggests && y.kind !== DependencyKind.Includes)) .filter((x, _, self) => (x.kind !== DependencyKind.Suggests && x.kind !== DependencyKind.Includes) || !self.find(y => y.id === x.id && y.kind !== DependencyKind.Suggests && y.kind !== DependencyKind.Includes))
.map(async x => ({ .map(async x => ({
@ -34,6 +36,7 @@ export default class ModrinthPublisher extends ModPublisher {
game_versions: gameVersions, game_versions: gameVersions,
version_type: channel, version_type: channel,
loaders, loaders,
featured,
dependencies: projects dependencies: projects
}; };
await createVersion(id, data, files, token); await createVersion(id, data, files, token);

View file

@ -1,9 +1,8 @@
import { jest, describe, test, expect } from "@jest/globals"; import { describe, test, expect } from "@jest/globals";
import { getProject } from "../src/utils/modrinth-utils"; import { getProject } from "../src/utils/modrinth-utils";
describe("getProject", () => { describe("getProject", () => {
test("returned versions have expected ids", async () => { test("returned versions have expected ids", async () => {
jest.setTimeout(15000);
const projects = { const projects = {
"sodium": "AANobbMI", "sodium": "AANobbMI",
"fabric-api": "P7dR8mSH", "fabric-api": "P7dR8mSH",
@ -16,10 +15,9 @@ describe("getProject", () => {
const project = await getProject(slug); const project = await getProject(slug);
expect(project).toHaveProperty("id", id); expect(project).toHaveProperty("id", id);
} }
}); }, 15000);
test("the method returns null if project with the given slug does not exist", async () => { test("the method returns null if project with the given slug does not exist", async () => {
jest.setTimeout(15000);
const nonExistentProjects = [ const nonExistentProjects = [
"Na-11", "Na-11",
"api-fabric", "api-fabric",
@ -33,5 +31,5 @@ describe("getProject", () => {
const project = await getProject(slug); const project = await getProject(slug);
expect(project).toBeNull(); expect(project).toBeNull();
} }
}); }, 15000);
}); });