Publish Release #70
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# This workflow publishes commits to Maven | |
name: Publish Release | |
on: | |
workflow_dispatch: | |
inputs: | |
channel: | |
description: 'Release channel' | |
required: true | |
type: string | |
type: | |
description: 'Release type' | |
required: true | |
default: 'beta' | |
type: string | |
jobs: | |
build: | |
name: Build and Publish | |
runs-on: ubuntu-latest | |
environment: prod | |
steps: | |
- name: Checkout git repo | |
uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 | |
- name: Resolve release type | |
id: release_type | |
run: | | |
case $release_type in | |
"release") | |
publish_maven=true | |
publish_launchers=true | |
publish_gh_release=true | |
version_format="{major}.{minor}.{patch}" | |
;; | |
"beta") | |
publish_maven=true | |
publish_launchers=true | |
publish_gh_release=false | |
version_format="{major}.{minor}.{patch}-beta+{increment}" | |
;; | |
"alpha") | |
publish_maven=true | |
publish_launchers=false | |
publish_gh_release=false | |
version_format="{major}.{minor}.{patch}-alpha+{increment}" | |
;; | |
*) | |
echo "::warning::Unknown release type: $release_type" | |
publish_maven=false | |
publish_launchers=false | |
publish_gh_release=false | |
version_format="{major}.{minor}.{patch}-$release_type+{increment}" | |
esac | |
tag_format="v$release_channel-{major}.{minor}.{patch}" | |
echo "release_channel=$release_channel" >> $GITHUB_OUTPUT | |
echo "release_type=$release_type" >> $GITHUB_OUTPUT | |
echo "publish_maven=$publish_maven" >> $GITHUB_OUTPUT | |
echo "publish_launchers=$publish_launchers" >> $GITHUB_OUTPUT | |
echo "publish_gh_release=$publish_gh_release" >> $GITHUB_OUTPUT | |
echo "version_format=$version_format" >> $GITHUB_OUTPUT | |
echo "tag_format=$tag_format" >> $GITHUB_OUTPUT | |
env: | |
release_channel: ${{ inputs.channel }} | |
release_type: ${{ inputs.type }} | |
# Install python and deps | |
- name: Set up Python 3.12.1 | |
uses: actions/setup-python@v4 | |
with: | |
python-version: 3.12.1 | |
- name: Cache PIP packages | |
uses: actions/cache@v3 | |
with: | |
path: ~/.cache/pip | |
key: ${{ runner.os }}-pip-${{ hashFiles('.github/requirements.txt') }} | |
- name: Install python deps | |
run: | | |
python -m pip install --upgrade pip | |
python -m pip install -r .github/requirements.txt | |
- name: Generate version | |
id: versioning | |
run: | | |
version=$(python .github/git_utils.py genVersion --format_str="${{ steps.release_type.outputs.version_format }}") | |
version_tag=$(python .github/git_utils.py genVersion --format_str="${{ steps.release_type.outputs.tag_format }}") | |
echo "version=$version" | |
echo "version_tag=$version_tag" | |
echo "version=$version" >> $GITHUB_OUTPUT | |
echo "version_tag=$version_tag" >> $GITHUB_OUTPUT | |
- name: Generate changelogs | |
run: | | |
python .github/git_utils.py genChangelogRaw | |
python .github/git_utils.py genChangelogMd --next_tag=${{ steps.versioning.outputs.version_tag }} | |
# Install JDK and build with Gradle | |
- name: Set up JDK 1.8 | |
uses: actions/setup-java@v3 | |
with: | |
distribution: 'adopt' | |
java-version: '8' | |
- name: Cache Gradle packages | |
uses: actions/cache@v3 | |
with: | |
path: | | |
~/.gradle/caches | |
~/.gradle/wrapper | |
key: ${{ runner.os }}-gradle2-${{ hashFiles('**/build.gradle', '**/build.properties', '**/gradle.properties', '**/gradle-wrapper.properties') }} | |
- name: Build | |
run: ./gradlew build | |
env: | |
AUTO_GENERATED_VERSION: ${{ steps.versioning.outputs.version }} | |
- name: Maven publish | |
if: ${{ steps.release_type.outputs.publish_maven == 'true' }} | |
run: ./gradlew publish | |
env: | |
AUTO_GENERATED_VERSION: ${{ steps.versioning.outputs.version }} | |
MAVEN_USER: ${{ secrets.MAVEN_USER }} | |
MAVEN_PASS: ${{ secrets.MAVEN_PASS }} | |
- name: Publish to Curse | |
if: ${{ steps.release_type.outputs.publish_launchers == 'true' }} | |
run: | | |
# Base args for all modules | |
COMMON_ARGS=( \ | |
-k $API_TOKEN \ | |
-rt $RELEASE_TYPE \ | |
-v 'Java 17' \ | |
-v 1.20.1 \ | |
-v Forge \ | |
-v NeoForge \ | |
-c ./CHANGELOG.md \ | |
--required-dep codechicken-lib-1-8 \ | |
--required-dep cb-multipart \ | |
) | |
# All submodules need PR Core | |
MODULE_ARGS=( \ | |
"${COMMON_ARGS[@]}" \ | |
--required-dep project-red-core \ | |
) | |
# Fabrication is special and also needs Integration and Transmission | |
FAB_ARGS=( \ | |
"${MODULE_ARGS[@]}" \ | |
--required-dep project-red-integration \ | |
--required-dep project-red-transmission \ | |
) | |
python -m curseuploadpy "${COMMON_ARGS[@]}" -p 228702 -f core/build/libs/*-core.jar | |
python -m curseuploadpy "${MODULE_ARGS[@]}" -p 229048 -f expansion/build/libs/*-expansion.jar | |
python -m curseuploadpy "${MODULE_ARGS[@]}" -p 229049 -f exploration/build/libs/*-exploration.jar | |
python -m curseuploadpy "${FAB_ARGS[@]}" -p 230111 -f fabrication/build/libs/*-fabrication.jar | |
python -m curseuploadpy "${MODULE_ARGS[@]}" -p 229046 -f illumination/build/libs/*-illumination.jar | |
python -m curseuploadpy "${MODULE_ARGS[@]}" -p 229045 -f integration/build/libs/*-integration.jar | |
python -m curseuploadpy "${MODULE_ARGS[@]}" -p 478939 -f transmission/build/libs/*-transmission.jar | |
env: | |
RELEASE_TYPE: ${{ steps.release_type.outputs.release_type }} | |
API_TOKEN: ${{ secrets.CURSE_TOKEN }} | |
- name: Publish to Modrinth | |
if: ${{ steps.release_type.outputs.publish_launchers == 'true' }} | |
run: | | |
# Base args for all modules | |
COMMON_ARGS=( \ | |
-k $API_TOKEN \ | |
create-version \ | |
-v "$MOD_VERSION" \ | |
-c ./CHANGELOG.md \ | |
-gv 1.20.1 \ | |
-vt $RELEASE_TYPE \ | |
-l forge \ | |
-l neoforge \ | |
--required-dep codechicken-lib \ | |
--required-dep cb-multipart \ | |
) | |
# All submodules need PR Core | |
MODULE_ARGS=( \ | |
"${COMMON_ARGS[@]}" \ | |
--required-dep project-red-core \ | |
) | |
# Fabrication is special and also needs Integration and Transmission | |
FAB_ARGS=( \ | |
"${MODULE_ARGS[@]}" \ | |
--required-dep project-red-integration \ | |
--required-dep project-red-transmission \ | |
) | |
python -m modrinthpy "${COMMON_ARGS[@]}" -p project-red-core -n "Project Red Core v$MOD_VERSION" -f core/build/libs/*-core.jar | |
python -m modrinthpy "${MODULE_ARGS[@]}" -p project-red-expansion -n "Project Red Expansion v$MOD_VERSION" -f expansion/build/libs/*-expansion.jar | |
python -m modrinthpy "${MODULE_ARGS[@]}" -p project-red-exploration -n "Project Red Exploration v$MOD_VERSION" -f exploration/build/libs/*-exploration.jar | |
python -m modrinthpy "${FAB_ARGS[@]}" -p project-red-fabrication -n "Project Red Fabrication v$MOD_VERSION" -f fabrication/build/libs/*-fabrication.jar | |
python -m modrinthpy "${MODULE_ARGS[@]}" -p project-red-illumination -n "Project Red Illumination v$MOD_VERSION" -f illumination/build/libs/*-illumination.jar | |
python -m modrinthpy "${MODULE_ARGS[@]}" -p project-red-integration -n "Project Red Integration v$MOD_VERSION" -f integration/build/libs/*-integration.jar | |
python -m modrinthpy "${MODULE_ARGS[@]}" -p project-red-transmission -n "Project Red Transmission v$MOD_VERSION" -f transmission/build/libs/*-transmission.jar | |
env: | |
RELEASE_TYPE: ${{ steps.release_type.outputs.release_type }} | |
API_TOKEN: ${{ secrets.MODRINTH_TOKEN }} | |
MOD_VERSION: ${{ steps.versioning.outputs.version }} | |
- name: Tag and Release | |
if: ${{ steps.release_type.outputs.publish_gh_release == 'true' }} | |
uses: softprops/[email protected] | |
with: | |
body_path: CHANGELOG.md | |
tag_name: ${{ steps.versioning.outputs.version_tag }} | |
files: | | |
build/libs/* | |
CHANGELOG.md | |
CHANGELOG.txt | |
- name: Update badge | |
continue-on-error: true | |
uses: schneegans/[email protected] | |
with: | |
auth: ${{ secrets.GIST_SECRET }} | |
gistID: 3ef501bc64c896a86fd706dfea8ba367 | |
filename: projectred-badge-${{ steps.release_type.outputs.release_channel }}-${{ steps.release_type.outputs.release_type }}.json | |
label: Project Red ${{ steps.release_type.outputs.release_channel }} | |
message: ${{ steps.versioning.outputs.version }} | |
color: green | |
namedLogo: CurseForge | |
cacheSeconds: 300 | |
- name: Cleanup Gradle Cache | |
# These files shouldn't be cached according to https://docs.github.com/en/actions/guides/building-and-testing-java-with-gradle | |
run: | | |
rm -f ~/.gradle/caches/modules-2/modules-2.lock | |
rm -f ~/.gradle/caches/modules-2/gc.properties | |
- name: Upload artifacts | |
uses: actions/upload-artifact@v3 | |
with: | |
name: project-red-${{ steps.versioning.outputs.version }} | |
path: | | |
'*/build/libs/ProjectRed-*.jar' | |
CHANGELOG.md | |
CHANGELOG.txt |