Skip to content

Commit 79468b4

Browse files
authored
Merge branch 'master' into feat/math-functions
2 parents f1cf9a9 + 572c054 commit 79468b4

40 files changed

+185
-20
lines changed

BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ go_library(
3333
"//internal/parser:go_default_library",
3434
"//internal/program:go_default_library",
3535
"@io_k8s_sigs_yaml//:go_default_library",
36+
"@org_golang_x_crypto//sha3:go_default_library",
3637
],
3738
)
3839

MODULE.bazel

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
module(name = "jsonnet_go", version = "0.0.0")
2+
3+
bazel_dep(name = "gazelle", version = "0.30.0", repo_name = "bazel_gazelle")
4+
bazel_dep(name = "jsonnet", version = "0.20.0", repo_name = "cpp_jsonnet")
5+
bazel_dep(name = "rules_go", version = "0.39.1", repo_name = "io_bazel_rules_go")
6+
7+
go_deps = use_extension("@bazel_gazelle//:extensions.bzl", "go_deps")
8+
go_deps.from_file(go_mod = "@jsonnet_go//:go.mod")
9+
use_repo(
10+
go_deps,
11+
"com_github_fatih_color",
12+
"com_github_sergi_go_diff",
13+
"io_k8s_sigs_yaml",
14+
)

ast/BUILD.bazel

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
load("@io_bazel_rules_go//go:def.bzl", "go_library")
1+
load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test")
22

33
go_library(
44
name = "go_default_library",
@@ -13,3 +13,9 @@ go_library(
1313
importpath = "github.com/google/go-jsonnet/ast",
1414
visibility = ["//visibility:public"],
1515
)
16+
17+
go_test(
18+
name = "go_default_test",
19+
srcs = ["util_test.go"],
20+
embed = [":go_default_library"],
21+
)

bazel/deps.bzl

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ def jsonnet_go_dependencies(go_sdk_version = "host"):
2121
)
2222
go_repository(
2323
name = "com_github_fatih_color",
24+
build_external = "external",
2425
importpath = "github.com/fatih/color",
2526
sum = "h1:mRhaKNwANqRgUBGKmnI5ZxEk7QXmjQeCcuYFMX2bfcc=",
2627
version = "v1.12.0",
27-
build_external = "external",
2828
)
2929

3030
go_repository(
@@ -47,17 +47,17 @@ def jsonnet_go_dependencies(go_sdk_version = "host"):
4747
)
4848
go_repository(
4949
name = "com_github_mattn_go_colorable",
50+
build_external = "external",
5051
importpath = "github.com/mattn/go-colorable",
5152
sum = "h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ0s8=",
5253
version = "v0.1.8",
53-
build_external = "external",
5454
)
5555
go_repository(
5656
name = "com_github_mattn_go_isatty",
57+
build_external = "external",
5758
importpath = "github.com/mattn/go-isatty",
5859
sum = "h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=",
5960
version = "v0.0.12",
60-
build_external = "external",
6161
)
6262
go_repository(
6363
name = "com_github_pmezard_go_difflib",
@@ -101,9 +101,34 @@ def jsonnet_go_dependencies(go_sdk_version = "host"):
101101
sum = "h1:4A07+ZFc2wgJwo8YNlQpr1rVlgUDlxXHhPJciaPY5gs=",
102102
version = "v1.1.0",
103103
)
104+
go_repository(
105+
name = "org_golang_x_crypto",
106+
importpath = "golang.org/x/crypto",
107+
sum = "h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g=",
108+
version = "v0.9.0",
109+
)
110+
go_repository(
111+
name = "org_golang_x_net",
112+
importpath = "golang.org/x/net",
113+
sum = "h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M=",
114+
version = "v0.10.0",
115+
)
116+
104117
go_repository(
105118
name = "org_golang_x_sys",
106119
importpath = "golang.org/x/sys",
107-
sum = "h1:kunALQeHf1/185U1i0GOB/fy1IPRDDpuoOOqRReG57U=",
108-
version = "v0.1.0",
120+
sum = "h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU=",
121+
version = "v0.8.0",
122+
)
123+
go_repository(
124+
name = "org_golang_x_term",
125+
importpath = "golang.org/x/term",
126+
sum = "h1:n5xxQn2i3PC0yLAbjTpNT85q/Kgzcr2gIoX9OrJUols=",
127+
version = "v0.8.0",
128+
)
129+
go_repository(
130+
name = "org_golang_x_text",
131+
importpath = "golang.org/x/text",
132+
sum = "h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE=",
133+
version = "v0.9.0",
109134
)

builtins.go

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ package jsonnet
1919
import (
2020
"bytes"
2121
"crypto/md5"
22+
"crypto/sha1"
23+
"crypto/sha256"
24+
"crypto/sha512"
2225
"encoding/base64"
2326
"encoding/hex"
2427
"encoding/json"
@@ -31,6 +34,7 @@ import (
3134
"strings"
3235

3336
"github.com/google/go-jsonnet/ast"
37+
"golang.org/x/crypto/sha3"
3438
)
3539

3640
func builtinPlus(i *interpreter, x, y value) (value, error) {
@@ -916,6 +920,42 @@ func builtinMd5(i *interpreter, x value) (value, error) {
916920
return makeValueString(hex.EncodeToString(hash[:])), nil
917921
}
918922

923+
func builtinSha1(i *interpreter, x value) (value, error) {
924+
str, err := i.getString(x)
925+
if err != nil {
926+
return nil, err
927+
}
928+
hash := sha1.Sum([]byte(str.getGoString()))
929+
return makeValueString(hex.EncodeToString(hash[:])), nil
930+
}
931+
932+
func builtinSha256(i *interpreter, x value) (value, error) {
933+
str, err := i.getString(x)
934+
if err != nil {
935+
return nil, err
936+
}
937+
hash := sha256.Sum256([]byte(str.getGoString()))
938+
return makeValueString(hex.EncodeToString(hash[:])), nil
939+
}
940+
941+
func builtinSha512(i *interpreter, x value) (value, error) {
942+
str, err := i.getString(x)
943+
if err != nil {
944+
return nil, err
945+
}
946+
hash := sha512.Sum512([]byte(str.getGoString()))
947+
return makeValueString(hex.EncodeToString(hash[:])), nil
948+
}
949+
950+
func builtinSha3(i *interpreter, x value) (value, error) {
951+
str, err := i.getString(x)
952+
if err != nil {
953+
return nil, err
954+
}
955+
hash := sha3.Sum512([]byte(str.getGoString()))
956+
return makeValueString(hex.EncodeToString(hash[:])), nil
957+
}
958+
919959
func builtinBase64(i *interpreter, input value) (value, error) {
920960
var byteArr []byte
921961

@@ -1327,6 +1367,15 @@ func builtinEqualsIgnoreCase(i *interpreter, sv1, sv2 value) (value, error) {
13271367
return makeValueBoolean(strings.EqualFold(s1.getGoString(), s2.getGoString())), nil
13281368
}
13291369

1370+
func builtinTrim(i *interpreter, strv value) (value, error) {
1371+
str, err := i.getString(strv)
1372+
if err != nil {
1373+
return nil, err
1374+
}
1375+
sStr := str.getGoString()
1376+
return makeValueString(strings.TrimSpace(sStr)), nil
1377+
}
1378+
13301379
func base64DecodeGoBytes(i *interpreter, str string) ([]byte, error) {
13311380
strLen := len(str)
13321381
if strLen%4 != 0 {
@@ -2043,6 +2092,30 @@ func builtinSum(i *interpreter, arrv value) (value, error) {
20432092
return makeValueNumber(sum), nil
20442093
}
20452094

2095+
func builtinAvg(i *interpreter, arrv value) (value, error) {
2096+
arr, err := i.getArray(arrv)
2097+
if err != nil {
2098+
return nil, err
2099+
}
2100+
2101+
len := float64(arr.length())
2102+
if len == 0 {
2103+
return nil, i.Error("Cannot calculate average of an empty array.")
2104+
}
2105+
2106+
sumValue, err := builtinSum(i, arrv)
2107+
if err != nil {
2108+
return nil, err
2109+
}
2110+
sum, err := i.getNumber(sumValue)
2111+
if err != nil {
2112+
return nil, err
2113+
}
2114+
2115+
avg := sum.value/len
2116+
return makeValueNumber(avg), nil
2117+
}
2118+
20462119
func builtinContains(i *interpreter, arrv value, ev value) (value, error) {
20472120
arr, err := i.getArray(arrv)
20482121
if err != nil {
@@ -2427,6 +2500,10 @@ var funcBuiltins = buildBuiltinMap([]builtin{
24272500
&binaryBuiltin{name: "pow", function: builtinPow, params: ast.Identifiers{"x", "n"}},
24282501
&binaryBuiltin{name: "modulo", function: builtinModulo, params: ast.Identifiers{"x", "y"}},
24292502
&unaryBuiltin{name: "md5", function: builtinMd5, params: ast.Identifiers{"s"}},
2503+
&unaryBuiltin{name: "sha1", function: builtinSha1, params: ast.Identifiers{"s"}},
2504+
&unaryBuiltin{name: "sha256", function: builtinSha256, params: ast.Identifiers{"s"}},
2505+
&unaryBuiltin{name: "sha512", function: builtinSha512, params: ast.Identifiers{"s"}},
2506+
&unaryBuiltin{name: "sha3", function: builtinSha3, params: ast.Identifiers{"s"}},
24302507
&binaryBuiltin{name: "xnor", function: builtinXnor, params: ast.Identifiers{"x", "y"}},
24312508
&binaryBuiltin{name: "xor", function: builtinXor, params: ast.Identifiers{"x", "y"}},
24322509
&binaryBuiltin{name: "lstripChars", function: builtinLstripChars, params: ast.Identifiers{"str", "chars"}},
@@ -2437,6 +2514,7 @@ var funcBuiltins = buildBuiltinMap([]builtin{
24372514
&ternaryBuiltin{name: "strReplace", function: builtinStrReplace, params: ast.Identifiers{"str", "from", "to"}},
24382515
&unaryBuiltin{name: "isEmpty", function: builtinIsEmpty, params: ast.Identifiers{"str"}},
24392516
&binaryBuiltin{name: "equalsIgnoreCase", function: builtinEqualsIgnoreCase, params: ast.Identifiers{"str1", "str2"}},
2517+
&unaryBuiltin{name: "trim", function: builtinTrim, params: ast.Identifiers{"str"}},
24402518
&unaryBuiltin{name: "base64Decode", function: builtinBase64Decode, params: ast.Identifiers{"str"}},
24412519
&unaryBuiltin{name: "base64DecodeBytes", function: builtinBase64DecodeBytes, params: ast.Identifiers{"str"}},
24422520
&unaryBuiltin{name: "parseInt", function: builtinParseInt, params: ast.Identifiers{"str"}},
@@ -2454,6 +2532,7 @@ var funcBuiltins = buildBuiltinMap([]builtin{
24542532
&generalBuiltin{name: "maxArray", function: builtinMaxArray, params: []generalBuiltinParameter{{name: "arr"}, {name: "keyF", defaultValue: functionID}}},
24552533
&unaryBuiltin{name: "native", function: builtinNative, params: ast.Identifiers{"x"}},
24562534
&unaryBuiltin{name: "sum", function: builtinSum, params: ast.Identifiers{"arr"}},
2535+
&unaryBuiltin{name: "avg", function: builtinAvg, params: ast.Identifiers{"arr"}},
24572536
&binaryBuiltin{name: "contains", function: builtinContains, params: ast.Identifiers{"arr", "elem"}},
24582537

24592538
// internal

c-bindings/BUILD.bazel

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ go_library(
2222
],
2323
cgo = True,
2424
copts = ["-Wall -Icpp-jsonnet/include"], # keep
25-
cxxopts = ["-std=c++11"],
25+
cxxopts = ["-std=c++11 -Wall -Icpp-jsonnet/include"],
2626
importpath = "github.com/google/go-jsonnet/c-bindings",
2727
visibility = ["//visibility:private"],
2828
deps = [

cmd/wasm/BUILD.bazel

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,16 @@ load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library")
22

33
go_library(
44
name = "go_default_library",
5-
srcs = [
6-
"main.go",
7-
],
5+
srcs = ["main.go"],
86
importpath = "github.com/google/go-jsonnet/cmd/wasm",
97
visibility = ["//visibility:private"],
10-
deps = [
11-
"//:go_default_library",
12-
"//internal/formatter:go_default_library",
13-
],
8+
deps = select({
9+
"@io_bazel_rules_go//go/platform:js_wasm": [
10+
"//:go_default_library",
11+
"//internal/formatter:go_default_library",
12+
],
13+
"//conditions:default": [],
14+
}),
1415
)
1516

1617
go_binary(

go.mod

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ require (
1111
require (
1212
github.com/mattn/go-colorable v0.1.8 // indirect
1313
github.com/mattn/go-isatty v0.0.12 // indirect
14-
golang.org/x/sys v0.1.0 // indirect
14+
golang.org/x/crypto v0.9.0 // indirect
15+
golang.org/x/sys v0.8.0 // indirect
1516
gopkg.in/yaml.v2 v2.2.7 // indirect
1617
)

go.sum

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,14 @@ github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNX
1919
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
2020
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
2121
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
22+
golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g=
23+
golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0=
2224
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
2325
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
2426
golang.org/x/sys v0.1.0 h1:kunALQeHf1/185U1i0GOB/fy1IPRDDpuoOOqRReG57U=
2527
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
28+
golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU=
29+
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
2630
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
2731
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
2832
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=

linter/internal/types/stdlib.go

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ func prepareStdlib(g *typeGraph) {
9595
"format": g.newSimpleFuncType(stringType, "str", "vals"),
9696
"isEmpty": g.newSimpleFuncType(boolType, "str"),
9797
"equalsIgnoreCase": g.newSimpleFuncType(boolType, "str1", "str2"),
98+
"trim": g.newSimpleFuncType(stringType, "str"),
9899
// TODO(sbarzowski) Fix when they match the documentation
99100
"escapeStringBash": g.newSimpleFuncType(stringType, "str_"),
100101
"escapeStringDollars": g.newSimpleFuncType(stringType, "str_"),
@@ -148,11 +149,11 @@ func prepareStdlib(g *typeGraph) {
148149
"minArray": g.newFuncType(anyArrayType, []ast.Parameter{required("arr"), optional("keyF")}),
149150
"maxArray": g.newFuncType(anyArrayType, []ast.Parameter{required("arr"), optional("keyF")}),
150151
"contains": g.newSimpleFuncType(boolType, "arr", "elem"),
151-
// TODO these need test cases written by someone who understands how to make them
152-
"all": g.newSimpleFuncType(boolArrayType, "arr"),
153-
"any": g.newSimpleFuncType(boolArrayType, "arr"),
154-
"remove": g.newSimpleFuncType(anyArrayType, "arr", "elem"),
155-
"removeAt": g.newSimpleFuncType(anyArrayType, "arr", "i"),
152+
"avg": g.newSimpleFuncType(numberType, "arr"),
153+
"all": g.newSimpleFuncType(boolArrayType, "arr"),
154+
"any": g.newSimpleFuncType(boolArrayType, "arr"),
155+
"remove": g.newSimpleFuncType(anyArrayType, "arr", "elem"),
156+
"removeAt": g.newSimpleFuncType(anyArrayType, "arr", "i"),
156157

157158
// Sets
158159

@@ -172,6 +173,10 @@ func prepareStdlib(g *typeGraph) {
172173
"base64DecodeBytes": g.newSimpleFuncType(numberType, "str"),
173174
"base64Decode": g.newSimpleFuncType(stringType, "str"),
174175
"md5": g.newSimpleFuncType(stringType, "s"),
176+
"sha1": g.newSimpleFuncType(stringType, "s"),
177+
"sha256": g.newSimpleFuncType(stringType, "s"),
178+
"sha512": g.newSimpleFuncType(stringType, "s"),
179+
"sha3": g.newSimpleFuncType(stringType, "s"),
175180

176181
// JSON Merge Patch
177182

0 commit comments

Comments
 (0)