mirror of
https://github.com/PhotonVision/photonvision
synced 2026-06-20 00:51:41 +00:00
Initial framework for adding JNI libraries. Auto generated JNI headers and sticks native libraries into the JAR (and adds to class path for testing)
132 lines
4.4 KiB
Groovy
132 lines
4.4 KiB
Groovy
plugins {
|
|
id "application"
|
|
id 'com.github.johnrengelman.shadow' version '8.1.1'
|
|
id "com.github.node-gradle.node" version "7.0.1"
|
|
id "org.hidetake.ssh" version "2.11.2"
|
|
id 'edu.wpi.first.WpilibTools' version '1.3.0'
|
|
}
|
|
|
|
apply from: "${rootDir}/shared/common.gradle"
|
|
|
|
dependencies {
|
|
implementation project(':photon-core')
|
|
|
|
// Needed for Javalin Runtime Logging
|
|
implementation "org.slf4j:slf4j-simple:2.0.7"
|
|
}
|
|
|
|
group 'org.photonvision'
|
|
version versionString + (project.hasProperty('pionly') ? "-raspi" : "")
|
|
|
|
application {
|
|
mainClass = 'org.photonvision.Main'
|
|
}
|
|
|
|
shadowJar {
|
|
archiveBaseName = "photonvision"
|
|
archiveVersion = project.version as String
|
|
archiveClassifier.set(wpilibTools.currentPlatform.platformName)
|
|
configurations = [
|
|
project.configurations.runtimeClasspath
|
|
]
|
|
}
|
|
|
|
node {
|
|
nodeProjectDir = file("${projectDir}/../photon-client")
|
|
}
|
|
|
|
tasks.register('copyClientUIToResources', Copy) {
|
|
from "${projectDir}/../photon-client/dist/"
|
|
into "${projectDir}/src/main/resources/web/"
|
|
}
|
|
|
|
tasks.register("buildAndCopyUI") {
|
|
dependsOn "npm_run_build"
|
|
finalizedBy "copyClientUIToResources"
|
|
}
|
|
|
|
run {
|
|
environment "PATH_PREFIX", "../"
|
|
|
|
if (project.hasProperty("profile")) {
|
|
jvmArgs=[
|
|
"-Dcom.sun.management.jmxremote=true",
|
|
"-Dcom.sun.management.jmxremote.ssl=false",
|
|
"-Dcom.sun.management.jmxremote.authenticate=false",
|
|
"-Dcom.sun.management.jmxremote.port=5000",
|
|
"-Djava.rmi.server.hostname=0.0.0.0",
|
|
]
|
|
}
|
|
}
|
|
|
|
remotes {
|
|
pi {
|
|
host = 'photonvision.local'
|
|
user = 'pi'
|
|
password = 'raspberry'
|
|
knownHosts = allowAnyHosts
|
|
}
|
|
}
|
|
|
|
task findDeployTarget {
|
|
doLast {
|
|
if(project.hasProperty('tgtIP')){
|
|
//If user specificed IP, default to using the PI profile
|
|
// but adjust hostname to match the provided IP address
|
|
findDeployTarget.ext.rmt = remotes.pi
|
|
findDeployTarget.ext.rmt.host=tgtIP
|
|
} else {
|
|
findDeployTarget.ext.rmt = null
|
|
for(testRmt in remotes){
|
|
println "Checking for " + testRmt.host
|
|
boolean canContact = false;
|
|
try {
|
|
InetAddress testAddr = InetAddress.getByName(testRmt.host)
|
|
canContact = testAddr.isReachable(2000)
|
|
} catch(UnknownHostException e) {
|
|
canContact = false;
|
|
}
|
|
if(canContact){
|
|
println "Found!"
|
|
findDeployTarget.ext.rmt = testRmt
|
|
break
|
|
} else {
|
|
println "Not Found."
|
|
}
|
|
}
|
|
if(findDeployTarget.ext.rmt == null ){
|
|
throw new GradleException("Could not find a supported target for deployment!")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
task deploy {
|
|
dependsOn findDeployTarget
|
|
dependsOn 'shadowJar'
|
|
|
|
doLast {
|
|
println 'Starting deployment to ' + findDeployTarget.rmt.host
|
|
println 'targetArch = ' + wpilibTools.platformMapper.currentPlatform.platformName
|
|
ssh.run{
|
|
session(findDeployTarget.rmt) {
|
|
//Stop photonvision before manipulating its files
|
|
execute 'sudo systemctl stop photonvision.service'
|
|
// gerth2 - I was having issues with the .jar being in use still - waiting a tiny bit here seems to get rid of it on a pi4
|
|
execute 'sleep 3'
|
|
// Copy into a folder owned by PI. Mostly because, as far as I can tell, the put command doesn't support sudo.
|
|
put from: "${projectDir}/build/libs/photonvision-${project.version}-${wpilibTools.platformMapper.currentPlatform.platformName}.jar", into: "/tmp/photonvision.jar"
|
|
//belt-and-suspenders. Make sure the old jar is gone first.
|
|
execute 'sudo rm -f /opt/photonvision/photonvision.jar'
|
|
//Copy in the new .jar and make sure it's executable
|
|
execute 'sudo mv /tmp/photonvision.jar /opt/photonvision/photonvision.jar'
|
|
execute 'sudo chmod +x /opt/photonvision/photonvision.jar'
|
|
//Fire up photonvision again
|
|
execute 'sudo systemctl start photonvision.service'
|
|
//Cleanup
|
|
execute 'sudo rm -f /tmp/photonvision.jar'
|
|
}
|
|
}
|
|
}
|
|
}
|