name: libp2p perf test # How to configure a repository for running this workflow: # 1. Configure auth for the AWS provider as per https://registry.terraform.io/providers/hashicorp/aws/latest/docs#authentication-and-configuration # 2. Run 'terraform init' and 'terraform apply' in 'perf/terraform/configs/remote' to create the resources needed for this workflow # 3. Go to https://console.aws.amazon.com/iamv2/home?#/users/details/perf?section=security_credentials # 4. Click 'Create access key' to get the access key ID and secret access key # 5. Go to https://github.com/libp2p/test-plans/settings/secrets/actions # 6. Click 'New repository secret', set the name to 'PERF_AWS_SECRET_ACCESS_KEY', and paste the secret access key from step 5 # 7. Go to https://github.com/libp2p/test-plans/settings/variables/actions # 8. Click 'New repository variable', set the name to 'PERF_AWS_ACCESS_KEY_ID', and paste the access key ID from step 5 on: workflow_dispatch: inputs: push: description: 'Push the benchmark results to the repository' required: false default: 'true' jobs: perf: name: Perf runs-on: ubuntu-latest timeout-minutes: 240 defaults: run: shell: bash working-directory: perf env: AWS_ACCESS_KEY_ID: ${{ vars.PERF_AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.PERF_AWS_SECRET_ACCESS_KEY }} TF_IN_AUTOMATION: 1 TF_INPUT: 0 steps: - name: Checkout test-plans uses: actions/checkout@v3 with: repository: ${{ github.repository }} ref: ${{ github.ref }} - id: ssh name: Generate SSH key run: | make ssh-keygen echo "key<> $GITHUB_OUTPUT while read -r line; do echo "::add-mask::$line" echo "$line" >> $GITHUB_OUTPUT done < terraform/modules/short_lived/files/perf echo "EOF" >> $GITHUB_OUTPUT - name: Configure SSH uses: webfactory/ssh-agent@d4b9b8ff72958532804b70bbe600ad43b36d5f2e # v0.8.0 with: ssh-private-key: ${{ steps.ssh.outputs.key }} - name: Configure git run: | git config --global user.email "${GITHUB_ACTOR}@users.noreply.github.com>" git config --global user.name "${GITHUB_ACTOR}" - name: Configure terraform uses: hashicorp/setup-terraform@633666f66e0061ca3b725c73b2ec20cd13a8fdd1 # v2.0.3 - name: Init terraform id: init run: terraform init working-directory: perf/terraform/configs/local - name: Apply terraform run: terraform apply -auto-approve working-directory: perf/terraform/configs/local - id: server name: Retrieve server's IP run: terraform output -raw server_ip working-directory: perf/terraform/configs/local - id: client name: Retrieve client's IP run: terraform output -raw client_ip working-directory: perf/terraform/configs/local - name: Download dependencies run: npm ci working-directory: perf/runner - name: Run tests env: SERVER_IP: ${{ steps.server.outputs.stdout }} CLIENT_IP: ${{ steps.client.outputs.stdout }} run: npm run start -- --client-public-ip $CLIENT_IP --server-public-ip $SERVER_IP working-directory: perf/runner - name: Push if: github.event.inputs.push == 'true' env: GITHUB_TOKEN: ${{ github.token }} run: | git add benchmark-results.json git commit -m "perf: update benchmark results" git push gh pr comment --body "See new metrics at https://observablehq.com/@libp2p-workspace/performance-dashboard?branch=$(git rev-parse HEAD)" || true working-directory: perf/runner - name: Archive if: github.event.intputs.push == 'false' uses: actions/upload-artifact@v2 with: name: benchmark-results path: perf/runner/benchmark-results.json - name: Destroy terraform if: always() && steps.init.outputs.exitcode == 0 run: terraform destroy -auto-approve working-directory: perf/terraform/configs/local