Publish Release #54
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_curse=true | |
publish_gh_release=true | |
version_format="{major}.{minor}.{patch}" | |
;; | |
"beta") | |
publish_maven=true | |
publish_curse=true | |
publish_gh_release=false | |
version_format="{major}.{minor}.{patch}-beta+{increment}" | |
;; | |
"alpha") | |
publish_maven=true | |
publish_curse=false | |
publish_gh_release=false | |
version_format="{major}.{minor}.{patch}-alpha+{increment}" | |
;; | |
*) | |
echo "::warning::Unknown release type: $release_type" | |
publish_maven=false | |
publish_curse=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_curse=$publish_curse" >> $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: Curse publish | |
if: ${{ steps.release_type.outputs.publish_curse == 'true' }} | |
run: ./gradlew curseforge | |
env: | |
AUTO_GENERATED_VERSION: ${{ steps.versioning.outputs.version }} | |
CURSE_RELEASE_TYPE: ${{ steps.release_type.outputs.release_type }} | |
CURSE_TOKEN: ${{ secrets.CURSE_TOKEN }} | |
- name: Tag and Release | |
if: ${{ steps.release_type.outputs.publish_gh_release == 'true' }} | |
uses: softprops/action-gh-release@v0.1.15 | |
with: | |
body_path: CHANGELOG.md | |
tag_name: ${{ steps.versioning.outputs.version_tag }} | |
files: | | |
build/libs/* | |
CHANGELOG.md | |
CHANGELOG.txt | |
- name: Update badge | |
uses: schneegans/dynamic-badges-action@v1.6.0 | |
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 |