Skip to content

Commit 498201d

Browse files
committed
Add external reader support in pkl-gradle
1 parent 948a20a commit 498201d

File tree

4 files changed

+34
-5
lines changed

4 files changed

+34
-5
lines changed

pkl-gradle/src/main/java/org/pkl/gradle/PklPlugin.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -470,6 +470,8 @@ private <T extends BasePklTask, S extends BasePklSpec> void configureBaseTask(T
470470
task.getTestPort().set(spec.getTestPort());
471471
task.getHttpProxy().set(spec.getHttpProxy());
472472
task.getHttpNoProxy().set(spec.getHttpNoProxy());
473+
task.getExternalModuleReaders().set(spec.getExternalModuleReaders());
474+
task.getExternalResourceReaders().set(spec.getExternalResourceReaders());
473475
}
474476

475477
private List<File> getTransitiveModules(AnalyzeImportsTask analyzeTask) {

pkl-gradle/src/main/java/org/pkl/gradle/spec/BasePklSpec.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright © 2024 Apple Inc. and the Pkl project authors. All rights reserved.
2+
* Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -57,4 +57,8 @@ public interface BasePklSpec {
5757
Property<URI> getHttpProxy();
5858

5959
ListProperty<String> getHttpNoProxy();
60+
61+
MapProperty<String, String> getExternalModuleReaders();
62+
63+
MapProperty<String, String> getExternalResourceReaders();
6064
}

pkl-gradle/src/main/java/org/pkl/gradle/task/BasePklTask.java

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,10 @@
4242
import org.gradle.api.tasks.Internal;
4343
import org.gradle.api.tasks.Optional;
4444
import org.gradle.api.tasks.TaskAction;
45+
import org.pkl.commons.StringsKt;
4546
import org.pkl.commons.cli.CliBaseOptions;
4647
import org.pkl.core.evaluatorSettings.Color;
48+
import org.pkl.core.evaluatorSettings.PklEvaluatorSettings;
4749
import org.pkl.core.util.LateInit;
4850
import org.pkl.core.util.Nullable;
4951
import org.pkl.gradle.utils.PluginUtils;
@@ -142,6 +144,14 @@ public Provider<String> getEvalRootDirPath() {
142144
@Optional
143145
public abstract ListProperty<String> getHttpNoProxy();
144146

147+
@Input
148+
@Optional
149+
public abstract MapProperty<String, String> getExternalModuleReaders();
150+
151+
@Input
152+
@Optional
153+
public abstract MapProperty<String, String> getExternalResourceReaders();
154+
145155
/**
146156
* There are issues with using native libraries in Gradle plugins. As a workaround for now, make
147157
* Truffle use an un-optimized runtime.
@@ -195,8 +205,8 @@ protected CliBaseOptions getCliBaseOptions() {
195205
Collections.emptyList(),
196206
getHttpProxy().getOrNull(),
197207
getHttpNoProxy().getOrElse(List.of()),
198-
Map.of(),
199-
Map.of());
208+
parseExternalReaders(getExternalModuleReaders()),
209+
parseExternalReaders(getExternalResourceReaders()));
200210
}
201211
return cachedOptions;
202212
}
@@ -231,4 +241,17 @@ protected List<Pattern> patternsFromStrings(List<String> patterns) {
231241
@Nullable T value = provider.getOrNull();
232242
return value == null ? null : f.apply(value);
233243
}
244+
245+
protected Map<String, PklEvaluatorSettings.ExternalReader> parseExternalReaders(
246+
Provider<Map<String, String>> provider) {
247+
return provider.getOrElse(Map.of()).entrySet().stream()
248+
.collect(
249+
Collectors.toMap(
250+
Map.Entry::getKey,
251+
(it) -> {
252+
var cmd = StringsKt.shlex(it.getValue());
253+
return new PklEvaluatorSettings.ExternalReader(
254+
cmd.getFirst(), cmd.subList(1, cmd.size()));
255+
}));
256+
}
234257
}

pkl-gradle/src/main/java/org/pkl/gradle/task/ModulesTask.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -163,8 +163,8 @@ protected CliBaseOptions getCliBaseOptions() {
163163
Collections.emptyList(),
164164
null,
165165
List.of(),
166-
Map.of(),
167-
Map.of());
166+
parseExternalReaders(getExternalModuleReaders()),
167+
parseExternalReaders(getExternalResourceReaders()));
168168
}
169169
return cachedOptions;
170170
}

0 commit comments

Comments
 (0)