Skip to content

Commit f8c2745

Browse files
committed
feat: dockerize blockfrost-ryo and enable blockfrost providers in e2e CI tests
1 parent 6542913 commit f8c2745

File tree

18 files changed

+231
-30
lines changed

18 files changed

+231
-30
lines changed
Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
name: Continuous Integration - E2E (Blockfrost Providers)
2+
3+
env:
4+
TL_DEPTH: ${{ github.event.pull_request.head.repo.fork && '0' || fromJson(vars.TL_DEPTH) }}
5+
TL_LEVEL: ${{ github.event.pull_request.head.repo.fork && 'info' || vars.TL_LEVEL }}
6+
# -----------------------------------------------------------------------------------------
7+
KEY_MANAGEMENT_PROVIDER: 'inMemory'
8+
KEY_MANAGEMENT_PARAMS: '{"bip32Ed25519": "Sodium", "accountIndex": 0, "chainId":{"networkId": 0, "networkMagic": 888}, "passphrase":"some_passphrase","mnemonic":"vacant violin soft weird deliver render brief always monitor general maid smart jelly core drastic erode echo there clump dizzy card filter option defense"}'
9+
TEST_CLIENT_ASSET_PROVIDER: 'http'
10+
TEST_CLIENT_ASSET_PROVIDER_PARAMS: '{"baseUrl":"http://localhost:4014/"}'
11+
TEST_CLIENT_CHAIN_HISTORY_PROVIDER: 'http'
12+
TEST_CLIENT_CHAIN_HISTORY_PROVIDER_PARAMS: '{"baseUrl":"http://localhost:4000/"}'
13+
DB_SYNC_CONNECTION_STRING: 'postgresql://postgres:doNoUseThisSecret!@localhost:5435/cexplorer'
14+
TEST_CLIENT_HANDLE_PROVIDER: 'http'
15+
TEST_CLIENT_HANDLE_PROVIDER_PARAMS: '{"baseUrl":"http://localhost:4011/"}'
16+
STAKE_POOL_CONNECTION_STRING: 'postgresql://postgres:doNoUseThisSecret!@localhost:5435/stake_pool'
17+
STAKE_POOL_TEST_CONNECTION_STRING: 'postgresql://postgres:doNoUseThisSecret!@localhost:5435/stake_pool_test'
18+
TEST_CLIENT_NETWORK_INFO_PROVIDER: 'ws'
19+
TEST_CLIENT_NETWORK_INFO_PROVIDER_PARAMS: '{"baseUrl":"http://localhost:4000/"}'
20+
OGMIOS_URL: 'ws://localhost:1340/'
21+
TEST_CLIENT_REWARDS_PROVIDER: 'http'
22+
TEST_CLIENT_REWARDS_PROVIDER_PARAMS: '{"baseUrl":"http://localhost:4000/"}'
23+
TEST_CLIENT_TX_SUBMIT_PROVIDER: 'http'
24+
TEST_CLIENT_TX_SUBMIT_PROVIDER_PARAMS: '{"baseUrl":"http://localhost:4000/"}'
25+
TEST_CLIENT_UTXO_PROVIDER: 'http'
26+
TEST_CLIENT_UTXO_PROVIDER_PARAMS: '{"baseUrl":"http://localhost:4000/"}'
27+
TEST_CLIENT_STAKE_POOL_PROVIDER: 'http'
28+
TEST_CLIENT_STAKE_POOL_PROVIDER_PARAMS: '{"baseUrl":"http://localhost:4000/"}'
29+
WS_PROVIDER_URL: 'http://localhost:4100/ws'
30+
# enable Blockfrost backed providers, the rest will use defaults
31+
ASSET_PROVIDER: 'blockfrost'
32+
UTXO_PROVIDER: 'blockfrost'
33+
CHAIN_HISTORY_PROVIDER: 'blockfrost'
34+
REWARDS_PROVIDER: 'blockfrost'
35+
NETWORK_INFO_PROVIDER: 'blockfrost'
36+
TX_SUBMIT_PROVIDER: 'blockfrost'
37+
38+
on:
39+
pull_request:
40+
push:
41+
branches: ['master']
42+
tags: ['*.*.*']
43+
44+
jobs:
45+
build_and_test:
46+
strategy:
47+
matrix:
48+
os: [ubuntu-20.04]
49+
runs-on: ${{ matrix.os }}
50+
steps:
51+
- name: 📥 Checkout repository
52+
uses: actions/checkout@v3
53+
54+
- name: 🧰 Setup Node.js
55+
uses: actions/setup-node@v3
56+
with:
57+
node-version: 18.12.0
58+
59+
- name: 🔨 Build
60+
run: |
61+
yarn install --immutable --inline-builds --mode=skip-build
62+
yarn workspace @cardano-sdk/cardano-services-client build:cjs
63+
yarn workspace @cardano-sdk/cardano-services build:cjs
64+
yarn workspace @cardano-sdk/e2e build:cjs
65+
yarn workspace @cardano-sdk/util-dev build:cjs
66+
docker build --no-cache .
67+
env:
68+
NODE_OPTIONS: '--max_old_space_size=8192'
69+
70+
- name: 🌐 Setup local test network
71+
working-directory: packages/e2e
72+
run: |
73+
yarn local-network:blockfrost:up -d
74+
env:
75+
CARDANO_NODE_CHAINDB_LOG_LEVEL: 'Warning'
76+
CARDANO_NODE_LOG_LEVEL: 'Warning'
77+
OGMIOS_PORT: '1340'
78+
OGMIOS_URL: 'ws://ogmios:1340'
79+
POSTGRES_PORT: '5435'
80+
81+
- name: Wait for network init
82+
run: |
83+
yarn workspace @cardano-sdk/e2e wait-for-network-init
84+
85+
- name: 🔬 Test - e2e - wallet at epoch 0
86+
run: |
87+
yarn workspace @cardano-sdk/e2e test:wallet:epoch0
88+
yarn workspace @cardano-sdk/e2e test:projection
89+
yarn workspace @cardano-sdk/e2e test:ws
90+
91+
- name: Wait for epoch 3
92+
run: |
93+
yarn workspace @cardano-sdk/e2e wait-for-network-epoch-3
94+
95+
- name: 🔬 Test - e2e - wallet at epoch 3
96+
run: |
97+
yarn workspace @cardano-sdk/e2e test:wallet:epoch3
98+
yarn workspace @cardano-sdk/e2e test:pg-boss
99+
yarn workspace @cardano-sdk/e2e test:providers
100+
env:
101+
STAKE_POOL_PROVIDER_URL: 'http://localhost:4000/'
102+
103+
- name: 🔬 Test - e2e - wallet - typeorm stake pool provider
104+
run: |
105+
yarn workspace @cardano-sdk/e2e test:providers -t StakePoolProvider
106+
env:
107+
STAKE_POOL_PROVIDER_URL: 'http://localhost:4010/'
108+
109+
- name: Dump docker logs
110+
if: ${{ cancelled() || failure() }}
111+
uses: jwalton/gh-docker-logs@v2

compose/common.yml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,13 @@ x-provider-server-environment: &provider-server-environment
6969
SUBMIT_API_URL: ${SUBMIT_API_URL:-http://cardano-submit-api:8090/}
7070
USE_BLOCKFROST: ${USE_BLOCKFROST:-false}
7171
USE_SUBMIT_API: ${USE_SUBMIT_API:-false}
72+
ASSET_PROVIDER: ${ASSET_PROVIDER:-dbsync}
73+
UTXO_PROVIDER: ${UTXO_PROVIDER:-dbsync}
74+
CHAIN_HISTORY_PROVIDER: ${CHAIN_HISTORY_PROVIDER:-dbsync}
75+
REWARDS_PROVIDER: ${REWARDS_PROVIDER:-dbsync}
76+
NETWORK_INFO_PROVIDER: ${NETWORK_INFO_PROVIDER:-dbsync}
77+
TX_SUBMIT_PROVIDER: ${TX_SUBMIT_PROVIDER:-submit-node}
78+
STAKE_POOL_PROVIDER: ${STAKE_POOL_PROVIDER:-dbsync}
7279

7380
x-sdk-environment: &sdk-environment
7481
LOGGER_MIN_SEVERITY: ${LOGGER_MIN_SEVERITY:-info}
@@ -110,6 +117,18 @@ x-sdk-environment: &sdk-environment
110117
WEB_SOCKET_API_URL: ws://ws-server:3000/ws
111118

112119
services:
120+
blockfrost-ryo:
121+
build:
122+
context: "https://github.com/ginnun/blockfrost-backend-ryo.git#feat/custom-network-support"
123+
dockerfile: Dockerfile
124+
environment:
125+
BLOCKFROST_CONFIG_SERVER_LISTEN_ADDRESS: 0.0.0.0
126+
depends_on:
127+
cardano-db-sync:
128+
condition: service_started
129+
ports:
130+
- "3015:3000"
131+
113132
cardano-db-sync:
114133
<<:
115134
- *logging
File renamed without changes.
File renamed without changes.
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
server:
2+
listenAddress: "0.0.0.0"
3+
port: 3000
4+
debug: false
5+
dbSync:
6+
host: "postgres"
7+
port: 5432
8+
database: "cexplorer"
9+
user: "postgres"
10+
password: "doNoUseThisSecret!"
11+
maxConnections: 5

packages/cardano-services/docker-compose.yml

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,18 @@ x-sdk-environment: &sdk-environment
99
HANDLE_POLICY_IDS: ${HANDLE_POLICY_IDS:-f0ff48bbb7bbe9d59a40f1ce90e9e9d0ff5002ec48f232b49ca0fb9a}
1010

1111
services:
12+
13+
blockfrost-ryo:
14+
environment:
15+
<<: *sdk-environment
16+
NODE_ENV: local-blockfrost-ryo
17+
BLOCKFROST_CONFIG_NETWORK: ${NETWORK:-mainnet}
18+
BLOCKFROST_CONFIG_TOKEN_REGISTRY_URL: ${TOKEN_METADATA_SERVER_URL:-https://tokens.cardano.org}
19+
20+
volumes:
21+
- ./blockfrost/ryo:/app/config
22+
profiles: [ blockfrost-ryo ]
23+
1224
cardano-node:
1325
volumes:
1426
- ./config/network/${NETWORK:-mainnet}/cardano-node:/config
@@ -74,7 +86,7 @@ services:
7486

7587
secrets:
7688
blockfrost_key:
77-
file: ./blockfrost-keys/${NETWORK:-mainnet}.key
89+
file: ./blockfrost/keys/${NETWORK:-mainnet}.key
7890

7991
volumes:
8092
postgres-data:

packages/cardano-services/package.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
"cleanup": "rm -rf dist node_modules",
3030
"cli": "ts-node --transpile-only src/cli.ts",
3131
"compose:single:up": "yarn compose:up cardano-node ogmios postgres",
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",
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:-} --profile ${DOCKER_COMPOSE_PROFILE:-none} 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",
@@ -38,17 +38,21 @@
3838
"generate-migration": "typeorm-ts-node-commonjs migration:generate src/Projection/migrations/migrations -d src/migrationDataSource.ts",
3939
"mainnet:single:up": "NETWORK=mainnet yarn compose:single:up",
4040
"mainnet:up": "NETWORK=mainnet SUBMIT_API_ARGS=--mainnet yarn compose:up",
41+
"mainnet:blockfrost:up": "DOCKER_COMPOSE_PROFILE='blockfrost-ryo' yarn mainnet:up",
4142
"mainnet:down": "NETWORK=mainnet yarn compose:down",
4243
"prepack": "yarn build",
4344
"preprod:single:up": "NETWORK=preprod yarn compose:single:up",
4445
"preprod:up": "NETWORK=preprod SUBMIT_API_ARGS='--testnet-magic 1' yarn compose:up",
46+
"preprod:blockfrost:up": "DOCKER_COMPOSE_PROFILE='blockfrost-ryo' yarn preprod:up",
4547
"preprod:down": "NETWORK=preprod yarn compose:down",
4648
"pretest": "yarn build",
4749
"preview:single:up": "NETWORK=preview yarn compose:single:up",
4850
"preview:up": "NETWORK=preview SUBMIT_API_ARGS='--testnet-magic 2' yarn compose:up",
51+
"preview:blockfrost:up": "DOCKER_COMPOSE_PROFILE='blockfrost-ryo' yarn preview:up",
4952
"preview:down": "NETWORK=preview yarn compose:down",
5053
"sanchonet:single:up": "NETWORK=sanchonet yarn compose:single:up",
5154
"sanchonet:up": "NETWORK=sanchonet SUBMIT_API_ARGS='--testnet-magic 4' yarn compose:up",
55+
"sanchonet:blockfrost:up": "DOCKER_COMPOSE_PROFILE='blockfrost-ryo' yarn sanchonet:up",
5256
"sanchonet:down": "NETWORK=sanchonet yarn compose:down",
5357
"test": "jest --runInBand -c ./jest.config.js --selectProjects unit",
5458
"test:build:verify": "tsc --build ./test",

packages/cardano-services/src/Program/options/providers.ts

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -22,58 +22,52 @@ export const ProviderImplementationDescription = 'Select one of the available pr
2222
const argParser = (impl: string) => ProviderImplementation[impl.toUpperCase() as keyof typeof ProviderImplementation];
2323
export const providerSelectionOptions = [
2424
newOption(
25-
'--asset-provider <implementation>',
25+
'--asset-provider <assetProvider>',
2626
ProviderImplementationDescription,
2727
'ASSET_PROVIDER',
2828
argParser,
2929
ProviderImplementation.DBSYNC
30-
)
31-
.conflicts('useTypeormAssetProvider')
32-
.choices([ProviderImplementation.BLOCKFROST, ProviderImplementation.DBSYNC, ProviderImplementation.TYPEORM]),
30+
).choices([ProviderImplementation.BLOCKFROST, ProviderImplementation.DBSYNC, ProviderImplementation.TYPEORM]),
3331
newOption(
34-
'--stake-pool-provider <implementation>',
32+
'--stake-pool-provider <stakePoolProvider>',
3533
ProviderImplementationDescription,
3634
'STAKE_POOL_PROVIDER',
3735
argParser,
3836
ProviderImplementation.DBSYNC
39-
)
40-
.conflicts('useTypeormStakePoolProvider')
41-
.choices([ProviderImplementation.DBSYNC, ProviderImplementation.TYPEORM]),
37+
).choices([ProviderImplementation.DBSYNC, ProviderImplementation.TYPEORM]),
4238
newOption(
43-
'--utxo-provider <implementation>',
39+
'--utxo-provider <utxoProvider>',
4440
ProviderImplementationDescription,
4541
'UTXO_PROVIDER',
4642
argParser,
4743
ProviderImplementation.DBSYNC
4844
).choices([ProviderImplementation.BLOCKFROST, ProviderImplementation.DBSYNC]),
4945
newOption(
50-
'--chain-history-provider <implementation>',
46+
'--chain-history-provider <chainHistoryProvider>',
5147
ProviderImplementationDescription,
5248
'CHAIN_HISTORY_PROVIDER',
5349
argParser,
5450
ProviderImplementation.DBSYNC
5551
).choices([ProviderImplementation.BLOCKFROST, ProviderImplementation.DBSYNC]),
5652
newOption(
57-
'--rewards-provider <implementation>',
53+
'--rewards-provider <rewardsProvider>',
5854
ProviderImplementationDescription,
5955
'REWARDS_PROVIDER',
6056
argParser,
6157
ProviderImplementation.DBSYNC
6258
).choices([ProviderImplementation.BLOCKFROST, ProviderImplementation.DBSYNC]),
6359
newOption(
64-
'--network-info-provider <implementation>',
60+
'--network-info-provider <networkInfoProvider>',
6561
ProviderImplementationDescription,
6662
'NETWORK_INFO_PROVIDER',
6763
argParser,
6864
ProviderImplementation.DBSYNC
6965
).choices([ProviderImplementation.BLOCKFROST, ProviderImplementation.DBSYNC]),
7066
newOption(
71-
'--tx-submit-provider <implementation>',
67+
'--tx-submit-provider <txSubmitProvider>',
7268
ProviderImplementationDescription,
7369
'TX_SUBMIT_PROVIDER',
7470
argParser,
7571
ProviderImplementation.SUBMIT_NODE
76-
)
77-
.conflicts('useSubmitApi')
78-
.choices([ProviderImplementation.BLOCKFROST, ProviderImplementation.SUBMIT_API, ProviderImplementation.SUBMIT_NODE])
72+
).choices([ProviderImplementation.BLOCKFROST, ProviderImplementation.SUBMIT_API, ProviderImplementation.SUBMIT_NODE])
7973
];

packages/cardano-services/test/cli.test.ts

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1142,11 +1142,6 @@ describe('CLI', () => {
11421142
env: { ASSET_PROVIDER: 'not-valid' },
11431143
expectedError: 'is invalid'
11441144
});
1145-
testCli('conflicts', 'provider', {
1146-
args: ['--asset-provider', 'blockfrost', '--use-typeorm-asset-provider', 'true'],
1147-
env: { ASSET_PROVIDER: 'blockfrost', USE_TYPEORM_ASSET_PROVIDER: 'true' },
1148-
expectedError: 'cannot be used with'
1149-
});
11501145
});
11511146
describe('--stake-pool-provider', () => {
11521147
testCli('set successful', 'provider', {
@@ -1163,11 +1158,6 @@ describe('CLI', () => {
11631158
env: { STAKE_POOL_PROVIDER: 'not-valid' },
11641159
expectedError: 'is invalid'
11651160
});
1166-
testCli('conflicts', 'provider', {
1167-
args: ['--stake-pool-provider', 'dbsync', '--use-typeorm-stake-pool-provider', 'true'],
1168-
env: { STAKE_POOL_PROVIDER: 'typeorm', USE_TYPEORM_STAKE_POOL_PROVIDER: 'true' },
1169-
expectedError: 'cannot be used with'
1170-
});
11711161
});
11721162

11731163
describe('--utxo-provider', () => {

packages/e2e/delete

Whitespace-only changes.

0 commit comments

Comments
 (0)