Skip to content
You're viewing an older version of this GitHub Action. Do you want to see the latest version instead?
box

GitHub Action

mc-publish

v3.0.0

mc-publish

box

mc-publish

Your one-stop GitHub Action for seamless Minecraft project publication across various platforms

Installation

Copy and paste the following snippet into your .yml file.

              

- name: mc-publish

uses: Kir-Antipov/[email protected]

Learn more about this action in Kir-Antipov/mc-publish

Choose a version

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/[email protected]
        with:
          modrinth-id: AANobbMI
          modrinth-featured: true
          modrinth-unfeature-mode: subset
          modrinth-token: ${{ secrets.MODRINTH_TOKEN }}

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

          github-tag: mc1.17.1-0.3.2
          github-generate-changelog: true
          github-draft: false
          github-prerelease: false
          github-commitish: dev
          github-discussion: Announcements
          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
            quilt
          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

          retry-attempts: 2
          retry-delay: 10000

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/[email protected]
        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 }}
modrinth-featured Indicates whether the version should be featured on Modrinth or not true true
false
modrinth-unfeature-mode Determines the way automatic unfeaturing of older Modrinth versions works If modrinth-featured is set to true, subset; otherwise, none none
subset
intersection
any
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, if any; otherwise it will be inferred from the GITHUB_REF environment variable mc1.17.1-0.3.2
github-generate-changelog 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 true, if changelog and changelog-file are not provided; otherwise, false false
true
github-draft true to create a draft (unpublished) release, false to create a published one. Unused if the GitHub Release already exists false false
true
github-prerelease true to identify the release as a prerelease, false to identify the release as a full release. Unused if the GitHub Release already exists false, if version-type is release; otherwise, true false
true
github-commitish 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 The repository's default branch dev
feature/86
github-discussion If specified, a discussion of the specified category is created and linked to the release. Unused if the GitHub Release already exists Announcements
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
quilt for Quilt mods
fabric
forge
quilt
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
retry-attempts The maximum number of attempts to publish assets 2 2
10
-1
retry-delay Time delay between attempts to publish assets (in milliseconds) 10000 10000
60000
0

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"
  • quilt.mod.json (Quilt)

    • mc-publish field (recommended):

      {
        // ...
        "mc-publish": {
          "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 }}

modrinth-featured

Indicates whether the version should be featured on Modrinth or not.

modrinth-featured: true

modrinth-unfeature-mode

Determines the way automatic unfeaturing of older Modrinth versions works. Default value is subset, if modrinth-featured is set to true; otherwise, none.

modrinth-unfeature-mode: version-intersection | loader-subset

Available presets:

  • none - no Modrinth versions will be unfeatured
  • subset - only those Modrinth versions which are considered a subset of the new one (i.e., new release suports all of the version's mod loaders and game versions) will be unfeatured
  • intersection - only those Modrinth versions which intersects with the new one (i.e., support at least one of the mod loaders and one of the game versions supported by the new release) will be unfeatured
  • any - all Modrinth versions will be unfeatured

If none of the given presets suits your needs, you can construct a new one from the following values via bitwise OR, like so - version-intersection | loaders-subset:

  • version-subset
  • version-intersection
  • version-any
  • loader-subset
  • loader-intersection
  • loader-any

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
  • quilt.mod.json (Quilt)

    • mc-publish field (recommended):

      {
        // ...
        "mc-publish": {
          "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, if any; otherwise it will be inferred from the GITHUB_REF environment variable.

github-tag: mc1.17.1-0.3.2

github-generate-changelog

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. Default value is true, if changelog and changelog-file are not provided; otherwise, false.

github-generate-changelog: false

github-draft

true to create a draft (unpublished) release, false to create a published one. Unused if the GitHub Release already exists. Default value is false.

github-draft: false

github-prerelease

true to identify the release as a prerelease, false to identify the release as a full release. Unused if the GitHub Release already exists. Default value is false, if version-type is release; otherwise, true.

github-prerelease: true

github-commitish

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. Default value is the repository's default branch.

github-commitish: 347040cd637363613e56a6b333f09eaa5be3a196

github-discussion

If specified, a discussion of the specified category is created and linked to the release. Unused if the GitHub Release already exists.

github-discussion: Announcements

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, forge will be used for valid Forge mods, and quilt will be used for valid Quilt mods.

loaders: |
  fabric
  forge
  quilt

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"
  • quilt.mod.json (Quilt)

    "depends": [
      "required-dependency",
      {
        "id": "optional-dependency",
        "version": "0.1.0",
        "optional": true
      }
    ],
    "provides": [
      {
        "id": "included-dependency",
        "version": "0.3.0",
        "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
        }
      }
    ],
    "breaks": [
      {
        "id": "incompatible-dependency",
        "version": "*"
      },
      {
        "id": "conflicting-dependency",
        "version": "*",
        "unless": "some-mod-that-fixes-conflict"
      }
    ],

java

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

java: |
  8
  16
  Java 17

retry-attempts

The maximum number of attempts to publish assets.

retry-attempts: 2

retry-delay

Time delay between attempts to publish assets (in milliseconds).

retry-delay: 10000