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
8 changes: 4 additions & 4 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ jobs:
- uses: actions/checkout@v6
- uses: actions/setup-java@v5
with:
java-version: 17
java-version: 25
distribution: 'temurin'
- name: Check for changes
run: ./gradlew spotlessCheck
Expand All @@ -23,7 +23,7 @@ jobs:
- uses: actions/checkout@v6
- uses: actions/setup-java@v5
with:
java-version: 17
java-version: 25
distribution: 'temurin'
- name: Build
run: ./gradlew build -PRunToolchainTests
Expand All @@ -41,7 +41,7 @@ jobs:
- uses: actions/checkout@v6
- uses: actions/setup-java@v5
with:
java-version: 17
java-version: 25
distribution: 'temurin'
- name: Publish to maven local
run: ./gradlew publishToMavenLocal
Expand All @@ -55,7 +55,7 @@ jobs:
- uses: actions/checkout@v6
- uses: actions/setup-java@v5
with:
java-version: 17
java-version: 25
distribution: 'temurin'
- name: Publish to Maven Local
if: ${{ !startsWith(github.ref, 'refs/tags/v') }}
Expand Down
16 changes: 10 additions & 6 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@ plugins {
}

group 'org.photonvision'
version '4.1.1-photon'

if (project.hasProperty('publishVersion')) {
version = project.publishVersion
}
apply from: "versioningHelper.gradle"


version = versionString

repositories {
mavenCentral()
Expand All @@ -23,8 +23,8 @@ dependencies {
}

java {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
sourceCompatibility = JavaVersion.VERSION_25
targetCompatibility = JavaVersion.VERSION_25
}

gradlePlugin {
Expand Down Expand Up @@ -59,6 +59,10 @@ tasks.withType(JavaCompile) {
options.deprecation = true
}

tasks.named('processResources') {
from('versioningHelper.gradle')
}

tasks.named('pluginUnderTestMetadata') {
pluginClasspath.from(tasks.named('jar'))
dependsOn(tasks.named('jar'))
Expand Down
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.0-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
Expand Down
46 changes: 44 additions & 2 deletions src/main/java/org/photonvision/tools/AssembleNativeResources.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,47 @@
package org.photonvision.tools;

import org.gradle.api.tasks.Sync;
import javax.inject.Inject;
import org.gradle.api.DefaultTask;
import org.gradle.api.file.ConfigurableFileCollection;
import org.gradle.api.file.DirectoryProperty;
import org.gradle.api.model.ObjectFactory;
import org.gradle.api.tasks.InputFiles;
import org.gradle.api.tasks.OutputDirectory;
import org.gradle.api.tasks.PathSensitive;
import org.gradle.api.tasks.PathSensitivity;
import org.gradle.api.tasks.TaskAction;
import org.gradle.work.DisableCachingByDefault;

public class AssembleNativeResources extends Sync {}
@DisableCachingByDefault(because = "Caching isn't necessary for copy tasks")
public class AssembleNativeResources extends DefaultTask {
Comment thread
mcm001 marked this conversation as resolved.
private final ConfigurableFileCollection inputFiles;
private final DirectoryProperty outputDirectory;

@Inject
public AssembleNativeResources() {
ObjectFactory factory = getProject().getObjects();
inputFiles = getProject().files();
outputDirectory = factory.directoryProperty();
}

@InputFiles
@PathSensitive(PathSensitivity.RELATIVE)
public ConfigurableFileCollection getInputFiles() {
return inputFiles;
}

@OutputDirectory
public DirectoryProperty getOutputDirectory() {
return outputDirectory;
}

@TaskAction
public void execute() {
getProject()
.sync(
copySpec -> {
copySpec.from(inputFiles);
copySpec.into(outputDirectory);
});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,12 @@
import org.gradle.api.tasks.Internal;
import org.gradle.api.tasks.OutputDirectory;
import org.gradle.api.tasks.OutputFile;
import org.gradle.api.tasks.PathSensitive;
import org.gradle.api.tasks.PathSensitivity;
import org.gradle.api.tasks.TaskAction;
import org.gradle.work.DisableCachingByDefault;

@DisableCachingByDefault(because = "Copying doesn't need caching")
public class ExtractConfiguration extends DefaultTask {
private final ArtifactViewAction viewAction = new ArtifactViewAction();

Expand Down Expand Up @@ -57,6 +61,7 @@ public DirectoryProperty getOutputDirectory() {
}

@InputFiles
@PathSensitive(PathSensitivity.RELATIVE)
public ConfigurableFileCollection getConfigurationFiles() {
return configurations;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,18 @@
import org.gradle.api.model.ObjectFactory;
import org.gradle.api.tasks.InputDirectory;
import org.gradle.api.tasks.OutputDirectory;
import org.gradle.api.tasks.PathSensitive;
import org.gradle.api.tasks.PathSensitivity;
import org.gradle.api.tasks.TaskAction;
import org.gradle.internal.os.OperatingSystem;
import org.gradle.work.DisableCachingByDefault;

@DisableCachingByDefault(because = "Copying doesn't need caching")
public class FixupNativeResources extends DefaultTask {
private DirectoryProperty inputDirectory;
private DirectoryProperty outputDirectory;

@PathSensitive(PathSensitivity.RELATIVE)
@InputDirectory
public DirectoryProperty getInputDirectory() {
return inputDirectory;
Expand Down
6 changes: 6 additions & 0 deletions src/main/java/org/photonvision/tools/HashNativeResources.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,12 @@
import org.gradle.api.tasks.InputDirectory;
import org.gradle.api.tasks.InputFile;
import org.gradle.api.tasks.OutputFile;
import org.gradle.api.tasks.PathSensitive;
import org.gradle.api.tasks.PathSensitivity;
import org.gradle.api.tasks.TaskAction;
import org.gradle.work.DisableCachingByDefault;

@DisableCachingByDefault(because = "Hashing is fast and not worth caching")
public class HashNativeResources extends DefaultTask {

/**
Expand Down Expand Up @@ -54,6 +58,7 @@ public record ResourceInformation(
private final RegularFileProperty hashFile;
private final RegularFileProperty versionsInput;

@PathSensitive(PathSensitivity.RELATIVE)
@InputDirectory
public DirectoryProperty getInputDirectory() {
return inputDirectory;
Expand All @@ -64,6 +69,7 @@ public RegularFileProperty getHashFile() {
return hashFile;
}

@PathSensitive(PathSensitivity.RELATIVE)
@InputFile
public RegularFileProperty getVersionsInput() {
return versionsInput;
Expand Down
3 changes: 3 additions & 0 deletions src/main/java/org/photonvision/tools/UnzipTransform.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
import org.gradle.api.artifacts.transform.TransformParameters;
import org.gradle.api.file.FileSystemLocation;
import org.gradle.api.provider.Provider;
import org.gradle.api.tasks.PathSensitive;
import org.gradle.api.tasks.PathSensitivity;
import org.gradle.internal.UncheckedException;

/**
Expand All @@ -24,6 +26,7 @@ public interface UnzipTransform extends TransformAction<TransformParameters.None

// TODO see if we can get incremental to work

@PathSensitive(PathSensitivity.RELATIVE)
@InputArtifact
Provider<FileSystemLocation> getZippedFile();

Expand Down
17 changes: 17 additions & 0 deletions src/main/java/org/photonvision/tools/WpilibTools.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,18 @@
import static org.gradle.api.artifacts.type.ArtifactTypeDefinition.JAR_TYPE;
import static org.gradle.api.artifacts.type.ArtifactTypeDefinition.ZIP_TYPE;

import java.net.URL;
import java.util.Map;
import org.gradle.api.Plugin;
import org.gradle.api.Project;

public class WpilibTools implements Plugin<Project> {
private static final String VERSIONING_HELPER_RESOURCE = "versioningHelper.gradle";

@Override
public void apply(Project project) {
applyVersioningHelper(project);

project
.getDependencies()
.registerTransform(
Expand All @@ -31,4 +37,15 @@ public void apply(Project project) {

project.getExtensions().create("wpilibTools", WpilibToolsExtension.class, project);
}

private void applyVersioningHelper(Project project) {
URL helperScriptUrl =
WpilibTools.class.getClassLoader().getResource(VERSIONING_HELPER_RESOURCE);
if (helperScriptUrl == null) {
project.getLogger().warn("Unable to find {} in plugin resources", VERSIONING_HELPER_RESOURCE);
return;
}

project.apply(Map.of("from", project.getResources().getText().fromUri(helperScriptUrl)));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -112,9 +112,11 @@ public NewTaskSet createExtractionTasks(Action<NewTaskSetConfiguration> configur
"assembleNativeResources" + newConfig.taskPostfix, AssembleNativeResources.class);
retSet.assemble.configure(
c -> {
c.from(retSet.fixup.get());
c.from(retSet.hash.get());
c.into(newConfig.rootTaskFolder.dir("AssembledResources"));
c.dependsOn(retSet.fixup);
c.dependsOn(retSet.hash);
c.getInputFiles().from(retSet.fixup);
c.getInputFiles().from(retSet.hash);
c.getOutputDirectory().set(newConfig.rootTaskFolder.dir("AssembledResources"));
});
return retSet;
}
Expand Down
42 changes: 42 additions & 0 deletions versioningHelper.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import java.nio.file.Path
import java.time.LocalDateTime
import java.time.format.DateTimeFormatter

ext.getCurrentVersion = {
String tagIsh = "dev-unknown"
try {
tagIsh = providers.exec {
commandLine 'git', 'describe', '--tags', '--match=v*'
}.standardOutput.asText.get().trim().toLowerCase()
} catch (Exception ignored) {
tagIsh = "dev-unknown"
}

// Dev tags: v2021.1.6-3-gf922466d
// We're specifically looking to capture the middle -3-
boolean isDev = tagIsh.matches(".*-[0-9]*-g[0-9a-f]*")
if (isDev && !tagIsh.startsWith("dev-")) tagIsh = "dev-" + tagIsh
println("Picked up version: " + tagIsh)
return tagIsh
}

if (!ext.has("versionString")) {
ext.versionString = getCurrentVersion()
}

ext.writePhotonVersionFile = {File versionFileIn, Path path, String version ->
println("Writing " + version + " to " + path.toAbsolutePath().toString())
String date = DateTimeFormatter.ofPattern("yyyy-M-d hh:mm:ss").format(LocalDateTime.now())
File versionFileOut = new File(path.toAbsolutePath().toString())
versionFileOut.delete()

def read = versionFileIn.text
.replace('${version}', version)
.replace('${date}', date)
.replace('${wpilibVersion}', wpilibVersion)
// Note that OpenCV is usually {VERSION}-{some suffix}, we just want the first bit
.replace('${opencvVersion}', openCVversion.split("-").first())
if (!versionFileOut.parentFile.exists()) versionFileOut.parentFile.mkdirs()
if (!versionFileOut.exists()) versionFileOut.createNewFile()
versionFileOut.write(read)
}
Loading