diff --git a/.github/workflows/load_testing.yaml b/.github/workflows/load_testing.yaml deleted file mode 100644 index 4feb86b8..00000000 --- a/.github/workflows/load_testing.yaml +++ /dev/null @@ -1,168 +0,0 @@ -name: Load testing - -on: - workflow_dispatch: - inputs: - num_instances: - description: "Amount of executor nodes to launch" - required: false - type: number - default: 100 - validators: - description: "Amount of validator nodes to launch (<= nodes)" - required: false - type: number - default: 100 - peers: - description: "Amount of gossipnet peers each node should have" - required: false - type: number - default: 2 - node_port: - description: "Executor port number" - required: false - type: number - default: 8080 - metrics_port: - description: "Executor metrics port number" - required: false - type: number - default: 8081 - -env: - NUM_INSTANCES: ${{ github.event.inputs.num_instances || '100' }} - VALIDATORS: ${{ github.event.inputs.validators || github.event.inputs.num_instances || '100' }} - PEERS: ${{ github.event.inputs.peers || '2' }} - NODE_PORT: ${{ github.event.inputs.node_port || '8080' }} - METRICS_PORT: ${{ github.event.inputs.metrics_port || '8081' }} - VM_AUTH_USERNAME: ${{ secrets.VM_AUTH_USERNAME }} - VM_AUTH_PASSWORD: ${{ secrets.VM_AUTH_PASSWORD }} - -jobs: - run_load_tests: - runs-on: ["matterlabs-deployer-sandbox-infra"] - steps: - - name: Fail-fast on incorrect inputs - run: | - if [[ "${{ env.NUM_INSTANCES }}" -ge 1 && "${{ env.NUM_INSTANCES }}" -le 200 ]]; then - echo "Number of instances is within range." - else - echo "Error: Number of instances is not within range 1-200." - exit 1 - fi - - if [[ "${{ env.NODE_PORT }}" == "${{ env.METRICS_PORT }}" ]]; then - echo "Error: node_port and metrics_port should not be equal." - exit 1 - fi - - - name: Generate test ID from current unix timestamp - run: echo "TEST_ID=$(date +%s)" >> $GITHUB_ENV - - - uses: actions/checkout@v3 - - # Needed for hashicorp/setup-terraform@v2 - - uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3 - with: - node-version: 16 - - - uses: actions/setup-python@65d7f2d534ac1bc67fcd62888c5f4f3d2cb2b236 # v4 - with: - python-version: '3.12' - - - name: Setup Terraform - uses: hashicorp/setup-terraform@v2 - with: - terraform_version: 1.5.6 - - - name: Install Ansible and deps - run: | - sudo apt update && sudo apt install -y openssh-client - python -m pip install --upgrade pip - pip install -r infrastructure/loadtests/ansible/requirements.txt - ansible-galaxy install -r infrastructure/loadtests/ansible/requirements.yml - - - name: Terraform Init And Apply - working-directory: infrastructure/loadtests - run: | - terraform init - terraform apply -auto-approve \ - -parallelism=${{ env.NUM_INSTANCES }} \ - -var="num_instances=${{ env.NUM_INSTANCES }}" \ - -var="node_port=${{ env.NODE_PORT }}" \ - -var="metrics_port=${{ env.METRICS_PORT }}" \ - -var="test_id=${{ env.TEST_ID }}" - - - name: Generate list of host:port for config generator - working-directory: node - run: | - set -o pipefail - - sudo apt update && sudo apt install -y gettext-base - tmp_inventory=$(cat ../infrastructure/loadtests/ansible/gcp.yml) - echo "${tmp_inventory}" | envsubst > ../infrastructure/loadtests/ansible/gcp.yml - - cat ../infrastructure/loadtests/ansible/gcp.yml - - ansible-inventory -i ../infrastructure/loadtests/ansible/gcp.yml --list | \ - tee /tmp/ansible_output.txt | \ - grep -q "No inventory was parsed" && { echo "Error: No inventory was parsed."; exit 1; } - - jq -r '.gcp_loadtest.hosts[]' < /tmp/ansible_output.txt | \ - awk -v port=${{ env.NODE_PORT }} -F\" '{print $1 ":" port}' > ips_prts.txt - - - name: Install node build dependencies - run: sudo apt update && sudo apt install -y clang - - - uses: actions-rust-lang/setup-rust-toolchain@v1 - id: setup-rust - - - name: Print used Rust versions - run: | - echo "Rustc version: ${{ steps.setup-rust.outputs.rustc-version }}" - echo "Cargo version: ${{ steps.setup-rust.outputs.cargo-version }}" - echo "Rustup version: ${{ steps.setup-rust.outputs.rustup-version }}" - - - name: Pre-create dirs for node artifacts - working-directory: node - run: mkdir -p artifacts/{node_configs,binaries} - - - name: Generate node configs - working-directory: node - run: | - cargo run -p zksync_consensus_tools \ - --bin localnet_config -- \ - --input-addrs ips_prts.txt \ - --validator-count ${{ env.VALIDATORS }} \ - --peer-count ${{ env.PEERS }} \ - --metrics-server-port ${{ env.METRICS_PORT }} \ - --output-dir artifacts/node_configs - - - name: Build executor binary - working-directory: node - run: | - build_output=$(cargo build --release -p zksync_consensus_tools --bin executor --message-format=json) || exit 1 - echo "$build_output" | jq -r 'select(.executable != null) | .executable' \ - | while read binary; do - cp "$binary" artifacts/binaries/ - done - - - name: Run Ansible - working-directory: infrastructure/loadtests/ansible - run: | - sa_name=$(gcloud iam service-accounts describe deployer-sandbox@matterlabs-infra.iam.gserviceaccount.com --format='value(uniqueId)') - ansible-playbook -i gcp.yml \ - --user sa_${sa_name} \ - --private-key .ssh/google_compute_engine playbook.yml \ - --forks ${{ env.NUM_INSTANCES }} - - - name: Terraform Destroy - working-directory: infrastructure/loadtests - if: always() - run: | - terraform destroy -auto-approve \ - -parallelism=${{ env.NUM_INSTANCES }} \ - -var="num_instances=${{ env.NUM_INSTANCES }}" \ - -var="node_port=${{ env.NODE_PORT }}" \ - -var="metrics_port=${{ env.METRICS_PORT }}" \ - -var="test_id=${{ env.TEST_ID }}"