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
ij_yaml_keep_indents_on_empty_lines = false
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_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"
on: ["pull_request", "push"]
on: [ "pull_request", "push" ]
jobs:
build:
@ -8,6 +8,8 @@ jobs:
steps:
- name: "Checkout Repository"
uses: "actions/checkout@v2.3.4"
- name: "Validate Gradle Wrapper"
uses: "gradle/wrapper-validation-action@v1.0.4"
- name: "Setup JDK 16"
uses: "actions/setup-java@v2.2.0"
with:
@ -15,3 +17,25 @@ jobs:
java-version: "16"
- name: "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.
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>",
"titles.title_entered_plot": "<gold>Plot: <world>;<plot></gold>",
"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.enabled": "<prefix><gold><value> is now enabled.</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 org.cadixdev.gradle.licenser.LicenseExtension
import org.cadixdev.gradle.licenser.Licenser
import java.net.URI
plugins {
java
@ -11,22 +12,13 @@ plugins {
alias(libs.plugins.shadow)
alias(libs.plugins.licenser)
alias(libs.plugins.grgit)
alias(libs.plugins.nexus)
eclipse
idea
}
var ver by extra("6.1.3")
var versuffix by extra("-SNAPSHOT")
val versionsuffix: String? by project
if (versionsuffix != null) {
versuffix = "-$versionsuffix"
}
version = if (!project.hasProperty("release")) {
ver + versuffix
} else {
ver
}
version = "6.1.3-SNAPSHOT"
allprojects {
group = "com.plotsquared"
@ -103,6 +95,9 @@ allprojects {
signing {
if (!version.toString().endsWith("-SNAPSHOT")) {
val signingKey: String? by project
val signingPassword: String? by project
useInMemoryPgpKeys(signingKey, signingPassword)
signing.isRequired
sign(publishing.publications)
}
@ -111,8 +106,6 @@ allprojects {
publishing {
publications {
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"])
pom {
@ -133,18 +126,23 @@ allprojects {
developer {
id.set("Sauilitired")
name.set("Alexander Söderberg")
organization.set("IntellectualSites")
}
developer {
id.set("NotMyFault")
name.set("NotMyFault")
organization.set("IntellectualSites")
email.set("contact@notmyfault.dev")
}
developer {
id.set("SirYwell")
name.set("Hannes Greule")
organization.set("IntellectualSites")
}
developer {
id.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 {
@ -217,10 +187,6 @@ allprojects {
)
}
jar {
this.archiveClassifier.set("jar")
}
shadowJar {
this.archiveClassifier.set(null as String?)
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 {
val aggregatedJavadocs = create<Javadoc>("aggregatedJavadocs") {
title = "${project.name} ${project.version} API"

View File

@ -42,6 +42,7 @@ http4j = "1.3"
shadow = "7.0.0"
grgit = "4.1.0"
licenser = "0.6.1"
nexus = "1.1.0"
[libraries]
# Platform expectations
@ -92,3 +93,4 @@ paster = { group = "com.intellectualsites.paster", name = "Paster", version.ref
shadow = { id = "com.github.johnrengelman.shadow", version.ref = "shadow" }
grgit = { id = "org.ajoberstar.grgit", version.ref = "grgit" }
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",
"schedule": [
"on monday after 9am"
]
],
"labels": ["Renovate"],
"commitMessagePrefix": "chore: "
}