diff --git a/.github/actions/run-interop-ping-test/action.yml b/.github/actions/run-interop-ping-test/action.yml new file mode 100644 index 0000000..8892fe6 --- /dev/null +++ b/.github/actions/run-interop-ping-test/action.yml @@ -0,0 +1,79 @@ +name: "libp2p ping interop test" +description: "Run the libp2p ping interoperability test suite" +inputs: + test-filter: + description: "Filter which tests to run out of the created matrix" + required: false + default: "" + extra-versions: + description: "Space-separated paths to JSON files describing additional images" + required: false + default: "" +runs: + using: "composite" + steps: + # This depends on where this file is within this repository. This walks up + # from here to the multidim-interop folder + - run: | + WORK_DIR=$(realpath "${{ github.action_path }}/../../../multidim-interop") + echo "WORK_DIR=$WORK_DIR" >> $GITHUB_OUTPUT + shell: bash + id: find-workdir + + - uses: actions/setup-node@v3 + with: + node-version: 18 + + - name: Expose GitHub Runtime # Needed for docker buildx to cache properly (See https://docs.docker.com/build/cache/backends/gha/#authentication) + uses: crazy-max/ghaction-github-runtime@v2 + + - name: Set up Docker Buildx + id: buildx + uses: docker/setup-buildx-action@v2 + + - name: Install deps + working-directory: ${{ steps.find-workdir.outputs.WORK_DIR }} + run: npm ci + shell: bash + + - name: Build images + working-directory: ${{ steps.find-workdir.outputs.WORK_DIR }} + run: make + shell: bash + + - name: Run the test + working-directory: ${{ steps.find-workdir.outputs.WORK_DIR }} + run: WORKER_COUNT=2 npm run test -- --extra-version=${{ inputs.extra-versions }} --name-filter=${{ inputs.test-filter }} + shell: bash + + - name: Print the results + working-directory: ${{ steps.find-workdir.outputs.WORK_DIR }} + run: cat results.csv + shell: bash + + - name: Render results + working-directory: ${{ steps.find-workdir.outputs.WORK_DIR }} + run: npm run renderResults > ./dashboard.md + shell: bash + + - name: Show Dashboard Output + working-directory: ${{ steps.find-workdir.outputs.WORK_DIR }} + run: cat ./dashboard.md >> $GITHUB_STEP_SUMMARY + shell: bash + + - name: Exit with Error + working-directory: ${{ steps.find-workdir.outputs.WORK_DIR }} + run: | + if grep -q ":red_circle:" ./dashboard.md; then + exit 1 + else + exit 0 + fi + shell: bash + + - uses: actions/upload-artifact@v3 + with: + name: test-plans-output + path: | + ${{ steps.find-workdir.outputs.WORK_DIR }}/results.csv + ${{ steps.find-workdir.outputs.WORK_DIR }}/dashboard.md diff --git a/.github/workflows/multidim-interop.yml b/.github/workflows/multidim-interop.yml index f458df9..ab221f9 100644 --- a/.github/workflows/multidim-interop.yml +++ b/.github/workflows/multidim-interop.yml @@ -12,3 +12,8 @@ jobs: uses: "./.github/workflows/run-testplans.yml" with: dir: "multidim-interop" + run-multidim-interop-ng: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: ./.github/actions/run-interop-ping-test diff --git a/multidim-interop/package.json b/multidim-interop/package.json index 1da0591..9559704 100644 --- a/multidim-interop/package.json +++ b/multidim-interop/package.json @@ -4,7 +4,7 @@ "description": "Tests libp2p implementations against each other across various dimensions.", "main": "testplans.ts", "scripts": { - "test": "ts-node -O '{\"resolveJsonModule\": true}' testplans.ts", + "test": "ts-node testplans.ts", "renderResults": "ts-node renderResults.ts" }, "author": "marcopolo", diff --git a/multidim-interop/testplans.ts b/multidim-interop/testplans.ts index dd98e4e..5aa9875 100644 --- a/multidim-interop/testplans.ts +++ b/multidim-interop/testplans.ts @@ -26,6 +26,11 @@ import path from "path"; default: "", type: 'string' }, + 'extra-version': { + description: 'Paths to JSON files for additional versions to include in the test matrix', + default: [], + type: 'array' + }, }) .help() .version(false) @@ -45,6 +50,11 @@ import path from "path"; } } + for (let versionPath of argv.extraVersion.filter(p => p !== "")) { + const contents = await fs.readFile(versionPath); + extraVersions.push(JSON.parse(contents.toString())) + } + let testSpecs = await buildTestSpecs(versions.concat(extraVersions)) const nameFilter = argv["name-filter"] @@ -87,4 +97,4 @@ import path from "path"; await fs.writeFile("results.csv", stringify(statuses)) console.log("Run complete") -})() \ No newline at end of file +})() diff --git a/multidim-interop/tsconfig.json b/multidim-interop/tsconfig.json new file mode 100644 index 0000000..07062f2 --- /dev/null +++ b/multidim-interop/tsconfig.json @@ -0,0 +1,6 @@ +{ + "compilerOptions": { + "resolveJsonModule": true, + "esModuleInterop": true + } +}