diff --git a/README.md b/README.md index 05e3cfa..9e71439 100644 --- a/README.md +++ b/README.md @@ -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-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`
`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-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` | @@ -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-featured + +Indicates whether the version should be featured on Modrinth or not. + +```yaml +modrinth-featured: true +``` + #### curseforge-id The ID of the CurseForge project to upload to. diff --git a/action.yml b/action.yml index 2f4cc2b..11ce982 100644 --- a/action.yml +++ b/action.yml @@ -13,6 +13,10 @@ inputs: description: A valid token for the Modrinth API required: false default: ${undefined} + modrinth-featured: + description: Indicates whether the version should be featured on Modrinth or not + required: false + default: ${undefined} curseforge-id: description: The ID of the CurseForge project to upload to diff --git a/src/publishing/mod-publisher.ts b/src/publishing/mod-publisher.ts index df0d557..f7b4830 100644 --- a/src/publishing/mod-publisher.ts +++ b/src/publishing/mod-publisher.ts @@ -115,8 +115,8 @@ export default abstract class ModPublisher extends Publisher !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, >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; + 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): Promise; } \ No newline at end of file diff --git a/src/publishing/modrinth/modrinth-publisher.ts b/src/publishing/modrinth/modrinth-publisher.ts index 3c00635..75ab175 100644 --- a/src/publishing/modrinth/modrinth-publisher.ts +++ b/src/publishing/modrinth/modrinth-publisher.ts @@ -4,6 +4,7 @@ import ModPublisher from "../mod-publisher"; import PublisherTarget from "../publisher-target"; import Dependency from "../../metadata/dependency"; import DependencyKind from "../../metadata/dependency-kind"; +import { mapBooleanInput } from "../../utils/input-utils"; const modrinthDependencyKinds = new Map([ [DependencyKind.Depends, "required"], @@ -18,7 +19,8 @@ export default class ModrinthPublisher extends ModPublisher { 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 { + 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): Promise { + const featured = mapBooleanInput(options.featured, true); 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)) .map(async x => ({ @@ -34,6 +36,7 @@ export default class ModrinthPublisher extends ModPublisher { game_versions: gameVersions, version_type: channel, loaders, + featured, dependencies: projects }; await createVersion(id, data, files, token); diff --git a/test/modrinth-utils.test.ts b/test/modrinth-utils.test.ts index 7d3377f..bc8e896 100644 --- a/test/modrinth-utils.test.ts +++ b/test/modrinth-utils.test.ts @@ -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"; describe("getProject", () => { test("returned versions have expected ids", async () => { - jest.setTimeout(15000); const projects = { "sodium": "AANobbMI", "fabric-api": "P7dR8mSH", @@ -16,10 +15,9 @@ describe("getProject", () => { const project = await getProject(slug); expect(project).toHaveProperty("id", id); } - }); + }, 15000); test("the method returns null if project with the given slug does not exist", async () => { - jest.setTimeout(15000); const nonExistentProjects = [ "Na-11", "api-fabric", @@ -33,5 +31,5 @@ describe("getProject", () => { const project = await getProject(slug); expect(project).toBeNull(); } - }); + }, 15000); });