105 lines
4.1 KiB
YAML
105 lines
4.1 KiB
YAML
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
|