Skip to content

Commit

Permalink
Add run-local-testnet action
Browse files Browse the repository at this point in the history
  • Loading branch information
banool committed Apr 6, 2024
1 parent da2d85e commit 49b4010
Show file tree
Hide file tree
Showing 3 changed files with 134 additions and 0 deletions.
25 changes: 25 additions & 0 deletions .github/workflows/test-actions.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ jobs:
steps:
- uses: actions/checkout@v3
- uses: ./docker-setup

run-gar-auth:
runs-on: ubuntu-latest
steps:
Expand All @@ -28,3 +29,27 @@ jobs:
GCP_WORKLOAD_IDENTITY_PROVIDER: ${{ vars.GCP_WORKLOAD_IDENTITY_PROVIDER }}
GCP_SERVICE_ACCOUNT_EMAIL: ${{ vars.GCP_SERVICE_ACCOUNT_EMAIL }}
create_credentials_file: false

run-local-testnet:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3

# Run a local testnet with the default arguments, which means it uses the latest
# released CLI. Confirm that the local testnet is queryable.
- uses: ./run-local-testnet
with:
NODE_VERSION: 18
- run: curl --fail http://127.0.0.1/v1
- run: curl --fail http://127.0.0.1:8081
- run: curl --fail http://127.0.0.1:8090/v1/graphql

# Run a local testnet using a git ref.
- uses: ./run-local-testnet
with:
NODE_VERSION: 18
CLI_GIT_REF: "a6abdbd41cdd0a5a6c1f7bee6b7120d62054460a"
- run: curl --fail http://127.0.0.1/v1
- run: curl --fail http://127.0.0.1:8081
- run: curl --fail http://127.0.0.1:8090/v1/graphql

21 changes: 21 additions & 0 deletions run-local-testnet/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
## Description

Use the Aptos CLI to run a local testnet. Once this action is succeeds, a local testnet will be running and ready to use.

## Inputs

| parameter | description | required | default |
| --- | --- | --- | --- |
| PNPM_VERSION | The version of pnpm to install. | `false` | 8.15.6 |
| NODE_VERSION | The version of node to install. If not given, the action will look for a .node-version file. | `false` | |
| CLI_GIT_REF | The git ref (e.g. a tag, like 'testnet' or a commit SHA) of the Aptos CLI to use. If not given, we will use the latest released CLI. If given, the local testnet is run from a Docker image. | `false` | |
| GCP_DOCKER_ARTIFACT_REPO | The GCP Docker artifact repository + user. | `false` | docker.io/aptoslabs |
| WITH_INDEXER_API | If true, run an indexer API in addition to the node API and faucet. | `false` | true |
| ADDITIONAL_ARGS | Additional arguments to pass to the CLI when running the local testnet. | `false` | |


## Runs

This action is a `composite` action.


88 changes: 88 additions & 0 deletions run-local-testnet/action.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
name: Run Local Testnet
description: Use the Aptos CLI to run a local testnet. Once this action is succeeds, a local testnet will be running and ready to use.

inputs:
PNPM_VERSION:
description: "The version of pnpm to install."
default: 8.15.6
NODE_VERSION:
description: "The version of node to install. This must be given if a .node-version file is not present."
required: false
CLI_GIT_REF:
description: "The git ref (e.g. a tag, like 'testnet' or a commit SHA) of the Aptos CLI to use. If not given, we will use the latest released CLI. If given, the local testnet is run from a Docker image."
required: false
GCP_DOCKER_ARTIFACT_REPO:
description: "The GCP Docker artifact repository + user."
default: "docker.io/aptoslabs"
required: false
WITH_INDEXER_API:
description: "If true, run an indexer API in addition to the node API and faucet."
default: "true"
ADDITIONAL_ARGS:
description: "Additional arguments to pass to the CLI when running the local testnet."
required: false

runs:
using: composite
steps:
# Install node.
- uses: actions/setup-node@v4
with:
node-version: ${{ inputs.NODE_VERSION }}
node-version-file: .node-version
registry-url: "https://registry.npmjs.org"

# Install pnpm.
- uses: pnpm/action-setup@v2
with:
version: ${{ inputs.PNPM_VERSION }}

# Install the Aptos CLI and wait-on.
- run: pnpm install -g @aptos-labs/aptos-cli wait-on
shell: bash
if: ${{ !inputs.CLI_GIT_REF }}

# Run the local testnet using the latest released CLI if no git ref is given.
- run: |
aptos node run-local-testnet \
--assume-yes \
--force-restart \
${{ inputs.WITH_INDEXER_API == 'true' && '--with-indexer-api' || ' ' }} \
${{ inputs.ADDITIONAL_ARGS || ' ' }} \
--log-to-stdout >& ${{ runner.temp }}/local-testnet-logs.txt &
shell: bash
if: ${{ !inputs.CLI_GIT_REF }}
# Run the local testnet using an image if a git ref is given.
- run: |
docker run \
-v /var/run/docker.sock:/var/run/docker.sock \
--network host \
-v ${{ runner.temp }}/testnet:/testnet \
--name=local-testnet-${{ inputs.CLI_GIT_REF }} \
--detach \
${{ inputs.GCP_DOCKER_ARTIFACT_REPO }}/tools:${{ inputs.CLI_GIT_REF }} \
aptos node run-local-testnet \
--test-dir /testnet \
${{ inputs.WITH_INDEXER_API == 'true' && '--with-indexer-api' || ' ' }} \
${{ inputs.ADDITIONAL_ARGS || ' ' }}
shell: bash
if: ${{ inputs.CLI_GIT_REF }}
# Wait for the local testnet to start up.
- run: wait-on --verbose --interval 1500 --timeout 120000 --httpTimeout 120000 http-get://127.0.0.1:8070
shell: bash

# Print the logs from the local testnet if the tests failed.
- name: Print local testnet logs if something failed
run: docker logs local-testnet-${{ inputs.IMAGE_TAG }}
shell: bash
if: ${{ inputs.CLI_GIT_REF && failure() }}

# Print the logs from the local testnet if the tests failed.
- name: Print local testnet logs if something failed
run: cat ${{ runner.temp }}/local-testnet-logs.txt
shell: bash
if: ${{ !inputs.CLI_GIT_REF && failure() }}


0 comments on commit 49b4010

Please sign in to comment.