diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..05905ee --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,79 @@ +name: release +on: + push: + tags: + - "**" + workflow_dispatch: + +jobs: + publish: + runs-on: ubuntu-22.04 + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + # Fetch all history + fetch-depth: 0 + - name: Setup Java 21 + uses: actions/setup-java@v2 + with: + distribution: 'temurin' + java-version: '21' + - name: Make gradle wrapper executable + run: chmod +x ./gradlew + - name: Maven Publish + id: maven_publish + env: + ARCHIVE_URL: ${{ secrets.TEACON_ARCHIVE_URL }} + ARCHIVE_ENDPOINT: ${{ secrets.TEACON_ARCHIVE_ENDPOINT }} + ARCHIVE_ACCESS_KEY: ${{ secrets.TEACON_ARCHIVE_ACCESS_KEY }} + ARCHIVE_SECRET_KEY: ${{ secrets.TEACON_ARCHIVE_SECRET_KEY }} + run: ./gradlew -Dorg.gradle.s3.endpoint=$ARCHIVE_ENDPOINT publishReleasePublicationToTeaconRepository githubActionOutput + - name: Generate Changelog + id: changelog + shell: bash + env: + CURRENT: ${{ github.ref }} + # Special thanks to this post on Stack Overflow regarding change set between two tags: + # https://stackoverflow.com/questions/12082981 + # Do note that actions/checkout will enter detach mode by default, so you won't have + # access to HEAD ref. Use GitHub-Action-supplied `github.ref` instead. + # Special thanks to this issue ticket regarding escaping newline: + # https://github.com/actions/create-release/issues/25 + # We use Bash parameter expansion to do find-and-replace. + # https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html + # Also we cannot use git rev-list because it always prepend "commit " + # See https://stackoverflow.com/questions/36927089/ + run: | + current_tag=${CURRENT/refs\/tags\//} + last_tag=`git describe --tags --abbrev=0 "$current_tag"^ 2>/dev/null || echo` + if [ last_tag ]; then + changelog=`git log --pretty="format:%H: %s" ${last_tag}..$current_tag` + else + changelog=`git log --pretty="format:%H: %s"` + fi + changelog="${changelog//'%'/'%25'}" + changelog="${changelog//$'\n'/' %0A'}" + echo "::set-output name=value::Change set since ${last_tag:-the beginning}: %0A%0A$changelog" + - name: GitHub Release + id: create_release + uses: actions/create-release@v1.1.1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ github.ref }} + release_name: ${{ github.ref }} + draft: false + prerelease: false + body: | + ${{ steps.changelog.outputs.value }} + - name: GitHub Release Artifact + uses: actions/upload-release-asset@v1.0.2 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: ${{ steps.maven_publish.outputs.artifact_path }} + asset_name: ${{ steps.maven_publish.outputs.artifact_publish_name }} + # https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types + asset_content_type: "application/java-archive" diff --git a/build.gradle b/build.gradle index 119483c..83815f6 100644 --- a/build.gradle +++ b/build.gradle @@ -67,19 +67,95 @@ tasks.withType(JavaCompile).configureEach { it.options.release = 21 } -// Configure Maven publishing. + + + publishing { publications { - mavenJava(MavenPublication) { + // Modified by TeaCon + register('release', MavenPublication) { + // noinspection GroovyAssignabilityCheck from components.java + version = rootProject.mod_version + groupId = rootProject.maven_group + artifactId = "$mod_github_repo-$rootProject.minecraft_version" + pom { + name = mod_github_repo + url = "https://github.com/$mod_github_owner/$mod_github_repo" + licenses { + license { + name = mod_license + url = "https://github.com/$mod_github_owner/$mod_github_repo/blob/HEAD/LICENSE" + } + } + organization { + name = 'TeaConMC' + url = 'https://github.com/teaconmc' + } + developers { + for (mod_author in "$mod_authors".split(',')) { + developer { id = mod_author.trim(); name = mod_author.trim() } + } + } + issueManagement { + system = 'GitHub Issues' + url = "https://github.com/$mod_github_owner/$mod_github_repo/issues" + } + scm { + url = "https://github.com/$mod_github_owner/$mod_github_repo" + connection = "scm:git:git://github.com/$mod_github_owner/${mod_github_repo}.git" + developerConnection = "scm:git:git@github.com:$mod_github_owner/${mod_github_repo}.git" + } + } } } - - // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. repositories { - // Add repositories to publish to here. - // Notice: This block does NOT have the same function as the block in the top level. - // The repositories here will be used for publishing your artifact, not for - // retrieving dependencies. + // Modified by TeaCon + maven { + name "teacon" + url "s3://maven/" + credentials(AwsCredentials) { + accessKey = System.env.ARCHIVE_ACCESS_KEY + secretKey = System.env.ARCHIVE_SECRET_KEY + } + } + } +} + +// Added by TeaCon +tasks.withType(PublishToMavenRepository).configureEach { + if (repository && repository.name == "archive") { + it.onlyIf { + System.env.MAVEN_USERNAME && System.env.MAVEN_PASSWORD + } } } + +abstract class TeaConDumpPathToGitHub extends DefaultTask { + @Input + abstract Property getPublishName() + @InputFile + abstract RegularFileProperty getTargetFile() + @TaskAction + void dump() { + if (System.env.GITHUB_ACTIONS) { + File theFile = targetFile.getAsFile().get() + + def outputFile = new File(System.env.GITHUB_OUTPUT) + // Use the env-specific line separator for maximally possible compatibility + def newLine = System.getProperty('line.separator') + + // Write out new env variable for later usage + outputFile << newLine << "artifact_name=${theFile.getName()}" + outputFile << newLine << "artifact_publish_name=${publishName.get()}" + outputFile << newLine << "artifact_path=${theFile.absolutePath}" + } + } +} + +// Added by TeaCon +tasks.register("githubActionOutput", TeaConDumpPathToGitHub) { task -> + task.onlyIf { System.env.GITHUB_ACTIONS } + task.getTargetFile().set(jar.archiveFile) + task.getPublishName().set("${jar.archiveBaseName.get()}-${version}.jar") +} diff --git a/gradle.properties b/gradle.properties index 88a9ee5..7e353da 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ loom.platform = neoforge # Mod properties mod_version = 0.1.0 -maven_group = cn.zbx1425.projectme +maven_group = cn.zbx1425 archives_name = project_me # Minecraft properties @@ -13,3 +13,9 @@ minecraft_version = 1.21.1 # Dependencies neoforge_version = 21.1.84 yarn_mappings_patch_version = 1.21+build.4 + +# Publishing +mod_license = MIT +mod_authors = Zbx1425, Burning_TNT +mod_github_owner = TeaConMC +mod_github_repo = ProjectMe