From a48cdccdf5664b94b2f8ec5086fad6b7a04021b9 Mon Sep 17 00:00:00 2001 From: Justin Van Patten Date: Fri, 3 Jan 2025 00:52:00 -0800 Subject: [PATCH] Unskip l2-explicit-parameterized-provider test (#1538) This conformance test can be enabled now with the implementation of `GetRequiredPackages` from https://github.com/pulumi/pulumi-java/pull/1535. --- pkg/cmd/pulumi-language-java/language_test.go | 1 - .../Pulumi.yaml | 2 + .../pom.xml | 99 +++++++++++ .../src/main/java/generated_program/App.java | 35 ++++ .../testdata/sdks/goodbye-2.0.0/README.md | 1 + .../testdata/sdks/goodbye-2.0.0/build.gradle | 162 ++++++++++++++++++ .../sdks/goodbye-2.0.0/settings.gradle | 14 ++ .../main/java/com/pulumi/goodbye/Goodbye.java | 78 +++++++++ .../java/com/pulumi/goodbye/GoodbyeArgs.java | 28 +++ .../java/com/pulumi/goodbye/Provider.java | 54 ++++++ .../java/com/pulumi/goodbye/ProviderArgs.java | 63 +++++++ .../java/com/pulumi/goodbye/Utilities.java | 129 ++++++++++++++ 12 files changed, 665 insertions(+), 1 deletion(-) create mode 100644 pkg/cmd/pulumi-language-java/testdata/projects/l2-explicit-parameterized-provider/Pulumi.yaml create mode 100644 pkg/cmd/pulumi-language-java/testdata/projects/l2-explicit-parameterized-provider/pom.xml create mode 100644 pkg/cmd/pulumi-language-java/testdata/projects/l2-explicit-parameterized-provider/src/main/java/generated_program/App.java create mode 100644 pkg/cmd/pulumi-language-java/testdata/sdks/goodbye-2.0.0/README.md create mode 100644 pkg/cmd/pulumi-language-java/testdata/sdks/goodbye-2.0.0/build.gradle create mode 100644 pkg/cmd/pulumi-language-java/testdata/sdks/goodbye-2.0.0/settings.gradle create mode 100644 pkg/cmd/pulumi-language-java/testdata/sdks/goodbye-2.0.0/src/main/java/com/pulumi/goodbye/Goodbye.java create mode 100644 pkg/cmd/pulumi-language-java/testdata/sdks/goodbye-2.0.0/src/main/java/com/pulumi/goodbye/GoodbyeArgs.java create mode 100644 pkg/cmd/pulumi-language-java/testdata/sdks/goodbye-2.0.0/src/main/java/com/pulumi/goodbye/Provider.java create mode 100644 pkg/cmd/pulumi-language-java/testdata/sdks/goodbye-2.0.0/src/main/java/com/pulumi/goodbye/ProviderArgs.java create mode 100644 pkg/cmd/pulumi-language-java/testdata/sdks/goodbye-2.0.0/src/main/java/com/pulumi/goodbye/Utilities.java diff --git a/pkg/cmd/pulumi-language-java/language_test.go b/pkg/cmd/pulumi-language-java/language_test.go index f7baa21d0ae..bc0658dc661 100644 --- a/pkg/cmd/pulumi-language-java/language_test.go +++ b/pkg/cmd/pulumi-language-java/language_test.go @@ -168,7 +168,6 @@ var expectedFailures = map[string]string{ "l1-output-number": "unimplemented for Java", "l1-output-string": "unimplemented for Java", "l1-stack-reference": "unimplemented for Java", - "l2-explicit-parameterized-provider": "unimplemented for Java", "l2-failed-create-continue-on-error": "unimplemented for Java", "l2-invoke-dependencies": "unimplemented for Java", "l2-invoke-options": "unimplemented for Java", diff --git a/pkg/cmd/pulumi-language-java/testdata/projects/l2-explicit-parameterized-provider/Pulumi.yaml b/pkg/cmd/pulumi-language-java/testdata/projects/l2-explicit-parameterized-provider/Pulumi.yaml new file mode 100644 index 00000000000..cdbf1a784dd --- /dev/null +++ b/pkg/cmd/pulumi-language-java/testdata/projects/l2-explicit-parameterized-provider/Pulumi.yaml @@ -0,0 +1,2 @@ +name: l2-explicit-parameterized-provider +runtime: java diff --git a/pkg/cmd/pulumi-language-java/testdata/projects/l2-explicit-parameterized-provider/pom.xml b/pkg/cmd/pulumi-language-java/testdata/projects/l2-explicit-parameterized-provider/pom.xml new file mode 100644 index 00000000000..a756999c61a --- /dev/null +++ b/pkg/cmd/pulumi-language-java/testdata/projects/l2-explicit-parameterized-provider/pom.xml @@ -0,0 +1,99 @@ + + + 4.0.0 + + com.pulumi + l2-explicit-parameterized-provider + 1.0-SNAPSHOT + + + UTF-8 + 11 + 11 + 11 + generated_program.App + + + + + + repository-0 + REPOSITORY + + + + + + com.pulumi + pulumi + CORE.VERSION + + + com.pulumi + goodbye + 2.0.0 + + + + + + + org.apache.maven.plugins + maven-jar-plugin + 3.2.2 + + + + true + ${mainClass} + + + + + + org.apache.maven.plugins + maven-assembly-plugin + 3.4.2 + + + + true + ${mainClass} + + + + jar-with-dependencies + + + + + make-my-jar-with-dependencies + package + + single + + + + + + org.codehaus.mojo + exec-maven-plugin + 3.1.0 + + ${mainClass} + ${mainArgs} + + + + org.apache.maven.plugins + maven-wrapper-plugin + 3.1.1 + + 3.8.5 + + + + + \ No newline at end of file diff --git a/pkg/cmd/pulumi-language-java/testdata/projects/l2-explicit-parameterized-provider/src/main/java/generated_program/App.java b/pkg/cmd/pulumi-language-java/testdata/projects/l2-explicit-parameterized-provider/src/main/java/generated_program/App.java new file mode 100644 index 00000000000..fa26b7f6860 --- /dev/null +++ b/pkg/cmd/pulumi-language-java/testdata/projects/l2-explicit-parameterized-provider/src/main/java/generated_program/App.java @@ -0,0 +1,35 @@ +package generated_program; + +import com.pulumi.Context; +import com.pulumi.Pulumi; +import com.pulumi.core.Output; +import com.pulumi.goodbye.Provider; +import com.pulumi.goodbye.ProviderArgs; +import com.pulumi.goodbye.Goodbye; +import com.pulumi.goodbye.GoodbyeArgs; +import com.pulumi.resources.CustomResourceOptions; +import java.util.List; +import java.util.ArrayList; +import java.util.Map; +import java.io.File; +import java.nio.file.Files; +import java.nio.file.Paths; + +public class App { + public static void main(String[] args) { + Pulumi.run(App::stack); + } + + public static void stack(Context ctx) { + var prov = new Provider("prov", ProviderArgs.builder() + .text("World") + .build()); + + // The resource name is based on the parameter value + var res = new Goodbye("res", GoodbyeArgs.Empty, CustomResourceOptions.builder() + .provider(prov) + .build()); + + ctx.export("parameterValue", res.parameterValue()); + } +} diff --git a/pkg/cmd/pulumi-language-java/testdata/sdks/goodbye-2.0.0/README.md b/pkg/cmd/pulumi-language-java/testdata/sdks/goodbye-2.0.0/README.md new file mode 100644 index 00000000000..8d1c8b69c3f --- /dev/null +++ b/pkg/cmd/pulumi-language-java/testdata/sdks/goodbye-2.0.0/README.md @@ -0,0 +1 @@ + diff --git a/pkg/cmd/pulumi-language-java/testdata/sdks/goodbye-2.0.0/build.gradle b/pkg/cmd/pulumi-language-java/testdata/sdks/goodbye-2.0.0/build.gradle new file mode 100644 index 00000000000..c52b3b5ab03 --- /dev/null +++ b/pkg/cmd/pulumi-language-java/testdata/sdks/goodbye-2.0.0/build.gradle @@ -0,0 +1,162 @@ +// *** WARNING: this file was generated by pulumi-java-gen *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +plugins { + id("signing") + id("java-library") + id("maven-publish") +} + +group = "com.pulumi" + +def resolvedVersion = System.getenv("PACKAGE_VERSION") ?: + (project.version == "unspecified" + ? "2.0.0" + : project.version) + +def signingKey = System.getenv("SIGNING_KEY") +def signingPassword = System.getenv("SIGNING_PASSWORD") +def publishRepoURL = System.getenv("PUBLISH_REPO_URL") +def publishRepoUsername = System.getenv("PUBLISH_REPO_USERNAME") +def publishRepoPassword = System.getenv("PUBLISH_REPO_PASSWORD") + +java { + toolchain { + languageVersion = JavaLanguageVersion.of(11) + } +} + +compileJava { + options.fork = true + options.forkOptions.jvmArgs.addAll(["-Xmx16g"]) + options.encoding = "UTF-8" +} + +repositories { + maven { + url("REPOSITORY") + } + mavenLocal() + maven { // The google mirror is less flaky than mavenCentral() + url("https://maven-central.storage-download.googleapis.com/maven2/") + } + mavenCentral() +} + +dependencies { + implementation("com.google.code.findbugs:jsr305:3.0.2") + implementation("com.google.code.gson:gson:2.8.9") + implementation("com.pulumi:pulumi:CORE.VERSION") +} + +task sourcesJar(type: Jar) { + from sourceSets.main.allJava + archiveClassifier.set('sources') +} + +task javadocJar(type: Jar) { + from javadoc + archiveClassifier.set('javadoc') + zip64 = true +} + +def genPulumiResources = tasks.register('genPulumiResources') { + doLast { + def resourcesDir = sourceSets.main.output.resourcesDir + def subDir = project.name.replace(".", "/") + def outDir = file("$resourcesDir/$subDir") + outDir.mkdirs() + new File(outDir, "version.txt").text = resolvedVersion + def builder = new groovy.json.JsonBuilder() + builder { + resource true + name "parameterized" + version "1.2.3" + parameterization { + name "goodbye" + version resolvedVersion + value "R29vZGJ5ZQ==" + } + } + def infoJson = builder.toPrettyString() + new File(outDir, "plugin.json").text = infoJson + } +} + +jar.configure { + dependsOn genPulumiResources +} + +publishing { + publications { + mainPublication(MavenPublication) { + groupId = "com.pulumi" + artifactId = "goodbye" + version = resolvedVersion + from components.java + artifact sourcesJar + artifact javadocJar + + pom { + inceptionYear = "" + name = "" + packaging = "jar" + description = " " + + url = "https://example.com" + + scm { + connection = "https://example.com" + developerConnection = "https://example.com" + url = "https://example.com" + } + + licenses { + license { + name = "" + url = "" + } + } + + developers { + developer { + id = "" + name = "" + email = "" + } + } + } + } + } + + if (publishRepoURL) { + repositories { + maven { + name = "PublishRepo" + url = publishRepoURL + credentials { + username = publishRepoUsername + password = publishRepoPassword + } + } + } + } +} + +javadoc { + if (JavaVersion.current().isJava9Compatible()) { + options.addBooleanOption('html5', true) + } + options.jFlags("-Xmx8g", "-Xms512m") +} + +jar { + zip64 = true +} + +if (signingKey) { + signing { + useInMemoryPgpKeys(signingKey, signingPassword) + sign publishing.publications.mainPublication + } +} \ No newline at end of file diff --git a/pkg/cmd/pulumi-language-java/testdata/sdks/goodbye-2.0.0/settings.gradle b/pkg/cmd/pulumi-language-java/testdata/sdks/goodbye-2.0.0/settings.gradle new file mode 100644 index 00000000000..e880c36403d --- /dev/null +++ b/pkg/cmd/pulumi-language-java/testdata/sdks/goodbye-2.0.0/settings.gradle @@ -0,0 +1,14 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +pluginManagement { + repositories { + maven { // The google mirror is less flaky than mavenCentral() + url("https://maven-central.storage-download.googleapis.com/maven2/") + } + gradlePluginPortal() + } +} + +rootProject.name = "com.pulumi.goodbye" +include("lib") diff --git a/pkg/cmd/pulumi-language-java/testdata/sdks/goodbye-2.0.0/src/main/java/com/pulumi/goodbye/Goodbye.java b/pkg/cmd/pulumi-language-java/testdata/sdks/goodbye-2.0.0/src/main/java/com/pulumi/goodbye/Goodbye.java new file mode 100644 index 00000000000..0d8b85a358a --- /dev/null +++ b/pkg/cmd/pulumi-language-java/testdata/sdks/goodbye-2.0.0/src/main/java/com/pulumi/goodbye/Goodbye.java @@ -0,0 +1,78 @@ +// *** WARNING: this file was generated by pulumi-language-java. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.goodbye; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Export; +import com.pulumi.core.annotations.ResourceType; +import com.pulumi.core.internal.Codegen; +import com.pulumi.goodbye.GoodbyeArgs; +import com.pulumi.goodbye.Utilities; +import java.lang.String; +import javax.annotation.Nullable; + +@ResourceType(type="goodbye:index:Goodbye") +public class Goodbye extends com.pulumi.resources.CustomResource { + @Export(name="parameterValue", refs={String.class}, tree="[0]") + private Output parameterValue; + + public Output parameterValue() { + return this.parameterValue; + } + + /** + * + * @param name The _unique_ name of the resulting resource. + */ + public Goodbye(java.lang.String name) { + this(name, GoodbyeArgs.Empty); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + */ + public Goodbye(java.lang.String name, @Nullable GoodbyeArgs args) { + this(name, args, null); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + * @param options A bag of options that control this resource's behavior. + */ + public Goodbye(java.lang.String name, @Nullable GoodbyeArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("goodbye:index:Goodbye", name, makeArgs(args, options), makeResourceOptions(options, Codegen.empty()), false, Utilities.getPackageRef()); + } + + private Goodbye(java.lang.String name, Output id, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("goodbye:index:Goodbye", name, null, makeResourceOptions(options, id), false, Utilities.getPackageRef()); + } + + private static GoodbyeArgs makeArgs(@Nullable GoodbyeArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + if (options != null && options.getUrn().isPresent()) { + return null; + } + return args == null ? GoodbyeArgs.Empty : args; + } + + private static com.pulumi.resources.CustomResourceOptions makeResourceOptions(@Nullable com.pulumi.resources.CustomResourceOptions options, @Nullable Output id) { + var defaultOptions = com.pulumi.resources.CustomResourceOptions.builder() + .version(Utilities.getVersion()) + .build(); + return com.pulumi.resources.CustomResourceOptions.merge(defaultOptions, options, id); + } + + /** + * Get an existing Host resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param options Optional settings to control the behavior of the CustomResource. + */ + public static Goodbye get(java.lang.String name, Output id, @Nullable com.pulumi.resources.CustomResourceOptions options) { + return new Goodbye(name, id, options); + } +} diff --git a/pkg/cmd/pulumi-language-java/testdata/sdks/goodbye-2.0.0/src/main/java/com/pulumi/goodbye/GoodbyeArgs.java b/pkg/cmd/pulumi-language-java/testdata/sdks/goodbye-2.0.0/src/main/java/com/pulumi/goodbye/GoodbyeArgs.java new file mode 100644 index 00000000000..0be47535be7 --- /dev/null +++ b/pkg/cmd/pulumi-language-java/testdata/sdks/goodbye-2.0.0/src/main/java/com/pulumi/goodbye/GoodbyeArgs.java @@ -0,0 +1,28 @@ +// *** WARNING: this file was generated by pulumi-language-java. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.goodbye; + + + + +public final class GoodbyeArgs extends com.pulumi.resources.ResourceArgs { + + public static final GoodbyeArgs Empty = new GoodbyeArgs(); + + public static Builder builder() { + return new Builder(); + } + + public static final class Builder { + private GoodbyeArgs $; + + public Builder() { + $ = new GoodbyeArgs(); + } + public GoodbyeArgs build() { + return $; + } + } + +} diff --git a/pkg/cmd/pulumi-language-java/testdata/sdks/goodbye-2.0.0/src/main/java/com/pulumi/goodbye/Provider.java b/pkg/cmd/pulumi-language-java/testdata/sdks/goodbye-2.0.0/src/main/java/com/pulumi/goodbye/Provider.java new file mode 100644 index 00000000000..717075bc508 --- /dev/null +++ b/pkg/cmd/pulumi-language-java/testdata/sdks/goodbye-2.0.0/src/main/java/com/pulumi/goodbye/Provider.java @@ -0,0 +1,54 @@ +// *** WARNING: this file was generated by pulumi-language-java. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.goodbye; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.ResourceType; +import com.pulumi.core.internal.Codegen; +import com.pulumi.goodbye.ProviderArgs; +import com.pulumi.goodbye.Utilities; +import javax.annotation.Nullable; + +@ResourceType(type="pulumi:providers:goodbye") +public class Provider extends com.pulumi.resources.ProviderResource { + /** + * + * @param name The _unique_ name of the resulting resource. + */ + public Provider(java.lang.String name) { + this(name, ProviderArgs.Empty); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + */ + public Provider(java.lang.String name, @Nullable ProviderArgs args) { + this(name, args, null); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + * @param options A bag of options that control this resource's behavior. + */ + public Provider(java.lang.String name, @Nullable ProviderArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("goodbye", name, makeArgs(args, options), makeResourceOptions(options, Codegen.empty()), false, Utilities.getPackageRef()); + } + + private static ProviderArgs makeArgs(@Nullable ProviderArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + if (options != null && options.getUrn().isPresent()) { + return null; + } + return args == null ? ProviderArgs.Empty : args; + } + + private static com.pulumi.resources.CustomResourceOptions makeResourceOptions(@Nullable com.pulumi.resources.CustomResourceOptions options, @Nullable Output id) { + var defaultOptions = com.pulumi.resources.CustomResourceOptions.builder() + .version(Utilities.getVersion()) + .build(); + return com.pulumi.resources.CustomResourceOptions.merge(defaultOptions, options, id); + } + +} diff --git a/pkg/cmd/pulumi-language-java/testdata/sdks/goodbye-2.0.0/src/main/java/com/pulumi/goodbye/ProviderArgs.java b/pkg/cmd/pulumi-language-java/testdata/sdks/goodbye-2.0.0/src/main/java/com/pulumi/goodbye/ProviderArgs.java new file mode 100644 index 00000000000..afb93688d97 --- /dev/null +++ b/pkg/cmd/pulumi-language-java/testdata/sdks/goodbye-2.0.0/src/main/java/com/pulumi/goodbye/ProviderArgs.java @@ -0,0 +1,63 @@ +// *** WARNING: this file was generated by pulumi-language-java. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.goodbye; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class ProviderArgs extends com.pulumi.resources.ResourceArgs { + + public static final ProviderArgs Empty = new ProviderArgs(); + + @Import(name="text") + private @Nullable Output text; + + public Optional> text() { + return Optional.ofNullable(this.text); + } + + private ProviderArgs() {} + + private ProviderArgs(ProviderArgs $) { + this.text = $.text; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ProviderArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ProviderArgs $; + + public Builder() { + $ = new ProviderArgs(); + } + + public Builder(ProviderArgs defaults) { + $ = new ProviderArgs(Objects.requireNonNull(defaults)); + } + + public Builder text(@Nullable Output text) { + $.text = text; + return this; + } + + public Builder text(String text) { + return text(Output.of(text)); + } + + public ProviderArgs build() { + return $; + } + } + +} diff --git a/pkg/cmd/pulumi-language-java/testdata/sdks/goodbye-2.0.0/src/main/java/com/pulumi/goodbye/Utilities.java b/pkg/cmd/pulumi-language-java/testdata/sdks/goodbye-2.0.0/src/main/java/com/pulumi/goodbye/Utilities.java new file mode 100644 index 00000000000..5c8e8cca7bd --- /dev/null +++ b/pkg/cmd/pulumi-language-java/testdata/sdks/goodbye-2.0.0/src/main/java/com/pulumi/goodbye/Utilities.java @@ -0,0 +1,129 @@ +// *** WARNING: this file was generated by pulumi-language-java. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.goodbye; + + + + + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.util.Optional; +import java.util.stream.Collectors; +import javax.annotation.Nullable; +import com.pulumi.core.internal.Environment; +import com.pulumi.deployment.InvokeOptions; +import com.pulumi.deployment.InvokeOutputOptions; + +import java.util.concurrent.CompletableFuture; +import com.pulumi.deployment.Deployment; + + +public class Utilities { + + public static Optional getEnv(java.lang.String... names) { + for (var n : names) { + var value = Environment.getEnvironmentVariable(n); + if (value.isValue()) { + return Optional.of(value.value()); + } + } + return Optional.empty(); + } + + public static Optional getEnvBoolean(java.lang.String... names) { + for (var n : names) { + var value = Environment.getBooleanEnvironmentVariable(n); + if (value.isValue()) { + return Optional.of(value.value()); + } + } + return Optional.empty(); + } + + public static Optional getEnvInteger(java.lang.String... names) { + for (var n : names) { + var value = Environment.getIntegerEnvironmentVariable(n); + if (value.isValue()) { + return Optional.of(value.value()); + } + } + return Optional.empty(); + } + + public static Optional getEnvDouble(java.lang.String... names) { + for (var n : names) { + var value = Environment.getDoubleEnvironmentVariable(n); + if (value.isValue()) { + return Optional.of(value.value()); + } + } + return Optional.empty(); + } + + public static InvokeOptions withVersion(@Nullable InvokeOptions options) { + if (options != null && options.getVersion().isPresent()) { + return options; + } + return new InvokeOptions( + options == null ? null : options.getParent().orElse(null), + options == null ? null : options.getProvider().orElse(null), + getVersion() + ); + } + + public static InvokeOutputOptions withVersion(@Nullable InvokeOutputOptions options) { + if (options != null && options.getVersion().isPresent()) { + return options; + } + return new InvokeOutputOptions( + options == null ? null : options.getParent().orElse(null), + options == null ? null : options.getProvider().orElse(null), + getVersion(), + options == null ? null : options.getDependsOn() + ); + } + + private static final java.lang.String version; + public static java.lang.String getVersion() { + return version; + } + + static { + var resourceName = "com/pulumi/goodbye/version.txt"; + var versionFile = Utilities.class.getClassLoader().getResourceAsStream(resourceName); + if (versionFile == null) { + throw new IllegalStateException( + java.lang.String.format("expected resource '%s' on Classpath, not found", resourceName) + ); + } + version = new BufferedReader(new InputStreamReader(versionFile)) + .lines() + .collect(Collectors.joining("\n")) + .trim(); + } + + private static final CompletableFuture packageRef; + public static CompletableFuture getPackageRef() { + return packageRef; + } + + static { + packageRef = Deployment.getInstance().registerPackage( + // Base provider name + "parameterized", + // Base provider version + "1.2.3", + // Base provider download URL + "", + // Package name + "goodbye", + // Package version + getVersion(), + // Parameter + "R29vZGJ5ZQ==" + ); + } + +}