🚀 Your one-stop GitHub Action for seamless Minecraft project publication across various platforms.
Find a file
2021-12-11 14:41:30 +03:00
.github/workflows Fixed ci action 2021-09-26 13:57:11 +03:00
dist Build 2021-10-01 16:38:36 +03:00
scripts Replaced deprecated Buffer constructor with Buffer.from 2021-12-11 14:41:30 +03:00
src INPUT_CHANGELOG_FILE exists for some weird reason 2021-12-11 03:18:04 +03:00
test Made aliases for special case dependencies like fabric 2021-12-11 00:12:31 +03:00
.eslintrc Fixed CI 2021-12-10 17:08:12 +03:00
.gitattributes Initialized repo 2021-09-20 13:52:42 +03:00
.gitignore Initialized repo 2021-09-20 13:52:42 +03:00
action.yml README update 2021-12-10 16:46:09 +03:00
babel.config.js Setup Jest 2021-09-21 10:27:32 +03:00
jest.config.js Covered curseforge-utils with tests 2021-09-25 15:45:44 +03:00
LICENSE.md Initialized repo 2021-09-20 13:52:42 +03:00
package-lock.json Bump version 2021-12-11 04:10:14 +03:00
package.json Replaced deprecated Buffer constructor with Buffer.from 2021-12-11 14:41:30 +03:00
README.md Bump version 2021-12-11 04:10:14 +03:00
tsconfig.json Enabled importing .json files 2021-12-07 21:16:10 +03:00

Publish Minecraft Mods - GitHub Action

GitHub tag GitHub build status GitHub license

The Publish Minecraft Mods action helps you upload assets of your Minecraft mods to GitHub Releases, Modrinth and CurseForge. This is a cross-platform action that runs on any environment.

Usage

jobs:
  build:
    # ...
    steps:
      - uses: Kir-Antipov/mc-publish@v2.0
        with:
          modrinth-id: AANobbMI
          modrinth-token: ${{ secrets.MODRINTH_TOKEN }}

          curseforge-id: 394468
          curseforge-token: ${{ secrets.CURSEFORGE_TOKEN }}

          github-tag: mc1.17.1-0.3.2
          github-token: ${{ secrets.GITHUB_TOKEN }}

          files-primary: build/libs/!(*-@(dev|sources)).jar
          files-secondary: build/libs/*-@(dev|sources).jar

          name: Sodium 0.3.2 for Minecraft 1.17.1
          version: mc1.17.1-0.3.2
          version-type: release
          changelog-file: CHANGELOG.md

          loaders: |
            fabric
            forge            
          game-versions: |
            1.16.3
            1.17
            1.17.1
            21w37a            
          dependencies: |
            required-dependency | depends | *
            required-dependency | depends
            required-dependency
            optional-dependency | recommends | 0.1.0
            suggested-dependency | suggests | 0.2.0
            included-dependency | includes | 0.3.0
            conflicting-dependency | conflicts | *
            incompatible-dependency | breaks | *            
          java: |
            8
            16            

Minimalistic Example

Most of the values are automatically resolved (read further for more info). Therefore, here's all you really need to publish your mod:

jobs:
  build:
    # ...
    steps:
      - uses: Kir-Antipov/mc-publish@v2.0
        with:
          # You don't need this section if you don't want to publish
          # your assets to Modrinth
          modrinth-id: AANobbMI
          modrinth-token: ${{ secrets.MODRINTH_TOKEN }}

          # You don't need this section if you don't want to publish
          # your assets to CurseForge
          curseforge-id: 394468
          curseforge-token: ${{ secrets.CURSEFORGE_TOKEN }}

          # You don't need this section if you don't want to publish
          # your assets to GitHub
          github-token: ${{ secrets.GITHUB_TOKEN }}

Inputs

Name Description Default value Examples
modrinth-id The ID of the Modrinth project to upload to A value specified in the config file AANobbMI
modrinth-token A valid token for the Modrinth API ${{ secrets.MODRINTH_TOKEN }}
curseforge-id The ID of the CurseForge project to upload to A value specified in the config file 394468
curseforge-token A valid token for the CurseForge API ${{ secrets.CURSEFORGE_TOKEN }}
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-token A valid token for the GitHub API ${{ secrets.GITHUB_TOKEN }}
files A glob of the file(s) to upload build/libs/*.jar
files-primary A glob of the primary files to upload build/libs/!(*-@(dev|sources)).jar build/libs/!(*-@(dev|sources)).jar
files-secondary A glob of the secondary files to upload build/libs/*-@(dev|sources).jar build/libs/*-@(dev|sources).jar
name The name of the version A title of the release that triggered the action Sodium 0.3.2 for Minecraft 1.17.1
version The version number A tag of the release that triggered the action mc1.17.1-0.3.2
version-type The type of the release Will be parsed from the version value alpha
beta
release
changelog The changelog for this version A body of the release that triggered the action This release fixes a few more issues in Sodium 0.3 for Minecraft 1.17.1.
changelog-file A glob of the changelog file CHANGELOG.md
loaders A list of supported mod loaders fabric for Fabric mods
forge for Forge mods
fabric
forge
rift
game-versions A list of supported Minecraft versions A value specified in the config file, if any; otherwise, it will be parsed from the version value 21w37a
1.17
version-resolver Determines the way automatic game-versions resolvement works releasesIfAny exact
latest
all
releases
releasesIfAny
dependencies A list of dependencies A dependency list specified in the config file fabric | depends | 0.40.0
fabric-api
java A list of supported Java versions empty string Java 8
Java 1.8
8

modrinth-id

The ID of the Modrinth project to upload to.

modrinth-id: AANobbMI

Can be automatically retrieved from the config file of your mod:

  • fabric.mod.json (Fabric)

    • Custom mc-publish field (recommended):

      {
        // ...
        "custom": {
          "mc-publish": {
            "modrinth": "AANobbMI"
          }
        },
      }
      
    • Custom modmanager field (recommended):

      {
        // ...
        "custom": {
          "modmanager": {
            "modrinth": "AANobbMI"
          }
        },
      }
      
    • Custom projects field:

      {
        // ...
        "custom": {
          "projects": {
            "modrinth": "AANobbMI"
          }
        },
      }
      
    • projects field:

      {
        // ...
        "projects": {
          "modrinth": "AANobbMI"
        },
      }
      
  • mods.toml (Forge)

    • Custom mc-publish field (recommended):

      [custom.mc-publish]
          modrinth="AANobbMI"
      
    • Custom projects field:

      [custom.projects]
          modrinth="AANobbMI"
      
    • projects field:

      [projects]
          modrinth="AANobbMI"
      

modrinth-token

A valid token for the Modrinth API. It's required if you want to publish your assets to Modrinth.

modrinth-token: ${{ secrets.MODRINTH_TOKEN }}

curseforge-id

The ID of the CurseForge project to upload to.

curseforge-id: 394468

Can be automatically retrieved from the config file of your mod:

  • fabric.mod.json (Fabric)

    • Custom mc-publish field (recommended):

      {
        // ...
        "custom": {
          "mc-publish": {
            "curseforge": 394468
          }
        },
      }
      
    • Custom modmanager field (recommended):

      {
        // ...
        "custom": {
          "modmanager": {
            "curseforge": 394468
          }
        },
      }
      
    • Custom projects field:

      {
        // ...
        "custom": {
          "projects": {
            "curseforge": 394468
          }
        },
      }
      
    • projects field:

      {
        // ...
        "projects": {
          "curseforge": 394468
        },
      }
      
  • mods.toml (Forge)

    • Custom mc-publish field (recommended):

      [custom.mc-publish]
          curseforge=394468
      
    • Custom projects field:

      [custom.projects]
          curseforge=394468
      
    • projects field:

      [projects]
          curseforge=394468
      

curseforge-token

A valid token for the CurseForge API. It's required if you want to publish your assets to CurseForge.

curseforge-token: ${{ secrets.CURSEFORGE_TOKEN }}

github-tag

The tag name of the release to upload assets to. If no value is provided, a tag of the release that triggered the action will be used.

github-tag: mc1.17.1-0.3.2

github-token

A valid token for the GitHub API. It's required if you want to publish your assets to GitHub.

github-token: ${{ secrets.GITHUB_TOKEN }}

files

A glob of the file(s) to upload. If you want to publish multiple files, it's recommended to use files-primary and files-secondary instead.

files: build/libs/*.jar

files-primary

A glob of the primary files to upload. Default value is build/libs/!(*-@(dev|sources)).jar.

files-primary: build/libs/!(*-@(dev|sources)).jar

files-secondary

A glob of the secondary files to upload. Default value is build/libs/*-@(dev|sources).jar.

files-secondary: build/libs/*-@(dev|sources).jar

name

The name of the version. If no value is provided, a title of the release that triggered the action will be used. If you want Modrinth and CurseForge to determine the version name themselves, omit the field with an empty string ("").

name: Sodium 0.3.2 for Minecraft 1.17.1

version

The version number. If no value is provided, a tag of the release that triggered the action is used.

version: mc1.17.1-0.3.2

version-type

The type of the release. If no value is provided, it will be parsed from the version value (e.g., 0.40.0+1.17-alpha results in alpha).

version-type: release

changelog

The changelog for this version. If no value is provided, a body of the release that triggered the action will be used.

changelog: This release fixes a few more issues in Sodium 0.3 for Minecraft 1.17.1.

changelog-file

A glob of the changelog file.

changelog-file: CHANGELOG.md

loaders

A list of supported mod loaders. If no value is provided, fabric will be used for valid Fabric mods and forge will be used for valid Forge mods.

loaders: |
  fabric
  forge  

game-versions

A list of supported Minecraft versions. If no value is provided, the minimum supported version will be retrieved from the configuration file of your mod, if any, otherwise it will be parsed from the version value (e.g., 0.40.0+1.17 results in 1.17), and then it will be expanded using the specified version-resolver.

game-versions: |
  1.16.5
  1.17
  1.17.1
  21w37a  

version-resolver

Determines the way automatic game-versions resolvement works. Default value is releasesIfAny.

version-resolver: latest

Available values:

  • exact - exact game version (1.16 -> 1.16)
  • latest - the latest release of the given minor (1.16 -> 1.16.5)
  • all - all versions of the given minor starting with the specified build (1.16.5 -> [20w45a, 20w46a, 20w48a, 20w49a, 20w51a, 1.16.5-rc1, 1.16.5])
  • releases - all releases of the given minor starting with the specified build (1.16.3 -> [1.16.3, 1.16.4, 1.16.5])
  • releasesIfAny - all releases of the given minor starting with the specified build, if any; otherwise, all versions

dependencies

A list of dependencies.

dependencies: |
  required-dependency | depends | *
  required-dependency | depends
  required-dependency
  optional-dependency | recommends | 0.1.0
  suggested-dependency | suggests | 0.2.0
  included-dependency | includes | 0.3.0
  conflicting-dependency | conflicts | *
  incompatible-dependency | breaks | *  

As you can see, each dependency should be written on a new line using the following format - {id} | {kind=depends} | {version=*}.

Available dependency kinds:

  • depends - for dependencies required to run. Without them a game will crash.
  • recommends - for dependencies not required to run. Without them a game will log a warning.
  • suggests - for dependencies not required to run. Can be used as a kind of metadata.
  • includes - for dependencies embedded into the mod. Can be used as a kind of metadata.
  • conflicts - for mods whose together with yours cause some kind of bugs, etc. With them a game will log a warning.
  • breaks - for mods whose together with yours might cause a game crash. With them a game will crash.

Can be automatically retrieved from the config file of your mod:

  • fabric.mod.json (Fabric)

    "depends": {
      "required-dependency": "*"
    },
    "recommends": {
      "optional-dependency": "0.1.0"
    },
    "suggests": {
      "suggested-dependency": "0.2.0"
    },
    "includes": {
      // Check if your version of the Fabric loader supports objects in dependency declarations.
      "included-dependency": {
        "version": "0.3.0",
        "custom": {
          "mc-publish": {
            "ignore": false, // `mc-publish` will ignore this dependency, if `ignore` is set to true
            "modrinth": "included-dependency-fabric", // Modrinth's project slug
            "curseforge": "included-dependency-fabric" // CurseForge's project slug
          }
        }
      }
    },
    "conflicts": {
      "conflicting-dependency": "*"
    },
    "breaks": {
      "incompatible-dependency": "*"
    },
    
  • mods.toml (Forge)

    [[dependencies.mod-id]]
      modId="required-dependency"
      mandatory=true
      versionRange="*"
      ordering="NONE"
      side="BOTH"
    
    [[dependencies.mod-id]]
      modId="optional-dependency"
      mandatory=false
      versionRange="0.1.0"
      ordering="NONE"
      side="BOTH"
    
    [[dependencies.mod-id]]
      modId="included-dependency"
      mandatory=false
      embedded=true
      versionRange="0.3.0"
      ordering="NONE"
      side="BOTH"
      [dependencies.mod-id.custom.mc-publish]
          ignore=false # `mc-publish` will ignore this dependency, if `ignore` is set to true
          modrinth="included-dependency-forge" # Modrinth's project slug
          curseforge="included-dependency-forge" # CurseForge's project slug
    
    [[dependencies.mod-id]]
      modId="incompatible-dependency"
      mandatory=false
      incompatible=true
      versionRange="*"
      ordering="NONE"
      side="BOTH"
    

java

A list of supported Java versions. It's omitted by default.

java: |
  8
  16
  Java 17