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
9 changes: 9 additions & 0 deletions .github/dependencies.sha256
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
086e3971ea63c0b5ad567881b2dfd955acbbffa24fe85ceac8abf54b114ce986 libs/api-5.4.jar
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
1edf7fcea79a16b8dfdd3bc988ddec7f8908b1f7762fdf00d39acb037542747a libs/json-20220320.jar
2d9484f4c649f708f47f9a479465fc729770ee65617dca3011836602264f6439 libs/json-simple-1.1.jar
22dd8755e769823585340354c567cd6c3d07ddb6410747ce8f27bb97d3475b04 libs/denareconomy-0.1.8.jar
5185b9e0ea8653ab61da07304f1573c6a9a5af97cf55a5d970c5a25f16bc743d libs/simplefactions-2.8.7.jar
15 changes: 15 additions & 0 deletions .github/scripts/prepare-release.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#!/usr/bin/env bash
set -euo pipefail
: "${GH_TOKEN:?Set DEPS_TOKEN with Contents read access to TF-Minecraft/ServerAssets}"
ref=8a44414cd5b74b7d1c7a258ccf5a86a5f6e0294b
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/086e3971ea63/api-5.4.jar?ref=$ref" > "libs/api-5.4.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/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/1edf7fcea79a/json-20220320.jar?ref=$ref" > "libs/json-20220320.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/2d9484f4c649/json-simple-1.1.jar?ref=$ref" > "libs/json-simple-1.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/22dd8755e769/denareconomy-0.1.8.jar?ref=$ref" > "libs/denareconomy-0.1.8.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/5185b9e0ea86/simplefactions-2.8.7.jar?ref=$ref" > "libs/simplefactions-2.8.7.jar"
sha256sum --check .github/dependencies.sha256
55 changes: 55 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
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: 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
135 changes: 135 additions & 0 deletions .github/workflows/maven-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
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: 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/bartershops-{version}.jar
secrets:
DEPS_TOKEN: ${{ secrets.DEPS_TOKEN }}
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,7 @@ nbdist/
Thumbs.db

# Logs
*.log
*.log

# Downloaded build dependencies
/libs/*.jar
53 changes: 24 additions & 29 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<tfmc.simplefactions>D:/Dokumenter/My Plugins/VSCode Workspace/simplefactions/target</tfmc.simplefactions>
</properties>

<dependencies>
Expand All @@ -20,84 +19,80 @@
<artifactId>api</artifactId>
<version>5.4</version>
<scope>system</scope>
<systemPath>D:/Dokumenter/My Plugins/Reference Libs/api-5.4.jar</systemPath>
<systemPath>${project.basedir}/libs/api-5.4.jar</systemPath>
</dependency>
<dependency>
<groupId>local</groupId>
<artifactId>api</artifactId>
<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.6.1</version>
<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>local</groupId>
<artifactId>json</artifactId>
<version>20220320</version>
<scope>system</scope>
<systemPath>D:/Dokumenter/My Plugins/Reference Libs/json-20220320.jar</systemPath>
<systemPath>${project.basedir}/libs/json-20220320.jar</systemPath>
</dependency>
<dependency>
<groupId>local</groupId>
<artifactId>json-simple</artifactId>
<version>1.1</version>
<scope>system</scope>
<systemPath>D:/Dokumenter/My Plugins/Reference Libs/json-simple-1.1.jar</systemPath>
<systemPath>${project.basedir}/libs/json-simple-1.1.jar</systemPath>
</dependency>
<dependency>
<groupId>local</groupId>
<artifactId>DenarEconomy</artifactId>
<version>0.1.2</version>
<version>0.1.8</version>
<scope>system</scope>
<systemPath>D:/Dokumenter/My Plugins/TFMC/DenarEconomy/denareconomy-0.1.2.jar</systemPath>
<systemPath>${project.basedir}/libs/denareconomy-0.1.8.jar</systemPath>
</dependency>
<dependency>
<groupId>local</groupId>
<artifactId>simplefactions</artifactId>
<version>2.8.7</version>
<scope>system</scope>
<systemPath>${tfmc.simplefactions}/simplefactions-2.8.7.jar</systemPath>
<systemPath>${project.basedir}/libs/simplefactions-2.8.7.jar</systemPath>
</dependency>
</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\BarterShops\${project.build.finalName}.jar"/>
</target>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>

Expand Down