diff --git a/.github/workflows/external_release.yml b/.github/workflows/external_release.yml index a4c4dc76..e7094f63 100644 --- a/.github/workflows/external_release.yml +++ b/.github/workflows/external_release.yml @@ -1,4 +1,4 @@ -name: Release to CurseForge +name: Release to external sites on: release: @@ -8,30 +8,90 @@ jobs: curseforge_release: runs-on: ubuntu-latest steps: - - name: Checkout Code - uses: actions/checkout@v6 - with: - fetch-depth: 0 + - &parse-paper-versions + name: Parse Paper Versions + id: parse_versions + run: | + # Find line declaring Paper versions. + raw=$(grep "\\*\\*Paper:\\*\\*" <<< "${{ github.event.release.body }}") + + # Enable extended glob pattern to match 0 or more whitespace characters. + shopt -s extglob + # Trim Paper versions identifier prefix. + raw=${raw/*([[:space:]])'**'Paper:'**'*([[:space:]])/} + # Replace commas and optional spaces with a newline. + raw=${raw//,*([[:space:]])/$'\n'} + # Turn extglob back off. + shopt -u extglob + + echo "$raw" + printf "PAPER_VERSIONS<> "$GITHUB_OUTPUT" - - name: Fetch Github Release Asset + - &fetch-release-asset + name: Fetch Github Release Asset uses: dsaltares/fetch-gh-release-asset@1.1.2 with: token: ${{ secrets.GITHUB_TOKEN }} version: ${{ github.event.release.id }} file: OpenInv.jar - - name: Set CurseForge Variables - run: . scripts/set_curseforge_env.sh "${{ github.event.release.body }}" - - name: Create CurseForge Release - uses: itsmeow/curseforge-upload@v3 + uses: Kira-NT/mc-publish@v3.3 + with: + curseforge-token: ${{ secrets.CURSEFORGE_TOKEN }} + curseforge-id: 31432 + files: ./OpenInv.jar + game-versions: "${{ steps.parse_versions.outputs.PAPER_VERSIONS }}" + game-version-filter: releases + + modrinth_release: + runs-on: ubuntu-latest + steps: + - *parse-paper-versions + - *fetch-release-asset + + - name: Create Modrinth Release + uses: Kira-NT/mc-publish@v3.3 + with: + modrinth-id: 1UlvXbzL + modrinth-featured: false + modrinth-token: ${{ secrets.MODRINTH_TOKEN }} + files: ./OpenInv.jar + game-versions: "${{ steps.parse_versions.outputs.PAPER_VERSIONS }}" + game-version-filter: releases + + hangar_release: + runs-on: ubuntu-latest + steps: + - name: Parse Hangar Paper Versions + id: parse_versions + run: | + # Find line declaring Paper versions. + raw=$(grep "\\*\\*Paper:\\*\\*" <<< "${{ github.event.release.body }}") + # Trim Paper versions identifier prefix. + raw=${raw/'**'Paper:'**'/} + + # Generate JSON for Hangar. GitHub Actions provides jq 1.7 in the 24.04 image. + # Trim, then split on comma and optional spaces. + hangar_versions=$(jq -nc --arg versions "$raw" '{"PAPER": $versions | trim | split(", *";null)}') + + echo "$hangar_versions" + echo "HANGAR_PAPER_VERSIONS=$hangar_versions" >> "$GITHUB_OUTPUT" + + - *fetch-release-asset + + - name: Create Hangar Release + uses: benwoo1110/hangar-upload-action@v1 with: - token: "${{ secrets.CURSEFORGE_TOKEN }}" - project_id: 31432 - game_endpoint: minecraft - file_path: ./OpenInv.jar - display_name: "${{ github.event.release.name }}" - game_versions: "${{ env.CURSEFORGE_MINECRAFT_VERSIONS }}" - release_type: release - changelog_type: markdown - changelog: "${{ github.event.release.body }}" + api_token: ${{ secrets.HANGAR_TOKEN }} + slug: 'OpenInv' + version: ${{ github.event.release.tag_name }} + channel: release + files: |- + [ + { + "path": "./OpenInv.jar", + "platforms": ["PAPER"] + } + ] + platform_dependencies: "${{ steps.parse_versions.outputs.HANGAR_PAPER_VERSIONS }}" diff --git a/scripts/set_curseforge_env.sh b/scripts/set_curseforge_env.sh deleted file mode 100755 index c75d5202..00000000 --- a/scripts/set_curseforge_env.sh +++ /dev/null @@ -1,58 +0,0 @@ -#!/bin/bash -# -# Copyright (C) 2011-2021 lishid. All rights reserved. -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, version 3. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -# - -# Note that this script is designed for use in GitHub Actions, and is not -# particularly robust nor configurable. Run from project parent directory. - -if [[ ! $1 ]]; then - echo "No changelog, no Minecraft versions." - exit 0 -fi - -# Find line declaring Paper versions. -raw=$(grep "**Paper:**" <<< "$1") - -# Enable extended glob pattern to match 0 or more whitespace characters. -shopt -s extglob -# Trim Paper versions identifier prefix. -raw=${raw##*([[:space:]])'**'Paper:'**'*([[:space:]])} -# Replace commas and optional spaces with a newline. -raw=${raw//,*([[:space:]])/$'\n'} -# Turn extglob back off. -shopt -u extglob - -# Split into an array on newlines. -readarray -td $'\n' versions <<< "${raw}" - -for version in "${versions[@]}"; do - # Parse Minecraft minor version by dropping everything from the second period onward. - # CurseForge doesn't usually add patch versions for Bukkit, so we're more likely to - # hit a supported identifier this way. - version="${version%[.-]"${version#*.*[.-]}"}" - - # Skip already listed versions - if [[ "$minecraft_versions" =~ "$version"($|,) ]]; then - continue - fi - - # Append comma if variable is set, then append version. - # Note that Minecraft versions on CurseForge are declared "Minecraft x.y.z" - minecraft_versions="${minecraft_versions:+${minecraft_versions},}Minecraft ${version}" -done - -printf "$minecraft_versions\n" -#echo "CURSEFORGE_MINECRAFT_VERSIONS=$minecraft_versions" >> "$GITHUB_ENV"