ci: improve deploy workflows #39
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- | ||
name: Nightly | ||
on: | ||
schedule: | ||
# Run this workflow every day at 6 AM Paris time (UTC+2). | ||
- cron: 0 6 * * * | ||
workflow_dispatch: | ||
concurrency: | ||
group: nightly-${{ github.event.pull_request.number || github.ref }} | ||
cancel-in-progress: true | ||
env: | ||
ENCLAVE_NAME: cdk | ||
jobs: | ||
compare-configs: | ||
- uses: actions/checkout@v4 | ||
- name: Install Kurtosis CDK tools | ||
uses: ./.github/actions/setup-kurtosis-cdk | ||
# Deploy components. | ||
- name: Deploy Kurtosis CDK package | ||
run: | | ||
kurtosis run \ | ||
--enclave="${{ env.ENCLAVE_NAME }}" \ | ||
--show-enclave-inspect=false \ | ||
--args-file=params.yml \ | ||
. \ | ||
'{ | ||
"apply_workload": true, | ||
"args": { | ||
"l1_seconds_per_slot": 1 | ||
} | ||
}' | ||
# Compare configs. | ||
- name: Dump configs | ||
working-directory: ./scripts/zkevm-config-diff | ||
run: | | ||
mkdir -p default-configs kurtosis-cdk-configs | ||
sh zkevm_config.sh dump default ./default-configs | ||
echo | ||
sh zkevm_config.sh dump kurtosis-cdk ./kurtosis-cdk-configs | ||
- name: Compare configs | ||
working-directory: ./scripts/zkevm-config-diff | ||
run: sh zkevm_config.sh compare configs ./default-configs ./kurtosis-cdk-configs | ||
- name: Diff configs | ||
working-directory: ./scripts/zkevm-config-diff | ||
run: diff -r ./default-configs ./kurtosis-cdk-configs || true | ||
# Deploy the CDK environment without specifying any parameter file. | ||
configless: | ||
runs-on: ubuntu-latest | ||
timeout-minutes: 20 | ||
steps: | ||
- uses: actions/checkout@v4 | ||
- name: Install Kurtosis CDK tools | ||
uses: ./.github/actions/setup-kurtosis-cdk | ||
# Deploy components. | ||
- name: Deploy Kurtosis CDK package | ||
run: | | ||
kurtosis run \ | ||
--enclave="${{ env.ENCLAVE_NAME }}" \ | ||
--show-enclave-inspect=false \ | ||
--args-file=params.yml \ | ||
. \ | ||
'{ | ||
"apply_workload": true, | ||
"args": { | ||
"l1_seconds_per_slot": 1 | ||
} | ||
}' | ||
- name: Inspect enclave | ||
run: kurtosis enclave inspect "${{ env.ENCLAVE_NAME }}" | ||
- name: Monitor verified batches | ||
run: | | ||
rpc_url="$(kurtosis port print ${{ env.ENCLAVE_NAME }} cdk-erigon-node-001 http-rpc)" | ||
./.github/scripts/monitor-verified-batches.sh --rpc-url "$rpc_url" | ||
# Deploy the CDK environment in one step. | ||
monolithic: | ||
runs-on: ubuntu-latest | ||
timeout-minutes: 20 | ||
steps: | ||
- uses: actions/checkout@v4 | ||
- uses: actions/setup-go@v5 | ||
with: | ||
go-version: 1.21 | ||
cache-dependency-path: scripts/zkevm-config-diff/go.sum | ||
- name: Install Kurtosis CDK tools | ||
uses: ./.github/actions/setup-kurtosis-cdk | ||
- name: Deploy Kurtosis CDK package | ||
run: | | ||
kurtosis run \ | ||
--enclave="${{ env.ENCLAVE_NAME }}" \ | ||
--show-enclave-inspect=false \ | ||
--args-file=params.yml \ | ||
. \ | ||
'{ | ||
"apply_workload": true, | ||
"args": { | ||
"l1_seconds_per_slot": 1 | ||
} | ||
}' | ||
- name: Inspect enclave | ||
run: kurtosis enclave inspect "${{ env.ENCLAVE_NAME }}" | ||
- name: Monitor verified batches | ||
run: | | ||
rpc_url="$(kurtosis port print ${{ env.ENCLAVE_NAME }} cdk-erigon-node-001 http-rpc)" | ||
./.github/scripts/monitor-verified-batches.sh --rpc-url "$rpc_url" | ||
# Deploy the CDK environment incrementally, stage by stage. | ||
incremental: | ||
runs-on: ubuntu-latest | ||
timeout-minutes: 20 | ||
steps: | ||
- uses: actions/checkout@v4 | ||
- name: Install Kurtosis CDK tools | ||
uses: ./.github/actions/setup-kurtosis-cdk | ||
- name: Disable all deployment steps | ||
run: yq -Y --in-place 'with_entries(if .value | type == "boolean" then .value = false else . end)' params.yml | ||
- name: Deploy L1 | ||
run: | | ||
kurtosis run --enclave="${{ env.ENCLAVE_NAME }}" --args-file=params.yml . \ | ||
'{ | ||
"deploy_l1": true, | ||
"args": {"l1_seconds_per_slot": 1} | ||
}' | ||
- name: Deploy zkEVM contracts on L1 | ||
run: | | ||
kurtosis run --enclave="${{ env.ENCLAVE_NAME }}" --args-file=params.yml . \ | ||
'{"deploy_zkevm_contracts_on_l1": true}' | ||
- name: Deploy zkEVM node and cdk peripheral databases | ||
run: | | ||
kurtosis run --enclave="${{ env.ENCLAVE_NAME }}" --args-file=params.yml . \ | ||
'{"deploy_databases": true}' | ||
- name: Deploy CDK central environment | ||
run: | | ||
kurtosis run --enclave="${{ env.ENCLAVE_NAME }}" --args-file=params.yml . \ | ||
'{"deploy_cdk_central_environment": true}' | ||
- name: Deploy CDK bridge infrastructure | ||
run: | | ||
kurtosis run --enclave="${{ env.ENCLAVE_NAME }}" --args-file=params.yml . \ | ||
'{"deploy_cdk_bridge_infra": true}' | ||
- name: Deploy zkEVM permissionless node | ||
run: | | ||
# Retrieve genesis file. | ||
kurtosis files download "${{ env.ENCLAVE_NAME }}" genesis /tmp | ||
cp /tmp/genesis.json templates/permissionless-node/genesis.json | ||
# Deploy permisionless node. | ||
kurtosis run --enclave="${{ env.ENCLAVE_NAME }}" --args-file=params.yml . \ | ||
'{"deploy_zkevm_permissionless_node": true}' | ||
- name: Deploy CDK erigon node | ||
run: | | ||
kurtosis run --enclave="${{ env.ENCLAVE_NAME }}" --args-file=params.yml . \ | ||
'{"deploy_cdk_erigon_node": true}' | ||
- name: Deploy observability stack | ||
run: | | ||
kurtosis run --enclave="${{ env.ENCLAVE_NAME }}" --args-file=params.yml . \ | ||
'{"deploy_observability": true}' | ||
- name: Deploy Blockscout stack | ||
run: | | ||
kurtosis run --enclave="${{ env.ENCLAVE_NAME }}" --args-file=params.yml . \ | ||
'{"deploy_l2_blockscout": true}' | ||
- name: Deploy ETH load balancer | ||
run: | | ||
kurtosis run --enclave="${{ env.ENCLAVE_NAME }}" --args-file=params.yml . \ | ||
'{"deploy_blutgang": true}' | ||
- name: Apply workload | ||
run: | | ||
kurtosis run --enclave="${{ env.ENCLAVE_NAME }}" --args-file=params.yml . \ | ||
'{"apply_workload": true}' | ||
- name: Inspect enclave | ||
run: kurtosis enclave inspect "${{ env.ENCLAVE_NAME }}" | ||
- name: Monitor verified batches | ||
run: | | ||
rpc_url="$(kurtosis port print ${{ env.ENCLAVE_NAME }} cdk-erigon-node-001 http-rpc)" | ||
./.github/scripts/monitor-verified-batches.sh --rpc-url "$rpc_url" | ||
# Deploy the CDK environment with the gas token feature enabled. | ||
gas-token: | ||
runs-on: ubuntu-latest | ||
timeout-minutes: 20 | ||
steps: | ||
- uses: actions/checkout@v4 | ||
- name: Install Kurtosis CDK tools | ||
uses: ./.github/actions/setup-kurtosis-cdk | ||
- name: Deploy Kurtosis CDK package | ||
run: | | ||
kurtosis run \ | ||
--enclave="${{ env.ENCLAVE_NAME }}" \ | ||
--show-enclave-inspect=false \ | ||
--args-file=params.yml \ | ||
. \ | ||
'{ | ||
"apply_workload": true, | ||
"args": { | ||
"zkevm_use_gas_token_contract": true, | ||
"l1_seconds_per_slot": 1 | ||
} | ||
}' | ||
- name: Inspect enclave | ||
run: kurtosis enclave inspect "${{ env.ENCLAVE_NAME }}" | ||
- name: Monitor verified batches | ||
run: | | ||
rpc_url="$(kurtosis port print ${{ env.ENCLAVE_NAME }} cdk-erigon-node-001 http-rpc)" | ||
./.github/scripts/monitor-verified-batches.sh --rpc-url "$rpc_url" | ||
# Deploy the CDK environment against a local l1 chain with pre-deployed zkevm contracts. | ||
pre-deployed-contracts: | ||
runs-on: ubuntu-latest | ||
timeout-minutes: 20 | ||
steps: | ||
- uses: actions/checkout@v4 | ||
- name: Install Kurtosis CDK tools | ||
uses: ./.github/actions/setup-kurtosis-cdk | ||
- name: Disable all deployment steps | ||
run: yq -Y --in-place 'with_entries(if .value | type == "boolean" then .value = false else . end)' params.yml | ||
- name: Deploy L1 and zkEVM contracts | ||
run: | | ||
kurtosis run \ | ||
--enclave="${{ env.ENCLAVE_NAME }}" \ | ||
--show-enclave-inspect=false \ | ||
--args-file=params.yml \ | ||
. \ | ||
'{ | ||
"deploy_l1": true, | ||
"deploy_zkevm_contracts_on_l1": true, | ||
"args": { | ||
"l1_seconds_per_slot": 1 | ||
} | ||
}' | ||
- name: Deploy the rest of the components | ||
run: | | ||
zkevm_rollup_manager_address=$(kurtosis service exec ${{ env.ENCLAVE_NAME }} contracts-001 "cat /opt/zkevm/combined.json" | tail -n +2 | jq .polygonRollupManagerAddress) | ||
zkevm_rollup_manager_block_number=$(kurtosis service exec ${{ env.ENCLAVE_NAME }} contracts-001 "cat /opt/zkevm/combined.json" | tail -n +2 | jq .deploymentRollupManagerBlockNumber) | ||
zkevm_global_exit_root_l2_address=$(kurtosis service exec ${{ env.ENCLAVE_NAME }} contracts-001 "cat /opt/zkevm/combined.json" | tail -n +2 | jq .polygonZkEVMGlobalExitRootL2Address) | ||
polygon_data_committee_address=$(kurtosis service exec ${{ env.ENCLAVE_NAME }} contracts-001 "cat /opt/zkevm/combined.json" | tail -n +2 | jq .polygonDataCommitteeAddress) | ||
zkevm_admin_address=$(kurtosis service exec ${{ env.ENCLAVE_NAME }} contracts-001 "cat /opt/zkevm/combined.json" | tail -n +2 | jq .admin) | ||
kurtosis run \ | ||
--enclave="${{ env.ENCLAVE_NAME }}" \ | ||
--show-enclave-inspect=false \ | ||
--args-file=params.yml \ | ||
. \ | ||
'{ | ||
"deploy_databases": true, | ||
"deploy_cdk_central_environment": true, | ||
"deploy_cdk_bridge_infra": true, | ||
"apply_workload": true, | ||
"args": { | ||
"zkevm_rollup_manager_address": $zkevm_rollup_manager_address, | ||
"zkevm_rollup_manager_block_number": $zkevm_rollup_manager_block_number, | ||
"zkevm_global_exit_root_l2_address": $zkevm_global_exit_root_l2_address, | ||
"polygon_data_committee_address": $polygon_data_committee_address, | ||
"zkevm_admin_address": $zkevm_admin_address | ||
} | ||
}' | ||
- name: Inspect enclave | ||
run: kurtosis enclave inspect "${{ env.ENCLAVE_NAME }}" | ||
- name: Monitor verified batches | ||
run: | | ||
rpc_url="$(kurtosis port print ${{ env.ENCLAVE_NAME }} cdk-erigon-node-001 http-rpc)" | ||
./.github/scripts/monitor-verified-batches.sh --rpc-url "$rpc_url" | ||
# Deploy a standalone permisionless node against Sepolia. | ||
permisionless-node: | ||
if: github.repository == '0xPolygon/kurtosis-cdk' # Prevent this job to run on forks. | ||
runs-on: ubuntu-latest | ||
timeout-minutes: 20 | ||
steps: | ||
- uses: actions/checkout@v4 | ||
- name: Install Kurtosis CDK tools | ||
uses: ./.github/actions/setup-kurtosis-cdk | ||
- name: Disable all deployment steps | ||
run: yq -Y --in-place 'with_entries(if .value | type == "boolean" then .value = false else . end)' params.yml | ||
- name: Deploy the permisionless node | ||
run: | | ||
kurtosis run \ | ||
--enclave="${{ env.ENCLAVE_NAME }}" \ | ||
--show-enclave-inspect=false \ | ||
--args-file=params.yml \ | ||
. \ | ||
'{ | ||
"deploy_zkevm_permissionless_node": true, | ||
"args": { | ||
"l1_rpc_url": "${{ secrets.ALCHEMY_SEPOLIA_RPC_URL }}", | ||
"genesis_file": "templates/permissionless-node/test-genesis.json" | ||
} | ||
}' | ||
# Deploy the CDK environment in rollup mode (data availability). | ||
rollup-da-mode: | ||
runs-on: ubuntu-latest | ||
timeout-minutes: 20 | ||
steps: | ||
- uses: actions/checkout@v4 | ||
- name: Install Kurtosis CDK tools | ||
uses: ./.github/actions/setup-kurtosis-cdk | ||
- name: Deploy Kurtosis CDK package | ||
run: | | ||
kurtosis run \ | ||
--enclave="${{ env.ENCLAVE_NAME }}" \ | ||
--show-enclave-inspect=false \ | ||
--args-file=params.yml \ | ||
. \ | ||
'{ | ||
"apply_workload": true, | ||
"args": { | ||
"data_availability_mode": "rollup", | ||
"l1_seconds_per_slot": 1 | ||
} | ||
}' | ||
- name: Inspect enclave | ||
run: kurtosis enclave inspect "${{ env.ENCLAVE_NAME }}" | ||
- name: Monitor verified batches | ||
run: | | ||
rpc_url="$(kurtosis port print ${{ env.ENCLAVE_NAME }} cdk-erigon-node-001 http-rpc)" | ||
./.github/scripts/monitor-verified-batches.sh --rpc-url "$rpc_url" | ||
# Deploy the CDK environment in cdk-validium mode (data availability). | ||
cdk-validium-da-mode: | ||
runs-on: ubuntu-latest | ||
timeout-minutes: 20 | ||
steps: | ||
- uses: actions/checkout@v4 | ||
- name: Install Kurtosis CDK tools | ||
uses: ./.github/actions/setup-kurtosis-cdk | ||
- name: Deploy Kurtosis CDK package | ||
run: | | ||
kurtosis run \ | ||
--enclave="${{ env.ENCLAVE_NAME }}" \ | ||
--show-enclave-inspect=false \ | ||
--args-file=params.yml \ | ||
. \ | ||
'{ | ||
"apply_workload": true, | ||
"args": { | ||
"data_availability_mode": "cdk-validium", | ||
"l1_seconds_per_slot": 1 | ||
} | ||
}' | ||
- name: Inspect enclave | ||
run: kurtosis enclave inspect "${{ env.ENCLAVE_NAME }}" | ||
- name: Monitor verified batches | ||
run: | | ||
rpc_url="$(kurtosis port print ${{ env.ENCLAVE_NAME }} cdk-erigon-node-001 http-rpc)" | ||
./.github/scripts/monitor-verified-batches.sh --rpc-url "$rpc_url" |