Skip to content

Commit

Permalink
chore: 🔧 auto curseforge upload
Browse files Browse the repository at this point in the history
  • Loading branch information
P3pp3rF1y committed Sep 16, 2024
1 parent d016b70 commit 5c1b28d
Show file tree
Hide file tree
Showing 3 changed files with 129 additions and 8 deletions.
26 changes: 18 additions & 8 deletions .github/workflows/gradle.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@ jobs:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v1
- uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v2
uses: actions/setup-java@v4
with:
java-version: 17
distribution: zulu
Expand All @@ -19,7 +19,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 +29,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 +55,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 +76,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
106 changes: 106 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.gradle' version '[6.0.18,6.2)'
id 'org.parchmentmc.librarian.forgegradle' version '1.+'
id "net.darkhax.curseforgegradle" version "1.1.15"
}

idea {
Expand Down Expand Up @@ -207,6 +208,111 @@ sonarqube {
}
}

task generateChangelog {
def changelog = new StringBuilder()

// Function to remove characters with Unicode code points 129 or higher
def removeHighUnicodeChars = { text ->
text.replaceAll(/[\u0081-\uFFFF]/, '')
}

// 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()

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
} else {
// Single commit log
commitMessages = "git log -1 --pretty=%B".execute().text.split('\n\n') // Split by two newlines for each commit
}

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
project.ext.changelog = changelog.toString()
println(changelog.toString())
}

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

debugMode = true
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.addModLoader('Forge')
mainFile.releaseType = "${release_type}"
"${release_versions}".split(',').each {
mainFile.addGameVersion("${it}")
}
mainFile
mainFile.addRequirement('sophisticated-core')
mainFile.addOptional('jei')
mainFile.addOptional('curios')
mainFile.addOptional('crafting-tweaks')
onlyIf { !project.ext.changelog.isEmpty() }
}

task printVersionName {
println "version:" + project.version
}
5 changes: 5 additions & 0 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,11 @@ neo_version=47.1.5
neo_version_range=[47.1,)
loader_version_range=[47,)

#publish
curseforge_id=422301
release_type=release
release_versions=1.20.1

#deps
jei_mc_version=1.20.1-forge
jei_version=15.3.0.4
Expand Down

0 comments on commit 5c1b28d

Please sign in to comment.