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", "../" } run { 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 } gloworm { host = 'gloworm.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 assemble 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' } } } }