Kir-Antipov / mc-publish

🚀 Your one-stop GitHub Action for seamless Minecraft project publication across various platforms.
MIT License
234 stars 21 forks source link
actions github github-actions minecraft minecraft-mod publish

mc-publish

GitHub tag GitHub build status GitHub license

A versatile GitHub Action to streamline the publication of Minecraft projects.

Supports mods, plugins, resource packs, and more, across various platforms such as Modrinth, GitHub Releases, and CurseForge. Features automatic value resolution and minimal configuration requirements for effortless setup and use.

📖 Usage

Most values are resolved automatically, so to publish your project, you only need a minimal amount of configuration.

jobs:
  build:
    # ...
    permissions:
      contents: write
    steps:
      - uses: Kir-Antipov/mc-publish@v3.3
        with:
          # Only include this section if you wish to publish
          # your assets on Modrinth.
          modrinth-id: AANobbMI
          modrinth-token: ${{ secrets.MODRINTH_TOKEN }}

          # Only include this section if you wish to publish
          # your assets on CurseForge.
          curseforge-id: 394468
          curseforge-token: ${{ secrets.CURSEFORGE_TOKEN }}

          # Only include this section if you wish to publish
          # your assets on GitHub.
          github-token: ${{ secrets.GITHUB_TOKEN }}

📘 Advanced Usage

The following verbose example is for illustrative purposes only and is not recommended for regular use. mc-publish was designed to require minimal configuration, so there's no need for all of these settings.

Overly complex configurations with hardcoded values that could be resolved automatically not only complicate your workflow but can also introduce errors. For example, attempting to use github-discussion: Announcements in a repository that doesn't have a "Announcements" discussion category or discussions in general would lead to problems.

As a rule of thumb, if you don't see a clear reason to use an input, it's best not to include it.

jobs:
  build:
    # ...
    permissions:
      contents: write
    steps:
      - uses: Kir-Antipov/mc-publish@v3.3
        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: |
            build/libs/!(*-@(dev|sources|javadoc)).jar
            build/libs/*-@(dev|sources|javadoc).jar

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

          loaders: |
            fabric
            forge
            quilt
          game-versions: |
            [1.16,1.16.5)
            >=21w37a <1.18.2
            1.19
          game-version-filter: none
          dependencies: |
            required-dependency
            optional-dependency@0.1.0(optional)
            recommended-dependency@0.2.0(recommended)
            embedded-dependency@0.3.0(embedded)
            conflicting-dependency(conflicting)
            incompatible-dependency(incompatible)
            fabric@0.81.1+1.19.4(required){modrinth:P7dR8mSH}{curseforge:306612}#(ignore:github)
          java: |
            Java 1.8
            17

          retry-attempts: 2
          retry-delay: 10000
          fail-mode: fail

📝 Inputs

Name Description Default Examples
modrinth-id The unique identifier of your Modrinth project. A value specified in the metadata file. AANobbMI
modrinth-featured Set to true to feature the version on Modrinth. true true
false
modrinth-unfeature-mode Sets the behavior for unfeaturing older Modrinth versions. If modrinth-featured is set to true, subset; otherwise, none. none
subset
intersection
any
modrinth-token Your Modrinth API token. - ${{ secrets.MODRINTH_TOKEN }}
curseforge-id The unique identifier of your CurseForge project. A value specified in the metadata file. 394468
curseforge-token Your CurseForge API token. - ${{ secrets.CURSEFORGE_TOKEN }}
github-tag The tag name for the release where assets will be uploaded. If a release triggered the action, its tag is used. Otherwise, inferred from GITHUB_REF. mc1.17.1-0.3.2
github-generate-changelog Set to true to generate a changelog automatically for this release. Ignored if the GitHub Release already exists. true, if changelog and changelog-file are not provided; otherwise, false. true
false
github-draft Set to true to create a draft release. Ignored if the GitHub Release already exists. false true
false
github-prerelease Set to true to mark the release as a prerelease. Ignored if the GitHub Release already exists. false, if version-type is release; otherwise, true. true
false
github-commitish Defines the commitish value that determines where the Git tag is created from. Ignored if the Git tag already exists. The repository's default branch. dev
feature/86
github-discussion If specified, creates and links a discussion of the specified EXISTING category to the release. Ignored if the GitHub Release already exists. - Announcements
github-token Your GitHub API token. - ${{ secrets.GITHUB_TOKEN }}
files An array of globs determining which files to upload. build/libs/!(*-@(dev\|sources\|javadoc)).jar
build/libs/*-@(dev\|sources\|javadoc).jar
build/libs/*.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 version type. 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 pointing to the changelog file. - CHANGELOG.md
loaders An array of supported loaders. A value specified in the metadata file. fabric
forge
quilt
rift
game-versions An array of supported Minecraft versions. A value specified in the metadata file. 21w37a
>=1.17
[1.17,)
dependencies An array of dependencies required by your project. A value specified in the metadata file. fabric@0.40.0(required)
game-version-filter Controls the method used to filter game versions. releases \| min-major \| min-minor releases
min
max
none
java An array of Java versions compatible with your project. - Java 8
Java 1.8
8
retry-attempts Defines the maximum number of asset publishing attempts. 2 2
10
-1
retry-delay Specifies the delay (in milliseconds) between asset publishing attempts. 10000 1000
60000
0
fail-mode Controls how the action responds to errors during the mod publishing process. fail fail
warn
skip

Please note that any top-level property (name, version, dependencies, files, etc.) can be used as a target-specific one. This allows you to customize mc-publish to better meet your individual preferences and requirements. To illustrate, let's take a look at the following configuration:

# Shared top-level properties
files: build/libs/!(*-@(dev\|sources\|javadoc)).jar
dependencies: |
  sodium@0.4.10(required){modrinth:AANobbMI}{curseforge:394468}#(ignore:curseforge)

modrinth-id: AAAAAAAA
modrinth-token: ${{ secrets.MODRINTH_TOKEN }}
# The name of your mod, specific to Modrinth
modrinth-name: Modrinth Mod
# The files for your mod, specific to Modrinth
modrinth-files: build/libs/*.jar
# The dependencies for your mod, specific to Modrinth
# Note that it's possible to use project ids instead of slugs
modrinth-dependencies: |
  AANobbMI@0.4.10(required)

curseforge-id: 0
curseforge-token: ${{ secrets.CURSEFORGE_TOKEN }}
# The name of your mod, specific to CurseForge
curseforge-name: CurseForge Mod
# The dependencies for your mod, specific to CurseForge
# Note that it's possible to use project ids instead of slugs
curseforge-dependencies: |
  394468@0.4.10(required)

modrinth-id

The unique identifier of your Modrinth project.

modrinth-id: AANobbMI

Can be automatically retrieved from the metadata file of your project:

modrinth-token

Your Modrinth API token. It's required if you want to publish your assets to Modrinth.

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

modrinth-featured

Set to true to feature the version on Modrinth; false otherwise. Default value is:

modrinth-featured: true

modrinth-unfeature-mode

Sets the behavior for unfeaturing older Modrinth versions. Default value is subset, if modrinth-featured is set to true; otherwise, none.

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

Available presets:

curseforge-id

The unique identifier of your CurseForge project.

curseforge-id: 394468

Can be automatically retrieved from the metadata file of your project:

curseforge-token

Your CurseForge API token. It's required if you want to publish your assets to CurseForge.

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

github-tag

The tag name for the release where assets will be uploaded. If a release triggered the action, its tag is used. Otherwise, inferred from GITHUB_REF.

github-tag: mc1.17.1-0.3.2

github-generate-changelog

Set to true to generate a changelog automatically for this release; false otherwise. Ignored 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

Set to true to create a draft release; false otherwise. Ignored if the GitHub Release already exists. Default value is false.

github-draft: false

github-prerelease

Set to true to mark the release as a prerelease; false otherwise. Ignored if the GitHub Release already exists. Default value is false, if version-type is release; otherwise, true.

github-prerelease: true

github-commitish

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

github-commitish: 347040cd637363613e56a6b333f09eaa5be3a196

github-discussion

If specified, creates and links a discussion of the specified EXISTING category to the release. Ignored if the GitHub Release already exists.

github-discussion: Announcements

github-token

Your GitHub API token. It's required if you want to publish your assets to GitHub.

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

files

An array of globs determining which files to upload. Default value is:

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

name

The name of the version. Defaults to a title of the release that triggered the action. 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. Defaults to a tag of the release that triggered the action.

version: mc1.17.1-0.3.2

version-type

The version type - alpha, beta, or release. By default, it will be parsed from the version value. 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. Defaults to a body of the release that triggered the action.

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

changelog-file

A glob pointing to the changelog file.

changelog-file: CHANGELOG.*

loaders

An array of supported mod loaders. By default, it will be automatically determined from your project's metadata file (e.g., fabric.mod.json, mods.toml, quilt.mod.json, etc.).

Fabric mods can be marked as Quilt-compatible like so:


loaders: |
  fabric
  forge
  quilt

game-versions

An array of supported Minecraft versions. By default, mc-publish will look for minecraft dependency in your project's metadata file (e.g., fabric.mod.json, mods.toml, quilt.mod.json, etc.).

game-versions: |
  [1.16,1.16.5)
  >=21w37a <1.18.2
  1.19

game-version-filter

Controls the method used to filter game versions. Default value is:

game-version-filter: releases | min-major | min-minor

Available filters (note that they can be combined to achieve the desired outcome):

Example of work of each individual filter for >=1.17 <=1.18 version range:

dependencies

An array of dependencies required by your project. By default, mc-publish will take them from your project's metadata file.

dependencies: |
  required-dependency(required)
  optional-dependency@0.1.0(optional)
  recommended-dependency@0.2.0(recommended)
  embedded-dependency@0.3.0(embedded)
  conflicting-dependency(conflicting)
  incompatible-dependency(incompatible)
  fabric@0.81.1+1.19.4(required){modrinth:P7dR8mSH}{curseforge:306612}#(ignore:github)

The format for dependencies can be described as follows: id@version(type){platform:alias}#(ignore:ignored-platform). Each component of this format, with the exception of the id, is optional.

Available dependency types:

Can be automatically retrieved from your project's metadata file:

java

An array of Java versions compatible with your project.

java: |
  Java 1.8
  16
  Java 17

retry-attempts

Defines the maximum number of asset publishing attempts. Default value is:

retry-attempts: 2

retry-delay

Specifies the delay (in milliseconds) between asset publishing attempts. Default values is:

retry-delay: 10000

fail-mode

Controls how the action responds to errors during the mod publishing process. Default value is:

fail-mode: fail

Available values:

📤 Outputs

Name Description Examples
modrinth-id The unique identifier of your Modrinth project. "AANobbMI"
modrinth-version The unique identifier of the version published on Modrinth by this action. "Fz37KqRh"
modrinth-url The URL directing to the newly published version on Modrinth. "https://modrinth.com/mod/sodium/version/mc1.17.1-0.3.4"
modrinth-files Array of objects, each containing details about the files published for the new version on Modrinth. "[]"
curseforge-id The unique identifier of your CurseForge project. "394468"
curseforge-version The unique identifier of the version published on CurseForge by this action. "3488820"
curseforge-url The URL directing to the newly published version on CurseForge. https://www.curseforge.com/api/v1/mods/394468/files/3488820/download
curseforge-files Array of objects, each containing details about the files published for the new version on CurseForge. "[]"
github-repo The full repository name on GitHub, formatted as 'username/repository'. "CaffeineMC/sodium-fabric"
github-tag The Git tag associated with the new or updated release published on GitHub. "mc1.17.1-0.3.4"
github-url The URL directing to the newly published version on GitHub. "https://github.com/CaffeineMC/sodium-fabric/releases/tag/mc1.17.1-0.3.4"
github-files Array of objects, each containing details about the files published for the new version on GitHub. "[]"

modrinth-id

The unique identifier of your Modrinth project.

"AANobbMI"

modrinth-version

The unique identifier of the version published on Modrinth by this action.

"Fz37KqRh"

modrinth-url

The URL directing to the newly published version on Modrinth.

"https://modrinth.com/mod/sodium/version/mc1.17.1-0.3.4"

modrinth-files

Array of objects, each containing details about the files published for the new version on Modrinth.

"[
  {
    \"name\": \"sodium-fabric-mc1.17.1-0.3.4+build.13.jar\",
    \"id\": \"85f5d67f0ce9e995e738eb6b60034bc919a1859d\",
    \"url\": \"https://cdn.modrinth.com/data/AANobbMI/versions/mc1.17.1-0.3.4/sodium-fabric-mc1.17.1-0.3.4%2Bbuild.13.jar\"
  }
]"

curseforge-id

The unique identifier of your CurseForge project.

"394468"

curseforge-version

The unique identifier of the version published on CurseForge by this action.

"3488820"

curseforge-url

The URL directing to the newly published version on CurseForge.

"https://www.curseforge.com/minecraft/mc-mods/sodium/files/3488820"

curseforge-files

Array of objects, each containing details about the files published for the new version on CurseForge.

"[
  {
    \"name\": \"sodium-fabric-mc1.17.1-0.3.4+build.13.jar\",
    \"id\": 394468,
    \"url\": \"https://www.curseforge.com/api/v1/mods/394468/files/3488820/download\"
  }
]"

github-repo

The full repository name on GitHub, formatted as 'username/repository'.

"CaffeineMC/sodium-fabric"

github-tag

The Git tag associated with the new or updated release published on GitHub.

"mc1.17.1-0.3.4"

github-url

The URL directing to the newly published version on GitHub.

"https://github.com/CaffeineMC/sodium-fabric/releases/tag/mc1.17.1-0.3.4"

github-files

Array of objects, each containing details about the files published for the new version on GitHub.

"[
  {
    \"name\": \"sodium-fabric-mc1.17.1-0.3.4+build.13.jar\",
    \"id\": 53929869,
    \"url\": \"https://github.com/CaffeineMC/sodium-fabric/releases/download/mc1.17.1-0.3.4/sodium-fabric-mc1.17.1-0.3.4%2Bbuild.13.jar\"
  }
]"