Creating Geth and ARB init state for v1.0.0-1-node #30
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: Create Geth and ARB Initial State | |
run-name: Creating Geth and ARB init state for ${{ inputs.tag }}-${{ inputs.genesis_validators }}-node${{ inputs.docker_image_tag_suffix }} | |
on: | |
workflow_dispatch: | |
inputs: | |
tag: | |
description: Which tag should we deploy against? | |
required: true | |
genesis_validators: | |
description: The aggregate key generated from generate-genesis-keys | |
type: choice | |
options: | |
- "1" | |
- "3" | |
chainflip_backend_ref: | |
description: The branch, tag or commit of chainflip-backend to use | |
required: true | |
default: "main" | |
nitro_testnodes_ref: | |
description: The branch, tag or commit of nitro-testnodes to use | |
required: true | |
default: "feat/setup-from-scratch" | |
docker_image_tag_suffix: | |
description: A suffix to append to the image tag | |
required: false | |
default: "" | |
env: | |
SEED: test test test test test test test test test test test junk | |
NUM_GENESIS_VALIDATORS: ${{ inputs.genesis_validators }} | |
GOV_KEY: "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266" | |
COMM_KEY: "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266" | |
REDEMPTION_DELAY: "120" | |
GENESIS_STAKE: "1000000000000000000000" | |
DEPLOYER_ACCOUNT_INDEX: "0" | |
DEPLOY_ARTEFACT_ID: "docker" | |
IMAGE_TAG: ${{ inputs.tag }}-${{ inputs.genesis_validators }}-node${{ inputs.docker_image_tag_suffix }} | |
jobs: | |
build-geth-base: | |
runs-on: [self-hosted, linux, x64, ephemeral] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Set up QEMU | |
uses: docker/setup-qemu-action@v2 | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v2 | |
- name: Docker meta | |
id: meta | |
uses: docker/metadata-action@v4 | |
with: | |
images: ghcr.io/${{ github.repository }}/geth-base | |
flavor: | | |
latest=true | |
tags: | | |
type=semver,pattern={{raw}} | |
type=raw,value=latest | |
- name: Login to GitHub Container Registry | |
uses: docker/login-action@v2 | |
with: | |
registry: ghcr.io | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Build and push | |
uses: docker/build-push-action@v4 | |
with: | |
context: ci/docker/arb-geth/ | |
push: true | |
tags: ${{ steps.meta.outputs.tags }} | |
cache-from: type=gha | |
cache-to: type=gha,mode=max | |
build-geth-state: | |
runs-on: [self-hosted, linux, x64, ephemeral] | |
outputs: | |
image-tag: ${{ env.IMAGE_TAG }} | |
needs: | |
- build-geth-base | |
services: | |
geth: | |
image: ghcr.io/${{ github.repository }}/geth-base:latest | |
ports: | |
- 8545:8545 | |
- 8546:8546 | |
- 8551:8551 | |
credentials: | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
with: | |
ref: ${{ inputs.tag }} | |
- name: Checkout chainflip-backend @ ${{ inputs.chainflip_backend_ref }} | |
uses: actions/checkout@v3 | |
with: | |
token: ${{ secrets.CF_GITHUB_BOT_READONLY_BACKEND_REPO }} | |
repository: chainflip-io/chainflip-backend | |
path: chainflip-backend | |
ref: ${{ inputs.chainflip_backend_ref }} | |
- name: Fetch agg_key | |
run: | | |
echo "AGG_KEY=$(jq -r .eth_agg_key chainflip-backend/localnet/init/keyshare/${{ inputs.genesis_validators }}-node/agg_keys.json)" >> $GITHUB_ENV | |
- name: Login to GitHub Container Registry | |
uses: docker/login-action@v2 | |
with: | |
registry: ghcr.io | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Install Python virtualenv | |
run: pip install virtualenv | |
- name: Setup Node | |
uses: actions/setup-node@v3 | |
with: | |
node-version: "16" | |
- name: Install Poetry | |
uses: snok/install-poetry@v1 | |
- run: npm install --global ganache-cli | |
- run: npm install --global yarn | |
- run: yarn | |
- run: poetry install | |
- name: Add the network | |
run: poetry run brownie networks add Ethereum docker host=http://localhost:8545 chainid=10997 | |
- name: Deploy contracts | |
run: poetry run brownie run deploy_contracts --network docker | |
- name: Commit and push new geth image | |
run: | | |
CONTAINER=$(docker ps --format '{{.Names}}' | grep geth) | |
echo "geth_container=$CONTAINER" >> $GITHUB_ENV | |
docker commit $CONTAINER ghcr.io/chainflip-io/chainflip-eth-contracts/geth:${{ env.IMAGE_TAG }} | |
docker push ghcr.io/chainflip-io/chainflip-eth-contracts/geth:${{ env.IMAGE_TAG }} | |
- name: Copy initial Geth state | |
run: | | |
docker cp ${{ env.geth_container }}:/datadir ${{ github.workspace }}/datadir | |
- name: Summary | |
run: | | |
CONTRACTS=$(jq . ./scripts/.artefacts/docker.json) | |
echo "## Deployed Contracts for \`${{ inputs.genesis_validators }}-node\`" >> $GITHUB_STEP_SUMMARY | |
echo "\`agg_key\` = \`${{ env.AGG_KEY }}\`" >> $GITHUB_STEP_SUMMARY | |
echo "\`\`\`json" >> $GITHUB_STEP_SUMMARY | |
echo "$CONTRACTS" >> $GITHUB_STEP_SUMMARY | |
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY | |
echo "## Docker Image" >> $GITHUB_STEP_SUMMARY | |
echo "\`ghcr.io/chainflip-io/chainflip-eth-contracts/geth:${{ env.IMAGE_TAG }}\`" >> $GITHUB_STEP_SUMMARY | |
- name: Save agg key to file | |
run: echo ${{ env.AGG_KEY }} > agg_key | |
- name: Save artifacts | |
uses: actions/upload-artifact@v3 | |
with: | |
name: ${{ env.IMAGE_TAG }} | |
path: | | |
agg_key | |
./scripts/.artefacts/docker.json | |
${{ github.workspace }}/datadir | |
build-arb-state: | |
runs-on: [self-hosted, linux, x64, ephemeral] | |
env: | |
GETH_INITIAL_STATE_DIR: ci-geth-initial-state | |
GETH_BASE_IMAGE: ghcr.io/chainflip-io/chainflip-eth-contracts/geth:${{ inputs.tag }}-${{ inputs.genesis_validators }}-node${{ inputs.docker_image_tag_suffix }} | |
needs: | |
- build-geth-state | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Checkout chainflip-io/nitro-testnode @ ${{ inputs.nitro_testnodes_ref }} | |
uses: actions/checkout@v3 | |
with: | |
token: ${{ secrets.CF_GITHUB_BOT_READONLY_BACKEND_REPO }} | |
repository: chainflip-io/nitro-testnode | |
path: nitro-testnode | |
ref: ${{ inputs.nitro_testnodes_ref }} | |
submodules: true | |
- name: Checkout chainflip-backend @ ${{ inputs.chainflip_backend_ref }} | |
uses: actions/checkout@v3 | |
with: | |
token: ${{ secrets.CF_GITHUB_BOT_READONLY_BACKEND_REPO }} | |
repository: chainflip-io/chainflip-backend | |
path: chainflip-backend | |
ref: ${{ inputs.chainflip_backend_ref }} | |
- name: Fetch agg_key | |
run: | | |
echo "AGG_KEY=$(jq -r .eth_agg_key chainflip-backend/localnet/init/keyshare/${{ inputs.genesis_validators }}-node/agg_keys.json)" >> $GITHUB_ENV | |
- name: Download Geth Initial State | |
uses: actions/download-artifact@v3 | |
with: | |
name: ${{ env.IMAGE_TAG }} | |
path: ./nitro-testnode/${{ env.GETH_INITIAL_STATE_DIR }} | |
- name: Login to GitHub Container Registry | |
uses: docker/login-action@v2 | |
with: | |
registry: ghcr.io | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Update directory permissions | |
working-directory: nitro-testnode | |
run: | | |
chmod -R 777 ./${{ env.GETH_INITIAL_STATE_DIR }} | |
- name: Update Docker user | |
run: | | |
sudo usermod -aG docker $USER | |
newgrp docker | |
- name: Build Arbitrum Network | |
working-directory: nitro-testnode | |
run: | | |
mkdir -p ./data | |
chmod -R 777 ./data | |
./test-node.bash --init --detach | |
./test-node.bash script send-l2 --to address_0x076d3803349fd5FB48863c5Fc33483cB2243C0Df --ethamount 10000 | |
./test-node.bash script send-l2 --to address_0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 --ethamount 10000 | |
- name: Install Python virtualenv | |
run: pip install virtualenv | |
- name: Setup Node | |
uses: actions/setup-node@v3 | |
with: | |
node-version: "16" | |
- name: Install Poetry | |
uses: snok/install-poetry@v1 | |
- run: npm install --global ganache-cli | |
- run: npm install --global yarn | |
- run: yarn | |
- run: poetry install | |
- name: Add the network | |
run: poetry run brownie networks add Ethereum arb-l2 host=http://localhost:8547 chainid=412346 | |
- name: Deploy contracts | |
run: poetry run brownie run deploy_contracts --network arb-l2 | |
- name: Stop Containers | |
run: | | |
# Stop ARB containers in order to preserve a clean state | |
docker stop nitro-testnode-poster-1 | |
docker stop nitro-testnode-staker-unsafe-1 | |
docker stop nitro-testnode-sequencer-1 | |
docker stop nitro-testnode-redis-1 | |
docker stop nitro-testnode-geth-1 | |
# Stop any other containers that may be running | |
docker stop $(docker ps -a -q) | |
- name: Summary | |
run: | | |
CONTRACTS=$(jq . ./scripts/.artefacts/docker.json) | |
echo "## Deployed L2 Contracts for \`${{ inputs.genesis_validators }}-node\`" >> $GITHUB_STEP_SUMMARY | |
echo "\`agg_key\` = \`${{ env.AGG_KEY }}\`" >> $GITHUB_STEP_SUMMARY | |
echo "\`\`\`json" >> $GITHUB_STEP_SUMMARY | |
echo "$CONTRACTS" >> $GITHUB_STEP_SUMMARY | |
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY | |
echo "## Docker Image" >> $GITHUB_STEP_SUMMARY | |
echo "\`ghcr.io/chainflip-io/chainflip-eth-contracts/geth:${{ env.IMAGE_TAG }}\`" >> $GITHUB_STEP_SUMMARY | |
- name: Save agg key to file | |
run: echo ${{ env.AGG_KEY }} > agg_key | |
- name: Update permissions | |
run: | | |
sudo chown -R $USER:$USER ./nitro-testnode/data | |
sudo chmod -R 777 ./nitro-testnode/data | |
- name: Save artifacts | |
uses: actions/upload-artifact@v3 | |
with: | |
name: ${{ env.IMAGE_TAG }}-localnet-initial-state | |
path: | | |
${{ github.workspace }}/nitro-testnode/data | |
- name: Clean Up docker containers 🧹 | |
if: always() | |
working-directory: ./nitro-testnode | |
continue-on-error: true | |
run: | | |
ls -laR ./data | |
docker ps -a | |
docker compose logs | |
docker compose down --rmi all --volumes --remove-orphans | |
build-initial-state-container: | |
needs: | |
- build-arb-state | |
runs-on: [self-hosted, linux, x64, ephemeral] | |
permissions: | |
contents: read | |
packages: write | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Set up QEMU ⚙️ | |
uses: docker/setup-qemu-action@v2 | |
- name: Set up Docker Buildx 👷 | |
uses: docker/setup-buildx-action@v2 | |
with: | |
driver-opts: | | |
image=moby/buildkit:v0.10.6 | |
- name: Docker meta 🔖 | |
id: meta | |
uses: docker/metadata-action@v4 | |
with: | |
images: ghcr.io/${{ github.repository }}/localnet-initial-state | |
tags: ${{ env.IMAGE_TAG }} | |
- name: Login to GitHub Container Registry ➡️🦑 | |
uses: docker/login-action@v2 | |
with: | |
registry: ghcr.io | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Download Initial State from previous job | |
uses: actions/download-artifact@v3 | |
with: | |
name: ${{ env.IMAGE_TAG }}-localnet-initial-state | |
path: ./localnet-initial-state | |
- name: List files | |
run: ls -laR ./localnet-initial-state | |
- name: Get Current Time ⌚️ | |
id: get_time | |
run: echo "current_datetime=$(date -u +"%b %d, %Y at %R UTC")" >> $GITHUB_OUTPUT | |
- name: Build Initial State Image 🫙 | |
uses: docker/build-push-action@v4 | |
with: | |
context: . | |
file: ci/docker/localnet-initial-state.Dockerfile | |
push: true | |
pull: true | |
tags: ${{ steps.meta.outputs.tags }} | |
labels: ${{ steps.meta.outputs.labels }} | |
cache-from: type=gha | |
cache-to: type=gha,mode=max | |
build-args: | | |
BUILD_DATETIME="${{ steps.get_time.outputs.current_datetime }}" | |
VCS_REF="${{ github.sha }}" | |
BACKEND_REF="${{ inputs.chainflip_backend_ref }}" |