diff --git a/.circleci/config.yml b/.circleci/config.yml deleted file mode 100644 index 87029707f8..0000000000 --- a/.circleci/config.yml +++ /dev/null @@ -1,339 +0,0 @@ -version: 2.1 - -parameters: - cache_version: - type: string - default: v5 - -jobs: - build: - resource_class: xlarge - docker: - - image: node:16 - environment: - NODE_OPTIONS: '--max-old-space-size=16384' - steps: - - checkout - - run: git submodule update --init --recursive - - run: echo 'export PATH=$HOME/CIRCLE_PROJECT_REPONAME/node_modules/.bin:$PATH' >> $BASH_ENV - - restore_cache: - keys: - - lib-{{ .Environment.CIRCLE_SHA1 }}-feat/NerveMixinArbitrum - - restore_cache: - keys: - - cache-{{ checksum "yarn.lock" }}-<< pipeline.parameters.cache_version >> - - run: - name: install-yarn - command: npm install --force --global yarn@1.22.0 - - run: - name: yarn - command: yarn --frozen-lockfile --ignore-engines install || yarn --frozen-lockfile --ignore-engines install - - setup_remote_docker - - run: yarn build:ci - - save_cache: - key: cache-{{ checksum "yarn.lock" }}-<< pipeline.parameters.cache_version >> - paths: - - ~/project/node_modules - - ~/.cache/yarn - - save_cache: - key: lib-{{ .Environment.CIRCLE_SHA1 }}-<< pipeline.parameters.cache_version >> - paths: - - ~/project/contracts/erc20/generated-artifacts/ - - ~/project/contracts/erc20/generated-wrappers/ - - ~/project/contracts/erc20/lib/ - - ~/project/contracts/erc20/node_modules - - ~/project/contracts/erc20/test/generated-artifacts/ - - ~/project/contracts/erc20/test/generated-wrappers/ - - ~/project/contracts/test-utils/lib/ - - ~/project/contracts/test-utils/node_modules - - ~/project/contracts/treasury/generated-artifacts/ - - ~/project/contracts/treasury/generated-wrappers/ - - ~/project/contracts/treasury/lib/ - - ~/project/contracts/treasury/node_modules - - ~/project/contracts/treasury/test/generated-artifacts/ - - ~/project/contracts/treasury/test/generated-wrappers/ - - ~/project/contracts/utils/generated-artifacts/ - - ~/project/contracts/utils/generated-wrappers/ - - ~/project/contracts/utils/lib/ - - ~/project/contracts/utils/node_modules - - ~/project/contracts/utils/test/generated-artifacts/ - - ~/project/contracts/utils/test/generated-wrappers/ - - ~/project/contracts/zero-ex/generated-artifacts/ - - ~/project/contracts/zero-ex/generated-wrappers/ - - ~/project/contracts/zero-ex/lib/ - - ~/project/contracts/zero-ex/node_modules - - ~/project/contracts/zero-ex/test/generated-artifacts/ - - ~/project/contracts/zero-ex/test/generated-wrappers/ - - ~/project/packages/asset-swapper/node_modules - - ~/project/packages/contract-addresses/lib/ - - ~/project/packages/contract-addresses/node_modules - - ~/project/packages/contract-artifacts/lib/ - - ~/project/packages/contract-artifacts/node_modules - - ~/project/packages/contract-wrappers/lib/ - - ~/project/packages/contract-wrappers/node_modules - - ~/project/packages/protocol-utils/lib/ - - ~/project/packages/protocol-utils/node_modules - - store_artifacts: - path: ~/repo/packages/abi-gen/test-cli/output - - store_artifacts: - path: ~/repo/packages/contract-wrappers/generated_docs - test-exchange-ganache: - resource_class: xlarge - docker: - - image: node:16 - steps: - - checkout - - restore_cache: - keys: - - cache-{{ checksum "yarn.lock" }}-<< pipeline.parameters.cache_version >> - - restore_cache: - keys: - - lib-{{ .Environment.CIRCLE_SHA1 }}-<< pipeline.parameters.cache_version >> - - run: yarn wsrun -p @0x/contracts-exchange -m --serial -c test:circleci - test-integrations-ganache: - resource_class: xlarge - docker: - - image: node:16 - steps: - - checkout - - restore_cache: - keys: - - cache-{{ checksum "yarn.lock" }}-<< pipeline.parameters.cache_version >> - - restore_cache: - keys: - - lib-{{ .Environment.CIRCLE_SHA1 }}-<< pipeline.parameters.cache_version >> - - run: yarn wsrun -p @0x/contracts-integrations -m --serial -c test:circleci - test-contracts-staking-ganache: - resource_class: xlarge - docker: - - image: node:16 - steps: - - checkout - - restore_cache: - keys: - - cache-{{ checksum "yarn.lock" }}-<< pipeline.parameters.cache_version >> - - lib-{{ .Environment.CIRCLE_SHA1 }}-<< pipeline.parameters.cache_version >> - - run: yarn wsrun -p @0x/contracts-staking -m --serial -c test:circleci - test-contracts-extra-ganache: - resource_class: xlarge - docker: - - image: node:16 - steps: - - checkout - - restore_cache: - keys: - - cache-{{ checksum "yarn.lock" }} - - restore_cache: - keys: - - lib-{{ .Environment.CIRCLE_SHA1 }}-<< pipeline.parameters.cache_version >> - - run: yarn wsrun -p @0x/contracts-exchange-forwarder -p @0x/contracts-coordinator -m --serial -c test:circleci - test-contracts-rest-ganache: - resource_class: xlarge - docker: - - image: node:16 - steps: - - checkout - - run: | - git diff --name-only development >> changed.txt - if ! grep -q \.sol changed.txt; then - circleci-agent step halt - fi - - restore_cache: - keys: - - cache-{{ checksum "yarn.lock" }}-<< pipeline.parameters.cache_version >> - - restore_cache: - keys: - - lib-{{ .Environment.CIRCLE_SHA1 }}-<< pipeline.parameters.cache_version >> - - run: | - yarn wsrun \ - -p @0x/contracts-multisig \ - -p @0x/contracts-utils \ - -p @0x/contracts-exchange-libs \ - -p @0x/contracts-erc20 \ - -p @0x/contracts-erc721 \ - -p @0x/contracts-erc1155 \ - -p @0x/contracts-asset-proxy \ - -p @0x/contracts-broker \ - -p @0x/contracts-zero-ex \ - -m --serial -c test:circleci - test-foundry: - resource_class: xlarge - docker: - - image: ghcr.io/foundry-rs/foundry:latest - steps: - - checkout - - run: | - git diff --name-only development >> changed.txt - cat changed.txt - if ! grep -q \.sol changed.txt; then - circleci-agent step halt - fi - - restore_cache: - keys: - - cache-{{ checksum "yarn.lock" }}-<< pipeline.parameters.cache_version >> - - restore_cache: - keys: - - lib-{{ .Environment.CIRCLE_SHA1 }}-<< pipeline.parameters.cache_version >> - - run: git submodule update --init --recursive - - run: - command: forge test - working_directory: ~/project/contracts/zero-ex - test-publish: - resource_class: large - environment: - NODE_OPTIONS: '--max-old-space-size=6442' - docker: - - image: node:16 - - image: 0xorg/verdaccio - steps: - - checkout - - run: | - git diff --name-only development >> changed.txt - cat changed.txt - if ! grep -q packages/ changed.txt; then - circleci-agent step halt - fi - - restore_cache: - keys: - - cache-{{ checksum "yarn.lock" }}-<< pipeline.parameters.cache_version >> - - restore_cache: - keys: - - lib-{{ .Environment.CIRCLE_SHA1 }}-<< pipeline.parameters.cache_version >> - - run: - command: yarn test:publish:circleci - no_output_timeout: 1800 - - store_artifacts: - path: ~/.npm/_logs - test-doc-generation: - docker: - - image: node:16 - steps: - - checkout - - restore_cache: - keys: - - cache-{{ checksum "yarn.lock" }}-<< pipeline.parameters.cache_version >> - - restore_cache: - keys: - - lib-{{ .Environment.CIRCLE_SHA1 }}-<< pipeline.parameters.cache_version >> - - run: - command: yarn test:generate_docs:circleci - no_output_timeout: 1200 - test-rest: - docker: - - image: node:16 - environment: - RUST_ROUTER: 'true' - steps: - - checkout - - restore_cache: - keys: - - cache-{{ checksum "yarn.lock" }}-<< pipeline.parameters.cache_version >> - - restore_cache: - keys: - - lib-{{ .Environment.CIRCLE_SHA1 }}-<< pipeline.parameters.cache_version >> - - run: yarn wsrun -p @0x/contracts-test-utils -m --serial -c test:circleci - - run: yarn wsrun -p @0x/contract-addresses -m --serial -c test:circleci - - run: yarn wsrun -p @0x/contract-artifacts -m --serial -c test:circleci - - run: yarn wsrun -p @0x/contract-wrappers-test -m --serial -c test:circleci - - run: yarn wsrun -p @0x/order-utils -m --serial -c test:circleci - - save_cache: - key: coverage-contract-wrappers-test-{{ checksum "yarn.lock" }} - paths: - - ~/repo/packages/contract-wrappers-test/coverage/lcov.info - - save_cache: - key: coverage-order-utils-{{ checksum "yarn.lock" }} - paths: - - ~/repo/packages/order-utils/coverage/lcov.info - - save_cache: - key: coverage-web3-wrapper-{{ checksum "yarn.lock" }} - paths: - - ~/repo/packages/web3-wrapper/coverage/lcov.info - static-tests: - resource_class: large - docker: - - image: node:16 - steps: - - checkout - - restore_cache: - keys: - - cache-{{ checksum "yarn.lock" }}-<< pipeline.parameters.cache_version >> - - restore_cache: - keys: - - lib-{{ .Environment.CIRCLE_SHA1 }}-<< pipeline.parameters.cache_version >> - - run: - command: yarn lerna run lint - - run: - command: yarn prettier:ci - - run: - command: yarn deps_versions:ci - - run: - command: yarn diff_md_docs:ci - - run: - command: yarn test:links - submit-coverage: - docker: - - image: node:16 - steps: - - restore_cache: - keys: - - cache-{{ checksum "yarn.lock" }}-<< pipeline.parameters.cache_version >> - - restore_cache: - keys: - - lib-{{ .Environment.CIRCLE_SHA1 }}-<< pipeline.parameters.cache_version >> - - restore_cache: - keys: - - coverage-contract-wrappers-test-{{ checksum "yarn.lock" }} - - restore_cache: - keys: - - coverage-order-utils-{{ checksum "yarn.lock" }} - - restore_cache: - keys: - - coverage-contracts-{{ checksum "yarn.lock" }} - - run: yarn report_coverage -workflows: - version: 2 - main: - jobs: - - build - # Disabled until we begin actively developing on these packages again. - # - test-exchange-ganache: - # requires: - # - build - # - test-integrations-ganache: - # requires: - # - build - # - test-contracts-staking-ganache: - # requires: - # - build - # - test-contracts-extra-ganache: - # requires: - # - build - - test-foundry: - requires: - - build - - test-contracts-rest-ganache: - requires: - - build - - test-rest: - requires: - - build - - static-tests: - requires: - - build - - test-publish: - requires: - - build - - test-doc-generation: - requires: - - build - # Disabled until this repo has a coveralls API key - # - submit-coverage: - # requires: - # # Disabled until we begin actively developing on these packages again. - # # - test-exchange-ganache - # # - test-integrations-ganache - # # - test-contracts-staking-ganache - # # - test-contracts-extra-ganache - # - test-contracts-rest-ganache - # - test-rest - # - static-tests diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000000..134cf890ad --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,84 @@ +name: Continuous Integration +on: + push: + branches: + - main + - development + pull_request: + +jobs: + build: + name: Build and test + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + submodules: recursive + + - name: Setup Node + uses: actions/setup-node@v3 + with: + node-version: "16" + + - name: Install dependencies + run: yarn install --frozen-lockfile + + - name: Build solution + run: yarn build + + - name: Lint typescript + run: yarn lint:ts + + - name: Lint solidity + run: yarn lint:contracts + + - name: Run prettier + run: yarn prettier:ci + + - name: Check dependent packages have consistent versions + run: yarn deps_versions:ci + + - name: Check diff in docs + run: yarn diff_md_docs:ci + + - name: Check for broken links in markdown files + run: yarn test:links + + - name: Test doc generation + run: yarn test:generate_docs:ci + + - name: Test @0x/contracts-* + run: | + yarn wsrun \ + -p @0x/contracts-multisig \ + -p @0x/contracts-utils \ + -p @0x/contracts-exchange-libs \ + -p @0x/contracts-erc20 \ + -p @0x/contracts-erc721 \ + -p @0x/contracts-erc1155 \ + -p @0x/contracts-asset-proxy \ + -p @0x/contracts-broker \ + -p @0x/contracts-zero-ex \ + -m --serial -c test:ci + + - name: Test local @0x/contracts-* + run: | + yarn wsrun \ + -p @0x/contracts-test-utils \ + -p @0x/contract-addresses \ + -p @0x/contract-artifacts \ + -p @0x/contract-wrappers-test \ + -p @0x/order-utils \ + -m --serial -c test:ci + + - name: Add foundry + uses: foundry-rs/foundry-toolchain@v1 + with: + version: nightly + + - name: Run foundry tests for zero ex contracts only + working-directory: contracts/zero-ex + run: | + forge --version + forge build --sizes + forge test -vvv --gas-report diff --git a/.github/workflows/dependabot.yml b/.github/workflows/dependabot.yml new file mode 100644 index 0000000000..5a7cb4bbee --- /dev/null +++ b/.github/workflows/dependabot.yml @@ -0,0 +1,7 @@ +version: 2 +updates: + - package-ecosystem: github-actions + directory: / + schedule: + interval: monthy + target-branch: "development" diff --git a/.prettierignore b/.prettierignore index 2f8b5df737..7ee323b477 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,4 +1,5 @@ lib +deps .nyc_output /contracts/broker/generated-wrappers /contracts/broker/test/generated-wrappers diff --git a/.solhintignore b/.solhintignore index 96f6541d6a..b4b0e0ca45 100644 --- a/.solhintignore +++ b/.solhintignore @@ -1 +1,4 @@ contracts/erc20/contracts/src/ZRXToken.sol +node_modules +foundry-artifacts +**/deps diff --git a/CODEOWNERS b/CODEOWNERS index c97af726ef..44b1c3f97c 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -8,7 +8,7 @@ # Dev tools & setup -.circleci/ @dekz +.github/ @dekz packages/contract-addresses/ @dekz @dextracker @kyu-c packages/contract-artifacts/ @dekz packages/protocol-utils/ @dekz diff --git a/README.md b/README.md index 7b1387ad63..ce6f8d5778 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,6 @@ This repository is a monorepo including the 0x protocol smart contracts and nume [website-url]: https://0x.org -[![CircleCI](https://circleci.com/gh/0xProject/protocol.svg?style=svg&circle-token=61bf7cd8c9b4e11b132089dfcffdd1be277d1e0c)](https://circleci.com/gh/0xProject/protocool) [![Coverage Status](https://coveralls.io/repos/github/0xProject/0x-monorepo/badge.svg?branch=development)](https://coveralls.io/github/0xProject/0x-monorepo?branch=development) [![Discord](https://img.shields.io/badge/chat-discord.chat-yellow.svg?style=flat)](https://discordapp.com/invite/d3FTX3M) [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) diff --git a/contracts/erc20/package.json b/contracts/erc20/package.json index fb678fb623..65eaf681a4 100644 --- a/contracts/erc20/package.json +++ b/contracts/erc20/package.json @@ -29,7 +29,7 @@ "coverage:report:html": "istanbul report html && open coverage/index.html", "profiler:report:html": "istanbul report html && open coverage/index.html", "coverage:report:lcov": "istanbul report lcov", - "test:circleci": "yarn test", + "test:ci": "yarn test", "contracts:gen": "contracts-gen generate", "contracts:copy": "contracts-gen copy", "docs:md": "ts-doc-gen --sourceDir='$PROJECT_FILES' --output=$MD_FILE_DIR --fileExtension=mdx --tsconfig=./typedoc-tsconfig.json", diff --git a/contracts/test-utils/package.json b/contracts/test-utils/package.json index a2d85e00b2..50e86144f2 100644 --- a/contracts/test-utils/package.json +++ b/contracts/test-utils/package.json @@ -22,7 +22,7 @@ "coverage:report:html": "istanbul report html && open coverage/index.html", "profiler:report:html": "istanbul report html && open coverage/index.html", "coverage:report:lcov": "istanbul report lcov", - "test:circleci": "yarn test" + "test:ci": "yarn test" }, "repository": { "type": "git", diff --git a/contracts/treasury/package.json b/contracts/treasury/package.json index 4daa35107a..99ad0bf5ea 100644 --- a/contracts/treasury/package.json +++ b/contracts/treasury/package.json @@ -23,7 +23,7 @@ "generate_contract_wrappers": "abi-gen --debug --abis ${npm_package_config_abis} --output test/generated-wrappers --backend ethers", "lint": "eslint src test", "fix": "eslint --fix src test", - "test:circleci": "yarn test", + "test:ci": "yarn test", "contracts:gen": "contracts-gen generate", "contracts:copy": "contracts-gen copy", "docs:md": "ts-doc-gen --sourceDir='$PROJECT_FILES' --output=$MD_FILE_DIR --fileExtension=mdx --tsconfig=./typedoc-tsconfig.json", diff --git a/contracts/utils/package.json b/contracts/utils/package.json index adcd0eacb8..8b3ec4bf64 100644 --- a/contracts/utils/package.json +++ b/contracts/utils/package.json @@ -29,7 +29,7 @@ "coverage:report:html": "istanbul report html && open coverage/index.html", "profiler:report:html": "istanbul report html && open coverage/index.html", "coverage:report:lcov": "istanbul report lcov", - "test:circleci": "yarn test", + "test:ci": "yarn test", "contracts:gen": "contracts-gen generate", "contracts:copy": "contracts-gen copy", "compile:truffle": "truffle compile" diff --git a/contracts/zero-ex/package.json b/contracts/zero-ex/package.json index 752bacecf0..518cd0befb 100644 --- a/contracts/zero-ex/package.json +++ b/contracts/zero-ex/package.json @@ -30,7 +30,7 @@ "coverage:report:html": "istanbul report html && open coverage/index.html", "profiler:report:html": "istanbul report html && open coverage/index.html", "coverage:report:lcov": "istanbul report lcov", - "test:circleci": "yarn test", + "test:ci": "yarn test", "contracts:gen": "contracts-gen generate", "contracts:copy": "contracts-gen copy", "compile:truffle": "truffle compile", diff --git a/package.json b/package.json index e94f03054f..c309267d2c 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "report_coverage": "lcov-result-merger './packages/*/coverage/lcov.info' | coveralls", "test:installation": "node ./node_modules/@0x/monorepo-scripts/lib/test_installation.js", "test:installation:local": "IS_LOCAL_PUBLISH=true node ./node_modules/@0x/monorepo-scripts/lib/test_installation.js", - "test:publish:circleci": "yarn npm-cli-login -u test -p test -e test@example.com -r http://localhost:4873 && IS_LOCAL_PUBLISH=true run-s script:publish test:installation:local", + "test:publish:ci": "yarn npm-cli-login -u test -p test -e test@example.com -r http://localhost:4873 && IS_LOCAL_PUBLISH=true run-s script:publish test:installation:local", "run:publish": "run-s install:all script:prepublish_checks rebuild script:publish", "run:publish:local": "IS_LOCAL_PUBLISH=true yarn run:publish", "run:publish:gha": "run-s build script:publish:gha", @@ -45,7 +45,7 @@ "generate_doc": "node ./node_modules/@0x/monorepo-scripts/lib/doc_generate.js --config ./doc-gen-config.json", "upload_md_docs": "aws s3 rm --recursive s3://docs-markdown; wsrun --exclude-missing -c s3:sync_md_docs", "diff_md_docs:ci": "wsrun --exclude-missing -c diff_docs", - "test:generate_docs:circleci": "for i in ${npm_package_config_packagesWithDocPages}; do yarn generate_doc --package $i || break -1; done;", + "test:generate_docs:ci": "for i in ${npm_package_config_packagesWithDocPages}; do yarn generate_doc --package $i || break -1; done;", "bundlewatch": "bundlewatch", "lint:ts": "wsrun --fast-exit --parallel --exclude-missing -p $PKG -c lint", "lint": "yarn lint:ts && yarn lint:contracts", diff --git a/packages/contract-addresses/package.json b/packages/contract-addresses/package.json index 4c775da62b..b45392eeab 100644 --- a/packages/contract-addresses/package.json +++ b/packages/contract-addresses/package.json @@ -13,7 +13,7 @@ "build": "yarn tsc -b", "build:ci": "yarn build", "test": "mocha --require source-map-support/register 'lib/test/**/*_test.js' --timeout 10000 --bail --exit", - "test:circleci": "yarn test", + "test:ci": "yarn test", "clean": "shx rm -rf lib", "publish:private": "yarn build && gitpkg publish" }, diff --git a/packages/contract-artifacts/package.json b/packages/contract-artifacts/package.json index 78e7d8d77b..da316fa22c 100644 --- a/packages/contract-artifacts/package.json +++ b/packages/contract-artifacts/package.json @@ -16,7 +16,7 @@ "build": "yarn tsc -b", "build:ci": "yarn build", "test": "yarn run_mocha", - "test:circleci": "yarn test", + "test:ci": "yarn test", "run_mocha": "mocha --require source-map-support/register --require make-promises-safe lib/test/**/*_test.js --bail --exit", "clean": "shx rm -rf lib" }, diff --git a/packages/protocol-utils/package.json b/packages/protocol-utils/package.json index 3cb5de663a..8353feecdf 100644 --- a/packages/protocol-utils/package.json +++ b/packages/protocol-utils/package.json @@ -14,7 +14,7 @@ "publish:private": "yarn clean && yarn build && gitpkg publish", "test": "yarn run_mocha", "rebuild_and_test": "run-s build test", - "test:circleci": "yarn test:coverage", + "test:ci": "yarn test:coverage", "run_mocha": "mocha --require source-map-support/register --require make-promises-safe lib/test/**/*_test.js --timeout 10000 --bail --exit", "test:coverage": "mkdir -p ./coverage && nyc npm run test --all && yarn coverage:report:lcov", "coverage:report:lcov": "nyc report --reporter=text-lcov > coverage/lcov.info",