Skip to content

Commit cc8bbfc

Browse files
authored
Merge branch 'main' into cre-1320
2 parents 60d0c72 + 36f3382 commit cc8bbfc

File tree

12 files changed

+165
-57
lines changed

12 files changed

+165
-57
lines changed

.github/workflows/golangci_lint.yml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
11
name: Golangci-lint
22

3-
on: [pull_request]
3+
on: [pull_request, merge_group]
44

55
jobs:
66
golangci-lint:
7+
# Avoid running in merge queue since we run in PR's and have an optional
8+
# label to skip lint issues on a PR which would be ignored in the merge queue.
9+
if: ${{ github.event_name != 'merge_group' }}
710
runs-on: ubuntu-latest
811
permissions:
912
id-token: write
1013
contents: read
1114
actions: read
15+
pull-requests: read
1216
steps:
1317
- name: Checkout code
1418
uses: actions/checkout@v5

.github/workflows/keystore.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: Keystore Checks
22
permissions:
33
contents: read
44

5-
on: push
5+
on: [push, merge_group]
66

77
jobs:
88
changes:

.github/workflows/pkg.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: PKG Build and Test
22

3-
on: [push]
3+
on: [push, merge_group]
44

55
jobs:
66
build-test:

observability-lib/grafana/overrides.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,13 @@ func NewMinWidthProperty(value float64) *Property {
163163
}
164164
}
165165

166+
func NewLineWidthProperty(value float64) *Property {
167+
return &Property{
168+
ID: "custom.lineWidth",
169+
Value: value,
170+
}
171+
}
172+
166173
type CellOptionsMode string
167174

168175
const (

pkg/http/http.go

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,18 @@ import (
1010
"github.com/smartcontractkit/chainlink-common/pkg/logger"
1111
)
1212

13+
type noOpResponseWriter struct{}
14+
15+
func (w *noOpResponseWriter) Header() http.Header {
16+
return http.Header{}
17+
}
18+
19+
func (w *noOpResponseWriter) Write(b []byte) (int, error) {
20+
return len(b), nil
21+
}
22+
23+
func (w *noOpResponseWriter) WriteHeader(statusCode int) {}
24+
1325
type clientConfig interface {
1426
URL() url.URL // DatabaseURL
1527
}
@@ -72,7 +84,10 @@ func (h *Request) SendRequestReader() (responseBody io.ReadCloser, statusCode in
7284
elapsed := time.Since(start)
7385
logger.Sugared(h.Logger).Tracew(fmt.Sprintf("http adapter got %v in %s", statusCode, elapsed), "statusCode", statusCode, "timeElapsedSeconds", elapsed)
7486

75-
source := http.MaxBytesReader(nil, r.Body, h.Config.SizeLimit)
87+
var source io.ReadCloser = r.Body
88+
if h.Config.SizeLimit > 0 {
89+
source = http.MaxBytesReader(&noOpResponseWriter{}, r.Body, h.Config.SizeLimit)
90+
}
7691

7792
return source, statusCode, r.Header, nil
7893
}

pkg/http/http_test.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,3 +55,31 @@ func (t *mockTransport) RoundTrip(req *netHttp.Request) (*netHttp.Response, erro
5555
response.Body = io.NopCloser(strings.NewReader(responseBody))
5656
return response, nil
5757
}
58+
59+
func TestSendRequestReader_WithSizeLimit(t *testing.T) {
60+
t.Parallel()
61+
62+
client := NewUnrestrictedClient()
63+
client.Transport = newMockTransport()
64+
65+
netReq, err := netHttp.NewRequestWithContext(t.Context(), "GET", "http://localhost", bytes.NewReader([]byte{}))
66+
assert.NoError(t, err)
67+
68+
req := &Request{
69+
Client: client,
70+
Request: netReq,
71+
Config: RequestConfig{SizeLimit: 100},
72+
Logger: logger.Nop(),
73+
}
74+
75+
reader, statusCode, headers, err := req.SendRequestReader()
76+
assert.NoError(t, err)
77+
assert.Equal(t, 200, statusCode)
78+
assert.Equal(t, "application/json", headers.Get("Content-Type"))
79+
80+
// Verify reader works
81+
body, err := io.ReadAll(reader)
82+
assert.NoError(t, err)
83+
assert.Equal(t, `{"foo":123}`, string(body))
84+
assert.NoError(t, reader.Close())
85+
}

pkg/settings/cresettings/defaults.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
"LogLineLimit": "1kb",
4343
"LogEventLimit": "1000",
4444
"CRONTrigger": {
45+
"FastestScheduleInterval": "30s",
4546
"RateLimit": "every30s:1"
4647
},
4748
"HTTPTrigger": {

pkg/settings/cresettings/defaults.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ LogLineLimit = '1kb'
4343
LogEventLimit = '1000'
4444

4545
[PerWorkflow.CRONTrigger]
46+
FastestScheduleInterval = '30s'
4647
RateLimit = 'every30s:1'
4748

4849
[PerWorkflow.HTTPTrigger]

pkg/settings/cresettings/settings.go

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,14 @@ import (
1616
. "github.com/smartcontractkit/chainlink-common/pkg/settings"
1717
)
1818

19-
func init() {
20-
if v, ok := os.LookupEnv("CL_CRE_SETTINGS_DEFAULT"); ok {
19+
const (
20+
envNameSettings = "CL_CRE_SETTINGS"
21+
envNameSettingsDefault = "CL_CRE_SETTINGS_DEFAULT"
22+
)
23+
24+
func init() { reinit() }
25+
func reinit() {
26+
if v, ok := os.LookupEnv(envNameSettingsDefault); ok {
2127
err := json.Unmarshal([]byte(v), &Default)
2228
if err != nil {
2329
log.Fatalf("failed to initialize defaults: %v", err)
@@ -29,7 +35,7 @@ func init() {
2935
}
3036
Config = Default
3137

32-
if v, ok := os.LookupEnv("CL_CRE_SETTINGS"); ok {
38+
if v, ok := os.LookupEnv(envNameSettings); ok {
3339
DefaultGetter, err = NewJSONGetter([]byte(v))
3440
if err != nil {
3541
log.Fatalf("failed to initialize settings: %v", err)
@@ -99,7 +105,8 @@ var Default = Schema{
99105
LogEventLimit: Int(1_000),
100106

101107
CRONTrigger: cronTrigger{
102-
RateLimit: Rate(rate.Every(30*time.Second), 1),
108+
FastestScheduleInterval: Duration(30 * time.Second),
109+
RateLimit: Rate(rate.Every(30*time.Second), 1),
103110
},
104111
HTTPTrigger: httpTrigger{
105112
RateLimit: Rate(rate.Every(30*time.Second), 3),
@@ -214,6 +221,7 @@ type Workflows struct {
214221
}
215222

216223
type cronTrigger struct {
224+
FastestScheduleInterval Setting[time.Duration]
217225
// Deprecated: to be removed
218226
RateLimit Setting[config.Rate]
219227
}

pkg/settings/cresettings/settings_test.go

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
"golang.org/x/time/rate"
1616

1717
"github.com/smartcontractkit/chainlink-common/pkg/config"
18+
"github.com/smartcontractkit/chainlink-common/pkg/contexts"
1819
)
1920

2021
var update = flag.Bool("update", false, "update the golden files of this test")
@@ -110,3 +111,50 @@ func TestSchema_Unmarshal(t *testing.T) {
110111
assert.Equal(t, uint64(500000), cfg.PerWorkflow.ChainWrite.EVM.TransactionGasLimit.DefaultValue)
111112
assert.Equal(t, 3, cfg.PerWorkflow.ChainRead.CallLimit.DefaultValue)
112113
}
114+
115+
func TestDefaultGetter(t *testing.T) {
116+
limit := Default.PerWorkflow.HTTPAction.CallLimit
117+
118+
ctx := contexts.WithCRE(t.Context(), contexts.CRE{Owner: "owner-id", Workflow: "foo"})
119+
overrideCtx := contexts.WithCRE(t.Context(), contexts.CRE{Owner: "owner-id", Workflow: "test-wf-id"})
120+
121+
// Default 5
122+
got, err := limit.GetOrDefault(ctx, DefaultGetter)
123+
require.NoError(t, err)
124+
require.Equal(t, 5, got)
125+
126+
// No override
127+
got, err = limit.GetOrDefault(overrideCtx, DefaultGetter)
128+
require.NoError(t, err)
129+
require.Equal(t, 5, got)
130+
131+
t.Cleanup(reinit) // restore default vars
132+
t.Setenv(envNameSettings, `{
133+
"workflow": {
134+
"test-wf-id": {
135+
"PerWorkflow": {
136+
"HTTPAction": {
137+
"CallLimit": "20"
138+
}
139+
}
140+
}
141+
}
142+
}`)
143+
reinit() // set default vars
144+
145+
_ = `
146+
[workflow.test-wf-id]
147+
PerWorkflow.HTTPAction.CallLimit = 20
148+
`
149+
150+
// Default unchanged
151+
got, err = limit.GetOrDefault(ctx, DefaultGetter)
152+
require.NoError(t, err)
153+
require.Equal(t, 5, got)
154+
155+
// Override applied
156+
got, err = limit.GetOrDefault(overrideCtx, DefaultGetter)
157+
require.NoError(t, err)
158+
require.Equal(t, 20, got)
159+
160+
}

0 commit comments

Comments
 (0)