libp2p perf test #187
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: 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<<EOF" >> $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 |