Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .github/dependencies.sha256
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
4241c14a7727c34feea6507ec801318a3d4a90f070e4525681079fb94ee4c593 libs/gson-2.10.1.jar
c84700df5942fd969d3e8c2f1ad2c3ebeb17987ef88b426408d1306e49c4aada libs/MMOItems-6.10.jar
660ff2a6ec86bc8d7779948cf65c1637e271a16e1ef812d6a273f4a5c5eec73c libs/MythicLib-1.7.jar
97e0c708c1e319189ce1cda049244551a105860d51e908d2bcbc183fd1f89816 libs/spigot-api-1.20.2-R0.1-SNAPSHOT.jar
0116d714822b6f0cfebfe833a5df2e4754797b637d0fe709afb762c56da463a3 libs/ItemsAdder_3.5.0-r2.jar
11 changes: 11 additions & 0 deletions .github/scripts/prepare-release.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#!/usr/bin/env bash
set -euo pipefail
: "${GH_TOKEN:?Set DEPS_TOKEN with Contents read access to TF-Minecraft/ServerAssets}"
ref=2fe025eb9879bab7dfe48e32395d8a8c1dff75f7
mkdir -p libs
curl --fail --location --silent --show-error --retry 3 -H "Authorization: Bearer $GH_TOKEN" -H "Accept: application/vnd.github.raw+json" "https://api.github.com/repos/TF-Minecraft/ServerAssets/contents/jars/4241c14a7727/gson-2.10.1.jar?ref=$ref" > "libs/gson-2.10.1.jar"
curl --fail --location --silent --show-error --retry 3 -H "Authorization: Bearer $GH_TOKEN" -H "Accept: application/vnd.github.raw+json" "https://api.github.com/repos/TF-Minecraft/ServerAssets/contents/jars/c84700df5942/MMOItems-6.10.jar?ref=$ref" > "libs/MMOItems-6.10.jar"
curl --fail --location --silent --show-error --retry 3 -H "Authorization: Bearer $GH_TOKEN" -H "Accept: application/vnd.github.raw+json" "https://api.github.com/repos/TF-Minecraft/ServerAssets/contents/jars/660ff2a6ec86/MythicLib-1.7.jar?ref=$ref" > "libs/MythicLib-1.7.jar"
curl --fail --location --silent --show-error --retry 3 -H "Authorization: Bearer $GH_TOKEN" -H "Accept: application/vnd.github.raw+json" "https://api.github.com/repos/TF-Minecraft/ServerAssets/contents/jars/97e0c708c1e3/spigot-api-1.20.2-R0.1-SNAPSHOT.jar?ref=$ref" > "libs/spigot-api-1.20.2-R0.1-SNAPSHOT.jar"
curl --fail --location --silent --show-error --retry 3 -H "Authorization: Bearer $GH_TOKEN" -H "Accept: application/vnd.github.raw+json" "https://api.github.com/repos/TF-Minecraft/ServerAssets/contents/jars/0116d714822b/ItemsAdder_3.5.0-r2.jar?ref=$ref" > "libs/ItemsAdder_3.5.0-r2.jar"
sha256sum --check .github/dependencies.sha256
60 changes: 60 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
name: Build

on:
push:
branches: [main]
pull_request:
branches: [main]

permissions:
contents: read

jobs:
build:
runs-on: ubuntu-24.04
timeout-minutes: 20
steps:
- uses: actions/checkout@v7
with:
persist-credentials: false
- uses: actions/setup-java@v6
with:
distribution: temurin
java-version: '25'
- name: Install pinned TLibs in Maven
uses: TF-Minecraft/TLibs/.github/actions/setup@905a196217471252b96be5ecf8eeb16c9e85e41d
with:
token: ${{ secrets.DEPS_TOKEN }}

- name: Prepare pinned dependencies
env:
GH_TOKEN: ${{ secrets.DEPS_TOKEN }}
run: bash .github/scripts/prepare-release.sh
- name: Set dated development version
id: dev
shell: bash
run: |
dev_version="DEV-$(date -u +%Y%m%d-%H%M)"
mvn -B --no-transfer-progress org.codehaus.mojo:versions-maven-plugin:2.22.0:set \
-DnewVersion="$dev_version" -DgenerateBackupPoms=false
mvn -B --no-transfer-progress help:evaluate \
-Dexpression=project.build.finalName -Doutput="$RUNNER_TEMP/final-name"
final_name=$(cat "$RUNNER_TEMP/final-name")
echo "name=$final_name" >> "$GITHUB_OUTPUT"
echo "jar=target/$final_name.jar" >> "$GITHUB_OUTPUT"

- name: Run unit tests and build
run: mvn -B --no-transfer-progress clean verify -DskipTests=false -Dmaven.test.skip=false
- uses: actions/upload-artifact@v7
with:
name: ${{ steps.dev.outputs.name }}-${{ github.run_id }}-${{ github.run_attempt }}
path: ${{ steps.dev.outputs.jar }}
if-no-files-found: error

- name: Upload unit test reports
if: ${{ !cancelled() && hashFiles('target/surefire-reports/*.xml') != '' }}
uses: actions/upload-artifact@v7
with:
name: unit-test-reports-${{ github.run_id }}-${{ github.run_attempt }}
path: target/surefire-reports/
if-no-files-found: error
140 changes: 140 additions & 0 deletions .github/workflows/maven-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
name: Maven plugin release

on:
workflow_call:
inputs:
java-version:
required: true
type: string
artifact-path:
description: Exact deployable JAR path, with optional {version} placeholder
required: true
type: string
secrets:
DEPS_TOKEN:
required: false

permissions:
contents: read

concurrency:
group: plugin-release-${{ github.repository }}-${{ github.ref }}
cancel-in-progress: false

defaults:
run:
shell: bash

jobs:
build:
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
runs-on: ubuntu-24.04
timeout-minutes: 20
steps:
- uses: actions/checkout@v7
with:
persist-credentials: false

- uses: actions/setup-java@v6
with:
distribution: temurin
java-version: ${{ inputs.java-version }}

- name: Validate release version
env:
TAG: ${{ github.ref_name }}
run: |
[[ "$TAG" =~ ^v[0-9]+\.[0-9]+(\.[0-9]+)?(-[0-9A-Za-z]+([.-][0-9A-Za-z]+)*)?$ ]] || {
echo '::error::Expected vMAJOR.MINOR or vMAJOR.MINOR.PATCH, with an optional prerelease suffix.'
exit 1
}
[[ "${TAG^^}" != *SNAPSHOT* ]] || exit 1

- name: Install pinned TLibs in Maven
uses: TF-Minecraft/TLibs/.github/actions/setup@905a196217471252b96be5ecf8eeb16c9e85e41d
with:
token: ${{ secrets.DEPS_TOKEN }}

- name: Prepare pinned dependencies
env:
GH_TOKEN: ${{ secrets.DEPS_TOKEN }}
run: |
if [[ -f .github/scripts/prepare-release.sh ]]; then
bash .github/scripts/prepare-release.sh
fi

- name: Check Maven version and build
env:
TAG: ${{ github.ref_name }}
run: |
version_file="$RUNNER_TEMP/maven-release-version"
mvn -B --no-transfer-progress -P'!deploy-live' help:evaluate \
-Dexpression=project.version -Doutput="$version_file"
[[ "$(cat "$version_file")" == "${TAG#v}" ]] || {
echo '::error::The tag must match project.version exactly.'
exit 1
}
mvn -B --no-transfer-progress -P'!deploy-live' clean verify

- name: Stage only the release JAR
env:
ARTIFACT_PATH: ${{ inputs.artifact-path }}
TAG: ${{ github.ref_name }}
run: |
python3 - <<'PY'
import hashlib, json, os, pathlib, shutil, zipfile
root = pathlib.Path.cwd().resolve()
source = (root / os.environ['ARTIFACT_PATH'].replace('{version}', os.environ['TAG'][1:])).resolve()
if not source.is_relative_to(root / 'target') or not source.is_file() or source.suffix != '.jar':
raise SystemExit('Expected one existing JAR inside target/')
with zipfile.ZipFile(source) as jar:
if not {'plugin.yml', 'paper-plugin.yml'}.intersection(jar.namelist()):
raise SystemExit('Release JAR has no plugin descriptor')
if jar.testzip() is not None:
raise SystemExit('Release JAR is corrupt')
dest = pathlib.Path(os.environ['RUNNER_TEMP']) / 'plugin-release'
dest.mkdir()
shutil.copyfile(source, dest / source.name)
digest = hashlib.sha256((dest / source.name).read_bytes()).hexdigest()
(dest / 'SHA256SUMS').write_text(f'{digest} {source.name}\n')
(dest / 'build.json').write_text(json.dumps({
'repository': os.environ['GITHUB_REPOSITORY'],
'commit': os.environ['GITHUB_SHA'],
'tag': os.environ['TAG'],
'run': f"{os.environ['GITHUB_SERVER_URL']}/{os.environ['GITHUB_REPOSITORY']}/actions/runs/{os.environ['GITHUB_RUN_ID']}",
'artifact': source.name,
'sha256': digest,
}, indent=2) + '\n')
PY

- uses: actions/upload-artifact@v7
with:
name: plugin-release-${{ github.sha }}
path: ${{ runner.temp }}/plugin-release/
if-no-files-found: error
retention-days: 30

publish:
needs: build
runs-on: ubuntu-24.04
timeout-minutes: 5
permissions:
contents: write
steps:
- uses: actions/download-artifact@v8
with:
name: plugin-release-${{ github.sha }}
path: release

- name: Create draft release
working-directory: release
env:
GH_TOKEN: ${{ github.token }}
GH_REPO: ${{ github.repository }}
TAG: ${{ github.ref_name }}
run: |
sha256sum --check SHA256SUMS
flags=()
if [[ "$TAG" == *-* ]]; then flags+=(--prerelease); fi
gh release create "$TAG" ./*.jar SHA256SUMS build.json \
--verify-tag --draft --title "$TAG" --generate-notes "${flags[@]}"
20 changes: 20 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
name: Release

on:
push:
tags: ['v*']

permissions:
contents: read

jobs:
release:
permissions:
contents: write
uses: ./.github/workflows/maven-release.yml
with:
java-version: '25'
# Exact path, not a glob. {version} is replaced with the tag without v.
artifact-path: target/woodworking-{version}.jar
secrets:
DEPS_TOKEN: ${{ secrets.DEPS_TOKEN }}
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -31,3 +31,6 @@ Thumbs.db

# Logs
*.log

# Downloaded build dependencies
/libs/*.jar
38 changes: 17 additions & 21 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -21,28 +21,28 @@
<artifactId>gson</artifactId>
<version>2.10.1</version>
<scope>system</scope>
<systemPath>D:/Dokumenter/My Plugins/Reference Libs/gson-2.10.1.jar</systemPath>
<systemPath>${project.basedir}/libs/gson-2.10.1.jar</systemPath>
</dependency>
<dependency>
<groupId>local</groupId>
<artifactId>MMOItems</artifactId>
<version>6.10</version>
<scope>system</scope>
<systemPath>D:/Dokumenter/My Plugins/Reference Libs/MMOItems-6.10.jar</systemPath>
<systemPath>${project.basedir}/libs/MMOItems-6.10.jar</systemPath>
</dependency>
<dependency>
<groupId>local</groupId>
<artifactId>MythicLib</artifactId>
<version>1.7</version>
<scope>system</scope>
<systemPath>D:/Dokumenter/My Plugins/Reference Libs/MythicLib-1.7.jar</systemPath>
<systemPath>${project.basedir}/libs/MythicLib-1.7.jar</systemPath>
</dependency>
<dependency>
<groupId>local</groupId>
<artifactId>spigot-api</artifactId>
<version>1.20.2-R0.1-SNAPSHOT</version>
<scope>system</scope>
<systemPath>D:/Dokumenter/My Plugins/Reference Libs/spigot-api-1.20.2-R0.1-SNAPSHOT.jar</systemPath>
<systemPath>${project.basedir}/libs/spigot-api-1.20.2-R0.1-SNAPSHOT.jar</systemPath>
</dependency>
<dependency>
<groupId>me.plugins</groupId>
Expand All @@ -59,7 +59,7 @@
<artifactId>LoneLibs</artifactId>
<version>3.5.0</version>
<scope>system</scope>
<systemPath>D:/Dokumenter/My Plugins/Reference Libs/ItemsAdder_3.5.0-r2.jar</systemPath>
<systemPath>${project.basedir}/libs/ItemsAdder_3.5.0-r2.jar</systemPath>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
Expand All @@ -69,23 +69,19 @@
</dependencies>

<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes><include>plugin.yml</include></includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<excludes><exclude>plugin.yml</exclude></excludes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals><goal>run</goal></goals>
<configuration>
<target>
<copy file="${project.build.directory}/${project.build.finalName}.jar"
tofile="D:\Dokumenter\My Plugins\TFMC\Woodworking\${project.build.finalName}.jar"/>
</target>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>

Expand Down
2 changes: 1 addition & 1 deletion src/main/resources/plugin.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
main: net.tfminecraft.woodworking.Woodworking
api-version: 1.20
name: Woodworking
version: 0.1.0
version: ${project.version}
author: Drefvelin

depend: [TLibs, MMOItems, MythicLib]
Expand Down