mc-publish/README.md

817 lines
37 KiB
Markdown
Raw Permalink Normal View History

2023-05-12 12:39:23 -04:00
## mc-publish
2021-09-26 09:19:14 -04:00
2023-05-12 12:39:23 -04:00
[![GitHub tag](https://img.shields.io/github/tag/Kir-Antipov/mc-publish.svg)](https://github.com/Kir-Antipov/mc-publish/releases/latest)
[![GitHub build status](https://img.shields.io/github/actions/workflow/status/Kir-Antipov/mc-publish/ci.yml?branch=master)](https://github.com/Kir-Antipov/mc-publish/actions/workflows/ci.yml)
2021-09-26 09:19:14 -04:00
[![GitHub license](https://img.shields.io/github/license/Kir-Antipov/mc-publish.svg?cacheSeconds=36000)](https://github.com/Kir-Antipov/mc-publish#readme)
2023-05-12 12:39:23 -04:00
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.
2021-09-26 09:19:14 -04:00
### 📖 Usage
2021-09-26 09:19:14 -04:00
2023-05-12 12:39:23 -04:00
Most values are resolved automatically, so to publish your project, you only need a minimal amount of configuration.
2022-07-05 12:03:36 -04:00
2023-05-12 12:39:23 -04:00
```yaml
2022-07-05 12:03:36 -04:00
jobs:
build:
# ...
2024-01-14 16:46:04 -05:00
permissions:
contents: write
2022-07-05 12:03:36 -04:00
steps:
2023-05-19 14:55:41 -04:00
- uses: Kir-Antipov/mc-publish@v3.3
2022-07-05 12:03:36 -04:00
with:
2023-05-12 12:39:23 -04:00
# Only include this section if you wish to publish
# your assets on Modrinth.
2022-07-05 12:03:36 -04:00
modrinth-id: AANobbMI
modrinth-token: ${{ secrets.MODRINTH_TOKEN }}
2023-05-12 12:39:23 -04:00
# Only include this section if you wish to publish
# your assets on CurseForge.
2022-07-05 12:03:36 -04:00
curseforge-id: 394468
curseforge-token: ${{ secrets.CURSEFORGE_TOKEN }}
2023-05-12 12:39:23 -04:00
# Only include this section if you wish to publish
# your assets on GitHub.
2022-07-05 12:03:36 -04:00
github-token: ${{ secrets.GITHUB_TOKEN }}
```
2023-05-12 12:39:23 -04:00
### 📘 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.
2022-07-05 12:03:36 -04:00
2023-05-12 12:39:23 -04:00
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.
2022-07-05 12:03:36 -04:00
2021-09-26 09:19:14 -04:00
```yml
jobs:
build:
# ...
2024-01-14 16:46:04 -05:00
permissions:
contents: write
2021-09-26 09:19:14 -04:00
steps:
2023-05-19 14:55:41 -04:00
- uses: Kir-Antipov/mc-publish@v3.3
2021-09-26 09:19:14 -04:00
with:
modrinth-id: AANobbMI
modrinth-featured: true
modrinth-unfeature-mode: subset
2021-09-26 09:19:14 -04:00
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
2021-09-26 09:19:14 -04:00
github-token: ${{ secrets.GITHUB_TOKEN }}
2023-05-12 12:39:23 -04:00
files: |
build/libs/!(*-@(dev|sources|javadoc)).jar
build/libs/*-@(dev|sources|javadoc).jar
2021-09-26 09:19:14 -04:00
name: Sodium 0.3.2 for Minecraft 1.17.1
version: mc1.17.1-0.3.2
2021-12-10 08:46:09 -05:00
version-type: release
2023-05-12 12:39:23 -04:00
changelog-file: CHANGELOG.*
2021-09-26 09:19:14 -04:00
loaders: |
fabric
forge
2022-06-05 13:23:48 -04:00
quilt
2021-12-10 08:46:09 -05:00
game-versions: |
2023-05-12 12:39:23 -04:00
[1.16,1.16.5)
>=21w37a <1.18.2
2022-07-05 12:03:36 -04:00
1.19
2023-05-12 12:39:23 -04:00
game-version-filter: none
2021-12-10 08:46:09 -05:00
dependencies: |
2023-05-12 12:39:23 -04:00
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)
2021-09-26 09:19:14 -04:00
java: |
2023-05-12 12:39:23 -04:00
Java 1.8
2022-07-05 12:03:36 -04:00
17
2021-09-26 09:19:14 -04:00
retry-attempts: 2
2022-01-12 11:13:42 -05:00
retry-delay: 10000
2022-07-05 12:03:36 -04:00
fail-mode: fail
2021-12-10 08:46:09 -05:00
```
### 📝 Inputs
2021-12-10 08:46:09 -05:00
2023-05-12 12:39:23 -04:00
| Name | Description | Default | Examples |
|----------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------|
| [modrinth-id](#modrinth-id) | The unique identifier of your Modrinth project. | A value specified in the metadata file. | `AANobbMI` |
| [modrinth-featured](#modrinth-featured) | Set to `true` to feature the version on Modrinth. | `true` | `true` <br> `false` |
| [modrinth-unfeature-mode](#modrinth-unfeature-mode) | Sets the behavior for unfeaturing older Modrinth versions. | If `modrinth-featured` is set to `true`, `subset`; otherwise, `none`. | `none` <br> `subset` <br> `intersection` <br> `any` |
| [modrinth-token](#modrinth-token) | Your Modrinth API token. | - | `${{ secrets.MODRINTH_TOKEN }}` |
| [curseforge-id](#curseforge-id) | The unique identifier of your CurseForge project. | A value specified in the metadata file. | `394468` |
| [curseforge-token](#curseforge-token) | Your CurseForge API token. | - | `${{ secrets.CURSEFORGE_TOKEN }}` |
| [github-tag](#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](#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` <br> `false` |
| [github-draft](#github-draft) | Set to `true` to create a draft release. Ignored if the GitHub Release already exists. | `false` | `true` <br> `false` |
| [github-prerelease](#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` <br> `false` |
| [github-commitish](#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` <br> `feature/86` |
| [github-discussion](#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](#github-token) | Your GitHub API token. | - | `${{ secrets.GITHUB_TOKEN }}` |
| [files](#files) | An array of [globs](https://www.digitalocean.com/community/tools/glob) determining which files to upload. | `build/libs/!(*-@(dev\|sources\|javadoc)).jar` <br> `build/libs/*-@(dev\|sources\|javadoc).jar` | `build/libs/*.jar` |
| [name](#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](#version) | The version number. | A tag of the release that triggered the action. | `mc1.17.1-0.3.2` |
| [version-type](#version-type) | The version type. | Will be parsed from the `version` value. | `alpha` <br> `beta` <br> `release` |
| [changelog](#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](#changelog-file) | A [glob](https://www.digitalocean.com/community/tools/glob) pointing to the changelog file. | - | `CHANGELOG.md` |
| [loaders](#loaders) | An array of supported loaders. | A value specified in the metadata file. | `fabric` <br> `forge` <br> `quilt` <br> `rift` |
| [game-versions](#game-versions) | An array of supported Minecraft versions. | A value specified in the metadata file. | `21w37a` <br> `>=1.17` <br> `[1.17,)` |
| [dependencies](#dependencies) | An array of dependencies required by your project. | A value specified in the metadata file. | `fabric@0.40.0(required)` |
| [game-version-filter](#game-version-filter) | Controls the method used to filter game versions. | `releases \| min-major \| min-minor` | `releases` <br> `min` <br> `max` <br> `none` |
| [java](#java) | An array of Java versions compatible with your project. | - | `Java 8` <br> `Java 1.8` <br> `8` |
| [retry-attempts](#retry-attempts) | Defines the maximum number of asset publishing attempts. | `2` | `2` <br> `10` <br> `-1` |
| [retry-delay](#retry-delay) | Specifies the delay (in milliseconds) between asset publishing attempts. | `10000` | `1000` <br> `60000` <br> `0` |
| [fail-mode](#fail-mode) | Controls how the action responds to errors during the mod publishing process. | `fail` | `fail` <br> `warn` <br> `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:
```yaml
2023-05-12 12:39:23 -04:00
# Shared top-level properties
files: build/libs/!(*-@(dev\|sources\|javadoc)).jar
dependencies: |
sodium@0.4.10(required){modrinth:AANobbMI}{curseforge:394468}#(ignore:curseforge)
2023-05-12 12:39:23 -04:00
modrinth-id: AAAAAAAA
modrinth-token: ${{ secrets.MODRINTH_TOKEN }}
2023-05-12 12:39:23 -04:00
# The name of your mod, specific to Modrinth
modrinth-name: Modrinth Mod
2023-05-12 12:39:23 -04:00
# 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: |
2023-05-12 12:39:23 -04:00
AANobbMI@0.4.10(required)
curseforge-id: 0
curseforge-token: ${{ secrets.CURSEFORGE_TOKEN }}
2023-05-12 12:39:23 -04:00
# The name of your mod, specific to CurseForge
curseforge-name: CurseForge Mod
2023-05-12 12:39:23 -04:00
# The dependencies for your mod, specific to CurseForge
# Note that it's possible to use project ids instead of slugs
curseforge-dependencies: |
2023-05-12 12:39:23 -04:00
394468@0.4.10(required)
```
2021-12-10 08:46:09 -05:00
#### modrinth-id
2023-05-12 12:39:23 -04:00
The unique identifier of your Modrinth project.
2021-12-10 08:46:09 -05:00
```yaml
modrinth-id: AANobbMI
```
2023-05-12 12:39:23 -04:00
Can be automatically retrieved from the metadata file of your project:
2021-12-10 08:46:09 -05:00
- `fabric.mod.json` (Fabric)
- Custom `mc-publish` field:
2021-12-10 08:46:09 -05:00
```json
{
// ...
"custom": {
"mc-publish": {
"modrinth": "AANobbMI"
}
2023-05-12 12:39:23 -04:00
}
2021-12-10 08:46:09 -05:00
}
```
- `mods.toml` (Forge)
2022-11-24 17:35:27 -05:00
- Custom `mc-publish` field:
2021-12-10 08:46:09 -05:00
```toml
2023-05-12 12:39:23 -04:00
# ...
2022-11-24 17:35:27 -05:00
[mc-publish]
2021-12-10 08:46:09 -05:00
modrinth="AANobbMI"
```
2022-06-05 13:23:48 -04:00
- `quilt.mod.json` (Quilt)
2022-11-24 17:37:53 -05:00
- Custom `mc-publish` field:
2022-06-05 13:23:48 -04:00
```json
{
// ...
"mc-publish": {
"modrinth": "AANobbMI"
2023-05-12 12:39:23 -04:00
}
2022-06-05 13:23:48 -04:00
}
```
2021-12-10 08:46:09 -05:00
#### modrinth-token
2023-05-12 12:39:23 -04:00
Your Modrinth API token. It's required if you want to publish your assets to Modrinth.
2021-12-10 08:46:09 -05:00
```yaml
modrinth-token: ${{ secrets.MODRINTH_TOKEN }}
```
2022-06-06 11:17:42 -04:00
#### modrinth-featured
2023-05-12 12:39:23 -04:00
Set to `true` to feature the version on Modrinth; `false` otherwise. Default value is:
2022-06-06 11:17:42 -04:00
```yaml
modrinth-featured: true
```
#### modrinth-unfeature-mode
2023-05-12 12:39:23 -04:00
Sets the behavior for unfeaturing older Modrinth versions. Default value is `subset`, if [`modrinth-featured`](#modrinth-featured) is set to `true`; otherwise, `none`.
```yaml
modrinth-unfeature-mode: version-intersection | loader-subset
```
Available presets:
2023-05-12 12:39:23 -04:00
- `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 supports 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.
2023-05-12 12:39:23 -04:00
If none of the given presets suits your needs, you can construct a new one from the following values via bitwise `OR`, like so - `game-version-intersection | loaders-subset`:
2023-05-12 12:39:23 -04:00
- `game-version-subset`
- `game-version-intersection`
- `game-version-any`
- `version-subset`
- `version-intersection`
- `version-any`
- `loader-subset`
- `loader-intersection`
- `loader-any`
2021-12-10 08:46:09 -05:00
#### curseforge-id
2023-05-12 12:39:23 -04:00
The unique identifier of your CurseForge project.
2021-12-10 08:46:09 -05:00
```yaml
curseforge-id: 394468
```
2023-05-12 12:39:23 -04:00
Can be automatically retrieved from the metadata file of your project:
2021-12-10 08:46:09 -05:00
- `fabric.mod.json` (Fabric)
- Custom `mc-publish` field:
2021-12-10 08:46:09 -05:00
```json
{
// ...
"custom": {
"mc-publish": {
"curseforge": 394468
}
2023-05-12 12:39:23 -04:00
}
2021-12-10 08:46:09 -05:00
}
```
- `mods.toml` (Forge)
2022-11-24 17:35:27 -05:00
- Custom `mc-publish` field:
2021-12-10 08:46:09 -05:00
```toml
2023-05-12 12:39:23 -04:00
# ...
2022-11-24 17:35:27 -05:00
[mc-publish]
2021-12-10 08:46:09 -05:00
curseforge=394468
```
2022-06-05 13:23:48 -04:00
- `quilt.mod.json` (Quilt)
2022-11-24 17:37:53 -05:00
- Custom `mc-publish` field:
2022-06-05 13:23:48 -04:00
```json
{
// ...
"mc-publish": {
"curseforge": 394468
2023-05-12 12:39:23 -04:00
}
2022-06-05 13:23:48 -04:00
}
```
2021-12-10 08:46:09 -05:00
#### curseforge-token
2023-05-12 12:39:23 -04:00
Your CurseForge API token. It's required if you want to publish your assets to CurseForge.
2021-12-10 08:46:09 -05:00
```yaml
curseforge-token: ${{ secrets.CURSEFORGE_TOKEN }}
```
#### github-tag
2023-05-12 12:39:23 -04:00
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`.
2021-12-10 08:46:09 -05:00
```yaml
github-tag: mc1.17.1-0.3.2
```
#### github-generate-changelog
2023-05-12 12:39:23 -04:00
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`.
```yaml
github-generate-changelog: false
```
#### github-draft
2023-05-12 12:39:23 -04:00
Set to `true` to create a draft release; `false` otherwise. Ignored if the GitHub Release already exists. Default value is `false`.
```yaml
github-draft: false
```
#### github-prerelease
2023-05-12 12:39:23 -04:00
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`](version-type) is `release`; otherwise, `true`.
```yaml
github-prerelease: true
```
#### github-commitish
2023-05-12 12:39:23 -04:00
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.
```yaml
github-commitish: 347040cd637363613e56a6b333f09eaa5be3a196
```
#### github-discussion
2023-05-12 12:39:23 -04:00
If specified, creates and links a discussion of the specified **EXISTING** category to the release. Ignored if the GitHub Release already exists.
```yaml
github-discussion: Announcements
```
2021-12-10 08:46:09 -05:00
#### github-token
2023-05-12 12:39:23 -04:00
Your GitHub API token. It's required if you want to publish your assets to GitHub.
2021-12-10 08:46:09 -05:00
```yaml
github-token: ${{ secrets.GITHUB_TOKEN }}
```
#### files
2023-05-12 12:39:23 -04:00
An array of [globs](https://www.digitalocean.com/community/tools/glob) determining which files to upload. Default value is:
2021-12-10 08:46:09 -05:00
```yaml
2023-05-12 12:39:23 -04:00
files: |
build/libs/!(*-@(dev|sources|javadoc)).jar
build/libs/*-@(dev|sources|javadocs).jar
2021-12-10 08:46:09 -05:00
```
#### name
2023-05-12 12:39:23 -04:00
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 (`""`).
2021-12-10 08:46:09 -05:00
```yaml
name: Sodium 0.3.2 for Minecraft 1.17.1
```
#### version
2023-05-12 12:39:23 -04:00
The version number. Defaults to a tag of the release that triggered the action.
2021-12-10 08:46:09 -05:00
```yaml
version: mc1.17.1-0.3.2
```
#### version-type
2023-05-12 12:39:23 -04:00
The version type - alpha, beta, or release. By default, it will be parsed from the [`version`](#version) value. If no value is provided, it will be parsed from the [`version`](#version) value (e.g., `0.40.0+1.17-alpha` results in `alpha`).
2021-12-10 08:46:09 -05:00
```yaml
version-type: release
```
#### changelog
2023-05-12 12:39:23 -04:00
The changelog for this version. Defaults to a body of the release that triggered the action.
2021-12-10 08:46:09 -05:00
```yaml
changelog: This release fixes a few more issues in Sodium 0.3 for Minecraft 1.17.1.
```
#### changelog-file
2023-05-12 12:39:23 -04:00
A [glob](https://www.digitalocean.com/community/tools/glob) pointing to the changelog file.
2021-12-10 08:46:09 -05:00
```yaml
2023-05-12 12:39:23 -04:00
changelog-file: CHANGELOG.*
2021-12-10 08:46:09 -05:00
```
#### loaders
2023-05-12 12:39:23 -04:00
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:
- `fabric.mod.json`
```json
{
// ...
"custom": {
"mc-publish": {
2023-05-12 12:39:23 -04:00
"loaders": ["fabric", "quilt"]
}
2023-05-12 12:39:23 -04:00
}
}
```
<br>
2021-12-10 08:46:09 -05:00
```yaml
loaders: |
fabric
forge
2022-06-05 13:23:48 -04:00
quilt
2021-12-10 08:46:09 -05:00
```
#### game-versions
2023-05-12 12:39:23 -04:00
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.).
2021-12-10 08:46:09 -05:00
```yaml
game-versions: |
2023-05-12 12:39:23 -04:00
[1.16,1.16.5)
>=21w37a <1.18.2
1.19
2021-12-10 08:46:09 -05:00
```
2023-05-12 12:39:23 -04:00
#### game-version-filter
2021-12-10 08:46:09 -05:00
2023-05-12 12:39:23 -04:00
Controls the method used to filter game versions. Default value is:
2021-12-10 08:46:09 -05:00
```yaml
2023-05-12 12:39:23 -04:00
game-version-filter: releases | min-major | min-minor
```
Available filters (note that they can be combined to achieve the desired outcome):
- `none` - no filter is applied.
- `releases` - only include release versions.
- `betas` - only include beta versions of the game.
- `alphas` - only include alpha versions of the game.
- `snapshots` - include both alpha and beta versions.
- `any` - include any version types (release, beta, or alpha).
- `min-patch` - include versions with the minimum patch number.
- `max-patch` - include versions with the maximum patch number.
- `min-minor` - include versions with the minimum minor number.
- `max-minor` - include versions with the maximum minor number.
- `min-major` - include versions with the minimum major number.
- `max-major` - include versions with the maximum major number.
- `min` - include the earliest versions in a range, considering major, minor, and patch values.
- `max` - include the lates versions in a range, considering major, minor, and patch values.
Example of work of each individual filter for `>=1.17 <=1.18` version range:
- `none` - `[1.17, 1.17.1-pre1, 1.17.1-pre2, 1.17.1-pre3, 1.17.1-rc1, 1.17.1-rc2, 1.17.1, 21w37a, 21w38a, 21w39a, 21w40a, 21w41a, 21w42a, 21w43a, 21w44a, 1.18-pre1, 1.18-pre2, 1.18-pre3, 1.18-pre4, 1.18-pre5, 1.18-pre6, 1.18-pre7, 1.18-pre8, 1.18-rc1, 1.18-rc2, 1.18-rc3, 1.18-rc4, 1.18]`
- `releases` - `[1.17, 1.17.1, 1.18]`
- `betas` - `[1.17.1-pre1, 1.17.1-pre2, 1.17.1-pre3, 1.17.1-rc1, 1.17.1-rc2, 1.18-pre1, 1.18-pre2, 1.18-pre3, 1.18-pre4, 1.18-pre5, 1.18-pre6, 1.18-pre7, 1.18-pre8, 1.18-rc1, 1.18-rc2, 1.18-rc3, 1.18-rc4]`
- `alphas` - `[21w37a, 21w38a, 21w39a, 21w40a, 21w41a, 21w42a, 21w43a, 21w44a]`
- `snapshots` - `[1.17.1-pre1, 1.17.1-pre2, 1.17.1-pre3, 1.17.1-rc1, 1.17.1-rc2, 21w37a, 21w38a, 21w39a, 21w40a, 21w41a, 21w42a, 21w43a, 21w44a, 1.18-pre1, 1.18-pre2, 1.18-pre3, 1.18-pre4, 1.18-pre5, 1.18-pre6, 1.18-pre7, 1.18-pre8, 1.18-rc1, 1.18-rc2, 1.18-rc3, 1.18-rc4]`
- `any` - `[1.17, 1.17.1-pre1, 1.17.1-pre2, 1.17.1-pre3, 1.17.1-rc1, 1.17.1-rc2, 1.17.1, 21w37a, 21w38a, 21w39a, 21w40a, 21w41a, 21w42a, 21w43a, 21w44a, 1.18-pre1, 1.18-pre2, 1.18-pre3, 1.18-pre4, 1.18-pre5, 1.18-pre6, 1.18-pre7, 1.18-pre8, 1.18-rc1, 1.18-rc2, 1.18-rc3, 1.18-rc4, 1.18]`
- `min-patch` - `[1.17, 21w37a, 21w38a, 21w39a, 21w40a, 21w41a, 21w42a, 21w43a, 21w44a, 1.18-pre1, 1.18-pre2, 1.18-pre3, 1.18-pre4, 1.18-pre5, 1.18-pre6, 1.18-pre7, 1.18-pre8, 1.18-rc1, 1.18-rc2, 1.18-rc3, 1.18-rc4, 1.18]`
- `max-patch` - `[1.17.1-pre1, 1.17.1-pre2, 1.17.1-pre3, 1.17.1-rc1, 1.17.1-rc2, 1.17.1]`
- `min-minor` - `[1.17, 1.17.1-pre1, 1.17.1-pre2, 1.17.1-pre3, 1.17.1-rc1, 1.17.1-rc2, 1.17.1]`
- `max-minor` - `[21w37a, 21w38a, 21w39a, 21w40a, 21w41a, 21w42a, 21w43a, 21w44a, 1.18-pre1, 1.18-pre2, 1.18-pre3, 1.18-pre4, 1.18-pre5, 1.18-pre6, 1.18-pre7, 1.18-pre8, 1.18-rc1, 1.18-rc2, 1.18-rc3, 1.18-rc4, 1.18]`
- `min-major` - the same one as for `none`. I don't think we will ever see Minecraft 2.0 *(except that one April Fool's snapshot)*.
- `max-major` - the same one as for `none`. I don't think we will ever see Minecraft 2.0 *(except that one April Fool's snapshot)*.
- `min` - `[1.17]`
- `max` - `[21w37a, 21w38a, 21w39a, 21w40a, 21w41a, 21w42a, 21w43a, 21w44a, 1.18-pre1, 1.18-pre2, 1.18-pre3, 1.18-pre4, 1.18-pre5, 1.18-pre6, 1.18-pre7, 1.18-pre8, 1.18-rc1, 1.18-rc2, 1.18-rc3, 1.18-rc4, 1.18]`
2021-12-10 08:46:09 -05:00
#### dependencies
2023-05-12 12:39:23 -04:00
An array of dependencies required by your project. By default, `mc-publish` will take them from your project's metadata file.
2021-12-10 08:46:09 -05:00
```yaml
dependencies: |
2023-05-12 12:39:23 -04:00
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)
2021-12-10 08:46:09 -05:00
```
2023-05-12 12:39:23 -04:00
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:
2021-12-10 08:46:09 -05:00
2023-05-12 12:39:23 -04:00
- `required` - for dependencies required to run. Without them a game will crash.
- `recommended` - for dependencies not required to run. Without them a game will log a warning.
- `optional` - for dependencies not required to run. Can be used as a kind of metadata.
- `embedded` - for dependencies embedded into the mod. Can be used as a kind of metadata.
- `conflicting` - for mods whose together with yours cause some kind of bugs, etc. With them a game will log a warning.
- `incompatible` - for mods whose together with yours might cause a game crash. With them a game will crash.
2021-12-10 08:46:09 -05:00
2023-05-12 12:39:23 -04:00
Can be automatically retrieved from your project's metadata file:
2021-12-10 08:46:09 -05:00
- `fabric.mod.json` (Fabric)
```json
"depends": {
"required-dependency": "*"
},
"recommends": {
2023-05-12 12:39:23 -04:00
"recommended-dependency": "0.1.0"
2021-12-10 08:46:09 -05:00
},
"suggests": {
2023-05-12 12:39:23 -04:00
"optional-dependency": "0.2.0"
2021-12-10 08:46:09 -05:00
},
"conflicts": {
"conflicting-dependency": "*"
},
"breaks": {
"incompatible-dependency": "*"
},
2023-05-12 12:39:23 -04:00
"custom": {
"mc-publish": {
// This dependency declaration will be merged with everything written above.
// It's useful if you want to provide information about dependency types not supported by Fabric.
// Or if you want to attach platform-specific aliases to one of the dependencies above.
"dependencies": [
"embedded-dependency@0.3.0(embedded)#(ignore:curseforge)",
"recommended-dependency@0.1.0(recommended){modrinth:recommended-dependency-fabric}"
]
}
}
2021-12-10 08:46:09 -05:00
```
- `mods.toml` (Forge)
```toml
[[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]]
2023-05-12 12:39:23 -04:00
modId="embedded-dependency"
2021-12-10 08:46:09 -05:00
mandatory=false
embedded=true
versionRange="0.3.0"
ordering="NONE"
side="BOTH"
2022-11-24 17:35:27 -05:00
[dependencies.mod-id.mc-publish]
2021-12-10 08:46:09 -05:00
ignore=false # `mc-publish` will ignore this dependency, if `ignore` is set to true
2023-05-12 12:39:23 -04:00
modrinth="embedded-dependency-forge" # Modrinth's project slug
curseforge="embedded-dependency-forge" # CurseForge's project slug
2021-12-10 08:46:09 -05:00
[[dependencies.mod-id]]
modId="incompatible-dependency"
mandatory=false
incompatible=true
versionRange="*"
ordering="NONE"
side="BOTH"
2023-05-12 12:39:23 -04:00
[mc-publish]
# This dependency declaration will be merged with everything written above.
# It's useful if you want to provide information about dependency types not supported by Forge.
# Or if you want to attach platform-specific aliases to one of the dependencies above.
dependencies=[
"recommended-mod@0.2.0(recommended){modrinth:recommended-dependency-forge}",
"conflicting-mod@<0.40.0(conflicting)#(ignore:curseforge)",
]
2021-12-10 08:46:09 -05:00
```
2022-06-05 13:23:48 -04:00
- `quilt.mod.json` (Quilt)
```json
2023-05-12 12:39:23 -04:00
// ./quilt_loader
2022-06-05 13:23:48 -04:00
"depends": [
"required-dependency",
{
"id": "optional-dependency",
2022-11-24 17:37:53 -05:00
"versions": "0.1.0",
2022-06-05 13:23:48 -04:00
"optional": true
}
],
"provides": [
{
2023-05-12 12:39:23 -04:00
"id": "embedded-dependency",
2022-06-05 13:23:48 -04:00
"version": "0.3.0",
"mc-publish": {
"ignore": false, // `mc-publish` will ignore this dependency, if `ignore` is set to true
2023-05-12 12:39:23 -04:00
"modrinth": "embedded-dependency-quilt", // Modrinth's project slug
"curseforge": "embedded-dependency-quilt" // CurseForge's project slug
2022-06-05 13:23:48 -04:00
}
}
],
"breaks": [
{
"id": "incompatible-dependency",
2022-11-24 17:37:53 -05:00
"versions": "*"
2022-06-05 13:23:48 -04:00
},
{
"id": "conflicting-dependency",
2022-11-24 17:37:53 -05:00
"versions": "*",
2022-06-05 13:23:48 -04:00
"unless": "some-mod-that-fixes-conflict"
}
],
2023-05-12 12:39:23 -04:00
// ...
// Back to top-level ./
"mc-publish": {
// This dependency declaration will be merged with everything written above.
// It's useful if you want to provide information about dependency types not supported by Quilt.
// Or if you want to attach platform-specific aliases to one of the dependencies above.
"dependencies": [
"embedded-dependency@0.3.0(embedded)#(ignore:curseforge)",
"recommended-dependency@0.1.0(recommended){modrinth:recommended-dependency-quilt}"
]
}
2022-06-05 13:23:48 -04:00
```
2021-12-10 08:46:09 -05:00
#### java
2023-05-12 12:39:23 -04:00
An array of Java versions compatible with your project.
2021-12-10 08:46:09 -05:00
```yaml
java: |
2023-05-12 12:39:23 -04:00
Java 1.8
2021-12-10 08:46:09 -05:00
16
Java 17
```
#### retry-attempts
2023-05-12 12:39:23 -04:00
Defines the maximum number of asset publishing attempts. Default value is:
```yaml
retry-attempts: 2
```
#### retry-delay
2023-05-12 12:39:23 -04:00
Specifies the delay (in milliseconds) between asset publishing attempts. Default values is:
```yaml
retry-delay: 10000
2022-07-05 11:08:11 -04:00
```
#### fail-mode
2023-05-12 12:39:23 -04:00
Controls how the action responds to errors during the mod publishing process. Default value is:
2022-07-05 11:08:11 -04:00
```yaml
fail-mode: fail
```
Available values:
2023-05-12 12:39:23 -04:00
- `fail` - immediately sets the action status to **failed** and terminates its execution.
- `warn` - warns about errors. The action won't be terminated, nor its status will be set to **failed**.
- `skip` - warns about errors. The action won't be terminated, but its status will be set to **failed** after all specified targets have been processed.
### 📤 Outputs
| Name | Description | Examples |
|-------------------------------------------|--------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|
| [modrinth-id](#modrinth-id-1) | The unique identifier of your Modrinth project. | `"AANobbMI"` |
| [modrinth-version](#modrinth-version) | The unique identifier of the version published on Modrinth by this action. | `"Fz37KqRh"` |
| [modrinth-url](#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](#modrinth-files) | Array of objects, each containing details about the files published for the new version on Modrinth. | `"[]"` |
| [curseforge-id](#curseforge-id-1) | The unique identifier of your CurseForge project. | `"394468"` |
| [curseforge-version](#curseforge-version) | The unique identifier of the version published on CurseForge by this action. | `"3488820"` |
| [curseforge-url](#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](#curseforge-files) | Array of objects, each containing details about the files published for the new version on CurseForge. | `"[]"` |
| [github-repo](#github-repo) | The full repository name on GitHub, formatted as 'username/repository'. | `"CaffeineMC/sodium-fabric"` |
| [github-tag](#github-tag-1) | The Git tag associated with the new or updated release published on GitHub. | `"mc1.17.1-0.3.4"` |
| [github-url](#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](#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.
```json
"AANobbMI"
```
#### modrinth-version
The unique identifier of the version published on Modrinth by this action.
```json
"Fz37KqRh"
```
#### modrinth-url
The URL directing to the newly published version on Modrinth.
```json
"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.
```json5
"[
{
\"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.
```json
"394468"
```
#### curseforge-version
The unique identifier of the version published on CurseForge by this action.
```json
"3488820"
```
#### curseforge-url
The URL directing to the newly published version on CurseForge.
```json
"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.
```json5
"[
{
\"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'.
```json
"CaffeineMC/sodium-fabric"
```
#### github-tag
The Git tag associated with the new or updated release published on GitHub.
```json
"mc1.17.1-0.3.4"
```
#### github-url
The URL directing to the newly published version on GitHub.
```json
"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.
```json5
"[
{
\"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\"
}
]"
```