Skip to content

Commit

Permalink
chore: 🔧 Add auto curseforge upload
Browse files Browse the repository at this point in the history
  • Loading branch information
P3pp3rF1y committed Sep 17, 2024
1 parent 7bbddc0 commit bc9cdd3
Show file tree
Hide file tree
Showing 3 changed files with 135 additions and 10 deletions.
30 changes: 21 additions & 9 deletions .github/workflows/gradle.yml
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
name: Mod Build

on: [ push ]
on: [ workflow_dispatch, push ]

jobs:
build:

runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v1
- uses: actions/checkout@v4
with:
fetch-depth: 200
- name: Set up JDK 21
uses: actions/setup-java@v2
uses: actions/setup-java@v4
with:
java-version: 21
distribution: zulu
Expand All @@ -19,7 +21,7 @@ jobs:
env:
USERNAME: ${{ secrets.USERNAME }}
READ_PACKAGES_TOKEN: ${{ secrets.READ_PACKAGES_TOKEN }}
uses: nick-invision/retry@v2
uses: nick-invision/retry@v3
with:
timeout_minutes: 10
max_attempts: 3
Expand All @@ -29,10 +31,22 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: ./gradlew build publish
- name: Cleanup old artifacts
uses: actions/delete-package-versions@v3
uses: actions/delete-package-versions@v5
with:
package-name: 'sophisticatedbackpacks.sophisticatedbackpacks'
package-type: 'maven'
min-versions-to-keep: 10
- name: Publish to CurseForge
env:
CURSEFORGE_TOKEN: ${{ secrets.CURSEFORGE_TOKEN }}
run: |
BRANCH_NAME=${GITHUB_REF##*/}
if [[ "$BRANCH_NAME" =~ ^[0-9]+\.[0-9]+\.([0-9]+|x)$ ]]; then
./gradlew curseforge
else
echo "Branch name does not match the pattern: $BRANCH_NAME. Skipping CurseForge upload."
exit 0
fi
- name: Code Quality
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Expand All @@ -43,7 +57,7 @@ jobs:
echo "VERSION_NAME=$(${{github.workspace}}/gradlew -q printVersionName | awk -F "version:" '{printf $2}')" >> $GITHUB_OUTPUT
id: version
- name : Compile version message
uses: actions/github-script@v6
uses: actions/github-script@v7
with:
script: |
const gh = ${{ toJSON(github) }};
Expand All @@ -64,11 +78,9 @@ jobs:
core.setOutput('EMBED_DESCRIPTION', description);
id: embed
- name: Send Discord Notification
uses: tsickert/discord-webhook@v5.3.0
uses: tsickert/discord-webhook@v6.0.0
with:
webhook-url: ${{ secrets.DISCORD_WEBHOOK }}
embeds: ${{steps.embed.outputs.EMBEDS}}
content: null
embed-title: "${{steps.embed.outputs.EMBED_TITLE}}"
embed-url: "${{steps.embed.outputs.EMBED_URL}}"
embed-description: "${{steps.embed.outputs.EMBED_DESCRIPTION}}"
Expand Down
108 changes: 108 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ plugins {
id 'maven-publish'
id 'net.neoforged.moddev' version '1.0.14'
id "org.sonarqube" version "5.0.0.4638"
id "net.darkhax.curseforgegradle" version "1.1.15"
}

idea {
Expand Down Expand Up @@ -230,6 +231,113 @@ sonarqube {
}
}

task generateChangelog {
doLast {
def changelog = new StringBuilder()

// Function to remove characters with Unicode code points 129 or higher
def removeHighUnicodeChars = { text ->
text.codePoints()
.filter { codePoint -> codePoint <= 0x007F } // Keep only ASCII characters (U+0000 to U+007F)
.collect { codePoint -> new String(Character.toChars(codePoint)) }
.join('')
}

// Function to format commit messages with nesting
def formatMultilineMessage = { message ->
// Split message by lines, trim whitespace, and create formatted list
def lines = message.split('\n')
def formattedMessage = lines[0].trim() // First line as top-level list item
if (lines.size() > 1) {
formattedMessage += "\n" + lines[1..-1].collect { line ->
// Trim the line and remove leading dash if present
def trimmedLine = line.trim()
if (trimmedLine.startsWith('-')) {
trimmedLine = trimmedLine.substring(1).trim()
}
" - ${trimmedLine}" // Nested list for additional lines
}.join('\n')
}
return formattedMessage
}

// Function to remove [DEV] section from commit message
def removeDevSection = { message ->
def devIndex = message.indexOf('[DEV]')
if (devIndex != -1) {
return message.substring(0, devIndex).trim()
}
return message
}

// Get the latest commit hash
def latestCommitHash = "git rev-parse HEAD".execute().text.trim()

// Check if the latest commit is a merge commit
def parentCommits = "git rev-list --parents -n 1 ${latestCommitHash}".execute().text.split()
logger.info("Parent commits: ${parentCommits}")

def commitMessages = []
if (parentCommits.size() > 2) { // Merge commit has more than 2 parents
def firstParent = parentCommits[1]
def secondParent = parentCommits[2]
def gitLogCommand = [
"bash", "-c", "git log --pretty=format:%B ${firstParent}..${secondParent}"
]
commitMessages = gitLogCommand.execute().text.split('\n\n') // Split by two newlines for each commit
logger.info("Merge commit, ran git log command: ${gitLogCommand.join(' ')} and got ${commitMessages}")
} else {
// Single commit log
commitMessages = "git log -1 --pretty=%B".execute().text.split('\n\n')
// Split by two newlines for each commit
logger.info("Single commit, ran git log command: git log -1 --pretty=%B and got ${commitMessages}");
}

def features = []
def fixes = []
commitMessages.each { commitMessage ->
commitMessage = removeHighUnicodeChars(commitMessage) // Remove high Unicode characters
commitMessage = removeDevSection(commitMessage) // Remove [DEV] section

if (commitMessage.startsWith('feat: ')) {
features.add(commitMessage.replaceFirst('feat: ', '').trim())
} else if (commitMessage.startsWith('fix: ')) {
fixes.add(commitMessage.replaceFirst('fix: ', '').trim())
}
}

if (features) {
changelog.append("### Features\n")
features.each { feature -> changelog.append("- ${formatMultilineMessage(feature)}\n") }
}

if (fixes) {
changelog.append("### Fixes\n")
fixes.each { fix -> changelog.append("- ${formatMultilineMessage(fix)}\n") }
}

// Store the changelog in a project property or an environment variable
logger.info("Compiled changelog: " + changelog.toString())
project.ext.changelog = changelog.toString()
}
project.ext.changelog = ""
}

task curseforge(type: net.darkhax.curseforgegradle.TaskPublishCurseForge) {
dependsOn 'generateChangelog'

apiToken = System.getenv("CURSEFORGE_TOKEN")
def mainFile = upload(project.curseforge_id, file("${project.buildDir}/libs/${archivesBaseName}-${version}.jar"))
mainFile.changelogType = 'markdown'
mainFile.changelog = {project.ext.changelog}
mainFile.addModLoader('NeoForge')
mainFile.releaseType = "${release_type}"
"${release_versions}".split(',').each {
mainFile.addGameVersion("${it}")
}
onlyIf { !project.ext.changelog.isEmpty() }
}

task printVersionName {
println "version:" + project.version
}
7 changes: 6 additions & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -34,4 +34,9 @@ chipped_cf_file_id=5506938
resourcefullib_cf_file_id=5483169
athena_cf_file_id=5431579
curios_cf_file_id=5546342
sc_version=[1.21,1.22)
sc_version=[1.21,1.22)

#publish
curseforge_id=422301
release_type=release
release_versions=1.21,1.21.1

0 comments on commit bc9cdd3

Please sign in to comment.