Skip to content

Build & Test: master #2100

Build & Test: master

Build & Test: master #2100

Workflow file for this run

name: Build & Test
run-name: 'Build & Test: ${{ 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
- changeset-release/master
- prerelease/*
pull_request:
types: [opened, reopened, synchronize, edited, ready_for_review]
concurrency:
group: dev-tooling-${{ 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: 5
NODE_OPTIONS: '--max-old-space-size=4096'
TERM: dumb
# Supported Foundry version defined at celo-org (GitHub organisation) level, for consistency across workflows.
SUPPORTED_FOUNDRY_VERSION: ${{ vars.SUPPORTED_FOUNDRY_VERSION }}
# EXAMPLE on debug ssh step
# - name: Setup tmate session
# uses: mxschmitt/action-tmate@v3
# timeout-minutes: 20
# if: contains(matrix.command, 'common/') && false
# with:
# limit-access-to-actor: true
jobs:
install-dependencies:
name: Install dependencies
outputs:
# 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 }}'
artifacts_to_cache: ${{ steps.get_artifacts_to_cache.outputs.artifacts_to_cache }}
# runs-on: ubuntu-latest
runs-on: ['self-hosted', 'org', '8-cpu']
timeout-minutes: 30
steps:
- uses: actions/setup-node@v4
with:
node-version: '18'
- name: 'enable corepack for yarn'
run: sudo corepack enable yarn
- uses: actions/checkout@v4
# must call twice because of chicken and egg problem with yarn and node
- uses: actions/setup-node@v4
with:
node-version: '18'
cache: 'yarn'
- name: Restore node cache
uses: actions/cache@v4
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: |
./.yarn/cache
./.yarn/install-state.gz
node_modules
packages/**/node_modules
key: node-${{ runner.os }}-${{ runner.arch }}-${{ env.NODE_MODULE_CACHE_VERSION }}-${{ hashFiles('yarn.lock') }}
restore-keys: |
node-${{ runner.os }}-${{ runner.arch }}-${{ env.NODE_MODULE_CACHE_VERSION }}-
- 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: Build packages
run: yarn build
- name: Check licenses
if: steps.cache_node.outputs.cache-hit != 'true'
run: |
yarn check-licenses
# Get workdir local changes and fail if there are any change
# - name: Verify Changed files
# id: verify-changed-files
# uses: tj-actions/verify-changed-files@v17
# with:
# path: yarn.lock
# fail-if-changed: 'true'
# fail-message: 'Files changed during build. Please build locally and commit the changes.'
# files: |
# **/*
- run: |
echo "${{ steps.verify-changed-files.outputs.changed_files }}"
- name: Get the artifacts to cache
id: get_artifacts_to_cache
# there are too many files when listed individually.
run: |
artifacts_to_cache="$(git ls-files --others --ignored --exclude-standard | grep -v node_modules | grep -v .js.map | grep -v .d.ts.map | grep -v .yarn/cache)"
echo "artifacts_to_cache<<EOF" >> $GITHUB_OUTPUT
echo "$artifacts_to_cache" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
# 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@v4
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: |
${{ steps.get_artifacts_to_cache.outputs.artifacts_to_cache }}
key: code-${{ github.sha }}
restore-keys: |
code-${{ github.sha }}
- name: Detect files changed in PR (or commit), and expose as output
id: changed-files
uses: tj-actions/changed-files@v41
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', 'org', '8-cpu']
timeout-minutes: 30
needs: install-dependencies
steps:
- uses: actions/checkout@v4
- name: Sync workspace
uses: ./.github/actions/sync-workspace
with:
artifacts_to_cache: ${{ needs.install-dependencies.outputs.artifacts_to_cache }}
- run: yarn run prettify:diff
- run: yarn run lint
general_test:
name: General jest test
runs-on: ['self-hosted', 'org', '8-cpu']
permissions: # Must change the job token permissions to use Akeyless JWT auth
id-token: write
contents: read
needs: install-dependencies
steps:
- uses: actions/checkout@v4
- name: Install Foundry
uses: foundry-rs/foundry-toolchain@v1
with:
version: ${{ env.SUPPORTED_FOUNDRY_VERSION }}
- name: Sync workspace
uses: ./.github/actions/sync-workspace
with:
artifacts_to_cache: ${{ needs.install-dependencies.outputs.artifacts_to_cache }}
- name: Run Jest Tests
run: |
mkdir -p test-results/jest
# Skipping packages that are tested in a specific job below
yarn workspaces foreach \
--all \
--exclude celo \
--exclude "@celo/{celocli,contractkit,wallet-*}" \
-ip \
run test --coverage
- name: Upload Jest Test Results
uses: actions/upload-artifact@v3
with:
name: Jest Test Results
path: test-results/jest
- uses: ./.github/actions/upload-codecov
with:
report-name: "general_test"
wallet-test:
name: Wallet test
runs-on: ['self-hosted', 'org', '8-cpu']
timeout-minutes: 30
permissions: # Must change the job token permissions to use Akeyless JWT auth
id-token: write
contents: read
needs: install-dependencies
steps:
- uses: actions/checkout@v4
- name: Sync workspace
uses: ./.github/actions/sync-workspace
with:
artifacts_to_cache: ${{ needs.install-dependencies.outputs.artifacts_to_cache }}
- run: sudo corepack enable yarn
- name: Run Wallet tests
run: |
yarn workspaces foreach -ip --all --include '@celo/wallet-*' run test --coverage
- uses: ./.github/actions/upload-codecov
with:
report-name: "wallet"
contractkit-tests-anvil:
name: ContractKit Tests (Anvil)
runs-on: ['self-hosted', 'org', '8-cpu']
timeout-minutes: 30
permissions: # Must change the job token permissions to use Akeyless JWT auth
id-token: write
contents: read
needs: [install-dependencies]
steps:
- uses: actions/checkout@v4
- name: Sync workspace
uses: ./.github/actions/sync-workspace
with:
artifacts_to_cache: ${{ needs.install-dependencies.outputs.artifacts_to_cache }}
- run: sudo corepack enable yarn
- name: Install Foundry
uses: foundry-rs/foundry-toolchain@v1
with:
version: "nightly-f625d0fa7c51e65b4bf1e8f7931cd1c6e2e285e9"
- name: Run tests
run: |
yarn workspace @celo/contractkit test-anvil --coverage
- uses: ./.github/actions/upload-codecov
with:
report-name: "contractkit-anvil"
contractkit-tests-ganache:
name: ContractKit Tests (Ganache)
runs-on: ['self-hosted', 'org', '8-cpu']
timeout-minutes: 30
permissions: # Must change the job token permissions to use Akeyless JWT auth
id-token: write
contents: read
needs: [install-dependencies]
steps:
- uses: actions/checkout@v4
- name: Sync workspace
uses: ./.github/actions/sync-workspace
with:
artifacts_to_cache: ${{ needs.install-dependencies.outputs.artifacts_to_cache }}
- run: sudo corepack enable yarn
- name: Install Foundry
uses: foundry-rs/foundry-toolchain@v1
with:
version: "nightly-f625d0fa7c51e65b4bf1e8f7931cd1c6e2e285e9"
- name: Run tests
run: |
yarn workspace @celo/contractkit test-ganache --coverage
- uses: ./.github/actions/upload-codecov
with:
report-name: "contractkit-ganache"
cli-tests-anvil:
name: CeloCli Tests (Anvil)
runs-on: ['self-hosted', 'org', '8-cpu']
timeout-minutes: 30
permissions: # Must change the job token permissions to use Akeyless JWT auth
id-token: write
contents: read
needs: [install-dependencies]
steps:
- uses: actions/checkout@v4
- name: Sync workspace
uses: ./.github/actions/sync-workspace
with:
artifacts_to_cache: ${{ needs.install-dependencies.outputs.artifacts_to_cache }}
- name: Install Foundry
uses: foundry-rs/foundry-toolchain@v1
with:
version: ${{ env.SUPPORTED_FOUNDRY_VERSION }}
- name: Run tests
run: |
yarn workspace @celo/celocli test-ci-anvil --coverage
- name: Verify that a new account can be created
run: |
yarn workspace @celo/celocli run celocli account:new
- name: Test that releasecelo command topic is working
run: |
yarn workspace @celo/celocli run celocli releasecelo --help
- uses: ./.github/actions/upload-codecov
with:
report-name: "celocli-anvil"
cli-tests-ganache:
name: CeloCli Tests (Ganache)
runs-on: ['self-hosted', 'org', '8-cpu']
timeout-minutes: 30
permissions: # Must change the job token permissions to use Akeyless JWT auth
id-token: write
contents: read
needs: [install-dependencies]
steps:
- uses: actions/checkout@v4
- name: Sync workspace
uses: ./.github/actions/sync-workspace
with:
artifacts_to_cache: ${{ needs.install-dependencies.outputs.artifacts_to_cache }}
- name: Install Foundry
uses: foundry-rs/foundry-toolchain@v1
with:
version: ${{ env.SUPPORTED_FOUNDRY_VERSION }}
- name: Run tests
run: |
yarn workspace @celo/celocli test-ci-ganache --coverage
- uses: ./.github/actions/upload-codecov
with:
report-name: "celocli-ganache"
docs-tests:
name: Docs tests
runs-on: ['self-hosted', 'org', '8-cpu']
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/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/checkout@v4
- name: Sync workspace
uses: ./.github/actions/sync-workspace
with:
artifacts_to_cache: ${{ needs.install-dependencies.outputs.artifacts_to_cache }}
- run: sudo corepack enable yarn
- name: Sync workspace
uses: ./.github/actions/sync-workspace
with:
artifacts_to_cache: ${{ needs.install-dependencies.outputs.artifacts_to_cache }}
- name: Fail if someone forgot to commit docs
run: |
yarn docs
if [[ $(git status docs --porcelain) ]]; then
git --no-pager diff docs
echo "There are git differences after generating all docs"
git status
git diff
exit 1
fi
base-test:
name: SDK Base package Tests
runs-on: ['self-hosted', 'org', '8-cpu']
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/checkout@v4
- name: Sync workspace
uses: ./.github/actions/sync-workspace
with:
artifacts_to_cache: ${{ needs.install-dependencies.outputs.artifacts_to_cache }}
- run: sudo corepack enable yarn
- name: Install and test the npm package
run: |
set -euo pipefail
cd packages/sdk/base
yarn pack
cd $RUNNER_TEMP
npm install $RUNNER_WORKSPACE/developer-tooling/packages/sdk/base/*.tgz
utils-test:
name: SDK Utils package Tests
runs-on: ['self-hosted', 'org', '8-cpu']
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/checkout@v4
- name: Sync workspace
uses: ./.github/actions/sync-workspace
with:
artifacts_to_cache: ${{ needs.install-dependencies.outputs.artifacts_to_cache }}
- run: sudo corepack enable yarn
- 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/developer-tooling/packages/sdk/base/*.tgz
npm install $RUNNER_WORKSPACE/developer-tooling/packages/sdk/utils/*.tgz
validate-renovate-config:
name: Validate Renovate Config
runs-on: ubuntu-latest
steps:
- name: Checkout Repo
uses: actions/checkout@v4
- name: "Setup Node"
uses: actions/setup-node@v4
with:
node-version: 20.x
- name: Validate Team Config
uses: suzuki-shunsuke/[email protected]
with:
config_file_path: dt-renovate-base.json
strict: "false"
- name: Validate Repo Config
uses: suzuki-shunsuke/[email protected]
with:
config_file_path: renovate.json
strict: "false"