2024-12-09 08:01:09 -07:00
|
|
|
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')
|
|
|
|
|
|
|
|
|
|
// Zip
|
|
|
|
|
implementation 'org.zeroturnaround:zt-zip:1.14'
|
|
|
|
|
|
|
|
|
|
// 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'
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
jar {
|
|
|
|
|
from file("$rootDir/LICENSE")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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) {
|
2024-12-09 16:38:55 -07:00
|
|
|
dependsOn "processResources"
|
2024-12-09 08:01:09 -07:00
|
|
|
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 specified 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'
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|