cutlass 0.1.7 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a26c39e3aed992a3bce384c77603c159473bdb1a0f39bd86e996806ce26c6c3e
4
- data.tar.gz: d829ea4b01eef4b6ac709510cafcac39768b2470852a4db12f8b04fa26231a34
3
+ metadata.gz: 8496e7ba6cfe271e413d6d6cc52371b57b44a4cfeaaa1b52a57c7a899d2d6b3c
4
+ data.tar.gz: cfdc93566ff44bda4750c9a54cb6b3445b76a86cdcf66d34ab7d99cd3fb1fc42
5
5
  SHA512:
6
- metadata.gz: 39ceffa9e16f1b0c76e3894bdca69d6bd6a83a19ec90d4f34a593e7361935672800befb0761339571a2cb3dcf4434d8e21f5e96550160038adf9e4d4dc2789a1
7
- data.tar.gz: f59429e16a53e8085dbf57fe86ef132e365df58bb014f13d2588814c0617235c9f3f6de389a302243f2cdfa6f6d28ea0f500e0f72e094837666825451fdfff37
6
+ metadata.gz: d42d06c6f3dc18dfc565e1c295507f98e6da4b8a7eba48ded50610cefe269d3bba78dec76cc4ad0c7dcea65d9357d519f0e157bcf8150d17a174b7ba33f4db5c
7
+ data.tar.gz: fb10a7a64fc6d54d56cf49d8dab1b0c7906cc8762c1b024b6ee875a9d2bd1f9582b547f4e93ffa750aa024140edcbb51ecf64b45bd9c329faff92c33b5a6c91d
@@ -2,8 +2,9 @@ version: 2
2
2
  updates:
3
3
  - package-ecosystem: "bundler"
4
4
  directory: "/"
5
- open-pull-requests-limit: 1 # Limit concurrent CI runs from executing
6
5
  schedule:
7
- interval: "weekly"
8
- labels:
9
- - "dependencies"
6
+ interval: "daily"
7
+ - package-ecosystem: "github-actions"
8
+ directory: "/"
9
+ schedule:
10
+ interval: "daily"
@@ -1,16 +1,22 @@
1
1
  name: Check Changelog
2
2
 
3
3
  on:
4
- pull_request:
5
- types: [opened, reopened, edited, synchronize]
4
+ pull_request:
5
+ types: [opened, reopened, edited, labeled, unlabeled, synchronize]
6
+
6
7
  jobs:
7
- build:
8
+ check-changelog:
9
+ runs-on: ubuntu-latest
8
10
  if: |
11
+ !contains(github.event.pull_request.body, '[skip changelog]') &&
12
+ !contains(github.event.pull_request.body, '[changelog skip]') &&
13
+ !contains(github.event.pull_request.body, '[skip ci]') &&
14
+ !contains(github.event.pull_request.labels.*.name, 'skip changelog') &&
9
15
  !contains(github.event.pull_request.labels.*.name, 'dependencies') &&
10
16
  !contains(github.event.pull_request.labels.*.name, 'automation')
11
- runs-on: ubuntu-latest
12
17
  steps:
13
- - uses: actions/checkout@v1
14
- - name: Check that CHANGELOG is touched
15
- run: |
16
- cat $GITHUB_EVENT_PATH | jq .pull_request.title | grep -i '\[\(\(changelog skip\)\|\(ci skip\)\)\]' || git diff remotes/origin/${{ github.base_ref }} --name-only | grep CHANGELOG.md
18
+ - uses: actions/checkout@v2.3.4
19
+ - name: Check that CHANGELOG is touched
20
+ run: |
21
+ git fetch origin ${{ github.base_ref }} --depth 1 && \
22
+ git diff remotes/origin/${{ github.base_ref }} --name-only | grep CHANGELOG.md
data/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## 0.2.3
4
+
5
+ - Fix keyword arg warning https://github.com/heroku/cutlass/pull/28
6
+
7
+ ## 0.2.2
8
+
9
+ - Support :memory option for start_container https://github.com/heroku/cutlass/pull/27
10
+ - Add debug log when a function query fails https://github.com/heroku/cutlass/pull/17
11
+
12
+ ## 0.2.1
13
+
14
+ - Fix incorrect conversion of a ProcessStatus into an exit code https://github.com/heroku/cutlass/pull/16
15
+
16
+ ## 0.2.0
17
+
18
+ - Allow exercising salesforce functions via FunctionQuery (Experimental API) https://github.com/heroku/cutlass/pull/10
3
19
  - Lock LocalBuildpack when generating images to prevent process race conditions https://github.com/heroku/cutlass/pull/9
4
20
 
5
21
  ## 0.1.6
data/Gemfile CHANGED
@@ -11,3 +11,4 @@ gem "yard"
11
11
  gem "dead_end"
12
12
  gem "standard"
13
13
  gem "parallel_split_test"
14
+ gem "webmock"
data/Gemfile.lock CHANGED
@@ -1,28 +1,34 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- cutlass (0.1.7)
4
+ cutlass (0.2.3)
5
5
  docker-api (>= 2.0)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
+ addressable (2.8.0)
11
+ public_suffix (>= 2.0.2, < 5.0)
10
12
  ast (2.4.2)
13
+ crack (0.4.5)
14
+ rexml
11
15
  dead_end (1.1.6)
12
16
  diff-lcs (1.4.4)
13
- docker-api (2.1.0)
17
+ docker-api (2.2.0)
14
18
  excon (>= 0.47.0)
15
19
  multi_json
16
- excon (0.80.1)
20
+ excon (0.85.0)
21
+ hashdiff (1.0.1)
17
22
  multi_json (1.15.0)
18
23
  parallel (1.20.1)
19
- parallel_split_test (0.9.1)
24
+ parallel_split_test (0.10.0)
20
25
  parallel (>= 0.5.13)
21
26
  rspec-core (>= 3.9.0)
22
27
  parser (3.0.1.0)
23
28
  ast (~> 2.4.1)
29
+ public_suffix (4.0.6)
24
30
  rainbow (3.0.0)
25
- rake (13.0.3)
31
+ rake (13.0.6)
26
32
  regexp_parser (2.1.1)
27
33
  rexml (3.2.5)
28
34
  rspec (3.10.0)
@@ -57,6 +63,10 @@ GEM
57
63
  rubocop (= 1.12.1)
58
64
  rubocop-performance (= 1.10.1)
59
65
  unicode-display_width (2.0.0)
66
+ webmock (3.14.0)
67
+ addressable (>= 2.8.0)
68
+ crack (>= 0.3.2)
69
+ hashdiff (>= 0.4.0, < 2.0.0)
60
70
  yard (0.9.26)
61
71
 
62
72
  PLATFORMS
@@ -71,7 +81,8 @@ DEPENDENCIES
71
81
  rake (~> 13.0)
72
82
  rspec (~> 3.0)
73
83
  standard
84
+ webmock
74
85
  yard
75
86
 
76
87
  BUNDLED WITH
77
- 2.2.15
88
+ 2.2.22
data/README.md CHANGED
@@ -92,7 +92,7 @@ Cutlass::App.new("ruby-getting-started").transaction do |app|
92
92
  #
93
93
  # Basically there's a ton of caveats to using this feature. Tread lightly.
94
94
  app.start_container(expose_ports: [8080]) do |container|
95
- response = Excon.get("http://localhost:#{container.port(8080)}/", :idempotent => true, :retry_limit => 5, :retry_interval => 1)
95
+ response = Excon.get("http://localhost:#{container.get_host_port(8080)}/", :idempotent => true, :retry_limit => 5, :retry_interval => 1)
96
96
  expect(response.body).to eq("Welcome to rails")
97
97
 
98
98
  # Warning, this does not use the CNB entrypoint so it's in a different dir
@@ -169,7 +169,7 @@ An instance of BashResult is returned whenever Cutlass interacts with the shell
169
169
 
170
170
  Once built an app can `app.start_container` to yield a ContainerControl object.
171
171
 
172
- - `container.port(<port>)` Returns the port on the host machine (your computer, not docker) that docker is bound to
172
+ - `container.get_host_port(<port>)` Returns the port on the host machine (your computer, not docker) that docker is bound to
173
173
  - Warning: These following commands do not use the CNB entry point so CNB env vars are not loaded and it my be a different dir than you're expecting
174
174
  - `container.bash_exec(<command>)` Executes a bash command inside of a running container. Returns a BashResult object. By default this will raise an exception if the command returns non-zero exit code. Use kwarg `container.bash_exec(<command>, exception_on_failure: false)` to disable. Returns a BashResult object.
175
175
  - `container.contains_file?(<file path>)` Checks to see if a given file exists on disk. Returns a BashResult object
data/lib/cutlass/app.rb CHANGED
@@ -90,10 +90,10 @@ module Cutlass
90
90
  on_teardown { thread.join }
91
91
  end
92
92
 
93
- def start_container(expose_ports: [])
93
+ def start_container(memory: nil, expose_ports: [])
94
94
  raise "No block given" unless block_given?
95
95
 
96
- ContainerBoot.new(image_id: last_build.image_id, expose_ports: expose_ports).call do |container|
96
+ ContainerBoot.new(image_id: last_build.image_id, memory: memory, expose_ports: expose_ports).call do |container|
97
97
  yield container
98
98
  end
99
99
  end
@@ -28,7 +28,7 @@ module Cutlass
28
28
  def initialize(stdout:, stderr:, status:)
29
29
  @stdout = stdout
30
30
  @stderr = stderr
31
- @status = status.to_i
31
+ @status = status.respond_to?(:exitstatus) ? status.exitstatus : status.to_i
32
32
  end
33
33
 
34
34
  # @return [Boolean]
@@ -33,7 +33,7 @@ module Cutlass
33
33
  # container. It does not execute the container's entrypoint. That means if you're running
34
34
  # inside of a CNB image, that env vars won't be set and the directory might be different.
35
35
  class ContainerBoot
36
- def initialize(image_id:, expose_ports: [])
36
+ def initialize(image_id:, expose_ports: [], memory: nil)
37
37
  @expose_ports = Array(expose_ports)
38
38
  config = {
39
39
  "Image" => image_id,
@@ -52,6 +52,7 @@ module Cutlass
52
52
  port_bindings["#{port}/tcp"] = [{"HostPort" => ""}]
53
53
  end
54
54
 
55
+ config["Memory"] = memory.to_i if memory
55
56
  @container = Docker::Container.create(config)
56
57
  end
57
58
 
@@ -0,0 +1,123 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "json"
4
+ require "base64"
5
+ require "cgi"
6
+
7
+ module Cutlass
8
+ # The purpose of this class is to trigger "Salesforce Functions"
9
+ # against a function compatible app built with a compatible CNB
10
+ #
11
+ # This class is WIP, API is subject to change
12
+ #
13
+ # app.start_container(expose_ports: [8080]) do |container|
14
+ # Cutlass::FunctionQuery.new(port: container.get_host_port(8080)).call.as_json
15
+ # # => { accounts: []}
16
+ # end
17
+ #
18
+ class FunctionQuery
19
+ attr_reader :io
20
+
21
+ def initialize(port:, spec_version: nil, body: {}, io: Kernel)
22
+ @send_body = body
23
+ @port = port
24
+ @response = nil
25
+ @spec_version = spec_version || "1.0"
26
+ @io = io
27
+ end
28
+
29
+ def call
30
+ @response = Excon.post(
31
+ "http://localhost:#{@port}",
32
+ body: JSON.dump(@send_body),
33
+ headers: headers,
34
+ idempotent: true,
35
+ retry_limit: 5,
36
+ retry_interval: 1
37
+ )
38
+
39
+ self
40
+ end
41
+
42
+ def response
43
+ raise "Must `call` first" if @response.nil?
44
+ @response
45
+ end
46
+
47
+ def success?
48
+ response&.status.to_s.start_with?("2")
49
+ end
50
+
51
+ def fail?
52
+ !success?
53
+ end
54
+
55
+ def as_json
56
+ JSON.parse(body || "")
57
+ rescue JSON::ParserError => e
58
+ io.warn "Body: #{body}"
59
+ io.warn "Code: #{response&.status}"
60
+ io.warn "Headers: #{response&.headers.inspect}"
61
+ io.warn "x-extra-info: #{CGI.unescape(response&.headers&.[]("x-extra-info") || "")}"
62
+ raise e
63
+ end
64
+
65
+ def body
66
+ response&.body
67
+ end
68
+
69
+ def headers
70
+ {
71
+ "Content-Type" => "application/json",
72
+ "ce-id" => "MyFunction-#{SecureRandom.hex(10)}",
73
+ "ce-time" => "2020-09-03T20:56:28.297915Z",
74
+ "ce-type" => "",
75
+ "ce-source" => "",
76
+ "ce-sfcontext" => sfcontext,
77
+ "Authorization" => "",
78
+ "ce-specversion" => @spec_version,
79
+ "ce-sffncontext" => ssfcontext
80
+ }
81
+ end
82
+
83
+ def ssfcontext
84
+ marshal_hash(raw_ssfcontext)
85
+ end
86
+
87
+ def raw_ssfcontext
88
+ {
89
+ "resource" => "",
90
+ "requestId" => "",
91
+ "accessToken" => "",
92
+ "apexClassId" => nil,
93
+ "apexClassFQN" => nil,
94
+ "functionName" => "",
95
+ "functionInvocationId" => nil
96
+ }
97
+ end
98
+
99
+ def raw_sfcontext
100
+ {
101
+ "apiVersion" => "",
102
+ "payloadVersion" => "",
103
+ "userContext" =>
104
+ {
105
+ "orgId" => "",
106
+ "userId" => "",
107
+ "username" => "",
108
+ "orgDomainUrl" => "",
109
+ "onBehalfOfUserId" => nil,
110
+ "salesforceBaseUrl" => ""
111
+ }
112
+ }
113
+ end
114
+
115
+ def sfcontext
116
+ marshal_hash(raw_sfcontext)
117
+ end
118
+
119
+ def marshal_hash(value)
120
+ Base64.strict_encode64(JSON.dump(value)).chomp
121
+ end
122
+ end
123
+ end
@@ -2,5 +2,5 @@
2
2
 
3
3
  module Cutlass
4
4
  # Version
5
- VERSION = "0.1.7"
5
+ VERSION = "0.2.3"
6
6
  end
data/lib/cutlass.rb CHANGED
@@ -101,3 +101,4 @@ require_relative "cutlass/clean_test_env"
101
101
  require_relative "cutlass/local_buildpack"
102
102
  require_relative "cutlass/pack_build"
103
103
  require_relative "cutlass/container_boot"
104
+ require_relative "cutlass/function_query"
@@ -0,0 +1,3 @@
1
+ .idea
2
+ *.iml
3
+ target/
@@ -0,0 +1,117 @@
1
+ /*
2
+ * Copyright 2007-present the original author or authors.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import java.net.*;
17
+ import java.io.*;
18
+ import java.nio.channels.*;
19
+ import java.util.Properties;
20
+
21
+ public class MavenWrapperDownloader {
22
+
23
+ private static final String WRAPPER_VERSION = "0.5.6";
24
+ /**
25
+ * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided.
26
+ */
27
+ private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/"
28
+ + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar";
29
+
30
+ /**
31
+ * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to
32
+ * use instead of the default one.
33
+ */
34
+ private static final String MAVEN_WRAPPER_PROPERTIES_PATH =
35
+ ".mvn/wrapper/maven-wrapper.properties";
36
+
37
+ /**
38
+ * Path where the maven-wrapper.jar will be saved to.
39
+ */
40
+ private static final String MAVEN_WRAPPER_JAR_PATH =
41
+ ".mvn/wrapper/maven-wrapper.jar";
42
+
43
+ /**
44
+ * Name of the property which should be used to override the default download url for the wrapper.
45
+ */
46
+ private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl";
47
+
48
+ public static void main(String args[]) {
49
+ System.out.println("- Downloader started");
50
+ File baseDirectory = new File(args[0]);
51
+ System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath());
52
+
53
+ // If the maven-wrapper.properties exists, read it and check if it contains a custom
54
+ // wrapperUrl parameter.
55
+ File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH);
56
+ String url = DEFAULT_DOWNLOAD_URL;
57
+ if(mavenWrapperPropertyFile.exists()) {
58
+ FileInputStream mavenWrapperPropertyFileInputStream = null;
59
+ try {
60
+ mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile);
61
+ Properties mavenWrapperProperties = new Properties();
62
+ mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream);
63
+ url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url);
64
+ } catch (IOException e) {
65
+ System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'");
66
+ } finally {
67
+ try {
68
+ if(mavenWrapperPropertyFileInputStream != null) {
69
+ mavenWrapperPropertyFileInputStream.close();
70
+ }
71
+ } catch (IOException e) {
72
+ // Ignore ...
73
+ }
74
+ }
75
+ }
76
+ System.out.println("- Downloading from: " + url);
77
+
78
+ File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH);
79
+ if(!outputFile.getParentFile().exists()) {
80
+ if(!outputFile.getParentFile().mkdirs()) {
81
+ System.out.println(
82
+ "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'");
83
+ }
84
+ }
85
+ System.out.println("- Downloading to: " + outputFile.getAbsolutePath());
86
+ try {
87
+ downloadFileFromURL(url, outputFile);
88
+ System.out.println("Done");
89
+ System.exit(0);
90
+ } catch (Throwable e) {
91
+ System.out.println("- Error downloading");
92
+ e.printStackTrace();
93
+ System.exit(1);
94
+ }
95
+ }
96
+
97
+ private static void downloadFileFromURL(String urlString, File destination) throws Exception {
98
+ if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) {
99
+ String username = System.getenv("MVNW_USERNAME");
100
+ char[] password = System.getenv("MVNW_PASSWORD").toCharArray();
101
+ Authenticator.setDefault(new Authenticator() {
102
+ @Override
103
+ protected PasswordAuthentication getPasswordAuthentication() {
104
+ return new PasswordAuthentication(username, password);
105
+ }
106
+ });
107
+ }
108
+ URL website = new URL(urlString);
109
+ ReadableByteChannel rbc;
110
+ rbc = Channels.newChannel(website.openStream());
111
+ FileOutputStream fos = new FileOutputStream(destination);
112
+ fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
113
+ fos.close();
114
+ rbc.close();
115
+ }
116
+
117
+ }
@@ -0,0 +1,2 @@
1
+ distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip
2
+ wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar
@@ -0,0 +1,3 @@
1
+ [function]
2
+ name = "template"
3
+ description = "This is a Salesforce Function."
@@ -0,0 +1,310 @@
1
+ #!/bin/sh
2
+ # ----------------------------------------------------------------------------
3
+ # Licensed to the Apache Software Foundation (ASF) under one
4
+ # or more contributor license agreements. See the NOTICE file
5
+ # distributed with this work for additional information
6
+ # regarding copyright ownership. The ASF licenses this file
7
+ # to you under the Apache License, Version 2.0 (the
8
+ # "License"); you may not use this file except in compliance
9
+ # with the License. You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing,
14
+ # software distributed under the License is distributed on an
15
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16
+ # KIND, either express or implied. See the License for the
17
+ # specific language governing permissions and limitations
18
+ # under the License.
19
+ # ----------------------------------------------------------------------------
20
+
21
+ # ----------------------------------------------------------------------------
22
+ # Maven Start Up Batch script
23
+ #
24
+ # Required ENV vars:
25
+ # ------------------
26
+ # JAVA_HOME - location of a JDK home dir
27
+ #
28
+ # Optional ENV vars
29
+ # -----------------
30
+ # M2_HOME - location of maven2's installed home dir
31
+ # MAVEN_OPTS - parameters passed to the Java VM when running Maven
32
+ # e.g. to debug Maven itself, use
33
+ # set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
34
+ # MAVEN_SKIP_RC - flag to disable loading of mavenrc files
35
+ # ----------------------------------------------------------------------------
36
+
37
+ if [ -z "$MAVEN_SKIP_RC" ] ; then
38
+
39
+ if [ -f /etc/mavenrc ] ; then
40
+ . /etc/mavenrc
41
+ fi
42
+
43
+ if [ -f "$HOME/.mavenrc" ] ; then
44
+ . "$HOME/.mavenrc"
45
+ fi
46
+
47
+ fi
48
+
49
+ # OS specific support. $var _must_ be set to either true or false.
50
+ cygwin=false;
51
+ darwin=false;
52
+ mingw=false
53
+ case "`uname`" in
54
+ CYGWIN*) cygwin=true ;;
55
+ MINGW*) mingw=true;;
56
+ Darwin*) darwin=true
57
+ # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
58
+ # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
59
+ if [ -z "$JAVA_HOME" ]; then
60
+ if [ -x "/usr/libexec/java_home" ]; then
61
+ export JAVA_HOME="`/usr/libexec/java_home`"
62
+ else
63
+ export JAVA_HOME="/Library/Java/Home"
64
+ fi
65
+ fi
66
+ ;;
67
+ esac
68
+
69
+ if [ -z "$JAVA_HOME" ] ; then
70
+ if [ -r /etc/gentoo-release ] ; then
71
+ JAVA_HOME=`java-config --jre-home`
72
+ fi
73
+ fi
74
+
75
+ if [ -z "$M2_HOME" ] ; then
76
+ ## resolve links - $0 may be a link to maven's home
77
+ PRG="$0"
78
+
79
+ # need this for relative symlinks
80
+ while [ -h "$PRG" ] ; do
81
+ ls=`ls -ld "$PRG"`
82
+ link=`expr "$ls" : '.*-> \(.*\)$'`
83
+ if expr "$link" : '/.*' > /dev/null; then
84
+ PRG="$link"
85
+ else
86
+ PRG="`dirname "$PRG"`/$link"
87
+ fi
88
+ done
89
+
90
+ saveddir=`pwd`
91
+
92
+ M2_HOME=`dirname "$PRG"`/..
93
+
94
+ # make it fully qualified
95
+ M2_HOME=`cd "$M2_HOME" && pwd`
96
+
97
+ cd "$saveddir"
98
+ # echo Using m2 at $M2_HOME
99
+ fi
100
+
101
+ # For Cygwin, ensure paths are in UNIX format before anything is touched
102
+ if $cygwin ; then
103
+ [ -n "$M2_HOME" ] &&
104
+ M2_HOME=`cygpath --unix "$M2_HOME"`
105
+ [ -n "$JAVA_HOME" ] &&
106
+ JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
107
+ [ -n "$CLASSPATH" ] &&
108
+ CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
109
+ fi
110
+
111
+ # For Mingw, ensure paths are in UNIX format before anything is touched
112
+ if $mingw ; then
113
+ [ -n "$M2_HOME" ] &&
114
+ M2_HOME="`(cd "$M2_HOME"; pwd)`"
115
+ [ -n "$JAVA_HOME" ] &&
116
+ JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
117
+ fi
118
+
119
+ if [ -z "$JAVA_HOME" ]; then
120
+ javaExecutable="`which javac`"
121
+ if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
122
+ # readlink(1) is not available as standard on Solaris 10.
123
+ readLink=`which readlink`
124
+ if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
125
+ if $darwin ; then
126
+ javaHome="`dirname \"$javaExecutable\"`"
127
+ javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
128
+ else
129
+ javaExecutable="`readlink -f \"$javaExecutable\"`"
130
+ fi
131
+ javaHome="`dirname \"$javaExecutable\"`"
132
+ javaHome=`expr "$javaHome" : '\(.*\)/bin'`
133
+ JAVA_HOME="$javaHome"
134
+ export JAVA_HOME
135
+ fi
136
+ fi
137
+ fi
138
+
139
+ if [ -z "$JAVACMD" ] ; then
140
+ if [ -n "$JAVA_HOME" ] ; then
141
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
142
+ # IBM's JDK on AIX uses strange locations for the executables
143
+ JAVACMD="$JAVA_HOME/jre/sh/java"
144
+ else
145
+ JAVACMD="$JAVA_HOME/bin/java"
146
+ fi
147
+ else
148
+ JAVACMD="`which java`"
149
+ fi
150
+ fi
151
+
152
+ if [ ! -x "$JAVACMD" ] ; then
153
+ echo "Error: JAVA_HOME is not defined correctly." >&2
154
+ echo " We cannot execute $JAVACMD" >&2
155
+ exit 1
156
+ fi
157
+
158
+ if [ -z "$JAVA_HOME" ] ; then
159
+ echo "Warning: JAVA_HOME environment variable is not set."
160
+ fi
161
+
162
+ CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
163
+
164
+ # traverses directory structure from process work directory to filesystem root
165
+ # first directory with .mvn subdirectory is considered project base directory
166
+ find_maven_basedir() {
167
+
168
+ if [ -z "$1" ]
169
+ then
170
+ echo "Path not specified to find_maven_basedir"
171
+ return 1
172
+ fi
173
+
174
+ basedir="$1"
175
+ wdir="$1"
176
+ while [ "$wdir" != '/' ] ; do
177
+ if [ -d "$wdir"/.mvn ] ; then
178
+ basedir=$wdir
179
+ break
180
+ fi
181
+ # workaround for JBEAP-8937 (on Solaris 10/Sparc)
182
+ if [ -d "${wdir}" ]; then
183
+ wdir=`cd "$wdir/.."; pwd`
184
+ fi
185
+ # end of workaround
186
+ done
187
+ echo "${basedir}"
188
+ }
189
+
190
+ # concatenates all lines of a file
191
+ concat_lines() {
192
+ if [ -f "$1" ]; then
193
+ echo "$(tr -s '\n' ' ' < "$1")"
194
+ fi
195
+ }
196
+
197
+ BASE_DIR=`find_maven_basedir "$(pwd)"`
198
+ if [ -z "$BASE_DIR" ]; then
199
+ exit 1;
200
+ fi
201
+
202
+ ##########################################################################################
203
+ # Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
204
+ # This allows using the maven wrapper in projects that prohibit checking in binary data.
205
+ ##########################################################################################
206
+ if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
207
+ if [ "$MVNW_VERBOSE" = true ]; then
208
+ echo "Found .mvn/wrapper/maven-wrapper.jar"
209
+ fi
210
+ else
211
+ if [ "$MVNW_VERBOSE" = true ]; then
212
+ echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
213
+ fi
214
+ if [ -n "$MVNW_REPOURL" ]; then
215
+ jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
216
+ else
217
+ jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
218
+ fi
219
+ while IFS="=" read key value; do
220
+ case "$key" in (wrapperUrl) jarUrl="$value"; break ;;
221
+ esac
222
+ done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
223
+ if [ "$MVNW_VERBOSE" = true ]; then
224
+ echo "Downloading from: $jarUrl"
225
+ fi
226
+ wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
227
+ if $cygwin; then
228
+ wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"`
229
+ fi
230
+
231
+ if command -v wget > /dev/null; then
232
+ if [ "$MVNW_VERBOSE" = true ]; then
233
+ echo "Found wget ... using wget"
234
+ fi
235
+ if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
236
+ wget "$jarUrl" -O "$wrapperJarPath"
237
+ else
238
+ wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath"
239
+ fi
240
+ elif command -v curl > /dev/null; then
241
+ if [ "$MVNW_VERBOSE" = true ]; then
242
+ echo "Found curl ... using curl"
243
+ fi
244
+ if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
245
+ curl -o "$wrapperJarPath" "$jarUrl" -f
246
+ else
247
+ curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f
248
+ fi
249
+
250
+ else
251
+ if [ "$MVNW_VERBOSE" = true ]; then
252
+ echo "Falling back to using Java to download"
253
+ fi
254
+ javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
255
+ # For Cygwin, switch paths to Windows format before running javac
256
+ if $cygwin; then
257
+ javaClass=`cygpath --path --windows "$javaClass"`
258
+ fi
259
+ if [ -e "$javaClass" ]; then
260
+ if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
261
+ if [ "$MVNW_VERBOSE" = true ]; then
262
+ echo " - Compiling MavenWrapperDownloader.java ..."
263
+ fi
264
+ # Compiling the Java class
265
+ ("$JAVA_HOME/bin/javac" "$javaClass")
266
+ fi
267
+ if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
268
+ # Running the downloader
269
+ if [ "$MVNW_VERBOSE" = true ]; then
270
+ echo " - Running MavenWrapperDownloader.java ..."
271
+ fi
272
+ ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
273
+ fi
274
+ fi
275
+ fi
276
+ fi
277
+ ##########################################################################################
278
+ # End of extension
279
+ ##########################################################################################
280
+
281
+ export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
282
+ if [ "$MVNW_VERBOSE" = true ]; then
283
+ echo $MAVEN_PROJECTBASEDIR
284
+ fi
285
+ MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
286
+
287
+ # For Cygwin, switch paths to Windows format before running java
288
+ if $cygwin; then
289
+ [ -n "$M2_HOME" ] &&
290
+ M2_HOME=`cygpath --path --windows "$M2_HOME"`
291
+ [ -n "$JAVA_HOME" ] &&
292
+ JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
293
+ [ -n "$CLASSPATH" ] &&
294
+ CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
295
+ [ -n "$MAVEN_PROJECTBASEDIR" ] &&
296
+ MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
297
+ fi
298
+
299
+ # Provide a "standardized" way to retrieve the CLI args that will
300
+ # work with both Windows and non-Windows executions.
301
+ MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
302
+ export MAVEN_CMD_LINE_ARGS
303
+
304
+ WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
305
+
306
+ exec "$JAVACMD" \
307
+ $MAVEN_OPTS \
308
+ -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
309
+ "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
310
+ ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
@@ -0,0 +1,182 @@
1
+ @REM ----------------------------------------------------------------------------
2
+ @REM Licensed to the Apache Software Foundation (ASF) under one
3
+ @REM or more contributor license agreements. See the NOTICE file
4
+ @REM distributed with this work for additional information
5
+ @REM regarding copyright ownership. The ASF licenses this file
6
+ @REM to you under the Apache License, Version 2.0 (the
7
+ @REM "License"); you may not use this file except in compliance
8
+ @REM with the License. You may obtain a copy of the License at
9
+ @REM
10
+ @REM http://www.apache.org/licenses/LICENSE-2.0
11
+ @REM
12
+ @REM Unless required by applicable law or agreed to in writing,
13
+ @REM software distributed under the License is distributed on an
14
+ @REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
+ @REM KIND, either express or implied. See the License for the
16
+ @REM specific language governing permissions and limitations
17
+ @REM under the License.
18
+ @REM ----------------------------------------------------------------------------
19
+
20
+ @REM ----------------------------------------------------------------------------
21
+ @REM Maven Start Up Batch script
22
+ @REM
23
+ @REM Required ENV vars:
24
+ @REM JAVA_HOME - location of a JDK home dir
25
+ @REM
26
+ @REM Optional ENV vars
27
+ @REM M2_HOME - location of maven2's installed home dir
28
+ @REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
29
+ @REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending
30
+ @REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
31
+ @REM e.g. to debug Maven itself, use
32
+ @REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
33
+ @REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
34
+ @REM ----------------------------------------------------------------------------
35
+
36
+ @REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
37
+ @echo off
38
+ @REM set title of command window
39
+ title %0
40
+ @REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
41
+ @if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
42
+
43
+ @REM set %HOME% to equivalent of $HOME
44
+ if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
45
+
46
+ @REM Execute a user defined script before this one
47
+ if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
48
+ @REM check for pre script, once with legacy .bat ending and once with .cmd ending
49
+ if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
50
+ if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
51
+ :skipRcPre
52
+
53
+ @setlocal
54
+
55
+ set ERROR_CODE=0
56
+
57
+ @REM To isolate internal variables from possible post scripts, we use another setlocal
58
+ @setlocal
59
+
60
+ @REM ==== START VALIDATION ====
61
+ if not "%JAVA_HOME%" == "" goto OkJHome
62
+
63
+ echo.
64
+ echo Error: JAVA_HOME not found in your environment. >&2
65
+ echo Please set the JAVA_HOME variable in your environment to match the >&2
66
+ echo location of your Java installation. >&2
67
+ echo.
68
+ goto error
69
+
70
+ :OkJHome
71
+ if exist "%JAVA_HOME%\bin\java.exe" goto init
72
+
73
+ echo.
74
+ echo Error: JAVA_HOME is set to an invalid directory. >&2
75
+ echo JAVA_HOME = "%JAVA_HOME%" >&2
76
+ echo Please set the JAVA_HOME variable in your environment to match the >&2
77
+ echo location of your Java installation. >&2
78
+ echo.
79
+ goto error
80
+
81
+ @REM ==== END VALIDATION ====
82
+
83
+ :init
84
+
85
+ @REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
86
+ @REM Fallback to current working directory if not found.
87
+
88
+ set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
89
+ IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
90
+
91
+ set EXEC_DIR=%CD%
92
+ set WDIR=%EXEC_DIR%
93
+ :findBaseDir
94
+ IF EXIST "%WDIR%"\.mvn goto baseDirFound
95
+ cd ..
96
+ IF "%WDIR%"=="%CD%" goto baseDirNotFound
97
+ set WDIR=%CD%
98
+ goto findBaseDir
99
+
100
+ :baseDirFound
101
+ set MAVEN_PROJECTBASEDIR=%WDIR%
102
+ cd "%EXEC_DIR%"
103
+ goto endDetectBaseDir
104
+
105
+ :baseDirNotFound
106
+ set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
107
+ cd "%EXEC_DIR%"
108
+
109
+ :endDetectBaseDir
110
+
111
+ IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
112
+
113
+ @setlocal EnableExtensions EnableDelayedExpansion
114
+ for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
115
+ @endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
116
+
117
+ :endReadAdditionalConfig
118
+
119
+ SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
120
+ set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
121
+ set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
122
+
123
+ set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
124
+
125
+ FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
126
+ IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B
127
+ )
128
+
129
+ @REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
130
+ @REM This allows using the maven wrapper in projects that prohibit checking in binary data.
131
+ if exist %WRAPPER_JAR% (
132
+ if "%MVNW_VERBOSE%" == "true" (
133
+ echo Found %WRAPPER_JAR%
134
+ )
135
+ ) else (
136
+ if not "%MVNW_REPOURL%" == "" (
137
+ SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
138
+ )
139
+ if "%MVNW_VERBOSE%" == "true" (
140
+ echo Couldn't find %WRAPPER_JAR%, downloading it ...
141
+ echo Downloading from: %DOWNLOAD_URL%
142
+ )
143
+
144
+ powershell -Command "&{"^
145
+ "$webclient = new-object System.Net.WebClient;"^
146
+ "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
147
+ "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
148
+ "}"^
149
+ "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^
150
+ "}"
151
+ if "%MVNW_VERBOSE%" == "true" (
152
+ echo Finished downloading %WRAPPER_JAR%
153
+ )
154
+ )
155
+ @REM End of extension
156
+
157
+ @REM Provide a "standardized" way to retrieve the CLI args that will
158
+ @REM work with both Windows and non-Windows executions.
159
+ set MAVEN_CMD_LINE_ARGS=%*
160
+
161
+ %MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
162
+ if ERRORLEVEL 1 goto error
163
+ goto end
164
+
165
+ :error
166
+ set ERROR_CODE=1
167
+
168
+ :end
169
+ @endlocal & set ERROR_CODE=%ERROR_CODE%
170
+
171
+ if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
172
+ @REM check for post script, once with legacy .bat ending and once with .cmd ending
173
+ if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
174
+ if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
175
+ :skipRcPost
176
+
177
+ @REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
178
+ if "%MAVEN_BATCH_PAUSE%" == "on" pause
179
+
180
+ if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
181
+
182
+ exit /B %ERROR_CODE%
@@ -0,0 +1,68 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+
3
+ <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5
+ <modelVersion>4.0.0</modelVersion>
6
+
7
+ <groupId>com.example</groupId>
8
+ <artifactId>function-template</artifactId>
9
+ <version>1.0-SNAPSHOT</version>
10
+
11
+ <name>function-template</name>
12
+ <properties>
13
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
14
+ <maven.compiler.source>1.8</maven.compiler.source>
15
+ <maven.compiler.target>1.8</maven.compiler.target>
16
+ </properties>
17
+
18
+ <dependencies>
19
+ <dependency>
20
+ <groupId>com.salesforce.functions</groupId>
21
+ <artifactId>sf-fx-sdk-java</artifactId>
22
+ <version>1.0.0</version>
23
+ </dependency>
24
+ </dependencies>
25
+
26
+ <build>
27
+ <pluginManagement>
28
+ <plugins>
29
+ <plugin>
30
+ <artifactId>maven-clean-plugin</artifactId>
31
+ <version>3.1.0</version>
32
+ </plugin>
33
+ <plugin>
34
+ <artifactId>maven-resources-plugin</artifactId>
35
+ <version>3.0.2</version>
36
+ </plugin>
37
+ <plugin>
38
+ <artifactId>maven-compiler-plugin</artifactId>
39
+ <version>3.8.0</version>
40
+ </plugin>
41
+ <plugin>
42
+ <artifactId>maven-surefire-plugin</artifactId>
43
+ <version>2.22.1</version>
44
+ </plugin>
45
+ <plugin>
46
+ <artifactId>maven-jar-plugin</artifactId>
47
+ <version>3.0.2</version>
48
+ </plugin>
49
+ <plugin>
50
+ <artifactId>maven-install-plugin</artifactId>
51
+ <version>2.5.2</version>
52
+ </plugin>
53
+ <plugin>
54
+ <artifactId>maven-deploy-plugin</artifactId>
55
+ <version>2.8.2</version>
56
+ </plugin>
57
+ <plugin>
58
+ <artifactId>maven-site-plugin</artifactId>
59
+ <version>3.7.1</version>
60
+ </plugin>
61
+ <plugin>
62
+ <artifactId>maven-project-info-reports-plugin</artifactId>
63
+ <version>3.0.0</version>
64
+ </plugin>
65
+ </plugins>
66
+ </pluginManagement>
67
+ </build>
68
+ </project>
@@ -0,0 +1,12 @@
1
+ package com.example;
2
+
3
+ import com.salesforce.functions.jvm.sdk.Context;
4
+ import com.salesforce.functions.jvm.sdk.InvocationEvent;
5
+ import com.salesforce.functions.jvm.sdk.SalesforceFunction;
6
+
7
+ public class ExampleFunction implements SalesforceFunction<String, String> {
8
+ @Override
9
+ public String apply(InvocationEvent<String> event, Context context) {
10
+ return new StringBuilder(event.getData()).reverse().toString();
11
+ }
12
+ }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cutlass
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - schneems
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-04-21 00:00:00.000000000 Z
11
+ date: 2021-09-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: docker-api
@@ -57,9 +57,19 @@ files:
57
57
  - lib/cutlass/container_control.rb
58
58
  - lib/cutlass/docker_diff.rb
59
59
  - lib/cutlass/env_diff.rb
60
+ - lib/cutlass/function_query.rb
60
61
  - lib/cutlass/local_buildpack.rb
61
62
  - lib/cutlass/pack_build.rb
62
63
  - lib/cutlass/version.rb
64
+ - repos/jvm/sf-fx-template-java/.gitignore
65
+ - repos/jvm/sf-fx-template-java/.mvn/wrapper/MavenWrapperDownloader.java
66
+ - repos/jvm/sf-fx-template-java/.mvn/wrapper/maven-wrapper.jar
67
+ - repos/jvm/sf-fx-template-java/.mvn/wrapper/maven-wrapper.properties
68
+ - repos/jvm/sf-fx-template-java/function.toml
69
+ - repos/jvm/sf-fx-template-java/mvnw
70
+ - repos/jvm/sf-fx-template-java/mvnw.cmd
71
+ - repos/jvm/sf-fx-template-java/pom.xml
72
+ - repos/jvm/sf-fx-template-java/src/main/java/com/example/ExampleFunction.java
63
73
  homepage: https://github.com/heroku/cutlass
64
74
  licenses:
65
75
  - MIT
@@ -82,7 +92,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
82
92
  - !ruby/object:Gem::Version
83
93
  version: '0'
84
94
  requirements: []
85
- rubygems_version: 3.2.15
95
+ rubygems_version: 3.2.22
86
96
  signing_key:
87
97
  specification_version: 4
88
98
  summary: Write CNB integration tests for Pack in Ruby with cutlass