Skip to content

Commit 0dc7b5f

Browse files
committed
ci: solana deploy
1 parent 95f4f61 commit 0dc7b5f

File tree

8 files changed

+191
-12
lines changed

8 files changed

+191
-12
lines changed

Tiltfile

+38-8
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,51 @@
1-
load('ext://namespace', 'namespace_create')
1+
load('ext://namespace', 'namespace_create', 'namespace_inject')
22
load('ext://git_resource', 'git_checkout')
33

44
git_checkout('https://github.com/wormhole-foundation/wormhole.git#main', '.wormhole/')
55

66
load(".wormhole/Tiltfile", "namespace", "k8s_yaml_with_ns")
77

8+
# Copied from .wormhole/Tiltfile, as this setup will extend the `solana-contract` image in order to inject the .so at startup
89
docker_build(
9-
ref = "ntt-ci",
10-
context = ".",
11-
only = ["./ci_tests"],
12-
dockerfile = "Dockerfile",
10+
ref = "bridge-client",
11+
context = ".wormhole/",
12+
only = ["./proto", "./solana", "./clients"],
13+
dockerfile = ".wormhole/solana/Dockerfile.client",
14+
# Ignore target folders from local (non-container) development.
15+
ignore = [".wormhole/solana/*/target"],
16+
)
17+
docker_build(
18+
ref = "solana-contract",
19+
context = ".wormhole/solana",
20+
dockerfile = ".wormhole/solana/Dockerfile",
21+
target = "builder",
22+
build_args = {"BRIDGE_ADDRESS": "Bridge1p5gheXUvJ6jGWGeCsgPKgnE3YgdGKRVCMY9o"}
23+
)
24+
# Solana deploy
25+
docker_build(
26+
ref = "ntt-solana-contract",
27+
context = "./solana/",
28+
dockerfile = "./solana/Dockerfile",
29+
)
30+
k8s_yaml_with_ns("./solana/solana-devnet.yaml")
31+
k8s_resource(
32+
"solana-devnet",
33+
labels = ["anchor-ntt"],
34+
port_forwards = [
35+
port_forward(8899, name = "Solana RPC [:8899]"),
36+
port_forward(8900, name = "Solana WS [:8900]"),
37+
],
1338
)
1439

15-
k8s_yaml_with_ns("ci.yaml")
16-
40+
# CI tests
41+
docker_build(
42+
ref = "ntt-ci",
43+
context = "./ci_tests",
44+
dockerfile = "./ci_tests/Dockerfile",
45+
)
46+
k8s_yaml_with_ns("./ci_tests/ci.yaml")
1747
k8s_resource(
1848
"ntt-ci-tests",
1949
labels = ["ntt"],
20-
resource_deps = ["eth-devnet", "eth-devnet2", "guardian", "relayer-engine"],
50+
resource_deps = ["eth-devnet", "eth-devnet2", "solana-devnet", "guardian", "relayer-engine"],
2151
)
File renamed without changes.

Dockerfile ci_tests/Dockerfile

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
FROM node:20.11.1-alpine@sha256:f4c96a28c0b2d8981664e03f461c2677152cd9a756012ffa8e2c6727427c2bda
22

3-
COPY ci_tests/package.json ci_tests/package-lock.json ./ci_tests/
3+
COPY package.json package-lock.json ./
44
RUN --mount=type=cache,uid=1000,gid=1000,target=/home/node/.npm \
5-
npm ci --prefix ci_tests
6-
COPY ci_tests ./ci_tests
5+
npm ci
6+
COPY . ./

ci.yaml ci_tests/ci.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ spec:
1313
command:
1414
- /bin/sh
1515
- -c
16-
- 'npm run go --prefix ci_tests && echo "done!" && touch /success'
16+
- 'npm run go && echo "done!" && touch /success'
1717
readinessProbe:
1818
exec:
1919
command:

solana/.dockerignore

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
**/target
2+
**/bundler
3+
**/nodejs
4+
*.md
5+
artifacts-*
6+
bin
7+
legacy
8+
node_modules

solana/Dockerfile

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
FROM backpackapp/build:v0.29.0@sha256:9aee169b2d8b89b4a4243419ae35c176773136e78d751b3e439eff692c9c1293 as anchor
2+
3+
WORKDIR /usr/src/anchor-ntt/
4+
5+
COPY Anchor.toml Anchor.toml
6+
COPY Cargo.lock Cargo.lock
7+
COPY Cargo.toml Cargo.toml
8+
COPY modules modules
9+
COPY programs programs
10+
11+
ENV RUST_BACKTRACE=1
12+
13+
FROM anchor AS builder
14+
15+
RUN mkdir -p /opt/solana/deps
16+
17+
RUN --mount=type=cache,target=/opt/solana/deps/target,id=build_anchor_ntt_target \
18+
--mount=type=cache,target=/usr/local/cargo/registry,id=cargo_registry \
19+
--mount=type=cache,target=.anchor,id=anchor_cache \
20+
cargo build-sbf --no-default-features --features tilt-devnet
21+
22+
RUN cp ./target/sbf-solana-solana/release/example_native_token_transfers.so /opt/solana/deps/example_native_token_transfers.so
23+
RUN cp ./target/sbf-solana-solana/release/wormhole_governance.so /opt/solana/deps/wormhole_governance.so
24+
25+
COPY --from=solana-contract /opt/solana/deps/bridge.so /opt/solana/deps/bridge.so
26+
COPY --from=solana-contract /opt/solana/deps/token_bridge.so /opt/solana/deps/token_bridge.so
27+
COPY --from=solana-contract /opt/solana/deps/nft_bridge.so /opt/solana/deps/nft_bridge.so
28+
COPY --from=solana-contract /opt/solana/deps/cpi_poster.so /opt/solana/deps/cpi_poster.so
29+
COPY --from=solana-contract /opt/solana/deps/mpl_token_metadata.so /opt/solana/deps/mpl_token_metadata.so
30+
COPY --from=solana-contract /opt/solana/deps/wormhole_migration.so /opt/solana/deps/wormhole_migration.so

solana/solana-devnet.yaml

+110
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
---
2+
apiVersion: v1
3+
kind: Service
4+
metadata:
5+
name: solana-devnet
6+
labels:
7+
app: solana-devnet
8+
spec:
9+
ports:
10+
- port: 8899
11+
name: rpc
12+
protocol: TCP
13+
- port: 9900
14+
name: faucet
15+
protocol: TCP
16+
clusterIP: None
17+
selector:
18+
app: solana-devnet
19+
---
20+
apiVersion: apps/v1
21+
kind: StatefulSet
22+
metadata:
23+
name: solana-devnet
24+
spec:
25+
selector:
26+
matchLabels:
27+
app: solana-devnet
28+
serviceName: solana-devnet
29+
replicas: 1
30+
template:
31+
metadata:
32+
labels:
33+
app: solana-devnet
34+
spec:
35+
terminationGracePeriodSeconds: 1
36+
containers:
37+
- name: solana-devnet
38+
image: ntt-solana-contract
39+
command:
40+
- solana-test-validator
41+
- --bpf-program
42+
- Bridge1p5gheXUvJ6jGWGeCsgPKgnE3YgdGKRVCMY9o
43+
- /opt/solana/deps/bridge.so
44+
- --bpf-program
45+
- B6RHG3mfcckmrYN1UhmJzyS1XX3fZKbkeUcpJe9Sy3FE
46+
- /opt/solana/deps/token_bridge.so
47+
- --bpf-program
48+
- NFTWqJR8YnRVqPDvTJrYuLrQDitTG5AScqbeghi4zSA
49+
- /opt/solana/deps/nft_bridge.so
50+
- --bpf-program
51+
- CP1co2QMMoDPbsmV7PGcUTLFwyhgCgTXt25gLQ5LewE1
52+
- /opt/solana/deps/cpi_poster.so
53+
- --bpf-program
54+
- metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s
55+
- /opt/solana/deps/mpl_token_metadata.so
56+
- --bpf-program
57+
- Ex9bCdVMSfx7EzB3pgSi2R4UHwJAXvTw18rBQm5YQ8gK
58+
- /opt/solana/deps/wormhole_migration.so
59+
- --upgradeable-program
60+
- nttiK1SepaQt6sZ4WGW5whvc9tEnGXGxuKeptcQPCcS
61+
- /opt/solana/deps/example_native_token_transfers.so
62+
- 6sbzC1eH4FTujJXWj51eQe25cYvr4xfXbJ1vAj7j2k5J
63+
- -q
64+
ports:
65+
- containerPort: 8001
66+
name: gossip
67+
protocol: UDP
68+
- containerPort: 8003
69+
name: tpu
70+
protocol: UDP
71+
- containerPort: 8004
72+
name: tpufwd
73+
protocol: UDP
74+
- containerPort: 8000
75+
name: tvu
76+
protocol: UDP
77+
- containerPort: 8002
78+
name: tvufwd
79+
protocol: UDP
80+
- containerPort: 8006
81+
name: repair
82+
protocol: UDP
83+
- containerPort: 8007
84+
name: serverepair
85+
protocol: UDP
86+
- containerPort: 8899
87+
name: rpc
88+
protocol: TCP
89+
- containerPort: 8900
90+
name: pubsub
91+
protocol: TCP
92+
- containerPort: 9900
93+
name: faucet
94+
protocol: TCP
95+
readinessProbe:
96+
httpGet:
97+
port: rpc
98+
path: /health
99+
periodSeconds: 1
100+
- name: setup
101+
image: bridge-client
102+
command:
103+
- /bin/bash
104+
- -c
105+
- "cd /usr/src/solana && ./devnet_setup.sh"
106+
readinessProbe:
107+
tcpSocket:
108+
port: 2000
109+
periodSeconds: 1
110+
failureThreshold: 300

solana/ts/sdk/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ export const NTT_PROGRAM_IDS = [
5050
export const WORMHOLE_PROGRAM_IDS = [
5151
"worm2ZoG2kUd4vFXhvjh93UUH596ayRfgQ2MgjNMTth", // mainnet
5252
"3u8hJUVTA4jH1wYAyUur7FFZVQ8H635K3tSHHF4ssjQ5", // testnet
53+
"Bridge1p5gheXUvJ6jGWGeCsgPKgnE3YgdGKRVCMY9o", // tilt
5354
] as const;
5455

5556
export type NttProgramId = (typeof NTT_PROGRAM_IDS)[number];

0 commit comments

Comments
 (0)