Skip to content

Instantly share code, notes, and snippets.

@Techcable
Created January 12, 2016 08:08
Show Gist options
  • Select an option

  • Save Techcable/db22b94c68927839c5ba to your computer and use it in GitHub Desktop.

Select an option

Save Techcable/db22b94c68927839c5ba to your computer and use it in GitHub Desktop.
Utility to compile/copy and run a plugin in a test server
#!/usr/bin/env python3
import os
import sys
from os import path
import shutil
from subprocess import run, DEVNULL
from zipfile import ZipFile
# pip install PyYAML
import yaml
def findJar():
def getJarKey(name):
name = name.replace(".jar", "")
if name.endswith("-shaded"): return -1
elif name.startswith("original"): return 1
else: return 0
jars = filter(lambda file: file.endswith(".jar"), os.listdir("target"))
jars = sorted(jars, key=getJarKey)
return path.join("target", jars[0])
def getPluginName():
with open(path.join('src', 'main', 'resources', 'plugin.yml')) as pluginMetadataFile:
metadata = yaml.load(pluginMetadataFile.read())
return metadata['name']
debug = True
if len(sys.argv) > 1:
runMode = sys.argv[1].lower()
if runMode == "debug": debug = True
elif runMode == "run": debug = False
else: exit("Invalid runmode:", runMode)
homedir = os.path.expanduser("~")
server_dir = path.join(homedir, "plugintest")
server_jar = path.join(server_dir, "taco-1.8.8.jar")
print("Compiling", getPluginName(), "with maven")
run(["mvn", "install", "-DskipTests"], stdout=DEVNULL, check=True)
print("Copying", findJar(), "to the test server")
output_jar = path.join(server_dir, "plugins", getPluginName() + ".jar")
if path.exists(output_jar):
print("Removing an existing", getPluginName() + ".jar")
shutil.copy(findJar(), output_jar)
debug_arg = "-agentlib:jdwp=transport=dt_socket,server=y,address=5005"
if debug: debug_arg += ",suspend=y"
else: debug_arg += ",suspend=n"
print("Starting test server")
if debug:
print("Make sure to attach a debugger, or the server won't start.")
run(["java", debug_arg, "-jar", server_jar], cwd=server_dir)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment