Skip to content

Commit 2fdacf1

Browse files
authored
chore: adjust E2E for both macOSes (AArch64, x86_64) (#1205)
LW-8192
1 parent 3ee403b commit 2fdacf1

File tree

10 files changed

+96
-48
lines changed

10 files changed

+96
-48
lines changed

compose/smash/Dockerfile

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,22 @@ ARG UBUNTU_VERSION=20.04
33
FROM ubuntu:${UBUNTU_VERSION}
44

55
ARG DBSYNC_BINARY_URL="https://update-cardano-mainnet.iohk.io/cardano-db-sync/cardano-db-sync-${CARDANO_DB_SYNC_VERSION:-13.1.0.0}-linux.tar.gz"
6+
ARG DBSYNC_BINARY_URL_ARM64="https://github.com/input-output-hk/ogmios-tracker/releases/download/0.1.0/cardano-db-sync-13.1.0.0-aarch64-linux.tar.gz"
67
ENV NETWORK=${NETWORK:-"mainnet"}
78

89
RUN apt-get update && apt-get install curl -y
9-
RUN curl ${DBSYNC_BINARY_URL} --output /tmp/dbsync-binary.tar.gz &&\
10-
tar --extract --file /tmp/dbsync-binary.tar.gz --directory /bin ./cardano-smash-server &&\
11-
rm /tmp/dbsync-binary.tar.gz
10+
11+
RUN set -x ; if [ "$(uname -m)" = "aarch64" ] ; then \
12+
curl -sfL "${DBSYNC_BINARY_URL_ARM64}" --output /tmp/dbsync-binary.tar.gz &&\
13+
mkdir -p /opt/cardano-db-sync &&\
14+
tar -xzf /tmp/dbsync-binary.tar.gz -C /opt/cardano-db-sync &&\
15+
rm /tmp/dbsync-binary.tar.gz &&\
16+
ln -sf /opt/cardano-db-sync/bin/* /bin/ ;\
17+
else \
18+
curl -sfL "${DBSYNC_BINARY_URL}" --output /tmp/dbsync-binary.tar.gz &&\
19+
tar --extract --file /tmp/dbsync-binary.tar.gz --directory /bin ./cardano-smash-server &&\
20+
rm /tmp/dbsync-binary.tar.gz ;\
21+
fi
1222

1323
COPY packages/cardano-services/config/network/${NETWORK}/cardano-db-sync /config/
1424

compose/smash/init.sh

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,9 @@ USER=$(cat /run/secrets/postgres_user)
66

77
echo "postgres:5432:${DB}:${USER}:${PASSWORD}" >/config/pgpass
88

9-
_term() {
10-
kill $CHILD
11-
}
9+
export PGPASSFILE=/config/pgpass
1210

13-
trap _term SIGTERM
14-
15-
PGPASSFILE=/config/pgpass cardano-smash-server \
11+
exec cardano-smash-server \
1612
--config /config/config.json \
1713
--port 3100 \
18-
--admins /config/smash-admins.txt &
19-
20-
CHILD=$!
21-
wait "$CHILD"
14+
--admins /config/smash-admins.txt

packages/cardano-services/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
"cleanup:nm": "rm -rf node_modules",
3030
"cleanup": "rm -rf dist node_modules",
3131
"cli": "ts-node --transpile-only src/cli.ts",
32-
"compose:up": "docker compose --env-file environments/.env.$NETWORK -p cardano-services-$NETWORK -f docker-compose.yml -f ../../compose/common.yml -f ../../compose/pg-agent.yml -f ../../compose/$(uname -m).yml ${FILES:-} up",
32+
"compose:up": "__FIX_UMASK__=$(chmod -R a+r ../../compose/placeholder-secrets) docker compose --env-file environments/.env.$NETWORK -p cardano-services-$NETWORK -f docker-compose.yml -f ../../compose/common.yml -f ../../compose/pg-agent.yml -f ../../compose/$(uname -m).yml ${FILES:-} up",
3333
"compose:down": "docker compose -p cardano-services-$NETWORK -f docker-compose.yml -f ../../compose/common.yml -f ../../compose/pg-agent.yml -f ../../compose/$(uname -m).yml down -t 120",
3434
"coverage": "yarn test --coverage || true",
3535
"circular-deps:check": "madge --circular dist/cjs",

packages/e2e/.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,5 @@ node_modules
99
dist
1010
coverage
1111
.env
12+
13+
*-old-state.*/

packages/e2e/docker-compose.yml

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ services:
2222
ports:
2323
- 3001:3001
2424
volumes:
25-
- ./local-network/network-files/node-sp1/:/root/network-files/node-sp1
25+
# This breaks running in Docker Desktop for macOS, is it *really* needed? I see no usage of cardano-cli in the repo
26+
#- ./local-network/network-files/node-sp1/:/root/network-files/node-sp1
2627
- ./local-network/config:/root/config
2728
- sdk-ipc:/sdk-ipc
2829

@@ -37,7 +38,9 @@ services:
3738
NGINX_PORT: 80
3839
healthcheck:
3940
test: ['CMD-SHELL', 'wget -O /dev/null http://localhost || exit 1']
40-
timeout: 10s
41+
start_period: 5s
42+
interval: 5s
43+
timeout: 2s
4144

4245
cardano-node:
4346
depends_on:
@@ -65,6 +68,9 @@ services:
6568
- ./local-network/config/network:/config
6669

6770
cardano-submit-api:
71+
depends_on:
72+
local-testnet:
73+
condition: service_healthy
6874
volumes:
6975
- ./local-network/config/network:/config
7076

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
bin/

packages/e2e/local-network/Dockerfile

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,27 +6,41 @@ ENV DEBIAN_FRONTEND=nonintercative
66

77
WORKDIR /build
88
ARG CARDANO_NODE_BUILD_URL=https://update-cardano-mainnet.iohk.io/cardano-node-releases/cardano-node-1.35.4-linux.tar.gz
9+
ARG CARDANO_NODE_BUILD_URL_ARM64=https://github.com/input-output-hk/ogmios-tracker/releases/download/0.1.0/cardano-node-1.35.4-aarch64-linux.tar.gz
10+
911
RUN apt-get update -y && \
10-
apt-get install -y wget tar && \
11-
wget $CARDANO_NODE_BUILD_URL -O cardano-node.tar.gz && \
12-
mkdir -p bin && \
13-
tar -xzf cardano-node.tar.gz -C bin
12+
apt-get install -y wget tar curl && \
13+
if [ "$(uname -m)" = "aarch64" ] ; then \
14+
curl -fsSL "$CARDANO_NODE_BUILD_URL_ARM64" >cardano-node.tar.gz && \
15+
mkdir -p cardano-node && \
16+
tar -xzf cardano-node.tar.gz -C cardano-node ;\
17+
else \
18+
curl -fsSL "$CARDANO_NODE_BUILD_URL" >cardano-node.tar.gz && \
19+
mkdir -p cardano-node/bin && \
20+
tar -xzf cardano-node.tar.gz -C cardano-node/bin ;\
21+
fi
1422

1523
FROM ubuntu:${UBUNTU_VERSION}
1624

17-
ENV TINI_VERSION v0.19.0
18-
1925
WORKDIR /root
2026
RUN apt-get update -y && \
21-
apt-get install -y tzdata ca-certificates jq coreutils curl
27+
apt-get install -y tzdata ca-certificates jq coreutils curl wget
2228

2329
HEALTHCHECK --interval=5s --timeout=1s --retries=200 --start-period=100ms \
2430
CMD /root/scripts/get-epoch.sh | awk '{ if ($0 >= "3") exit 0; else exit 1}'
2531

2632
STOPSIGNAL SIGINT
27-
COPY --from=builder /build/bin ./bin
28-
ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini-static /tini
29-
RUN chmod +x /tini
30-
31-
COPY . .
33+
COPY --from=builder /build/cardano-node /opt/cardano-node
34+
ARG TINI_VERSION=v0.19.0
35+
RUN mkdir -p ./bin && ln -s /opt/cardano-node/bin/* ./bin/ &&\
36+
if [ "$(uname -m)" = "aarch64" ] ; then \
37+
TINI_VARIANT=static-arm64 ;\
38+
else \
39+
TINI_VARIANT=static-amd64 ;\
40+
fi &&\
41+
curl -fsSL >/tini https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini-${TINI_VARIANT} &&\
42+
chmod +x /tini
43+
44+
COPY scripts scripts
45+
COPY templates templates
3246
ENTRYPOINT ["/tini", "-g", "--", "/root/scripts/start.sh" ]

packages/e2e/local-network/scripts/make-babbage.sh

Lines changed: 40 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,29 @@ export PATH=$PWD/bin:$PATH
1414

1515
source ./scripts/nodes-configuration.sh
1616

17-
UNAME=$(uname -s) SED=
18-
case $UNAME in
19-
Darwin) SED="gsed" ;;
20-
Linux) SED="sed" ;;
21-
esac
17+
# We need this when running in Docker Desktop on macOS. `sed -i` doesn’t work well with VOLUMEs
18+
# there, unless it can create its temporary files outside of a VOLUME, which requires $TMPDIR.
19+
export TMPDIR="${TMPDIR:-/tmp}"
20+
export TMP="${TMP:-/tmp}"
21+
22+
UNAME=$(uname -s)
23+
24+
# Normal `sed -i` is a bit stubborn, and really wants to create its temporary files in the
25+
# directory of the target file. It is not a true in-place edit, and often braks permissions.
26+
# Let’s use this wrapper instead.
27+
sed_i() {
28+
local tmpfile=$(mktemp)
29+
local sed_bin=sed
30+
if [ "$UNAME" == "Darwin" ] ; then sed_bin=gsed ; fi
31+
if $sed_bin "$@" >"$tmpfile"; then
32+
cat "$tmpfile" >"${@: -1}" # Replace the last argument file (in-place file) with tmpfile content
33+
rm "$tmpfile"
34+
else
35+
echo "sed failed." >&2
36+
rm "$tmpfile"
37+
return 1
38+
fi
39+
}
2240

2341
case $(uname) in
2442
Darwin) date='gdate' ;;
@@ -108,7 +126,7 @@ cardano-cli byron genesis genesis \
108126
cp templates/babbage/alonzo-babbage-test-genesis.json "${ROOT}/genesis.alonzo.spec.json"
109127
cp templates/babbage/byron-configuration.yaml "${ROOT}/configuration.yaml"
110128

111-
$SED -i "${ROOT}/configuration.yaml" \
129+
sed_i \
112130
-e 's/Protocol: RealPBFT/Protocol: Cardano/' \
113131
-e 's|GenesisFile: genesis.json|ByronGenesisFile: genesis/byron/genesis.json|' \
114132
-e '/ByronGenesisFile/ aShelleyGenesisFile: genesis/shelley/genesis.json' \
@@ -117,7 +135,8 @@ $SED -i "${ROOT}/configuration.yaml" \
117135
-e 's/LastKnownBlockVersion-Major: 0/LastKnownBlockVersion-Major: 6/' \
118136
-e 's/LastKnownBlockVersion-Minor: 2/LastKnownBlockVersion-Minor: 0/' \
119137
-e "s/minSeverity: Info/minSeverity: ${CARDANO_NODE_LOG_LEVEL}/" \
120-
-e "s/cardano.node.ChainDB: Notice/cardano.node.ChainDB: ${CARDANO_NODE_CHAINDB_LOG_LEVEL}/"
138+
-e "s/cardano.node.ChainDB: Notice/cardano.node.ChainDB: ${CARDANO_NODE_CHAINDB_LOG_LEVEL}/" \
139+
"${ROOT}/configuration.yaml"
121140

122141
echo "" >>"${ROOT}/configuration.yaml"
123142
echo "PBftSignatureThreshold: 0.6" >>"${ROOT}/configuration.yaml"
@@ -159,7 +178,7 @@ jq --raw-output ".protocolConsts.protocolMagic = ${NETWORK_MAGIC}" "${ROOT}/gene
159178

160179
rm "${ROOT}/genesis/byron/genesis-wrong.json"
161180

162-
$SED -i "${ROOT}/genesis/shelley/genesis.json" \
181+
sed_i \
163182
-e 's/"slotLength": 1/"slotLength": 0.2/' \
164183
-e 's/"activeSlotsCoeff": 5.0e-2/"activeSlotsCoeff": 0.1/' \
165184
-e 's/"securityParam": 2160/"securityParam": 10/' \
@@ -172,7 +191,8 @@ $SED -i "${ROOT}/genesis/shelley/genesis.json" \
172191
-e 's/"major": 0/"major": 7/' \
173192
-e 's/"rho": 0.0/"rho": 0.1/' \
174193
-e 's/"tau": 0.0/"tau": 0.1/' \
175-
-e 's/"updateQuorum": 5/"updateQuorum": 2/'
194+
-e 's/"updateQuorum": 5/"updateQuorum": 2/' \
195+
"${ROOT}/genesis/shelley/genesis.json"
176196

177197
for NODE_ID in ${SP_NODES_ID}; do
178198
TARGET="${ROOT}/node-sp${NODE_ID}"
@@ -248,8 +268,8 @@ for NODE in ${SP_NODES}; do
248268
done
249269

250270
echo "Update start time in genesis files"
251-
$SED -i -E "s/\"startTime\": [0-9]+/\"startTime\": ${timeUnix}/" ${ROOT}/genesis/byron/genesis.json
252-
$SED -i -E "s/\"systemStart\": \".*\"/\"systemStart\": \"${timeISO}\"/" ${ROOT}/genesis/shelley/genesis.json
271+
sed_i -E "s/\"startTime\": [0-9]+/\"startTime\": ${timeUnix}/" ${ROOT}/genesis/byron/genesis.json
272+
sed_i -E "s/\"systemStart\": \".*\"/\"systemStart\": \"${timeISO}\"/" ${ROOT}/genesis/shelley/genesis.json
253273

254274
byronGenesisHash=$(cardano-cli byron genesis print-genesis-hash --genesis-json ${ROOT}/genesis/byron/genesis.json)
255275
shelleyGenesisHash=$(cardano-cli genesis hash --genesis ${ROOT}/genesis/shelley/genesis.json)
@@ -259,9 +279,9 @@ echo "Byron genesis hash: $byronGenesisHash"
259279
echo "Shelley genesis hash: $shelleyGenesisHash"
260280
echo "Alonzo genesis hash: $alonzoGenesisHash"
261281

262-
$SED -i -E "s/ByronGenesisHash: '.*'/ByronGenesisHash: '${byronGenesisHash}'/" ${ROOT}/configuration.yaml
263-
$SED -i -E "s/ShelleyGenesisHash: '.*'/ShelleyGenesisHash: '${shelleyGenesisHash}'/" ${ROOT}/configuration.yaml
264-
$SED -i -E "s/AlonzoGenesisHash: '.*'/AlonzoGenesisHash: '${alonzoGenesisHash}'/" ${ROOT}/configuration.yaml
282+
sed_i -E "s/ByronGenesisHash: '.*'/ByronGenesisHash: '${byronGenesisHash}'/" ${ROOT}/configuration.yaml
283+
sed_i -E "s/ShelleyGenesisHash: '.*'/ShelleyGenesisHash: '${shelleyGenesisHash}'/" ${ROOT}/configuration.yaml
284+
sed_i -E "s/AlonzoGenesisHash: '.*'/AlonzoGenesisHash: '${alonzoGenesisHash}'/" ${ROOT}/configuration.yaml
265285

266286
# Create config folder
267287
rm -rf ./config/*
@@ -274,14 +294,16 @@ cp ./templates/babbage/db-sync-config.json ./config/network/cardano-db-sync/conf
274294
cp ./templates/babbage/node-config.json ./config/network/cardano-node/config.json
275295
cp ./templates/babbage/submit-api-config.json ./config/network/cardano-submit-api/config.json
276296

277-
$SED -i -E "s/\"ByronGenesisHash\": \".*\"/\"ByronGenesisHash\": \"${byronGenesisHash}\"/" ./config/network/cardano-node/config.json
278-
$SED -i -E "s/\"ShelleyGenesisHash\": \".*\"/\"ShelleyGenesisHash\": \"${shelleyGenesisHash}\"/" ./config/network/cardano-node/config.json
279-
$SED -i -E "s/\"AlonzoGenesisHash\": \".*\"/\"AlonzoGenesisHash\": \"${alonzoGenesisHash}\"/" ./config/network/cardano-node/config.json
297+
sed_i -E "s/\"ByronGenesisHash\": \".*\"/\"ByronGenesisHash\": \"${byronGenesisHash}\"/" ./config/network/cardano-node/config.json
298+
sed_i -E "s/\"ShelleyGenesisHash\": \".*\"/\"ShelleyGenesisHash\": \"${shelleyGenesisHash}\"/" ./config/network/cardano-node/config.json
299+
sed_i -E "s/\"AlonzoGenesisHash\": \".*\"/\"AlonzoGenesisHash\": \"${alonzoGenesisHash}\"/" ./config/network/cardano-node/config.json
280300

281301
cp ./templates/babbage/topology.json ./config/network/cardano-node/topology.json
282302
# docker hostname in topology.json isn't working, so need to specify ip of local network
283303
CONTAINER_IP=$(hostname -I | xargs)
284-
$SED -i "s/172.17.0.1/$CONTAINER_IP/g" ./config/network/cardano-node/topology.json
304+
sed_i "s/172.17.0.1/$CONTAINER_IP/g" ./config/network/cardano-node/topology.json
305+
# Note: for some reason, the first cardano-node (on port 3001) isn’t immediately responsive to the outside world, so:
306+
sed_i "s/3001/3002/g" ./config/network/cardano-node/topology.json
285307

286308
cp "${ROOT}"/genesis/byron/genesis.json ./config/network/cardano-node/genesis/byron.json
287309
cp "${ROOT}"/genesis/byron/genesis.json ./config/network/genesis/byron.json

packages/e2e/local-network/scripts/ogmios-start.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,4 @@
1010
while [ -f /sdk-ipc/prevent_ogmios ]; do sleep 10; done
1111

1212
# Start the ogmios as normal
13-
/bin/ogmios "$@"
13+
exec /bin/ogmios "$@"

packages/e2e/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
"test:web-extension:watch:run": "yarn test:web-extension:run --watch",
4545
"test:web-extension:watch": "run-s test:web-extension:build test:web-extension:watch:bg",
4646
"test:web-extension:watch:bg": "run-p test:web-extension:watch:build test:web-extension:watch:run",
47-
"local-network:common": "DISABLE_DB_CACHE=${DISABLE_DB_CACHE:-true} SUBMIT_API_ARGS='--testnet-magic 888' USE_BLOCKFROST=false docker compose -p local-network-e2e -f docker-compose.yml -f ../../compose/common.yml $FILES up",
47+
"local-network:common": "DISABLE_DB_CACHE=${DISABLE_DB_CACHE:-true} SUBMIT_API_ARGS='--testnet-magic 888' USE_BLOCKFROST=false __FIX_UMASK__=$(chmod -R a+r ../../compose/placeholder-secrets) docker compose -p local-network-e2e -f docker-compose.yml -f ../../compose/common.yml -f ../../compose/$(uname -m).yml $FILES up",
4848
"local-network:up": "FILES='' yarn local-network:common",
4949
"local-network:dev": "FILES='-f ../../compose/dev.yml' yarn local-network:common",
5050
"local-network:profile:up": "FILES='-f ../../compose/pg-agent.yml' yarn local-network:common",

0 commit comments

Comments
 (0)