build: Overhaul build & deployment workflow (#3267)

* Fixes #3250

* build: Overhaul build & deployment workflow

- Move to release drafter
- Replace publishing with gradle nexus
- Conventional commits are handy
- Determine build status in gh actions before deploying
This commit is contained in:
NotMyFault 2021-10-04 15:28:47 +02:00 committed by GitHub
parent e322ee85fd
commit 21727ebfc7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 90 additions and 62 deletions

View File

@ -1008,6 +1008,6 @@ ij_html_uniform_ident = false
indent_size = 2 indent_size = 2
ij_yaml_keep_indents_on_empty_lines = false ij_yaml_keep_indents_on_empty_lines = false
ij_yaml_keep_line_breaks = true ij_yaml_keep_line_breaks = true
ij_yaml_space_before_colon = true ij_yaml_space_before_colon = false
ij_yaml_spaces_within_braces = true ij_yaml_spaces_within_braces = true
ij_yaml_spaces_within_brackets = true ij_yaml_spaces_within_brackets = true

20
.github/release-drafter.yml vendored Normal file
View File

@ -0,0 +1,20 @@
categories:
- title: '🐛 Fixes'
label: 'Bugfix'
- title: '✨ Features'
label: 'Feature'
- title: '🧭 Changes'
label: 'Enhancement'
- title: '📦 Dependency updates'
labels:
- 'Renovate'
- 'Dependency updates'
change-template: '- $TITLE @$AUTHOR (#$NUMBER)'
change-title-escapes: '\<*_&@'
exclude-contributors:
- 'renovate'
- 'renovate-bot'
template: |
## PlotSquared v6.
$CHANGES

View File

@ -1,6 +1,6 @@
name: "build" name: "build"
on: ["pull_request", "push"] on: [ "pull_request", "push" ]
jobs: jobs:
build: build:
@ -8,6 +8,8 @@ jobs:
steps: steps:
- name: "Checkout Repository" - name: "Checkout Repository"
uses: "actions/checkout@v2.3.4" uses: "actions/checkout@v2.3.4"
- name: "Validate Gradle Wrapper"
uses: "gradle/wrapper-validation-action@v1.0.4"
- name: "Setup JDK 16" - name: "Setup JDK 16"
uses: "actions/setup-java@v2.2.0" uses: "actions/setup-java@v2.2.0"
with: with:
@ -15,3 +17,25 @@ jobs:
java-version: "16" java-version: "16"
- name: "Clean Build" - name: "Clean Build"
run: "./gradlew clean build" run: "./gradlew clean build"
- name: "Determine release status"
if: "${{ runner.os == 'Linux' }}"
run: |
if [ "$(./gradlew properties | awk '/^version:/ { print $2; }' | grep '\-SNAPSHOT')" ]; then
echo "STATUS=snapshot" >> $GITHUB_ENV
else
echo "STATUS=release" >> $GITHUB_ENV
fi
- name: "Publish Release"
if: "${{ runner.os == 'Linux' && env.STATUS == 'release' && github.event_name == 'push' && github.ref == 'refs/heads/v6'}}"
run: "./gradlew publishToSonatype closeSonatypeStagingRepository"
env:
ORG_GRADLE_PROJECT_sonatypeUsername: "${{ secrets.SONATYPE_USERNAME }}"
ORG_GRADLE_PROJECT_sonatypePassword: "${{ secrets.SONATYPE_PASSWORD }}"
ORG_GRADLE_PROJECT_signingKey: "${{ secrets.SIGNING_KEY }}"
ORG_GRADLE_PROJECT_signingPassword: "${{ secrets.SIGNING_PASSWORD }}"
- name: "Publish Snapshot"
if: "${{ runner.os == 'Linux' && env.STATUS != 'release' && github.event_name == 'push' && github.ref == 'refs/heads/v6' }}"
run: "./gradlew publishToSonatype"
env:
ORG_GRADLE_PROJECT_sonatypeUsername: "${{ secrets.SONATYPE_USERNAME }}"
ORG_GRADLE_PROJECT_sonatypePassword: "${{ secrets.SONATYPE_PASSWORD }}"

14
.github/workflows/release-drafter.yml vendored Normal file
View File

@ -0,0 +1,14 @@
name: "draft release"
on:
push:
branches:
- v6
jobs:
update_release_draft:
runs-on: "ubuntu-latest"
steps:
- uses: "release-drafter/release-drafter@v5.15.0"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@ -1,12 +0,0 @@
name: "validate gradle wrapper"
on: ["pull_request", "push"]
jobs:
build:
runs-on: "ubuntu-20.04"
steps:
- name: "Checkout Repository"
uses: "actions/checkout@v2.3.4"
- name: "Validate Gradle Wrapper"
uses: "gradle/wrapper-validation-action@v1.0.4"

View File

@ -6,3 +6,8 @@ If you are planning to commit any changes to the project, it would be highly app
code style conventions. To make this easier we have provided settings that can be picked up by your IDE. code style conventions. To make this easier we have provided settings that can be picked up by your IDE.
IntelliJ: Install the `EditorConfig` plugin. Now IntelliJ is able to pick up the provided `.editorconfig` file automatically. IntelliJ: Install the `EditorConfig` plugin. Now IntelliJ is able to pick up the provided `.editorconfig` file automatically.
### Committing
We are using [conventional commits](https://www.conventionalcommits.org/en/) to make commit messages more descriptive and
generate changelogs based on them.

View File

@ -183,8 +183,6 @@
"error.task_in_process": "<prefix><gold>Task is already running.</gold>", "error.task_in_process": "<prefix><gold>Task is already running.</gold>",
"titles.title_entered_plot": "<gold>Plot: <world>;<plot></gold>", "titles.title_entered_plot": "<gold>Plot: <world>;<plot></gold>",
"titles.title_entered_plot_sub": "<dark_aqua>Owned by <owner></dark_aqua>", "titles.title_entered_plot_sub": "<dark_aqua>Owned by <owner></dark_aqua>",
"titles.prefix_greeting": "<gold><id></gold><gray>></gray>",
"titles.prefix_farewell": "<gold><id></gold><gray>></gray>",
"core.prefix": "<dark_gray>[</dark_gray><gold>P2</gold><dark_gray>] </dark_gray>", "core.prefix": "<dark_gray>[</dark_gray><gold>P2</gold><dark_gray>] </dark_gray>",
"core.enabled": "<prefix><gold><value> is now enabled.</gold>", "core.enabled": "<prefix><gold><value> is now enabled.</gold>",
"placeholder.hooked": "<prefix><gold>PlotSquared hooked into MVdWPlaceholderAPI</gold>", "placeholder.hooked": "<prefix><gold>PlotSquared hooked into MVdWPlaceholderAPI</gold>",

View File

@ -1,6 +1,7 @@
import com.github.jengelman.gradle.plugins.shadow.ShadowPlugin import com.github.jengelman.gradle.plugins.shadow.ShadowPlugin
import org.cadixdev.gradle.licenser.LicenseExtension import org.cadixdev.gradle.licenser.LicenseExtension
import org.cadixdev.gradle.licenser.Licenser import org.cadixdev.gradle.licenser.Licenser
import java.net.URI
plugins { plugins {
java java
@ -11,22 +12,13 @@ plugins {
alias(libs.plugins.shadow) alias(libs.plugins.shadow)
alias(libs.plugins.licenser) alias(libs.plugins.licenser)
alias(libs.plugins.grgit) alias(libs.plugins.grgit)
alias(libs.plugins.nexus)
eclipse eclipse
idea idea
} }
var ver by extra("6.1.3") version = "6.1.3-SNAPSHOT"
var versuffix by extra("-SNAPSHOT")
val versionsuffix: String? by project
if (versionsuffix != null) {
versuffix = "-$versionsuffix"
}
version = if (!project.hasProperty("release")) {
ver + versuffix
} else {
ver
}
allprojects { allprojects {
group = "com.plotsquared" group = "com.plotsquared"
@ -103,6 +95,9 @@ allprojects {
signing { signing {
if (!version.toString().endsWith("-SNAPSHOT")) { if (!version.toString().endsWith("-SNAPSHOT")) {
val signingKey: String? by project
val signingPassword: String? by project
useInMemoryPgpKeys(signingKey, signingPassword)
signing.isRequired signing.isRequired
sign(publishing.publications) sign(publishing.publications)
} }
@ -111,8 +106,6 @@ allprojects {
publishing { publishing {
publications { publications {
create<MavenPublication>("maven") { create<MavenPublication>("maven") {
// This includes not only the original jar (i.e. not shadowJar),
// but also sources & javadocs due to the above java block.
from(components["java"]) from(components["java"])
pom { pom {
@ -133,18 +126,23 @@ allprojects {
developer { developer {
id.set("Sauilitired") id.set("Sauilitired")
name.set("Alexander Söderberg") name.set("Alexander Söderberg")
organization.set("IntellectualSites")
} }
developer { developer {
id.set("NotMyFault") id.set("NotMyFault")
name.set("NotMyFault") name.set("NotMyFault")
organization.set("IntellectualSites")
email.set("contact@notmyfault.dev")
} }
developer { developer {
id.set("SirYwell") id.set("SirYwell")
name.set("Hannes Greule") name.set("Hannes Greule")
organization.set("IntellectualSites")
} }
developer { developer {
id.set("dordsor21") id.set("dordsor21")
name.set("dordsor21") name.set("dordsor21")
organization.set("IntellectualSites")
} }
} }
@ -161,34 +159,6 @@ allprojects {
} }
} }
} }
repositories {
mavenLocal() // Install to own local repository
// Accept String? to not err if they're not present.
// Check that they both exist before adding the repo, such that
// `credentials` doesn't err if one is null.
// It's not pretty, but this way it can compile.
val nexusUsername: String? by project
val nexusPassword: String? by project
if (nexusUsername != null && nexusPassword != null) {
maven {
val releasesRepositoryUrl = "https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/"
val snapshotRepositoryUrl = "https://s01.oss.sonatype.org/content/repositories/snapshots/"
url = uri(
if (version.toString().endsWith("-SNAPSHOT")) snapshotRepositoryUrl
else releasesRepositoryUrl
)
credentials {
username = nexusUsername
password = nexusPassword
}
}
} else {
logger.warn("No nexus repository is added; nexusUsername or nexusPassword is null.")
}
}
} }
tasks { tasks {
@ -217,10 +187,6 @@ allprojects {
) )
} }
jar {
this.archiveClassifier.set("jar")
}
shadowJar { shadowJar {
this.archiveClassifier.set(null as String?) this.archiveClassifier.set(null as String?)
this.archiveFileName.set("${project.name}-${project.version}.${this.archiveExtension.getOrElse("jar")}") this.archiveFileName.set("${project.name}-${project.version}.${this.archiveExtension.getOrElse("jar")}")
@ -237,6 +203,15 @@ allprojects {
} }
nexusPublishing {
repositories {
sonatype {
nexusUrl.set(URI.create("https://s01.oss.sonatype.org/service/local/"))
snapshotRepositoryUrl.set(URI.create("https://s01.oss.sonatype.org/content/repositories/snapshots/"))
}
}
}
tasks { tasks {
val aggregatedJavadocs = create<Javadoc>("aggregatedJavadocs") { val aggregatedJavadocs = create<Javadoc>("aggregatedJavadocs") {
title = "${project.name} ${project.version} API" title = "${project.name} ${project.version} API"

View File

@ -42,6 +42,7 @@ http4j = "1.3"
shadow = "7.0.0" shadow = "7.0.0"
grgit = "4.1.0" grgit = "4.1.0"
licenser = "0.6.1" licenser = "0.6.1"
nexus = "1.1.0"
[libraries] [libraries]
# Platform expectations # Platform expectations
@ -92,3 +93,4 @@ paster = { group = "com.intellectualsites.paster", name = "Paster", version.ref
shadow = { id = "com.github.johnrengelman.shadow", version.ref = "shadow" } shadow = { id = "com.github.johnrengelman.shadow", version.ref = "shadow" }
grgit = { id = "org.ajoberstar.grgit", version.ref = "grgit" } grgit = { id = "org.ajoberstar.grgit", version.ref = "grgit" }
licenser = { id = "org.cadixdev.licenser", version.ref = "licenser" } licenser = { id = "org.cadixdev.licenser", version.ref = "licenser" }
nexus = { id = "io.github.gradle-nexus.publish-plugin", version.ref = "nexus" }

View File

@ -12,5 +12,7 @@
"timezone": "Europe/Berlin", "timezone": "Europe/Berlin",
"schedule": [ "schedule": [
"on monday after 9am" "on monday after 9am"
] ],
"labels": ["Renovate"],
"commitMessagePrefix": "chore: "
} }