Skip to content

Commit 8c9adca

Browse files
committed
ci: relayer container build
Towards #465. Here we define a container image that wraps the upstream cosmos/relayer image with the custom scripting for bootstrapping clients on the Penumbra testnet and preview networks. No other chain configs are part of this container image as of yet. The container image will be publicly available as `ghcr.io/penumbra-zone/relayer`. It isn't yet deployed to the cluster: that'll come next.
1 parent aab8b13 commit 8c9adca

File tree

6 files changed

+98
-12
lines changed

6 files changed

+98
-12
lines changed

.dockerignore

+6-10
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
1-
notes/**
2-
.github
3-
.firebaserc
4-
theme
5-
book.toml
6-
*.md
7-
Dockerfile
8-
docker-compose.yml
9-
*.json
10-
target/**
1+
docs/
2+
.github/
3+
target/**
4+
5+
# We'll generate relayer configs dynamically for now
6+
deployments/relayer/configs/*

.github/workflows/containers.yml

+39
Original file line numberDiff line numberDiff line change
@@ -95,3 +95,42 @@ jobs:
9595
push: true
9696
tags: ${{ steps.meta.outputs.tags }}
9797
labels: ${{ steps.meta.outputs.labels }}
98+
99+
build-and-push-relayer:
100+
runs-on: ubuntu-latest
101+
permissions:
102+
contents: read
103+
packages: write
104+
105+
steps:
106+
- name: Checkout repository
107+
uses: actions/checkout@v3
108+
109+
- name: Log in to the Docker Hub container registry (for pulls)
110+
uses: docker/login-action@v2
111+
with:
112+
username: ${{ secrets.DOCKERHUB_USERNAME }}
113+
password: ${{ secrets.DOCKERHUB_TOKEN }}
114+
115+
- name: Log in to the GitHub container registry (for pushes)
116+
uses: docker/login-action@v2
117+
with:
118+
registry: ghcr.io
119+
username: ${{ github.actor }}
120+
password: ${{ secrets.GITHUB_TOKEN }}
121+
122+
- name: Extract metadata (tags, labels) for Docker
123+
id: meta
124+
uses: docker/metadata-action@v4
125+
with:
126+
images: ghcr.io/penumbra-zone/relayer
127+
128+
- name: Build and push Docker image
129+
uses: docker/build-push-action@v3
130+
with:
131+
context: .
132+
platforms: linux/amd64
133+
file: deployments/containerfiles/Dockerfile-relayer
134+
push: true
135+
tags: ${{ steps.meta.outputs.tags }}
136+
labels: ${{ steps.meta.outputs.labels }}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
FROM ghcr.io/cosmos/relayer:main AS upstream
2+
FROM docker.io/debian:stable
3+
4+
# Normal user config build args
5+
ARG UID=1000
6+
ARG GID=1000
7+
ARG USERNAME=penumbra
8+
9+
# Install apt deps.
10+
RUN apt-get update && apt-get install -y \
11+
gettext-base \
12+
curl \
13+
jq \
14+
&& rm -r /var/lib/apt/lists
15+
16+
# Copy rly binary from upstream image
17+
COPY --from=upstream /bin/rly /bin/rly
18+
19+
# Create normal user account
20+
RUN groupadd -g ${GID} ${USERNAME} && useradd -m -d /home/${USERNAME} -g ${GID} -u ${UID} ${USERNAME}
21+
22+
# Prepare custom config script
23+
RUN mkdir -p /usr/src/penumbra-relayer
24+
COPY deployments/relayer/ /usr/src/penumbra-relayer/
25+
WORKDIR /usr/src/penumbra-relayer
26+
RUN chown -R ${USERNAME}:${USERNAME} /usr/src/penumbra-relayer
27+
USER ${USERNAME}
28+
ENTRYPOINT ["/usr/src/penumbra-relayer/entrypoint.sh"]

deployments/relayer/configs/penumbra-preview.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"type": "penumbra",
33
"value": {
44
"key": "default",
5-
"chain-id": "penumbra-testnet-pasiphae-fceecc9b",
5+
"chain-id": "penumbra-testnet-pasiphae-5872bf50",
66
"rpc-addr": "https://rpc.testnet-preview.penumbra.zone:443",
77
"account-prefix": "penumbrav2t",
88
"keyring-backend": "test",

deployments/relayer/configure-relayer

+2-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ rly chains add-dir configs/
1717
# Error: key default not found on src chain penumbra-testnet-carme-dac8be27
1818
for chain in $(rly chains list --json | jq 'keys | join("\n")' -r) ; do
1919
>&2 echo "Generating key for $chain"
20-
rly keys add "$chain" default
20+
# We silence output to avoid dumping seed phrases to screen/logging.
21+
rly keys add "$chain" default > /dev/null
2122
done
2223

2324
function create_paths() {

deployments/relayer/entrypoint.sh

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#!/bin/bash
2+
# Container entrypoint for running an IBC relayer for Penumbra,
3+
# specifically between penumbra-testnet and penumbra-preview.
4+
set -euo pipefail
5+
6+
7+
# Generate latest configs, polling chain id from RPC endpoints
8+
cd /usr/src/penumbra-relayer || exit 1
9+
./generate-configs preview
10+
./generate-configs testnet
11+
12+
# Generate relayer YAML config, specifying Penumbra path.
13+
./configure-relayer
14+
rly --debug transact link penumbra_path
15+
cat <<EOM
16+
##############################################
17+
Finished configuring the relayer for Penumbra!
18+
Starting service...
19+
##############################################
20+
EOM
21+
# Run the relayer as a blocking service
22+
exec rly start penumbra_path

0 commit comments

Comments
 (0)