Skip to content

Commit

Permalink
Use full versioning for capabilities
Browse files Browse the repository at this point in the history
  • Loading branch information
HenryNguyen5 committed Jun 6, 2024
1 parent c7a1b00 commit 8afedb0
Show file tree
Hide file tree
Showing 26 changed files with 174 additions and 122 deletions.
1 change: 0 additions & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@ require (
go.uber.org/zap v1.26.0
golang.org/x/crypto v0.18.0
golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa
golang.org/x/mod v0.14.0
gonum.org/v1/gonum v0.14.0
google.golang.org/grpc v1.58.3
google.golang.org/protobuf v1.31.0
Expand Down
2 changes: 1 addition & 1 deletion pkg/capabilities/capabilities.go
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,7 @@ func (c CapabilityInfo) Info(ctx context.Context) (CapabilityInfo, error) {
//
// The difference between the regex within the link above and this one is that we do not use double backslashes, since
// we only needed those for JSON schema regex validation.
var idRegex = regexp.MustCompile(`^[a-z0-9_\-:]+@(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$`)
var idRegex = regexp.MustCompile(`^[a-z0-9_\-:]+@(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$`)

const (
// TODO: this length was largely picked arbitrarily.
Expand Down
18 changes: 9 additions & 9 deletions pkg/capabilities/capabilities_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,47 +15,47 @@ import (

func Test_CapabilityInfo(t *testing.T) {
ci, err := NewCapabilityInfo(
"capability-id@1",
"capability-id@1.0.0",
CapabilityTypeAction,
"This is a mock capability that doesn't do anything.",
)
require.NoError(t, err)

gotCi, err := ci.Info(tests.Context(t))
require.NoError(t, err)
require.Equal(t, ci.Version(), "1")
require.Equal(t, ci.Version(), "1.0.0")
assert.Equal(t, ci, gotCi)

ci, err = NewCapabilityInfo(
// add build metadata and sha
"capability-id@1+build.1234.sha-5678",
"capability-id@1.0.0+build.1234.sha-5678",
CapabilityTypeAction,
"This is a mock capability that doesn't do anything.",
)
require.NoError(t, err)

gotCi, err = ci.Info(tests.Context(t))
require.NoError(t, err)
require.Equal(t, ci.Version(), "1+build.1234.sha-5678")
require.Equal(t, ci.Version(), "1.0.0+build.1234.sha-5678")
assert.Equal(t, ci, gotCi)

// prerelease
ci, err = NewCapabilityInfo(
"capability-id@1-beta",
"capability-id@1.0.0-beta",
CapabilityTypeAction,
"This is a mock capability that doesn't do anything.",
)
require.NoError(t, err)

gotCi, err = ci.Info(tests.Context(t))
require.NoError(t, err)
require.Equal(t, ci.Version(), "1-beta")
require.Equal(t, ci.Version(), "1.0.0-beta")
assert.Equal(t, ci, gotCi)
}

func Test_CapabilityInfo_Invalid(t *testing.T) {
_, err := NewCapabilityInfo(
"capability-id@2",
"capability-id@2.0.0",
CapabilityType(5),
"This is a mock capability that doesn't do anything.",
)
Expand All @@ -69,7 +69,7 @@ func Test_CapabilityInfo_Invalid(t *testing.T) {
assert.ErrorContains(t, err, "invalid id")

_, err = NewCapabilityInfo(
"mock-capability@v1",
"mock-capability@v1.0.0",
CapabilityTypeAction,
"This is a mock capability that doesn't do anything.",
)
Expand All @@ -83,7 +83,7 @@ func Test_CapabilityInfo_Invalid(t *testing.T) {
assert.ErrorContains(t, err, "invalid id")

_, err = NewCapabilityInfo(
"mock-capability@1.0.1",
"mock-capability@1",
CapabilityTypeAction,
"This is a mock capability that doesn't do anything.",
)
Expand Down
2 changes: 1 addition & 1 deletion pkg/capabilities/consensus/ocr3/capability.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import (
)

const (
ocrCapabilityID = "offchain_reporting@1"
ocrCapabilityID = "offchain_reporting@1.0.0"

methodStartRequest = "start_request"
methodSendResponse = "send_response"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://github.com/smartcontractkit/chainlink/capabilities/offchain_reporting@1/root",
"$id": "https://github.com/smartcontractkit/chainlink/capabilities/offchain_reporting@1.0.0/root",
"properties": {
"config": {
"properties": {
Expand Down Expand Up @@ -99,4 +99,4 @@
"outputs"
],
"description": "OCR3 consensus exposed as a capability."
}
}
2 changes: 1 addition & 1 deletion pkg/capabilities/testdata/fixtures/validator/schema.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://github.com/smartcontractkit/chainlink/capabilities/test@1/root",
"$id": "https://github.com/smartcontractkit/chainlink/capabilities/test@1.0.0/root",
"properties": {
"config": {
"properties": {
Expand Down
2 changes: 1 addition & 1 deletion pkg/capabilities/triggers/on_demand_trigger.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import (
)

var info = capabilities.MustNewCapabilityInfo(
"on-demand-trigger@1",
"on-demand-trigger@1.0.0",
capabilities.CapabilityTypeTrigger,
"An example on-demand trigger.",
)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://github.com/smartcontractkit/chainlink/capabilities/streams-trigger@1/root",
"$id": "https://github.com/smartcontractkit/chainlink/capabilities/streams-trigger@1.0.0/root",
"properties": {
"config": {
"properties": {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://github.com/smartcontractkit/chainlink/capabilities/on-demand-trigger@1/root",
"$id": "https://github.com/smartcontractkit/chainlink/capabilities/on-demand-trigger@1.0.0/root",
"properties": {
"config": {
"properties": {},
Expand Down
2 changes: 1 addition & 1 deletion pkg/capabilities/validate_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,7 @@ func TestValidator_ValidateOutputs(t *testing.T) {

func TestValidator_GenerateSchema(t *testing.T) {
capInfo := CapabilityInfo{
ID: "test@1",
ID: "test@1.0.0",
CapabilityType: CapabilityTypeTrigger,
Description: "test description",
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ func TestCapabilitiesRegistry(t *testing.T) {

// Add capability Trigger
triggerInfo := capabilities.CapabilityInfo{
ID: "trigger-1@1",
ID: "trigger-1@1.0.0",
CapabilityType: capabilities.CapabilityTypeTrigger,
Description: "trigger-1-description",
}
Expand All @@ -190,8 +190,8 @@ func TestCapabilitiesRegistry(t *testing.T) {
err = rc.Add(tests.Context(t), testTrigger)
require.NoError(t, err)

reg.On("GetTrigger", mock.Anything, "trigger-1").Return(testTrigger, nil)
triggerCap, err := rc.GetTrigger(tests.Context(t), "trigger-1")
reg.On("GetTrigger", mock.Anything, "trigger-1@1.0.0").Return(testTrigger, nil)
triggerCap, err := rc.GetTrigger(tests.Context(t), "trigger-1@1.0.0")
require.NoError(t, err)

// Test trigger Info()
Expand All @@ -216,7 +216,7 @@ func TestCapabilitiesRegistry(t *testing.T) {

// Add capability Trigger
actionInfo := capabilities.CapabilityInfo{
ID: "action-1@2",
ID: "action-1@2.0.0",
CapabilityType: capabilities.CapabilityTypeAction,
Description: "action-1-description",
}
Expand All @@ -226,8 +226,8 @@ func TestCapabilitiesRegistry(t *testing.T) {
mockBaseCapability: &mockBaseCapability{info: actionInfo},
mockCallbackExecutable: &mockCallbackExecutable{callback: actionCallbackChan},
}
reg.On("GetAction", mock.Anything, "action-1").Return(testAction, nil)
actionCap, err := rc.GetAction(tests.Context(t), "action-1")
reg.On("GetAction", mock.Anything, "action-1@2.0.0").Return(testAction, nil)
actionCap, err := rc.GetAction(tests.Context(t), "action-1@2.0.0")
require.NoError(t, err)

testCapabilityInfo(t, actionInfo, actionCap)
Expand All @@ -252,32 +252,32 @@ func TestCapabilitiesRegistry(t *testing.T) {

// Add capability Consensus
consensusInfo := capabilities.CapabilityInfo{
ID: "consensus-1@3",
ID: "consensus-1@3.0.0",
CapabilityType: capabilities.CapabilityTypeConsensus,
Description: "consensus-1-description",
}
testConsensus := mockConsensusCapability{
mockBaseCapability: &mockBaseCapability{info: consensusInfo},
mockCallbackExecutable: &mockCallbackExecutable{},
}
reg.On("GetConsensus", mock.Anything, "consensus-1").Return(testConsensus, nil)
consensusCap, err := rc.GetConsensus(tests.Context(t), "consensus-1")
reg.On("GetConsensus", mock.Anything, "consensus-1@3.0.0").Return(testConsensus, nil)
consensusCap, err := rc.GetConsensus(tests.Context(t), "consensus-1@3.0.0")
require.NoError(t, err)

testCapabilityInfo(t, consensusInfo, consensusCap)

// Add capability Target
targetInfo := capabilities.CapabilityInfo{
ID: "target-1@1",
ID: "target-1@1.0.0",
CapabilityType: capabilities.CapabilityTypeTarget,
Description: "target-1-description",
}
testTarget := mockTargetCapability{
mockBaseCapability: &mockBaseCapability{info: targetInfo},
mockCallbackExecutable: &mockCallbackExecutable{},
}
reg.On("GetTarget", mock.Anything, "target-1").Return(testTarget, nil)
targetCap, err := rc.GetTarget(tests.Context(t), "target-1")
reg.On("GetTarget", mock.Anything, "target-1@1.0.0").Return(testTarget, nil)
targetCap, err := rc.GetTarget(tests.Context(t), "target-1@1.0.0")
require.NoError(t, err)

testCapabilityInfo(t, targetInfo, targetCap)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ func (m *mockCallback) Execute(ctx context.Context, request capabilities.Capabil

func mustMockCallback(t *testing.T, _type capabilities.CapabilityType) *mockCallback {
return &mockCallback{
BaseCapability: capabilities.MustNewCapabilityInfo(fmt.Sprintf("callback %s", _type), _type, fmt.Sprintf("a mock %s", _type)),
BaseCapability: capabilities.MustNewCapabilityInfo(fmt.Sprintf("callback-%[email protected]", _type), _type, fmt.Sprintf("a mock %s", _type)),
callback: make(chan capabilities.CapabilityResponse),
}
}
Expand Down Expand Up @@ -505,7 +505,7 @@ func (m *synchronousCallback) Execute(ctx context.Context, request capabilities.

func mustSynchronousCallback(t *testing.T, _type capabilities.CapabilityType) *synchronousCallback {
return &synchronousCallback{
BaseCapability: capabilities.MustNewCapabilityInfo(fmt.Sprintf("callback %s", _type), _type, fmt.Sprintf("a mock %s", _type)),
BaseCapability: capabilities.MustNewCapabilityInfo(fmt.Sprintf("callback-%[email protected]", _type), _type, fmt.Sprintf("a mock %s", _type)),
callback: make(chan capabilities.CapabilityResponse, 0),
executeCalled: false,
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/loop/internal/test/test.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ var (
GetConsensusID = "get-consensus-id"
GetTargetID = "get-target-id"
CapabilityInfo = capabilities.CapabilityInfo{
ID: "capability-info-id@1",
ID: "capability-info-id@1.0.0",
CapabilityType: 2,
Description: "capability-info-description",
}
Expand Down
Loading

0 comments on commit 8afedb0

Please sign in to comment.