From 49b40107496e01dc57017af9873abe16fc136e95 Mon Sep 17 00:00:00 2001 From: Daniel Porteous Date: Sat, 6 Apr 2024 12:32:14 +0100 Subject: [PATCH] Add run-local-testnet action --- .github/workflows/test-actions.yaml | 25 ++++++++ run-local-testnet/README.md | 21 +++++++ run-local-testnet/action.yaml | 88 +++++++++++++++++++++++++++++ 3 files changed, 134 insertions(+) create mode 100644 run-local-testnet/README.md create mode 100644 run-local-testnet/action.yaml diff --git a/.github/workflows/test-actions.yaml b/.github/workflows/test-actions.yaml index c2322eb..2c50f76 100644 --- a/.github/workflows/test-actions.yaml +++ b/.github/workflows/test-actions.yaml @@ -13,6 +13,7 @@ jobs: steps: - uses: actions/checkout@v3 - uses: ./docker-setup + run-gar-auth: runs-on: ubuntu-latest steps: @@ -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 + diff --git a/run-local-testnet/README.md b/run-local-testnet/README.md new file mode 100644 index 0000000..238ba3d --- /dev/null +++ b/run-local-testnet/README.md @@ -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. + + diff --git a/run-local-testnet/action.yaml b/run-local-testnet/action.yaml new file mode 100644 index 0000000..910d35d --- /dev/null +++ b/run-local-testnet/action.yaml @@ -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() }} + +