Skip to content

Merge pull request #5 from MineLittlePony/release-please--branches--m… #12

Merge pull request #5 from MineLittlePony/release-please--branches--m…

Merge pull request #5 from MineLittlePony/release-please--branches--m… #12

Workflow file for this run

name: Modpack Release | Pipeline
on:
push:
branches:
- main
env:
pack-file: 'pack.toml'
default-release-modrinth: 'true'
default-release-curseforge: 'false'
jobs:
parse-current-modpacks:
name: Parse current modpacks to a list
runs-on: ubuntu-latest
permissions:
contents: read
outputs:
modpack-folders: ${{ steps.list-modpacks.outputs.modpack-folders }}
steps:
# -- Checkout repo
- name: Check Out Git Repository
uses: actions/checkout@v4
# --- Parse the modpacks to and list
# This just parses the folders that have pack.toml
- name: List Modpacks
id: list-modpacks
run: |
modpackFolders=()
for folder in *; do
if [ -d "$folder" ]; then
if [ -e "$folder/${{ env.pack-file }}" ]; then
modpackFolders+=("$folder")
fi
fi
done
echo "modpack-folders=$(jq --compact-output --null-input '$ARGS.positional' --args -- "${modpackFolders[@]}")" >> "$GITHUB_OUTPUT"
# --- Print an nice msg about parsing
- name: Current detected modpacks
run: |
echo "::notice ::⚙ Current detected modpacks: ${{ steps.list-modpacks.outputs.modpack-folders }}"
release-please:
needs:
- parse-current-modpacks
if: ${{ (needs.parse-current-modpacks.outputs.modpack-folders) != '[]' }}
strategy:
fail-fast: false
matrix:
modpack: ${{ fromJson(needs.parse-current-modpacks.outputs.modpack-folders) }}
name: Handle Releases
runs-on: ubuntu-latest
defaults:
run:
working-directory: ${{ matrix.modpack }}
permissions:
contents: write
pull-requests: write
steps:
# --- Release please
# Creates and manages the prs and releases
- name: Perform Release with Release Please
id: release-please
uses: google-github-actions/release-please-action@v3
with:
monorepo-tags: true
path: ${{ matrix.modpack }}
release-type: simple
package-name: ${{ matrix.modpack }}
prerelease: true
changelog-types: >
[{"type":"feat","section":"★ Features","hidden":false},
{"type":"fix","section":"♻ Bug Fixes","hidden":false},
{"type":"mod","section":"☀ Modpack Changes","hidden":false},
{"type":"update","section":"⚘ Modpack Updates","hidden":false},
{"type":"chore","section":"⛭ Miscellaneous","hidden":true}]
# --- Parse version from PR Title when creating PR's
# Had to do this cause like to bump on the release pleae branch
# The tests for the shitty Regex can be found here: https://regexr.com/7lb8e
- name: Parse tag from PR title
uses: actions-ecosystem/action-regex-match@v2
id: version
with:
text: ${{ fromJson(steps.release-please.outputs.pr).title }}
regex: '(?<=\s)(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?(?:\+([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?$'
if: ${{ steps.release-please.outputs.pr != '' }}
# --- Checkout the git repo
# Remembed to do this AFTER release please
- name: Check Out Git Repository
uses: actions/checkout@v4
with:
fetch-depth: 0
# --- Bump version
# Now we should use the parsed release to bump the version on the files on the release please branch
- name: Bump Version
uses: ./.github/actions/bump-pack
with:
release-tag: ${{ steps.version.outputs.match }}
modpack: ${{ matrix.modpack }}
branch: ${{ fromJson(steps.release-please.outputs.pr).headBranchName }}
if: ${{ steps.release-please.outputs.pr != '' }}
# --- Get latest tag
# Should probably be switched to use the release please tag but whatever
- name: Get Latest tag
id: tag
uses: WyriHaximus/github-action-get-previous-tag@v1
if: ${{ steps.release-please.outputs.releases_created }}
# --- Handle the configs
- name: Parse Pack File
id: parse
uses: ./.github/actions/parse
with:
modpack: ${{ matrix.modpack }}
if: ${{ steps.release-please.outputs.releases_created }}
- name: Set Mod Vendors
id: set-mod-vendors
run: |
[[ ! -z "${{ secrets.CURSEFORGE_KEY }}" && ! -z "${{ secrets.CURSEFORGE_ID }}" ]] && echo "curseforge=true" >> $GITHUB_OUTPUT || echo "curseforge=false" >> $GITHUB_OUTPUT
[[ ! -z "${{ secrets.MODRINTH_KEY }}" && ! -z "${{ secrets.MODRINTH_ID }}" ]] && echo "modrinth=true" >> $GITHUB_OUTPUT || echo "modrinth=false" >> $GITHUB_OUTPUT
shell: bash
if: ${{ steps.release-please.outputs.releases_created }}
# --- Build an release
- name: Build Modpack
uses: ./.github/actions/build
with:
modpack: ${{ matrix.modpack }}
release-tag: ${{ steps.tag.outputs.tag }}
build-modrinth: ${{ env.default-release-modrinth }}
build-curse: ${{ env.default-release-curseforge }}
if: ${{ steps.release-please.outputs.releases_created }}
# --- Release
- name: Release Modpack to Vendors
uses: ./.github/actions/release
with:
modpack: ${{ matrix.modpack }}
release-tag: ${{ steps.tag.outputs.tag }}
loader: ${{ steps.parse.outputs.loader }}
game-version: ${{ steps.parse.outputs.game-version }}
upload-modrinth: ${{ steps.set-mod-vendors.outputs.modrinth }}
upload-curse: ${{ steps.set-mod-vendors.outputs.curseforge }}
MODRINTH_ID: ${{ secrets.MODRINTH_ID }}
MODRINTH_KEY: ${{ secrets.MODRINTH_KEY }}
CURSEFORGE_ID: ${{ secrets.CURSEFORGE_ID }}
CURSEFORGE_KEY: ${{ secrets.CURSEFORGE_KEY }}
if: |
steps.release-please.outputs.releases_created &&
(steps.set-mod-vendors.outputs.modrinth || steps.set-mod-vendors.outputs.curseforge)