From a4e93b6ce5ee572c40c85ee1534bccd48527383a Mon Sep 17 00:00:00 2001
From: Kir_Antipov <kp.antipov@gmail.com>
Date: Fri, 19 May 2023 20:40:51 +0300
Subject: [PATCH] Autogen

---
 action.yml                              | 580 ++++++++++++++++--------
 src/action.ts                           | 480 ++++++++++++++++++++
 src/utils/reflection/module-loader.g.ts |  32 +-
 3 files changed, 908 insertions(+), 184 deletions(-)
 create mode 100644 src/action.ts

diff --git a/action.yml b/action.yml
index 05b3864..2cb307a 100644
--- a/action.yml
+++ b/action.yml
@@ -1,325 +1,539 @@
-name: Publish Minecraft Mods
-description: GitHub Action that helps you publish your Minecraft mods
+# ######################################################################## #
+#               WARNING: AUTO-GENERATED FILE - DO NOT EDIT!                #
+#                                                                          #
+# Please be advised that this is an auto-generated file and should NOT be  #
+#       modified. Any changes made to this file WILL BE OVERWRITTEN.       #
+#                                                                          #
+#     To make changes to the contents of this file, please modify the      #
+# action.template.yml file instead. This will ensure that your changes are #
+#              properly reflected in the auto-generated file.              #
+# ######################################################################## #
+name: mc-publish
+description: Your one-stop GitHub Action for seamless Minecraft project
+  publication across various platforms.
 author: Kir-Antipov
 branding:
-  color: orange
-  icon: upload
+  color: purple
+  icon: box
+types:
+  input:
+    name: McPublishInput
+    description: The input parameters for the action.
+  output:
+    name: McPublishOutput
+    description: The output parameters provided by the action.
+groups:
+  input:
+    modrinth:
+      type: ModrinthUploadRequest
+      description: Options used to publish Minecraft projects to Modrinth.
+    curseforge:
+      type: CurseForgeUploadRequest
+      description: Options used to publish Minecraft projects to CurseForge.
+    github:
+      type: GitHubUploadRequest
+      description: Options used to publish Minecraft projects to GitHub.
+  output:
+    modrinth:
+      type: ModrinthUploadReport
+      description: Report detailing the status of the project published on Modrinth.
+    curseforge:
+      type: CurseForgeUploadReport
+      description: Report detailing the status of the project published on CurseForge.
+    github:
+      type: GitHubUploadReport
+      description: Report detailing the status of the project published on GitHub.
 inputs:
   modrinth-id:
-    description: The ID of the Modrinth project to upload to
+    type: string
+    description: The unique identifier of your Modrinth project.
     required: false
     default: ${undefined}
   modrinth-featured:
-    description: Indicates whether the version should be featured on Modrinth or not
+    type: boolean
+    description: Set to true to feature the version on Modrinth; false otherwise.
     required: false
     default: ${undefined}
   modrinth-unfeature-mode:
-    description: Determines the way automatic unfeaturing of older Modrinth versions works
+    type: platforms.modrinth.ModrinthUnfeatureMode
+    description: Sets the behavior for unfeaturing older Modrinth versions.
+    default: subset
     required: false
-    default: ${undefined}
   modrinth-token:
-    description: A valid token for the Modrinth API
+    type: utils.security.SecureString
+    description: Your Modrinth API token.
     required: false
     default: ${undefined}
   curseforge-id:
-    description: The ID of the CurseForge project to upload to
+    type: string
+    description: The unique identifier of your CurseForge project.
     required: false
     default: ${undefined}
   curseforge-token:
-    description: A valid token for the CurseForge API
+    type: utils.security.SecureString
+    description: Your CurseForge API token.
     required: false
     default: ${undefined}
   github-tag:
-    description: The tag name of the release to upload assets to
+    type: string
+    description: The tag name for the release where assets will be uploaded.
     required: false
     default: ${undefined}
   github-generate-changelog:
-    description: Indicates whether to automatically generate the changelog for this
-      release. If changelog is specified, it will be pre-pended to the
-      automatically generated notes. Unused if the GitHub Release already exists
+    type: boolean
+    description: Set to true to generate a changelog automatically for this release;
+      false otherwise. Ignored if the GitHub Release already exists.
     required: false
     default: ${undefined}
   github-draft:
-    description: true to create a draft (unpublished) release, false to create a
-      published one. Unused if the GitHub Release already exists
+    type: boolean
+    description: Set to true to create a draft release; false otherwise. Ignored if
+      the GitHub Release already exists.
     required: false
     default: ${undefined}
   github-prerelease:
-    description: true to identify the release as a prerelease, false to identify the
-      release as a full release. Unused if the GitHub Release already exists
+    type: boolean
+    description: Set to true to mark the release as a prerelease; false otherwise.
+      Ignored if the GitHub Release already exists.
     required: false
     default: ${undefined}
   github-commitish:
-    description: Specifies the commitish value that determines where the Git tag is
-      created from. Can be any branch or commit SHA. Unused if the Git tag
-      already exists
+    type: string
+    description: Defines the commitish value that determines where the Git tag is
+      created from. Can be any branch or commit SHA. Ignored if the Git tag
+      already exists.
     required: false
     default: ${undefined}
   github-discussion:
-    description: If specified, a discussion of the specified category is created and
-      linked to the release. Unused if the GitHub Release already exists
+    type: string
+    description: If specified, creates and links a discussion of the specified
+      **existing** category to the release. Ignored if the GitHub Release
+      already exists.
     required: false
     default: ${undefined}
   github-token:
-    description: A valid token for the GitHub API
+    type: utils.security.SecureString
+    description: Your GitHub API token.
     required: false
     default: ${undefined}
   files:
-    description: A glob of the files to upload
+    type: utils.io.FileInfo[]:{findFiles}?processSeparately=false
+    description: An array of globs determining which files to upload.
+    default: |
+      build/libs/!(*-@(dev|sources|javadoc)).jar
+      build/libs/*-@(dev|sources|javadoc).jar
     required: false
-    default: ${undefined}
   files-primary:
-    description: A glob of the primary files to upload
+    type: utils.io.FileInfo[]:{findFiles}?processSeparately=false
+    redirect: files
+    description: A glob determining the primary files to upload.
+    deprecationMessage: Please, use 'files' instead.
     required: false
     default: ${undefined}
   files-secondary:
-    description: A glob of the secondary files to upload
+    type: utils.io.FileInfo[]:{findFiles}?processSeparately=false
+    redirect: void
+    description: A glob determining the secondary files to upload.
+    deprecationMessage: Please, use 'files' instead.
     required: false
     default: ${undefined}
   name:
-    description: The name of the version
+    type: string
+    description: The name of the version.
     required: false
     default: ${undefined}
   version:
-    description: The version number
+    type: string
+    description: The version number.
     required: false
     default: ${undefined}
   version-type:
-    description: The type of the release - alpha, beta, or release
+    type: utils.versioning.VersionType
+    description: The version type - alpha, beta, or release.
     required: false
     default: ${undefined}
   changelog:
-    description: The changelog for this version
+    type: string
+    description: The changelog for this version.
     required: false
     default: ${undefined}
   changelog-file:
-    description: A glob of the changelog file
+    type: string;utils/io/file-info->{readAllText}
+    redirect: changelog
+    description: A glob pointing to the changelog file.
     required: false
     default: ${undefined}
   loaders:
-    description: A list of supported mod loaders
+    type: string[]?separator=/\s%2B/
+    description: An array of supported mod loaders.
     required: false
     default: ${undefined}
   game-versions:
-    description: A list of supported Minecraft versions
+    type: string[]
+    description: An array of supported Minecraft versions.
     required: false
     default: ${undefined}
   dependencies:
-    description: A list of dependencies
+    type: dependencies.Dependency[]
+    description: An array of dependencies required by your project.
     required: false
     default: ${undefined}
   version-resolver:
-    description: Determines the way automatic game-versions resolvement works
+    type: games.GameVersionFilter:fromVersionResolver
+    redirect: game-version-filter
+    description: Controls the method used to automatically resolve game versions.
+    deprecationMessage: Please, use 'game-version-filter' instead.
     required: false
     default: ${undefined}
+  game-version-filter:
+    type: games.GameVersionFilter
+    description: Controls the method used to filter game versions.
+    default: releases | min-major | min-minor
+    required: false
   java:
-    description: A list of supported Java versions
+    type: utils.java.JavaVersion[]
+    description: An array of Java versions compatible with your project.
     required: false
     default: ${undefined}
   retry-attempts:
-    description: The maximum number of attempts to publish assets
+    description: Defines the maximum number of asset publishing attempts.
+    type: number
     default: 2
     required: false
   retry-delay:
-    description: Time delay between attempts to publish assets (in milliseconds)
+    description: Specifies the delay (in milliseconds) between asset publishing attempts.
+    type: number
     default: 10000
     required: false
   fail-mode:
-    description: Determines how errors that occur during mod publishing process are handled
+    type: utils.errors.FailMode
+    description: Controls how the action responds to errors during the mod
+      publishing process.
+    default: fail
     required: false
-    default: ${undefined}
   modrinth-files:
-    description: A glob of the files to upload
-    required: false
-    default: ${undefined}
-  modrinth-files-primary:
-    description: A glob of the primary files to upload
-    required: false
-    default: ${undefined}
-  modrinth-files-secondary:
-    description: A glob of the secondary files to upload
-    required: false
-    default: ${undefined}
-  modrinth-name:
-    description: The name of the version
-    required: false
-    default: ${undefined}
-  modrinth-version:
-    description: The version number
-    required: false
-    default: ${undefined}
-  modrinth-version-type:
-    description: The type of the release - alpha, beta, or release
-    required: false
-    default: ${undefined}
-  modrinth-changelog:
-    description: The changelog for this version
-    required: false
-    default: ${undefined}
-  modrinth-changelog-file:
-    description: A glob of the changelog file
-    required: false
-    default: ${undefined}
-  modrinth-loaders:
-    description: A list of supported mod loaders
-    required: false
-    default: ${undefined}
-  modrinth-game-versions:
-    description: A list of supported Minecraft versions
-    required: false
-    default: ${undefined}
-  modrinth-dependencies:
-    description: A list of dependencies
-    required: false
-    default: ${undefined}
-  modrinth-version-resolver:
-    description: Determines the way automatic game-versions resolvement works
-    required: false
-    default: ${undefined}
-  modrinth-java:
-    description: A list of supported Java versions
-    required: false
-    default: ${undefined}
-  modrinth-retry-attempts:
-    description: The maximum number of attempts to publish assets
+    type: utils.io.FileInfo[]:{findFiles}?processSeparately=false
+    description: An array of globs determining which files to upload.
     default: ${undefined}
     required: false
-  modrinth-retry-delay:
-    description: Time delay between attempts to publish assets (in milliseconds)
-    default: ${undefined}
-    required: false
-  modrinth-fail-mode:
-    description: Determines how errors that occur during mod publishing process are handled
-    required: false
-    default: ${undefined}
   curseforge-files:
-    description: A glob of the files to upload
+    type: utils.io.FileInfo[]:{findFiles}?processSeparately=false
+    description: An array of globs determining which files to upload.
+    default: ${undefined}
+    required: false
+  github-files:
+    type: utils.io.FileInfo[]:{findFiles}?processSeparately=false
+    description: An array of globs determining which files to upload.
+    default: ${undefined}
+    required: false
+  modrinth-files-primary:
+    type: utils.io.FileInfo[]:{findFiles}?processSeparately=false
+    redirect: modrinth-files
+    description: A glob determining the primary files to upload.
+    deprecationMessage: Please, use 'files' instead.
     required: false
     default: ${undefined}
   curseforge-files-primary:
-    description: A glob of the primary files to upload
-    required: false
-    default: ${undefined}
-  curseforge-files-secondary:
-    description: A glob of the secondary files to upload
-    required: false
-    default: ${undefined}
-  curseforge-name:
-    description: The name of the version
-    required: false
-    default: ${undefined}
-  curseforge-version:
-    description: The version number
-    required: false
-    default: ${undefined}
-  curseforge-version-type:
-    description: The type of the release - alpha, beta, or release
-    required: false
-    default: ${undefined}
-  curseforge-changelog:
-    description: The changelog for this version
-    required: false
-    default: ${undefined}
-  curseforge-changelog-file:
-    description: A glob of the changelog file
-    required: false
-    default: ${undefined}
-  curseforge-loaders:
-    description: A list of supported mod loaders
-    required: false
-    default: ${undefined}
-  curseforge-game-versions:
-    description: A list of supported Minecraft versions
-    required: false
-    default: ${undefined}
-  curseforge-dependencies:
-    description: A list of dependencies
-    required: false
-    default: ${undefined}
-  curseforge-version-resolver:
-    description: Determines the way automatic game-versions resolvement works
-    required: false
-    default: ${undefined}
-  curseforge-java:
-    description: A list of supported Java versions
-    required: false
-    default: ${undefined}
-  curseforge-retry-attempts:
-    description: The maximum number of attempts to publish assets
-    default: ${undefined}
-    required: false
-  curseforge-retry-delay:
-    description: Time delay between attempts to publish assets (in milliseconds)
-    default: ${undefined}
-    required: false
-  curseforge-fail-mode:
-    description: Determines how errors that occur during mod publishing process are handled
-    required: false
-    default: ${undefined}
-  github-files:
-    description: A glob of the files to upload
+    type: utils.io.FileInfo[]:{findFiles}?processSeparately=false
+    redirect: curseforge-files
+    description: A glob determining the primary files to upload.
+    deprecationMessage: Please, use 'files' instead.
     required: false
     default: ${undefined}
   github-files-primary:
-    description: A glob of the primary files to upload
+    type: utils.io.FileInfo[]:{findFiles}?processSeparately=false
+    redirect: github-files
+    description: A glob determining the primary files to upload.
+    deprecationMessage: Please, use 'files' instead.
+    required: false
+    default: ${undefined}
+  modrinth-files-secondary:
+    type: utils.io.FileInfo[]:{findFiles}?processSeparately=false
+    redirect: modrinth-void
+    description: A glob determining the secondary files to upload.
+    deprecationMessage: Please, use 'files' instead.
+    required: false
+    default: ${undefined}
+  curseforge-files-secondary:
+    type: utils.io.FileInfo[]:{findFiles}?processSeparately=false
+    redirect: curseforge-void
+    description: A glob determining the secondary files to upload.
+    deprecationMessage: Please, use 'files' instead.
     required: false
     default: ${undefined}
   github-files-secondary:
-    description: A glob of the secondary files to upload
+    type: utils.io.FileInfo[]:{findFiles}?processSeparately=false
+    redirect: github-void
+    description: A glob determining the secondary files to upload.
+    deprecationMessage: Please, use 'files' instead.
+    required: false
+    default: ${undefined}
+  modrinth-name:
+    type: string
+    description: The name of the version.
+    required: false
+    default: ${undefined}
+  curseforge-name:
+    type: string
+    description: The name of the version.
     required: false
     default: ${undefined}
   github-name:
-    description: The name of the version
+    type: string
+    description: The name of the version.
+    required: false
+    default: ${undefined}
+  modrinth-version:
+    type: string
+    description: The version number.
+    required: false
+    default: ${undefined}
+  curseforge-version:
+    type: string
+    description: The version number.
     required: false
     default: ${undefined}
   github-version:
-    description: The version number
+    type: string
+    description: The version number.
+    required: false
+    default: ${undefined}
+  modrinth-version-type:
+    type: utils.versioning.VersionType
+    description: The version type - alpha, beta, or release.
+    required: false
+    default: ${undefined}
+  curseforge-version-type:
+    type: utils.versioning.VersionType
+    description: The version type - alpha, beta, or release.
     required: false
     default: ${undefined}
   github-version-type:
-    description: The type of the release - alpha, beta, or release
+    type: utils.versioning.VersionType
+    description: The version type - alpha, beta, or release.
+    required: false
+    default: ${undefined}
+  modrinth-changelog:
+    type: string
+    description: The changelog for this version.
+    required: false
+    default: ${undefined}
+  curseforge-changelog:
+    type: string
+    description: The changelog for this version.
     required: false
     default: ${undefined}
   github-changelog:
-    description: The changelog for this version
+    type: string
+    description: The changelog for this version.
+    required: false
+    default: ${undefined}
+  modrinth-changelog-file:
+    type: string;utils/io/file-info->{readAllText}
+    redirect: modrinth-changelog
+    description: A glob pointing to the changelog file.
+    required: false
+    default: ${undefined}
+  curseforge-changelog-file:
+    type: string;utils/io/file-info->{readAllText}
+    redirect: curseforge-changelog
+    description: A glob pointing to the changelog file.
     required: false
     default: ${undefined}
   github-changelog-file:
-    description: A glob of the changelog file
+    type: string;utils/io/file-info->{readAllText}
+    redirect: github-changelog
+    description: A glob pointing to the changelog file.
+    required: false
+    default: ${undefined}
+  modrinth-loaders:
+    type: string[]?separator=/\s%2B/
+    description: An array of supported mod loaders.
+    required: false
+    default: ${undefined}
+  curseforge-loaders:
+    type: string[]?separator=/\s%2B/
+    description: An array of supported mod loaders.
     required: false
     default: ${undefined}
   github-loaders:
-    description: A list of supported mod loaders
+    type: string[]?separator=/\s%2B/
+    description: An array of supported mod loaders.
+    required: false
+    default: ${undefined}
+  modrinth-game-versions:
+    type: string[]
+    description: An array of supported Minecraft versions.
+    required: false
+    default: ${undefined}
+  curseforge-game-versions:
+    type: string[]
+    description: An array of supported Minecraft versions.
     required: false
     default: ${undefined}
   github-game-versions:
-    description: A list of supported Minecraft versions
+    type: string[]
+    description: An array of supported Minecraft versions.
+    required: false
+    default: ${undefined}
+  modrinth-dependencies:
+    type: dependencies.Dependency[]
+    description: An array of dependencies required by your project.
+    required: false
+    default: ${undefined}
+  curseforge-dependencies:
+    type: dependencies.Dependency[]
+    description: An array of dependencies required by your project.
     required: false
     default: ${undefined}
   github-dependencies:
-    description: A list of dependencies
+    type: dependencies.Dependency[]
+    description: An array of dependencies required by your project.
+    required: false
+    default: ${undefined}
+  modrinth-version-resolver:
+    type: games.GameVersionFilter:fromVersionResolver
+    redirect: modrinth-game-version-filter
+    description: Controls the method used to automatically resolve game versions.
+    deprecationMessage: Please, use 'game-version-filter' instead.
+    required: false
+    default: ${undefined}
+  curseforge-version-resolver:
+    type: games.GameVersionFilter:fromVersionResolver
+    redirect: curseforge-game-version-filter
+    description: Controls the method used to automatically resolve game versions.
+    deprecationMessage: Please, use 'game-version-filter' instead.
     required: false
     default: ${undefined}
   github-version-resolver:
-    description: Determines the way automatic game-versions resolvement works
+    type: games.GameVersionFilter:fromVersionResolver
+    redirect: github-game-version-filter
+    description: Controls the method used to automatically resolve game versions.
+    deprecationMessage: Please, use 'game-version-filter' instead.
+    required: false
+    default: ${undefined}
+  modrinth-game-version-filter:
+    type: games.GameVersionFilter
+    description: Controls the method used to filter game versions.
+    default: ${undefined}
+    required: false
+  curseforge-game-version-filter:
+    type: games.GameVersionFilter
+    description: Controls the method used to filter game versions.
+    default: ${undefined}
+    required: false
+  github-game-version-filter:
+    type: games.GameVersionFilter
+    description: Controls the method used to filter game versions.
+    default: ${undefined}
+    required: false
+  modrinth-java:
+    type: utils.java.JavaVersion[]
+    description: An array of Java versions compatible with your project.
+    required: false
+    default: ${undefined}
+  curseforge-java:
+    type: utils.java.JavaVersion[]
+    description: An array of Java versions compatible with your project.
     required: false
     default: ${undefined}
   github-java:
-    description: A list of supported Java versions
+    type: utils.java.JavaVersion[]
+    description: An array of Java versions compatible with your project.
     required: false
     default: ${undefined}
+  modrinth-retry-attempts:
+    description: Defines the maximum number of asset publishing attempts.
+    type: number
+    default: ${undefined}
+    required: false
+  curseforge-retry-attempts:
+    description: Defines the maximum number of asset publishing attempts.
+    type: number
+    default: ${undefined}
+    required: false
   github-retry-attempts:
-    description: The maximum number of attempts to publish assets
+    description: Defines the maximum number of asset publishing attempts.
+    type: number
+    default: ${undefined}
+    required: false
+  modrinth-retry-delay:
+    description: Specifies the delay (in milliseconds) between asset publishing attempts.
+    type: number
+    default: ${undefined}
+    required: false
+  curseforge-retry-delay:
+    description: Specifies the delay (in milliseconds) between asset publishing attempts.
+    type: number
     default: ${undefined}
     required: false
   github-retry-delay:
-    description: Time delay between attempts to publish assets (in milliseconds)
+    description: Specifies the delay (in milliseconds) between asset publishing attempts.
+    type: number
+    default: ${undefined}
+    required: false
+  modrinth-fail-mode:
+    type: utils.errors.FailMode
+    description: Controls how the action responds to errors during the mod
+      publishing process.
+    default: ${undefined}
+    required: false
+  curseforge-fail-mode:
+    type: utils.errors.FailMode
+    description: Controls how the action responds to errors during the mod
+      publishing process.
     default: ${undefined}
     required: false
   github-fail-mode:
-    description: Determines how errors that occur during mod publishing process are handled
-    required: false
+    type: utils.errors.FailMode
+    description: Controls how the action responds to errors during the mod
+      publishing process.
     default: ${undefined}
+    required: false
+outputs:
+  modrinth-id:
+    type: string
+    description: The unique identifier of your Modrinth project.
+  modrinth-version:
+    type: string
+    description: The unique identifier of the version published on Modrinth by this action.
+  modrinth-url:
+    type: string
+    description: The URL directing to the newly published version on Modrinth.
+  modrinth-files:
+    type: platforms.UploadedFile[]
+    description: Array of objects, each containing details about the files published
+      for the new version on Modrinth, such as file `name`, `id`, and download
+      `url`.
+  curseforge-id:
+    type: number
+    description: The unique identifier of your CurseForge project.
+  curseforge-version:
+    type: number
+    description: The unique identifier of the version published on CurseForge by
+      this action.
+  curseforge-url:
+    type: string
+    description: The URL directing to the newly published version on CurseForge.
+  curseforge-files:
+    type: platforms.UploadedFile[]
+    description: Array of objects, each containing details about the files published
+      for the new version on CurseForge, such as file `name`, `id`, and download
+      `url`.
+  github-repo:
+    type: string
+    description: The full repository name on GitHub, formatted as 'username/repository'.
+  github-tag:
+    type: string
+    description: The Git tag associated with the new or updated release published on GitHub.
+  github-url:
+    type: string
+    description: The URL directing to the newly published version on GitHub.
+  github-files:
+    type: platforms.UploadedFile[]
+    description: Array of objects, each containing details about the files published
+      for the new version on GitHub, such as file `name`, `id`, and download
+      `url`.
 runs:
-  using: node12
+  using: node16
   main: dist/index.js
diff --git a/src/action.ts b/src/action.ts
new file mode 100644
index 0000000..7b4031f
--- /dev/null
+++ b/src/action.ts
@@ -0,0 +1,480 @@
+/* ************************************************************************ */
+/*               WARNING: AUTO-GENERATED FILE - DO NOT EDIT!                */
+/*                                                                          */
+/* Please be advised that this is an auto-generated file and should NOT be  */
+/*       modified. Any changes made to this file WILL BE OVERWRITTEN.       */
+/*                                                                          */
+/*     To make changes to the contents of this file, please modify the      */
+/* action.template.yml file instead. This will ensure that your changes are */
+/*              properly reflected in the auto-generated file.              */
+/* ************************************************************************ */
+/* eslint-disable */
+import { ModrinthUnfeatureMode } from "@/platforms/modrinth/modrinth-unfeature-mode";
+import { SecureString } from "@/utils/security/secure-string";
+import { FileInfo } from "@/utils/io/file-info";
+import { VersionType } from "@/utils/versioning/version-type";
+import { Dependency } from "@/dependencies/dependency";
+import { GameVersionFilter } from "@/games/game-version-filter";
+import { JavaVersion } from "@/utils/java/java-version";
+import { FailMode } from "@/utils/errors/fail-mode";
+import { UploadedFile } from "@/platforms/uploaded-file";
+
+/**
+ * Your one-stop GitHub Action for seamless Minecraft project publication across various platforms.
+ */
+export const ACTION_NAME = "mc-publish";
+
+/**
+ * The input parameters for the action.
+ */
+export interface McPublishInput {
+    /**
+     * Options used to publish Minecraft projects to Modrinth.
+     */
+    modrinth?: {
+        /**
+         * The unique identifier of your Modrinth project.
+         */
+        id?: string;
+
+        /**
+         * Set to true to feature the version on Modrinth; false otherwise.
+         */
+        featured?: boolean;
+
+        /**
+         * Sets the behavior for unfeaturing older Modrinth versions.
+         */
+        unfeatureMode?: ModrinthUnfeatureMode;
+
+        /**
+         * Your Modrinth API token.
+         */
+        token?: SecureString;
+
+        /**
+         * An array of globs determining which files to upload.
+         */
+        files?: FileInfo[];
+
+        /**
+         * The name of the version.
+         */
+        name?: string;
+
+        /**
+         * The version number.
+         */
+        version?: string;
+
+        /**
+         * The version type - alpha, beta, or release.
+         */
+        versionType?: VersionType;
+
+        /**
+         * The changelog for this version.
+         */
+        changelog?: string;
+
+        /**
+         * An array of supported mod loaders.
+         */
+        loaders?: string[];
+
+        /**
+         * An array of supported Minecraft versions.
+         */
+        gameVersions?: string[];
+
+        /**
+         * An array of dependencies required by your project.
+         */
+        dependencies?: Dependency[];
+
+        /**
+         * Controls the method used to filter game versions.
+         */
+        gameVersionFilter?: GameVersionFilter;
+
+        /**
+         * An array of Java versions compatible with your project.
+         */
+        java?: JavaVersion[];
+
+        /**
+         * Defines the maximum number of asset publishing attempts.
+         */
+        retryAttempts?: number;
+
+        /**
+         * Specifies the delay (in milliseconds) between asset publishing attempts.
+         */
+        retryDelay?: number;
+
+        /**
+         * Controls how the action responds to errors during the mod publishing process.
+         */
+        failMode?: FailMode;
+    };
+
+    /**
+     * Options used to publish Minecraft projects to CurseForge.
+     */
+    curseforge?: {
+        /**
+         * The unique identifier of your CurseForge project.
+         */
+        id?: string;
+
+        /**
+         * Your CurseForge API token.
+         */
+        token?: SecureString;
+
+        /**
+         * An array of globs determining which files to upload.
+         */
+        files?: FileInfo[];
+
+        /**
+         * The name of the version.
+         */
+        name?: string;
+
+        /**
+         * The version number.
+         */
+        version?: string;
+
+        /**
+         * The version type - alpha, beta, or release.
+         */
+        versionType?: VersionType;
+
+        /**
+         * The changelog for this version.
+         */
+        changelog?: string;
+
+        /**
+         * An array of supported mod loaders.
+         */
+        loaders?: string[];
+
+        /**
+         * An array of supported Minecraft versions.
+         */
+        gameVersions?: string[];
+
+        /**
+         * An array of dependencies required by your project.
+         */
+        dependencies?: Dependency[];
+
+        /**
+         * Controls the method used to filter game versions.
+         */
+        gameVersionFilter?: GameVersionFilter;
+
+        /**
+         * An array of Java versions compatible with your project.
+         */
+        java?: JavaVersion[];
+
+        /**
+         * Defines the maximum number of asset publishing attempts.
+         */
+        retryAttempts?: number;
+
+        /**
+         * Specifies the delay (in milliseconds) between asset publishing attempts.
+         */
+        retryDelay?: number;
+
+        /**
+         * Controls how the action responds to errors during the mod publishing process.
+         */
+        failMode?: FailMode;
+    };
+
+    /**
+     * Options used to publish Minecraft projects to GitHub.
+     */
+    github?: {
+        /**
+         * The tag name for the release where assets will be uploaded.
+         */
+        tag?: string;
+
+        /**
+         * Set to true to generate a changelog automatically for this release; false otherwise. Ignored if the GitHub Release already exists.
+         */
+        generateChangelog?: boolean;
+
+        /**
+         * Set to true to create a draft release; false otherwise. Ignored if the GitHub Release already exists.
+         */
+        draft?: boolean;
+
+        /**
+         * Set to true to mark the release as a prerelease; false otherwise. Ignored if the GitHub Release already exists.
+         */
+        prerelease?: boolean;
+
+        /**
+         * Defines the commitish value that determines where the Git tag is created from. Can be any branch or commit SHA. Ignored if the Git tag already exists.
+         */
+        commitish?: string;
+
+        /**
+         * If specified, creates and links a discussion of the specified **existing** category to the release. Ignored if the GitHub Release already exists.
+         */
+        discussion?: string;
+
+        /**
+         * Your GitHub API token.
+         */
+        token?: SecureString;
+
+        /**
+         * An array of globs determining which files to upload.
+         */
+        files?: FileInfo[];
+
+        /**
+         * The name of the version.
+         */
+        name?: string;
+
+        /**
+         * The version number.
+         */
+        version?: string;
+
+        /**
+         * The version type - alpha, beta, or release.
+         */
+        versionType?: VersionType;
+
+        /**
+         * The changelog for this version.
+         */
+        changelog?: string;
+
+        /**
+         * An array of supported mod loaders.
+         */
+        loaders?: string[];
+
+        /**
+         * An array of supported Minecraft versions.
+         */
+        gameVersions?: string[];
+
+        /**
+         * An array of dependencies required by your project.
+         */
+        dependencies?: Dependency[];
+
+        /**
+         * Controls the method used to filter game versions.
+         */
+        gameVersionFilter?: GameVersionFilter;
+
+        /**
+         * An array of Java versions compatible with your project.
+         */
+        java?: JavaVersion[];
+
+        /**
+         * Defines the maximum number of asset publishing attempts.
+         */
+        retryAttempts?: number;
+
+        /**
+         * Specifies the delay (in milliseconds) between asset publishing attempts.
+         */
+        retryDelay?: number;
+
+        /**
+         * Controls how the action responds to errors during the mod publishing process.
+         */
+        failMode?: FailMode;
+    };
+
+    /**
+     * An array of globs determining which files to upload.
+     */
+    files?: FileInfo[];
+
+    /**
+     * The name of the version.
+     */
+    name?: string;
+
+    /**
+     * The version number.
+     */
+    version?: string;
+
+    /**
+     * The version type - alpha, beta, or release.
+     */
+    versionType?: VersionType;
+
+    /**
+     * The changelog for this version.
+     */
+    changelog?: string;
+
+    /**
+     * An array of supported mod loaders.
+     */
+    loaders?: string[];
+
+    /**
+     * An array of supported Minecraft versions.
+     */
+    gameVersions?: string[];
+
+    /**
+     * An array of dependencies required by your project.
+     */
+    dependencies?: Dependency[];
+
+    /**
+     * Controls the method used to filter game versions.
+     */
+    gameVersionFilter?: GameVersionFilter;
+
+    /**
+     * An array of Java versions compatible with your project.
+     */
+    java?: JavaVersion[];
+
+    /**
+     * Defines the maximum number of asset publishing attempts.
+     */
+    retryAttempts?: number;
+
+    /**
+     * Specifies the delay (in milliseconds) between asset publishing attempts.
+     */
+    retryDelay?: number;
+
+    /**
+     * Controls how the action responds to errors during the mod publishing process.
+     */
+    failMode?: FailMode;
+};
+
+/**
+ * Options used to publish Minecraft projects to Modrinth.
+ */
+export type ModrinthUploadRequest = McPublishInput["modrinth"];
+
+/**
+ * Options used to publish Minecraft projects to CurseForge.
+ */
+export type CurseForgeUploadRequest = McPublishInput["curseforge"];
+
+/**
+ * Options used to publish Minecraft projects to GitHub.
+ */
+export type GitHubUploadRequest = McPublishInput["github"];
+
+/**
+ * The output parameters provided by the action.
+ */
+export interface McPublishOutput {
+    /**
+     * Report detailing the status of the project published on Modrinth.
+     */
+    modrinth: {
+        /**
+         * The unique identifier of your Modrinth project.
+         */
+        id: string;
+
+        /**
+         * The unique identifier of the version published on Modrinth by this action.
+         */
+        version: string;
+
+        /**
+         * The URL directing to the newly published version on Modrinth.
+         */
+        url: string;
+
+        /**
+         * Array of objects, each containing details about the files published for the new version on Modrinth, such as file `name`, `id`, and download `url`.
+         */
+        files: UploadedFile[];
+    };
+
+    /**
+     * Report detailing the status of the project published on CurseForge.
+     */
+    curseforge: {
+        /**
+         * The unique identifier of your CurseForge project.
+         */
+        id: number;
+
+        /**
+         * The unique identifier of the version published on CurseForge by this action.
+         */
+        version: number;
+
+        /**
+         * The URL directing to the newly published version on CurseForge.
+         */
+        url: string;
+
+        /**
+         * Array of objects, each containing details about the files published for the new version on CurseForge, such as file `name`, `id`, and download `url`.
+         */
+        files: UploadedFile[];
+    };
+
+    /**
+     * Report detailing the status of the project published on GitHub.
+     */
+    github: {
+        /**
+         * The full repository name on GitHub, formatted as 'username/repository'.
+         */
+        repo: string;
+
+        /**
+         * The Git tag associated with the new or updated release published on GitHub.
+         */
+        tag: string;
+
+        /**
+         * The URL directing to the newly published version on GitHub.
+         */
+        url: string;
+
+        /**
+         * Array of objects, each containing details about the files published for the new version on GitHub, such as file `name`, `id`, and download `url`.
+         */
+        files: UploadedFile[];
+    };
+};
+
+/**
+ * Report detailing the status of the project published on Modrinth.
+ */
+export type ModrinthUploadReport = McPublishOutput["modrinth"];
+
+/**
+ * Report detailing the status of the project published on CurseForge.
+ */
+export type CurseForgeUploadReport = McPublishOutput["curseforge"];
+
+/**
+ * Report detailing the status of the project published on GitHub.
+ */
+export type GitHubUploadReport = McPublishOutput["github"];
diff --git a/src/utils/reflection/module-loader.g.ts b/src/utils/reflection/module-loader.g.ts
index e5ff381..c41d083 100644
--- a/src/utils/reflection/module-loader.g.ts
+++ b/src/utils/reflection/module-loader.g.ts
@@ -1,3 +1,33 @@
+/* ************************************************************************ */
+/*               WARNING: AUTO-GENERATED FILE - DO NOT EDIT!                */
+/*                                                                          */
+/* Please be advised that this is an auto-generated file and should NOT be  */
+/*       modified. Any changes made to this file WILL BE OVERWRITTEN.       */
+/*                                                                          */
+/*     To make changes to the contents of this file, please modify the      */
+/* action.template.yml file instead. This will ensure that your changes are */
+/*              properly reflected in the auto-generated file.              */
+/* ************************************************************************ */
+/* eslint-disable */
+import * as _08266313cf301b8949a6cedcaa47a6c3e43934d9 from "@/platforms/modrinth/modrinth-unfeature-mode";
+import * as _d55dccbfda6518ce241204ddb1a0e427ce862b40 from "@/utils/security/secure-string";
+import * as _52f2d2846827ca15dbb2bc99e7396358640a305c from "@/utils/io/file-info";
+import * as _cece1ed3512bc9bb742f3472360aea9d482df4ac from "@/utils/versioning/version-type";
+import * as _61ccbb54c5e0251e3bf7013ca2e222f64c571674 from "@/dependencies/dependency";
+import * as _12c3001b56ab71951504c91b71926343a997a6c2 from "@/games/game-version-filter";
+import * as _9f1d8775cb694c12b0f9f4e026b96daf7eca20c3 from "@/utils/java/java-version";
+import * as _78525bc7f22a643e04dd785d89dd01e5c9c2f812 from "@/utils/errors/fail-mode";
+import * as _6f74c0ca5e9e22747c834103f851654db4509ca8 from "@/platforms/uploaded-file";
+
 export const ACTION_MODULE_LOADER = (path: string): Promise<Record<string, unknown>> => {
-    return Promise.resolve(path ? undefined : null);
+    if (path === "platforms/modrinth/modrinth-unfeature-mode") return Promise.resolve(_08266313cf301b8949a6cedcaa47a6c3e43934d9);
+    if (path === "utils/security/secure-string") return Promise.resolve(_d55dccbfda6518ce241204ddb1a0e427ce862b40);
+    if (path === "utils/io/file-info") return Promise.resolve(_52f2d2846827ca15dbb2bc99e7396358640a305c);
+    if (path === "utils/versioning/version-type") return Promise.resolve(_cece1ed3512bc9bb742f3472360aea9d482df4ac);
+    if (path === "dependencies/dependency") return Promise.resolve(_61ccbb54c5e0251e3bf7013ca2e222f64c571674);
+    if (path === "games/game-version-filter") return Promise.resolve(_12c3001b56ab71951504c91b71926343a997a6c2);
+    if (path === "utils/java/java-version") return Promise.resolve(_9f1d8775cb694c12b0f9f4e026b96daf7eca20c3);
+    if (path === "utils/errors/fail-mode") return Promise.resolve(_78525bc7f22a643e04dd785d89dd01e5c9c2f812);
+    if (path === "platforms/uploaded-file") return Promise.resolve(_6f74c0ca5e9e22747c834103f851654db4509ca8);
+    return Promise.resolve(undefined);
 };