celo-monorepo CI/CD for martinvol/CR10_master #173
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: celo-monorepo CI/CD | |
run-name: celo-monorepo CI/CD for ${{ github.head_ref || github.ref_name }} | |
# Dockefile for the self-hosted runner: | |
# https://github.com/celo-org/infrastructure/blob/master/terraform/root-modules/gcp/integration-tests-gke/files/github-arc/Dockerfile-monorepo | |
on: | |
push: | |
branches: | |
- master | |
pull_request: | |
branches: | |
- master | |
concurrency: | |
group: celo-monorepo-${{ github.ref }} | |
cancel-in-progress: true | |
defaults: | |
run: | |
shell: bash --login -eo pipefail {0} | |
env: | |
# Increment these to force cache rebuilding | |
NODE_MODULE_CACHE_VERSION: 4 | |
NODE_OPTIONS: '--max-old-space-size=4096' | |
TERM: dumb | |
GRADLE_OPTS: '-Dorg.gradle.daemon=false -Dorg.gradle.parallel=false -Dorg.gradle.configureondemand=true -Dorg.gradle.jvmargs="-Xmx4096m -XX:+HeapDumpOnOutOfMemoryError"' | |
# Git Tag for contract release to use | |
#RELEASE_TAG: ganache-v7-core-contracts.v9 | |
RELEASE_TAG: core-contracts.v10 | |
# CELO_BLOCKCHAIN_BRANCH_TO_TEST: master | |
CELO_BLOCKCHAIN_BRANCH_TO_TEST: release/1.7.x | |
jobs: | |
install-dependencies: | |
name: Install dependencies | |
outputs: | |
package-json-checksum: ${{ steps.node-checksums.outputs.PACKAGE_JSON_CHECKSUM }} | |
# Propagate more outputs if you need https://github.com/tj-actions/changed-files#outputs | |
# Adding a initial comma so ',<path>' matches also for the first file | |
all_modified_files: ',${{ steps.changed-files.outputs.all_modified_files }}' | |
# runs-on: ubuntu-latest | |
runs-on: ['self-hosted', 'monorepo-node18'] | |
timeout-minutes: 30 | |
steps: | |
- name: Restore .git cache | |
uses: actions/cache@v3 | |
id: cache_git | |
with: | |
path: .git | |
key: git-${{ github.ref }} | |
restore-keys: | | |
git- | |
- uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 | |
- name: Verify setup for incremental testing | |
run: | | |
set -euo pipefail | |
set -v | |
# To get the "master" branch mapping | |
git checkout master | |
git checkout ${GITHUB_SHA} | |
# Verify that following commands work, they are later called in the incremental testing script | |
# Their output does not matter here, the fact that they finish successfully does. | |
git rev-parse --abbrev-ref HEAD | |
git fetch --all --tags | |
- name: Calculate node cache keys | |
id: node-checksums | |
run: | | |
find . -maxdepth 5 -type f -name 'package.json' -not -path "*node_modules*" -print0 | sort -z | xargs -0 cat > $RUNNER_TEMP/package.checksum | |
find ./patches -type f -name '*.patch' -print0 | sort -z | xargs -0 cat >> $RUNNER_TEMP/package.checksum | |
echo "PACKAGE_JSON_CHECKSUM=$(md5sum $RUNNER_TEMP/package.checksum | cut -f1 -d' ')" | |
echo "PACKAGE_JSON_CHECKSUM=$(md5sum $RUNNER_TEMP/package.checksum | cut -f1 -d' ')" >> "$GITHUB_OUTPUT" | |
- name: Restore node cache | |
uses: actions/cache@v3 | |
id: cache_node | |
with: | |
# We need to cache all the artifacts generated by yarn install+build | |
# Update this list also in .github/actions/sync-workspace/action.yml with exactly the same list | |
path: | | |
node_modules | |
packages/**/node_modules | |
key: node-${{ runner.os }}-${{ runner.arch }}-${{ env.NODE_MODULE_CACHE_VERSION }}-${{ hashFiles('**/yarn.lock') }}-${{ steps.node-checksums.outputs.PACKAGE_JSON_CHECKSUM }} | |
restore-keys: | | |
node-${{ runner.os }}-${{ runner.arch }}-${{ env.NODE_MODULE_CACHE_VERSION }}- | |
# We use cache to share the build artifacts between jobs (gh artifacts are too slow...) | |
# For more context check https://github.com/actions/upload-artifact/issues/199 | |
- name: Restore build artifacts cache | |
uses: actions/cache@v3 | |
id: cache_build_artifacts | |
with: | |
# We need to cache all the artifacts generated by yarn install+build | |
# Update this list also in .github/actions/sync-workspace/action.yml with exactly the same list | |
path: | | |
packages/**/lib | |
packages/**/dist | |
packages/**/build | |
packages/protocol/*.js | |
packages/protocol/*.js.map | |
packages/protocol/**/*.js | |
packages/protocol/**/*.js.map | |
packages/sdk/contractkit/src/generated | |
key: code-${{ github.sha }} | |
restore-keys: | | |
code-${{ github.sha }} | |
- name: Install yarn dependencies | |
run: git config --global url."https://".insteadOf ssh:// && yarn install | |
if: steps.cache_node.outputs.cache-hit != 'true' | |
- name: Run yarn postinstall if cache hitted | |
run: yarn run postinstall | |
if: steps.cache_node.outputs.cache-hit == 'true' | |
- name: Fail if generated dependency graph doesn't match committed | |
run: ./scripts/ci_check_dependency_graph_changed.sh | |
- name: Fail if any file changed on git | |
run: | | |
# This fails if there is any change | |
if ! git diff-index HEAD --; then | |
echo "Git changes detected while building. If this is unexpected, bump NODE_MODULE_CACHE_VERSION in .github/workflows/celo-monorepo.yml" | |
exit 1 | |
fi | |
- name: Build packages | |
run: yarn build --ignore docs --include-dependencies | |
- name: Check licenses | |
if: steps.cache_node.outputs.cache-hit != 'true' | |
run: | | |
yarn check-licenses | |
- name: Detect files changed in PR, and expose as output | |
id: changed-files | |
uses: tj-actions/changed-files@v37 | |
with: | |
# Using comma as separator to be able to easily match full paths (using ,<path>) | |
separator: ',' | |
# Checking if changed in the last 100 commits in PRs | |
fetch_depth: '150' | |
- run: echo ",${{ steps.changed-files.outputs.all_modified_files }}" | |
lint-checks: | |
name: Lint code | |
runs-on: ['self-hosted', 'monorepo-node18'] | |
timeout-minutes: 30 | |
needs: install-dependencies | |
steps: | |
# Restore .git cache as we need to checkout the local composite action to run it: | |
# https://github.com/orgs/community/discussions/11771 | |
- uses: actions/cache/restore@v3 | |
id: cache_git | |
with: | |
path: .git | |
key: git-${{ github.ref }} | |
- uses: actions/checkout@v3 | |
- name: Sync workspace | |
uses: ./.github/actions/sync-workspace | |
with: | |
package-json-checksum: ${{ needs.install-dependencies.outputs.package-json-checksum }} | |
- run: yarn run prettify:diff | |
- run: yarn run lint | |
general_test: | |
name: General jest test | |
runs-on: ['self-hosted', 'monorepo-node18'] | |
needs: install-dependencies | |
steps: | |
- uses: actions/cache/restore@v3 | |
id: cache_git | |
with: | |
path: .git | |
key: git-${{ github.ref }} | |
- uses: actions/checkout@v3 | |
- name: Sync workspace | |
uses: ./.github/actions/sync-workspace | |
with: | |
package-json-checksum: ${{ needs.install-dependencies.outputs.package-json-checksum }} | |
- name: Run Jest Tests | |
run: | | |
mkdir -p test-results/jest | |
# Skipping packages that are tested in a specific job below | |
yarn run lerna \ | |
--ignore @celo/contractkit \ | |
--ignore @celo/protocol \ | |
--ignore @celo/celotool \ | |
--ignore @celo/celocli \ | |
--ignore @celo/env-tests \ | |
--ignore @celo/transactions-uri \ | |
--ignore '@celo/wallet-*' \ | |
run test | |
- name: Upload Jest Test Results | |
uses: actions/upload-artifact@v3 | |
with: | |
name: Jest Test Results | |
path: test-results/jest | |
wallet-test: | |
name: Wallet test | |
runs-on: ['self-hosted', 'monorepo-node18'] | |
timeout-minutes: 30 | |
needs: install-dependencies | |
steps: | |
- uses: actions/cache/restore@v3 | |
id: cache_git | |
with: | |
path: .git | |
key: git-${{ github.ref }} | |
- uses: actions/checkout@v3 | |
- name: Sync workspace | |
uses: ./.github/actions/sync-workspace | |
with: | |
package-json-checksum: ${{ needs.install-dependencies.outputs.package-json-checksum }} | |
- name: Run Wallet tests | |
run: | | |
yarn run lerna --scope '@celo/wallet-*' run test | |
pre-protocol-test-release: | |
name: Protocol Tests Prepare | |
runs-on: ['self-hosted', 'monorepo-node18'] | |
# container: | |
# image: us-west1-docker.pkg.dev/devopsre/actions-runner-controller/celo-monorepo:node18 | |
# # Required root to install node12 | |
# options: --user root | |
timeout-minutes: 30 | |
# Comment lint-checks dependency to speed up (as this is a dependency for many other jobs) | |
# needs: [install-dependencies, lint-checks] | |
needs: [install-dependencies] | |
if: | | |
github.base_ref == 'master' || contains(github.base_ref, 'staging') || contains(github.base_ref, 'production') || | |
contains(needs.install-dependencies.outputs.all_modified_files, 'packages/protocol') || | |
contains(needs.install-dependencies.outputs.all_modified_files, 'packages/sdk') || | |
contains(needs.install-dependencies.outputs.all_modified_files, 'packages/typescript') || | |
contains(needs.install-dependencies.outputs.all_modified_files, ',package.json') || | |
contains(needs.install-dependencies.outputs.all_modified_files, ',yarn.lock') || | |
false | |
outputs: | |
protocol-test-must-run: ${{ steps.protocol-test-must-run.outputs.PROTOCOL_TEST_MUST_RUN }} | |
steps: | |
- uses: actions/cache/restore@v3 | |
id: cache_git | |
with: | |
path: .git | |
key: git-${{ github.ref }} | |
- uses: actions/checkout@v3 | |
- name: Sync workspace | |
uses: ./.github/actions/sync-workspace | |
with: | |
package-json-checksum: ${{ needs.install-dependencies.outputs.package-json-checksum }} | |
- name: Cache protocol devchain | |
uses: actions/cache@v3 | |
id: cache_protocol | |
with: | |
path: packages/protocol/.tmp/released_chain | |
key: protocol-${{ github.sha }} | |
restore-keys: | | |
protocol-${{ github.sha }} | |
- name: Opcode tests | |
run: | | |
yarn --cwd packages/protocol check-opcodes | |
- uses: actions/setup-node@v3 | |
# with: | |
# node-version: 12.22.11 | |
# Workaround for https://stackoverflow.com/questions/72978485/git-submodule-update-failed-with-fatal-detected-dubious-ownership-in-repositor | |
- name: Configure git safe directories | |
run: git config --global --add safe.directory '*' | |
- name: Setup tmate session | |
uses: mxschmitt/action-tmate@v3 | |
timeout-minutes: 60 | |
if: false | |
with: | |
limit-access-to-actor: true | |
- name: Generate devchain of previous release | |
run: | | |
echo "Comparing against $RELEASE_TAG" | |
# Github has phased out the git protocol so we ensure that we use | |
# https for all git operations that yarn may perform. | |
git config --global url."https://github.com".insteadOf git://github.com | |
yarn --cwd packages/protocol test:generate-old-devchain-and-build -b $RELEASE_TAG -d .tmp/released_chain -l /dev/stdout -g scripts/truffle/releaseGoldExampleConfigs.json | |
protocol-test-release: | |
name: Protocol Test Release | |
runs-on: ['self-hosted', 'monorepo-node18'] | |
timeout-minutes: 500 | |
needs: [install-dependencies, lint-checks, pre-protocol-test-release] | |
if: | | |
github.base_ref == 'master' || contains(github.base_ref, 'staging') || contains(github.base_ref, 'production') || | |
contains(needs.install-dependencies.outputs.all_modified_files, 'packages/protocol') || | |
contains(needs.install-dependencies.outputs.all_modified_files, 'packages/sdk') || | |
contains(needs.install-dependencies.outputs.all_modified_files, 'packages/typescript') || | |
contains(needs.install-dependencies.outputs.all_modified_files, ',package.json') || | |
contains(needs.install-dependencies.outputs.all_modified_files, ',yarn.lock') || | |
false | |
steps: | |
- uses: actions/cache/restore@v3 | |
id: cache_git | |
with: | |
path: .git | |
key: git-${{ github.ref }} | |
- uses: actions/checkout@v3 | |
- name: Sync workspace | |
uses: ./.github/actions/protocol-sync-workspace | |
with: | |
package-json-checksum: ${{ needs.install-dependencies.outputs.package-json-checksum }} | |
- name: Copy DevChain and Build generated from released tag | |
run: | | |
BUILD_AND_DEVCHAIN_DIR=$(echo build/$(echo $RELEASE_TAG | sed -e 's/\//_/g')) | |
(cp -r packages/protocol/.tmp/released_chain packages/protocol/$BUILD_AND_DEVCHAIN_DIR) | |
- name: Test against current release | |
run: | | |
echo "Comparing against $RELEASE_TAG" | |
sudo apt-get update | |
sudo apt-get install vim lsof --yes | |
BUILD_AND_DEVCHAIN_DIR=$(echo build/$(echo $RELEASE_TAG | sed -e 's/\//_/g')) | |
yarn --cwd packages/protocol test:devchain-release -b $RELEASE_TAG -d $BUILD_AND_DEVCHAIN_DIR -l /dev/stdout | |
# - name: Setup tmate session | |
# uses: mxschmitt/action-tmate@v3 | |
# timeout-minutes: 500 | |
# if: true | |
# with: | |
# limit-access-to-actor: true | |
protocol-test-matrix: | |
# Keeping name short because GitHub UI does not handle long names well | |
name: ${{ matrix.name }} | |
runs-on: ['self-hosted', 'monorepo-node18'] | |
timeout-minutes: 60 | |
needs: [install-dependencies, lint-checks] | |
if: | | |
github.base_ref == 'master' || contains(github.base_ref, 'staging') || contains(github.base_ref, 'production') || | |
contains(needs.install-dependencies.outputs.all_modified_files, 'packages/protocol') || | |
contains(needs.install-dependencies.outputs.all_modified_files, 'packages/sdk') || | |
contains(needs.install-dependencies.outputs.all_modified_files, 'packages/typescript') || | |
contains(needs.install-dependencies.outputs.all_modified_files, ',package.json') || | |
contains(needs.install-dependencies.outputs.all_modified_files, ',yarn.lock') || | |
false | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- name: Protocol Release Snapshots | |
command: | | |
yarn --cwd packages/protocol test:release-snapshots | |
if [[ $(git status packages/protocol/releaseData/versionReports --porcelain) ]]; then | |
git --no-pager diff packages/protocol/releaseData/versionReports | |
echo "There are git differences after generating release version report snapshots" | |
echo "If these changes are intended, update the 'releaseData/versionReports' accordingly" | |
exit 1 | |
fi | |
- name: Protocol Common tests | |
command: | | |
yarn --cwd packages/protocol test common/ | |
- name: Protocol Compatibility | |
command: | | |
yarn --cwd packages/protocol test compatibility/ | |
- name: Protocol Governance Network | |
command: | | |
yarn --cwd packages/protocol test governance/network/ | |
- name: Protocol Governance Validators | |
command: | | |
yarn --cwd packages/protocol test governance/validators/ | |
- name: Protocol Governance Voting | |
command: | | |
yarn --cwd packages/protocol test governance/voting/ | |
- name: Protocol Identity | |
command: | | |
yarn --cwd packages/protocol test identity/ | |
- name: Protocol Stability | |
command: | | |
yarn --cwd packages/protocol test stability/ | |
steps: | |
- uses: actions/cache/restore@v3 | |
id: cache_git | |
with: | |
path: .git | |
key: git-${{ github.ref }} | |
- uses: actions/checkout@v3 | |
with: | |
submodules: recursive | |
- name: Sync workspace | |
uses: ./.github/actions/sync-workspace | |
with: | |
package-json-checksum: ${{ needs.install-dependencies.outputs.package-json-checksum }} | |
rebuild-package: 'true' | |
- name: Build protocol | |
run: | | |
yarn --cwd packages/protocol build | |
- name: Setup tmate session | |
uses: mxschmitt/action-tmate@v3 | |
timeout-minutes: 20 | |
if: contains(matrix.command, 'common/') && false | |
with: | |
limit-access-to-actor: true | |
- name: Execute matrix command for test | |
uses: nick-fields/retry@v2 | |
with: | |
timeout_minutes: 40 | |
max_attempts: 3 | |
command: | | |
${{ matrix.command }} | |
contractkit-tests: | |
name: ContractKit Tests | |
runs-on: ['self-hosted', 'monorepo-node18'] | |
timeout-minutes: 30 | |
needs: [install-dependencies] | |
if: | | |
github.base_ref == 'master' || contains(github.base_ref, 'staging') || contains(github.base_ref, 'production') || | |
contains(needs.install-dependencies.outputs.all_modified_files, 'packages/protocol') || | |
contains(needs.install-dependencies.outputs.all_modified_files, 'packages/dev-utils') || | |
contains(needs.install-dependencies.outputs.all_modified_files, 'packages/sdk') || | |
contains(needs.install-dependencies.outputs.all_modified_files, 'packages/typescript') || | |
contains(needs.install-dependencies.outputs.all_modified_files, ',package.json') || | |
contains(needs.install-dependencies.outputs.all_modified_files, ',yarn.lock') || | |
false | |
steps: | |
- uses: actions/cache/restore@v3 | |
id: cache_git | |
with: | |
path: .git | |
key: git-${{ github.ref }} | |
- uses: actions/checkout@v3 | |
- name: Sync workspace | |
uses: ./.github/actions/sync-workspace | |
with: | |
package-json-checksum: ${{ needs.install-dependencies.outputs.package-json-checksum }} | |
- name: Generate DevChain | |
run: | | |
cd packages/sdk/contractkit | |
yarn test:reset | |
- name: Run tests | |
run: | | |
yarn --cwd=packages/sdk/contractkit test | |
cli-tests: | |
name: CeloCli Tests | |
runs-on: ['self-hosted', 'monorepo-node18'] | |
timeout-minutes: 30 | |
needs: [install-dependencies] | |
if: | | |
github.base_ref == 'master' || contains(github.base_ref, 'staging') || contains(github.base_ref, 'production') || | |
contains(needs.install-dependencies.outputs.all_modified_files, 'packages/cli') || | |
contains(needs.install-dependencies.outputs.all_modified_files, 'packages/protocol') || | |
contains(needs.install-dependencies.outputs.all_modified_files, 'packages/dev-utils') || | |
contains(needs.install-dependencies.outputs.all_modified_files, 'packages/sdk') || | |
contains(needs.install-dependencies.outputs.all_modified_files, 'packages/typescript') || | |
contains(needs.install-dependencies.outputs.all_modified_files, ',package.json') || | |
contains(needs.install-dependencies.outputs.all_modified_files, ',yarn.lock') || | |
false | |
steps: | |
- uses: actions/cache/restore@v3 | |
id: cache_git | |
with: | |
path: .git | |
key: git-${{ github.ref }} | |
- uses: actions/checkout@v3 | |
- name: Sync workspace | |
uses: ./.github/actions/sync-workspace | |
with: | |
package-json-checksum: ${{ needs.install-dependencies.outputs.package-json-checksum }} | |
- name: Generate DevChain | |
run: | | |
cd packages/cli | |
yarn test:reset | |
- name: Run tests | |
run: | | |
yarn --cwd=packages/cli test | |
- name: Fail if someone forgot to commit CLI docs | |
run: | | |
yarn --cwd=packages/cli docs | |
if [[ $(git status packages/docs/command-line-interface --porcelain) ]]; then | |
git --no-pager diff packages/docs/command-line-interface | |
echo "There are git differences after generating CLI docs" | |
exit 1 | |
fi | |
- name: Verify that a new account can be created | |
run: | | |
yarn --cwd=packages/cli run celocli account:new | |
typescript-tests: | |
name: Typescript package Tests | |
runs-on: ['self-hosted', 'monorepo-node18'] | |
timeout-minutes: 30 | |
needs: [install-dependencies] | |
if: | | |
github.base_ref == 'master' || contains(github.base_ref, 'staging') || contains(github.base_ref, 'production') || | |
contains(needs.install-dependencies.outputs.all_modified_files, 'packages/typescript') || | |
contains(needs.install-dependencies.outputs.all_modified_files, ',package.json') || | |
contains(needs.install-dependencies.outputs.all_modified_files, ',yarn.lock') || | |
false | |
steps: | |
- uses: actions/cache/restore@v3 | |
id: cache_git | |
with: | |
path: .git | |
key: git-${{ github.ref }} | |
- uses: actions/checkout@v3 | |
- name: Sync workspace | |
uses: ./.github/actions/sync-workspace | |
with: | |
package-json-checksum: ${{ needs.install-dependencies.outputs.package-json-checksum }} | |
- name: Install and test the npm package | |
run: | | |
set -euo pipefail | |
cd packages/typescript | |
yarn pack | |
cd $RUNNER_TEMP | |
npm install $RUNNER_WORKSPACE/celo-monorepo/packages/typescript/*.tgz | |
base-test: | |
name: SDK Base package Tests | |
runs-on: ['self-hosted', 'monorepo-node18'] | |
timeout-minutes: 30 | |
needs: [install-dependencies] | |
if: | | |
github.base_ref == 'master' || contains(github.base_ref, 'staging') || contains(github.base_ref, 'production') || | |
contains(needs.install-dependencies.outputs.all_modified_files, 'packages/sdk') || | |
contains(needs.install-dependencies.outputs.all_modified_files, 'packages/typescript') || | |
contains(needs.install-dependencies.outputs.all_modified_files, ',package.json') || | |
contains(needs.install-dependencies.outputs.all_modified_files, ',yarn.lock') || | |
false | |
steps: | |
- uses: actions/cache/restore@v3 | |
id: cache_git | |
with: | |
path: .git | |
key: git-${{ github.ref }} | |
- uses: actions/checkout@v3 | |
- name: Sync workspace | |
uses: ./.github/actions/sync-workspace | |
with: | |
package-json-checksum: ${{ needs.install-dependencies.outputs.package-json-checksum }} | |
- name: Setup tmate session | |
uses: mxschmitt/action-tmate@v3 | |
timeout-minutes: 20 | |
if: false | |
with: | |
limit-access-to-actor: true | |
- name: Install and test the npm package | |
run: | | |
set -euo pipefail | |
cd packages/sdk/base | |
yarn pack | |
cd $RUNNER_TEMP | |
npm install $RUNNER_WORKSPACE/celo-monorepo/packages/sdk/base/*.tgz | |
utils-test: | |
name: SDK Utils package Tests | |
runs-on: ['self-hosted', 'monorepo-node18'] | |
timeout-minutes: 30 | |
needs: [install-dependencies] | |
if: | | |
github.base_ref == 'master' || contains(github.base_ref, 'staging') || contains(github.base_ref, 'production') || | |
contains(needs.install-dependencies.outputs.all_modified_files, 'packages/sdk') || | |
contains(needs.install-dependencies.outputs.all_modified_files, 'packages/typescript') || | |
contains(needs.install-dependencies.outputs.all_modified_files, ',package.json') || | |
contains(needs.install-dependencies.outputs.all_modified_files, ',yarn.lock') || | |
false | |
steps: | |
- uses: actions/cache/restore@v3 | |
id: cache_git | |
with: | |
path: .git | |
key: git-${{ github.ref }} | |
- uses: actions/checkout@v3 | |
- name: Sync workspace | |
uses: ./.github/actions/sync-workspace | |
with: | |
package-json-checksum: ${{ needs.install-dependencies.outputs.package-json-checksum }} | |
- name: Install and test the npm package | |
run: | | |
set -euo pipefail | |
cd packages/sdk/base | |
yarn pack | |
cd ../utils | |
yarn pack | |
cd $RUNNER_TEMP | |
npm install $RUNNER_WORKSPACE/celo-monorepo/packages/sdk/base/*.tgz | |
npm install $RUNNER_WORKSPACE/celo-monorepo/packages/sdk/utils/*.tgz | |
end-to-end-geth-matrix: | |
# Keeping name short because GitHub UI does not handle long names well | |
name: e2e ${{ matrix.name }} | |
runs-on: ['self-hosted', 'monorepo-node18'] | |
timeout-minutes: 60 | |
needs: [install-dependencies, lint-checks, contractkit-tests] | |
if: | | |
github.base_ref == 'master' || contains(github.base_ref, 'staging') || contains(github.base_ref, 'production') || | |
contains(needs.install-dependencies.outputs.all_modified_files, 'packages/celotool') || | |
contains(needs.install-dependencies.outputs.all_modified_files, 'packages/protocol') || | |
contains(needs.install-dependencies.outputs.all_modified_files, 'packages/dev-utils') || | |
contains(needs.install-dependencies.outputs.all_modified_files, 'packages/sdk') || | |
contains(needs.install-dependencies.outputs.all_modified_files, 'packages/typescript') || | |
contains(needs.install-dependencies.outputs.all_modified_files, ',package.json') || | |
contains(needs.install-dependencies.outputs.all_modified_files, ',yarn.lock') || | |
false | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- name: Transfer test | |
command: | | |
set -e | |
# Forcing to load go and rust paths | |
export PATH="/usr/local/go/bin:$HOME/.cargo/bin:${PATH}" | |
cd packages/celotool | |
./ci_test_transfers.sh checkout ${CELO_BLOCKCHAIN_BRANCH_TO_TEST} | |
- name: Blockchain Parameters test | |
command: | | |
set -e | |
export PATH="/usr/local/go/bin:$HOME/.cargo/bin:${PATH}" | |
cd packages/celotool | |
./ci_test_blockchain_parameters.sh checkout ${CELO_BLOCKCHAIN_BRANCH_TO_TEST} | |
- name: Slashing test | |
command: | | |
set -e | |
export PATH="/usr/local/go/bin:$HOME/.cargo/bin:${PATH}" | |
cd packages/celotool | |
./ci_test_slashing.sh checkout ${CELO_BLOCKCHAIN_BRANCH_TO_TEST} | |
- name: Governance test | |
command: | | |
set -e | |
export PATH="/usr/local/go/bin:$HOME/.cargo/bin:${PATH}" | |
cd packages/celotool | |
./ci_test_governance.sh checkout ${CELO_BLOCKCHAIN_BRANCH_TO_TEST} | |
- name: Replica test | |
command: | | |
set -e | |
export PATH="/usr/local/go/bin:$HOME/.cargo/bin:${PATH}" | |
cd packages/celotool | |
./ci_test_replicas.sh checkout ${CELO_BLOCKCHAIN_BRANCH_TO_TEST} | |
- name: Sync test | |
command: | | |
set -e | |
export PATH="/usr/local/go/bin:$HOME/.cargo/bin:${PATH}" | |
cd packages/celotool | |
./ci_test_sync.sh checkout ${CELO_BLOCKCHAIN_BRANCH_TO_TEST} | |
- name: CIP35 eth compatibility test | |
command: | | |
set -e | |
export PATH="/usr/local/go/bin:$HOME/.cargo/bin:${PATH}" | |
cd packages/celotool | |
echo "Test is skipped because migrations somehow fail" | |
# ./ci_test_cip35.sh checkout ${CELO_BLOCKCHAIN_BRANCH_TO_TEST} | |
- name: Validator order test | |
command: | | |
set -e | |
export PATH="/usr/local/go/bin:$HOME/.cargo/bin:${PATH}" | |
cd packages/celotool | |
./ci_test_validator_order.sh checkout ${CELO_BLOCKCHAIN_BRANCH_TO_TEST} | |
steps: | |
- uses: actions/cache/restore@v3 | |
id: cache_git | |
with: | |
path: .git | |
key: git-${{ github.ref }} | |
- uses: actions/checkout@v3 | |
with: | |
submodules: recursive | |
- name: Sync workspace | |
uses: ./.github/actions/sync-workspace | |
with: | |
package-json-checksum: ${{ needs.install-dependencies.outputs.package-json-checksum }} | |
rebuild-package: 'true' | |
- name: Setup tmate session | |
uses: mxschmitt/action-tmate@v3 | |
timeout-minutes: 20 | |
if: contains(matrix.command, 'ci_test_transfers.sh') && false | |
with: | |
limit-access-to-actor: true | |
- name: Execute matrix command for test | |
uses: nick-fields/retry@v2 | |
with: | |
timeout_minutes: 30 | |
max_attempts: 3 | |
command: | | |
${{ matrix.command }} | |
# NOTE: This has not been fully tested as we don't have a license for certora | |
certora-test: | |
name: Certora test ${{ matrix.name }} | |
runs-on: ['self-hosted', 'monorepo-node18'] | |
timeout-minutes: 30 | |
needs: [install-dependencies, lint-checks] | |
# Disable as certora license is not active | |
if: | | |
false && ( | |
github.base_ref == 'master' || contains(github.base_ref, 'staging') || contains(github.base_ref, 'production') || | |
contains(needs.install-dependencies.outputs.all_modified_files, 'packages/protocol') || | |
contains(needs.install-dependencies.outputs.all_modified_files, 'packages/sdk') || | |
contains(needs.install-dependencies.outputs.all_modified_files, ',package.json') || | |
contains(needs.install-dependencies.outputs.all_modified_files, ',yarn.lock') | |
) | |
env: | |
CERTORAKEY: NOT_ACTIVE | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- name: Locked Gold | |
command: | | |
cd packages/protocol | |
./specs/scripts/lockedgold.sh | |
- name: Accounts | |
command: | | |
cd packages/protocol | |
./specs/scripts/accounts.sh | |
- name: Accounts | |
command: | | |
cd packages/protocol | |
./specs/scripts/accountsPrivileged.sh | |
- name: Accounts | |
command: | | |
cd packages/protocol | |
./specs/scripts/applyHarness.sh | |
./specs/scripts/governance.sh | |
- name: Accounts | |
command: | | |
cd packages/protocol | |
./specs/scripts/reserve.sh | |
steps: | |
- uses: actions/cache/restore@v3 | |
id: cache_git | |
with: | |
path: .git | |
key: git-${{ github.ref }} | |
- uses: actions/checkout@v3 | |
- name: Sync workspace | |
uses: ./.github/actions/sync-workspace | |
with: | |
package-json-checksum: ${{ needs.install-dependencies.outputs.package-json-checksum }} | |
- uses: actions/setup-java@v3 | |
with: | |
distribution: 'zulu' | |
java-version: '11' | |
- name: Setup tmate session | |
uses: mxschmitt/action-tmate@v3 | |
timeout-minutes: 20 | |
if: contains(matrix.command, '/lockedgold.sh') && false | |
with: | |
limit-access-to-actor: true | |
- name: Certora dependencies | |
run: | | |
echo "export PATH=$PATH:~/.local/bin" >> ~/.bashrc | |
sudo apt-get update | |
sudo apt-get install -y software-properties-common python3-pip | |
pip3 install certora-cli | |
wget https://github.com/ethereum/solidity/releases/download/v0.5.13/solc-static-linux | |
chmod +x solc-static-linux | |
sudo mv solc-static-linux /usr/bin/solc | |
- name: Build and run command | |
run: | | |
${{ matrix.command }} |