Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
N
nebula
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
exchain
nebula
Commits
dcb10f54
Unverified
Commit
dcb10f54
authored
Dec 12, 2022
by
Matthew Slipper
Committed by
GitHub
Dec 12, 2022
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ci: op-heartbeat CI (#4377)
parent
ed796b7b
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
81 additions
and
15 deletions
+81
-15
config.yml
.circleci/config.yml
+18
-0
Dockerfile
op-heartbeat/Dockerfile
+20
-0
docker.go.work
op-heartbeat/docker.go.work
+1
-0
flags.go
op-heartbeat/flags/flags.go
+2
-4
service.go
op-heartbeat/service.go
+8
-2
service_test.go
op-heartbeat/service_test.go
+32
-9
No files found.
.circleci/config.yml
View file @
dcb10f54
...
@@ -959,6 +959,10 @@ workflows:
...
@@ -959,6 +959,10 @@ workflows:
binary_name
:
bss-core
binary_name
:
bss-core
working_directory
:
bss-core
working_directory
:
bss-core
build
:
false
build
:
false
-
go-lint-test-build
:
name
:
op-heartbeat tests
binary_name
:
op-heartbeat
working_directory
:
op-heartbeat
-
geth-tests
-
geth-tests
-
integration-tests
-
integration-tests
-
semgrep-scan
-
semgrep-scan
...
@@ -1072,6 +1076,20 @@ workflows:
...
@@ -1072,6 +1076,20 @@ workflows:
-
gcr
-
gcr
requires
:
requires
:
-
op-proposer-docker-build
-
op-proposer-docker-build
-
docker-build
:
name
:
op-heartbeat-docker-build
docker_file
:
op-heartbeat/Dockerfile
docker_name
:
op-heartbeat
docker_tags
:
<<pipeline.git.revision>>,<<pipeline.git.branch>>
docker_context
:
.
-
docker-publish
:
name
:
op-heartbeat-docker-publish
docker_name
:
op-heartbeat
docker_tags
:
<<pipeline.git.revision>>,<<pipeline.git.branch>>
context
:
-
gcr
requires
:
-
op-heartbeat-docker-build
-
hive-test
:
-
hive-test
:
name
:
hive-test-rpc
name
:
hive-test-rpc
version
:
<<pipeline.git.revision>>
version
:
<<pipeline.git.revision>>
...
...
op-heartbeat/Dockerfile
0 → 100644
View file @
dcb10f54
FROM
golang:1.18.0-alpine3.15 as builder
RUN
apk add
--no-cache
make gcc musl-dev linux-headers git jq bash
# build op-heartbeat with local monorepo go modules
COPY
./op-heartbeat/docker.go.work /app/go.work
COPY
./op-heartbeat /app/op-heartbeat
COPY
./op-node /app/op-node
COPY
./op-service /app/op-service
COPY
./.git /app/.git
WORKDIR
/app/op-heartbeat
RUN
make op-heartbeat
FROM
alpine:3.15
COPY
--from=builder /app/op-heartbeat/bin/op-heartbeat /usr/local/bin
CMD
["op-heartbeat"]
op-heartbeat/docker.go.work
View file @
dcb10f54
go 1.18
go 1.18
use (
use (
./op-heartbeat
./op-node
./op-node
./op-service
./op-service
)
)
op-heartbeat/flags/flags.go
View file @
dcb10f54
...
@@ -10,10 +10,8 @@ import (
...
@@ -10,10 +10,8 @@ import (
const
envPrefix
=
"OP_HEARTBEAT"
const
envPrefix
=
"OP_HEARTBEAT"
const
(
const
(
HTTPAddrFlagName
=
"http.addr"
HTTPAddrFlagName
=
"http.addr"
HTTPPortFlagName
=
"http.port"
HTTPPortFlagName
=
"http.port"
HTTPMaxBodySizeFlagName
=
"http.max-body-size"
AllowedChainIDsFlagName
=
"allowed-chain-ids"
)
)
var
(
var
(
...
...
op-heartbeat/service.go
View file @
dcb10f54
...
@@ -79,9 +79,11 @@ func Start(ctx context.Context, l log.Logger, cfg Config, version string) error
...
@@ -79,9 +79,11 @@ func Start(ctx context.Context, l log.Logger, cfg Config, version string) error
metrics
:=
NewMetrics
(
registry
)
metrics
:=
NewMetrics
(
registry
)
metrics
.
RecordVersion
(
version
)
metrics
.
RecordVersion
(
version
)
handler
:=
Handler
(
l
,
metrics
)
mux
:=
http
.
NewServeMux
()
mux
.
HandleFunc
(
"/healthz"
,
HealthzHandler
)
mux
.
Handle
(
"/"
,
Handler
(
l
,
metrics
))
recorder
:=
opmetrics
.
NewPromHTTPRecorder
(
registry
,
MetricsNamespace
)
recorder
:=
opmetrics
.
NewPromHTTPRecorder
(
registry
,
MetricsNamespace
)
mw
:=
opmetrics
.
NewHTTPRecordingMiddleware
(
recorder
,
handler
)
mw
:=
opmetrics
.
NewHTTPRecordingMiddleware
(
recorder
,
mux
)
server
:=
&
http
.
Server
{
server
:=
&
http
.
Server
{
Addr
:
net
.
JoinHostPort
(
cfg
.
HTTPAddr
,
strconv
.
Itoa
(
cfg
.
HTTPPort
)),
Addr
:
net
.
JoinHostPort
(
cfg
.
HTTPAddr
,
strconv
.
Itoa
(
cfg
.
HTTPPort
)),
...
@@ -125,3 +127,7 @@ func Handler(l log.Logger, metrics Metrics) http.HandlerFunc {
...
@@ -125,3 +127,7 @@ func Handler(l log.Logger, metrics Metrics) http.HandlerFunc {
w
.
WriteHeader
(
204
)
w
.
WriteHeader
(
204
)
}
}
}
}
func
HealthzHandler
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
w
.
WriteHeader
(
204
)
}
op-heartbeat/service_test.go
View file @
dcb10f54
...
@@ -5,24 +5,28 @@ import (
...
@@ -5,24 +5,28 @@ import (
"context"
"context"
"encoding/json"
"encoding/json"
"fmt"
"fmt"
"io"
"net"
"net/http"
"testing"
"time"
"github.com/ethereum-optimism/optimism/op-node/heartbeat"
"github.com/ethereum-optimism/optimism/op-node/heartbeat"
opmetrics
"github.com/ethereum-optimism/optimism/op-service/metrics"
opmetrics
"github.com/ethereum-optimism/optimism/op-service/metrics"
"github.com/ethereum/go-ethereum/log"
"github.com/ethereum/go-ethereum/log"
"github.com/stretchr/testify/require"
"github.com/stretchr/testify/require"
"io"
"net/http"
"testing"
)
)
func
TestService
(
t
*
testing
.
T
)
{
func
TestService
(
t
*
testing
.
T
)
{
httpPort
:=
freePort
(
t
)
metricsPort
:=
freePort
(
t
)
cfg
:=
Config
{
cfg
:=
Config
{
HTTPAddr
:
"127.0.0.1"
,
HTTPAddr
:
"127.0.0.1"
,
HTTPPort
:
8080
,
HTTPPort
:
httpPort
,
HTTPMaxBodySize
:
1024
*
1024
,
Metrics
:
opmetrics
.
CLIConfig
{
Metrics
:
opmetrics
.
CLIConfig
{
Enabled
:
true
,
Enabled
:
true
,
ListenAddr
:
"127.0.0.1"
,
ListenAddr
:
"127.0.0.1"
,
ListenPort
:
7300
,
ListenPort
:
metricsPort
,
},
},
}
}
...
@@ -32,6 +36,14 @@ func TestService(t *testing.T) {
...
@@ -32,6 +36,14 @@ func TestService(t *testing.T) {
exitC
<-
Start
(
ctx
,
log
.
New
(),
cfg
,
"foobar"
)
exitC
<-
Start
(
ctx
,
log
.
New
(),
cfg
,
"foobar"
)
}()
}()
// Make sure that the service properly starts
select
{
case
<-
time
.
NewTimer
(
100
*
time
.
Millisecond
)
.
C
:
// pass
case
err
:=
<-
exitC
:
t
.
Fatalf
(
"unexpected error on startup: %v"
,
err
)
}
tests
:=
[]
struct
{
tests
:=
[]
struct
{
name
string
name
string
hb
heartbeat
.
Payload
hb
heartbeat
.
Payload
...
@@ -79,13 +91,15 @@ func TestService(t *testing.T) {
...
@@ -79,13 +91,15 @@ func TestService(t *testing.T) {
t
.
Run
(
tt
.
name
,
func
(
t
*
testing
.
T
)
{
t
.
Run
(
tt
.
name
,
func
(
t
*
testing
.
T
)
{
data
,
err
:=
json
.
Marshal
(
tt
.
hb
)
data
,
err
:=
json
.
Marshal
(
tt
.
hb
)
require
.
NoError
(
t
,
err
)
require
.
NoError
(
t
,
err
)
req
,
err
:=
http
.
NewRequestWithContext
(
ctx
,
"POST"
,
"http://127.0.0.1:8080"
,
bytes
.
NewReader
(
data
))
req
,
err
:=
http
.
NewRequestWithContext
(
ctx
,
"POST"
,
fmt
.
Sprintf
(
"http://127.0.0.1:%d"
,
httpPort
)
,
bytes
.
NewReader
(
data
))
require
.
NoError
(
t
,
err
)
require
.
NoError
(
t
,
err
)
res
,
err
:=
http
.
DefaultClient
.
Do
(
req
)
res
,
err
:=
http
.
DefaultClient
.
Do
(
req
)
require
.
NoError
(
t
,
err
)
require
.
NoError
(
t
,
err
)
defer
res
.
Body
.
Close
()
require
.
Equal
(
t
,
res
.
StatusCode
,
204
)
require
.
Equal
(
t
,
res
.
StatusCode
,
204
)
metricsRes
,
err
:=
http
.
Get
(
"http://127.0.0.1:7300"
)
metricsRes
,
err
:=
http
.
Get
(
fmt
.
Sprintf
(
"http://127.0.0.1:%d"
,
metricsPort
))
require
.
NoError
(
t
,
err
)
defer
metricsRes
.
Body
.
Close
()
defer
metricsRes
.
Body
.
Close
()
require
.
NoError
(
t
,
err
)
require
.
NoError
(
t
,
err
)
metricsBody
,
err
:=
io
.
ReadAll
(
metricsRes
.
Body
)
metricsBody
,
err
:=
io
.
ReadAll
(
metricsRes
.
Body
)
...
@@ -97,3 +111,12 @@ func TestService(t *testing.T) {
...
@@ -97,3 +111,12 @@ func TestService(t *testing.T) {
cancel
()
cancel
()
require
.
NoError
(
t
,
<-
exitC
)
require
.
NoError
(
t
,
<-
exitC
)
}
}
func
freePort
(
t
*
testing
.
T
)
int
{
addr
,
err
:=
net
.
ResolveTCPAddr
(
"tcp"
,
"localhost:0"
)
require
.
NoError
(
t
,
err
)
l
,
err
:=
net
.
ListenTCP
(
"tcp"
,
addr
)
require
.
NoError
(
t
,
err
)
defer
l
.
Close
()
return
l
.
Addr
()
.
(
*
net
.
TCPAddr
)
.
Port
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment