From 70b6b7eb3ce5e9d3f443f83346b9c593126d5286 Mon Sep 17 00:00:00 2001 From: josemarinas <36479864+josemarinas@users.noreply.github.com> Date: Tue, 18 Jul 2023 22:21:23 +0200 Subject: [PATCH] Feature: Add js client (#2) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add dummy js-client * update yarn.lock * update package.json * fix formatting * fix comments and add js-client github actions * update js-client test workflow * fix test workflow * fix lint * update workflow * wip * fix comments and add implementation * update yarn lock and remove docs workflow * Update packages/contracts-ethers/package.json Co-authored-by: Jør∂¡ <4456749+brickpop@users.noreply.github.com> * Update packages/js-client/src/context.ts Co-authored-by: Jør∂¡ <4456749+brickpop@users.noreply.github.com> * Update packages/js-client/test/unit/context.test.ts Co-authored-by: Jør∂¡ <4456749+brickpop@users.noreply.github.com> * add tests * fix comments * fix comments * update client-common version * fix lint command * Update packages/js-client/src/internal/modules/methods.ts Co-authored-by: Jør∂¡ <4456749+brickpop@users.noreply.github.com> * update size limit * update gh actions * update gh actions * fix gh actions * add build command * update gh actions * fix gh action * fix lint * fix lint * ignore js-client tests * minor fixes --------- Co-authored-by: Jør∂¡ <4456749+brickpop@users.noreply.github.com> --- .github/labeler.yml | 14 + .../js-client-generate-release-matrix.py | 59 + .../js-client-generate-release-notes.py | 26 + .github/workflows/js-client-publish.yml | 90 + .github/workflows/js-client-release.yml | 75 + .../workflows/js-client-scan-vuln-deps.yml | 83 + .github/workflows/js-client-tests.yml | 69 + .github/workflows/pull-request-labeler.yml | 11 + .prettierignore | 1 + packages/contracts-ethers/npm/index.ts | 4 - packages/contracts-ethers/package.json | 6 +- packages/js-client/.gitignore | 5 + packages/js-client/README.md | 103 + packages/js-client/package.json | 81 + packages/js-client/src/client.ts | 31 + packages/js-client/src/context.ts | 82 + packages/js-client/src/index.ts | 3 + packages/js-client/src/internal/core.ts | 13 + .../src/internal/graphql-queries/index.ts | 1 + .../src/internal/graphql-queries/numbers.ts | 33 + packages/js-client/src/internal/index.ts | 2 + packages/js-client/src/internal/interfaces.ts | 37 + .../src/internal/modules/decoding.ts | 14 + .../src/internal/modules/encoding.ts | 21 + .../src/internal/modules/estimation.ts | 56 + .../js-client/src/internal/modules/index.ts | 4 + .../js-client/src/internal/modules/methods.ts | 78 + packages/js-client/src/internal/types.ts | 26 + packages/js-client/src/internal/utils.ts | 15 + packages/js-client/src/types.ts | 36 + packages/js-client/test-environment.js | 16 + packages/js-client/test/abi/ERC1967.ts | 73 + packages/js-client/test/abi/index.ts | 1 + packages/js-client/test/constants.ts | 24 + .../js-client/test/helpers/block-times.ts | 37 + packages/js-client/test/helpers/build-daos.ts | 72 + .../test/helpers/deploy-contracts.ts | 353 ++ .../js-client/test/helpers/ganache-setup.ts | 18 + packages/js-client/test/helpers/index.ts | 2 + .../test/integration/decoding.test.ts | 41 + .../test/integration/encoding.test.ts | 42 + .../test/integration/estimation.test.ts | 59 + .../test/integration/methods.test.ts | 162 + .../js-client/test/mocks/aragon-sdk-ipfs.ts | 33 + .../js-client/test/mocks/graphql-request.ts | 38 + packages/js-client/test/unit/context.test.ts | 297 + packages/js-client/tsconfig.json | 38 + yarn.lock | 5638 +++++++++++++++-- 48 files changed, 7660 insertions(+), 363 deletions(-) create mode 100644 .github/labeler.yml create mode 100644 .github/scripts/js-client-generate-release-matrix.py create mode 100644 .github/scripts/js-client-generate-release-notes.py create mode 100644 .github/workflows/js-client-publish.yml create mode 100644 .github/workflows/js-client-release.yml create mode 100644 .github/workflows/js-client-scan-vuln-deps.yml create mode 100644 .github/workflows/js-client-tests.yml create mode 100644 .github/workflows/pull-request-labeler.yml create mode 100644 packages/js-client/.gitignore create mode 100644 packages/js-client/README.md create mode 100644 packages/js-client/package.json create mode 100644 packages/js-client/src/client.ts create mode 100644 packages/js-client/src/context.ts create mode 100644 packages/js-client/src/index.ts create mode 100644 packages/js-client/src/internal/core.ts create mode 100644 packages/js-client/src/internal/graphql-queries/index.ts create mode 100644 packages/js-client/src/internal/graphql-queries/numbers.ts create mode 100644 packages/js-client/src/internal/index.ts create mode 100644 packages/js-client/src/internal/interfaces.ts create mode 100644 packages/js-client/src/internal/modules/decoding.ts create mode 100644 packages/js-client/src/internal/modules/encoding.ts create mode 100644 packages/js-client/src/internal/modules/estimation.ts create mode 100644 packages/js-client/src/internal/modules/index.ts create mode 100644 packages/js-client/src/internal/modules/methods.ts create mode 100644 packages/js-client/src/internal/types.ts create mode 100644 packages/js-client/src/internal/utils.ts create mode 100644 packages/js-client/src/types.ts create mode 100644 packages/js-client/test-environment.js create mode 100644 packages/js-client/test/abi/ERC1967.ts create mode 100644 packages/js-client/test/abi/index.ts create mode 100644 packages/js-client/test/constants.ts create mode 100644 packages/js-client/test/helpers/block-times.ts create mode 100644 packages/js-client/test/helpers/build-daos.ts create mode 100644 packages/js-client/test/helpers/deploy-contracts.ts create mode 100644 packages/js-client/test/helpers/ganache-setup.ts create mode 100644 packages/js-client/test/helpers/index.ts create mode 100644 packages/js-client/test/integration/decoding.test.ts create mode 100644 packages/js-client/test/integration/encoding.test.ts create mode 100644 packages/js-client/test/integration/estimation.test.ts create mode 100644 packages/js-client/test/integration/methods.test.ts create mode 100644 packages/js-client/test/mocks/aragon-sdk-ipfs.ts create mode 100644 packages/js-client/test/mocks/graphql-request.ts create mode 100644 packages/js-client/test/unit/context.test.ts create mode 100644 packages/js-client/tsconfig.json diff --git a/.github/labeler.yml b/.github/labeler.yml new file mode 100644 index 00000000..363fc33d --- /dev/null +++ b/.github/labeler.yml @@ -0,0 +1,14 @@ +# These labels (common, client, ipfs and client-common) are only informative. +# While the labels -release are for trriggering the release process. + +js-client: + - ./packages/js-client/**/* + - ./packages/js-client/* + +subgraph: + - ./packages/subgraph/**/* + - ./packages/subgraph/* + +contracts: + - ./packages/contracts/**/* + - ./packages/contracts/* diff --git a/.github/scripts/js-client-generate-release-matrix.py b/.github/scripts/js-client-generate-release-matrix.py new file mode 100644 index 00000000..2dba4385 --- /dev/null +++ b/.github/scripts/js-client-generate-release-matrix.py @@ -0,0 +1,59 @@ +import json +import os + +# +# // PULL_LABELS = toJson(github.event.pull_request.labels) +# +# [ +# { +# "color": "FFFFF7", +# "default": false, +# "description": "Issue describes change in the development process", +# "id": 1786730933, +# "name": "label_pqr-xyz-release", +# "node_id": "MDU6TGFiZWwxNzg2NzMwOTMz", +# "url": "https://api.github.com/repos/parzh/parzh.github.io/labels/Domain:%20dev" +# }, +# { +# "color": "cc062a", +# "default": false, +# "description": "Issue must be addressed right now", +# "id": 1786706637, +# "name": "label_abc-release", +# "node_id": "MDU6TGFiZWwxNzg2NzA2NjM3", +# "url": "https://api.github.com/repos/parzh/parzh.github.io/labels/Priority:%20top" +# }, +# { +# "color": "00727C", +# "default": false, +# "description": "Issue describes lack of a functionality or an open possibility of enhancement", +# "id": 1786726751, +# "name": "label_123-improvement", +# "node_id": "MDU6TGFiZWwxNzg2NzI2NzUx", +# "url": "https://api.github.com/repos/parzh/parzh.github.io/labels/Type:%20improvement" +# } +# ] +# +# Test: +# PULL_LABELS=$(cat labels.json) python3 js-clientt-generate-release-matrix.py +# + +try: + labels = json.loads(os.getenv('PULL_LABELS')) +except: + labels = [] + +trigger_substring = "-release" +matrix = [] +hasLabels = False +for label in labels: + label_name = str(label['name']) + trigger_substring_index = label_name.find(trigger_substring) + if trigger_substring_index != -1: + matrix.append({ + 'package': label_name[:trigger_substring_index], + }) + hasLabels = True +# print("hasLabels=" + str(hasLabels) + " >> $GITHUB_OUTPUT") +# print("matrix=" + json.dumps({'include': matrix}) + " >> $GITHUB_OUTPUT") +print(json.dumps({'include': matrix})) \ No newline at end of file diff --git a/.github/scripts/js-client-generate-release-notes.py b/.github/scripts/js-client-generate-release-notes.py new file mode 100644 index 00000000..44a2556e --- /dev/null +++ b/.github/scripts/js-client-generate-release-notes.py @@ -0,0 +1,26 @@ +import sys + +changelog = sys.argv[1] + +releaseNotesLines = [] +with open(changelog, 'r') as f: + lines = f.readlines() + foundStart = False + i = 0 + while i < len(lines): + line = lines[i] + if foundStart: + if line.startswith('## ['): + break + releaseNotesLines.append(line.strip()) + if line.startswith("