Solidity Random Beacon #47
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: Solidity Random Beacon | |
on: | |
schedule: | |
- cron: "0 0 * * *" | |
push: | |
branches: | |
- main | |
paths: | |
- "solidity/random-beacon/**" | |
- ".github/workflows/contracts-random-beacon.yml" | |
pull_request: | |
# We intend to use `workflow dispatch` in two different situations/paths: | |
# 1. If a workflow will be manually dispatched from branch named | |
# `dapp-development`, workflow will deploy the contracts on the selected | |
# testnet and publish them to NPM registry with `dapp-dev-<environment>` | |
# suffix and `dapp-development-<environment>` tag. Such packages are meant | |
# to be used locally by the team developing Threshold Token dApp and may | |
# contain contracts that have different values from the ones used on | |
# mainnet. | |
# 2. If a workflow will be manually dispatched from a branch which name is not | |
# `dapp-development`, the workflow will deploy the contracts on the | |
# selected testnet and publish them to NPM registry with `<environment>` | |
# suffix and tag. Such packages will be used later to deploy public | |
# Threshold Token dApp on a testnet, with contracts resembling those used | |
# on mainnet. | |
workflow_dispatch: | |
inputs: | |
environment: | |
description: "Environment (network) for workflow execution, e.g. `sepolia`" | |
required: true | |
upstream_builds: | |
description: "Upstream builds" | |
required: false | |
upstream_ref: | |
description: "Git reference to checkout (e.g. branch name)" | |
required: false | |
default: "main" | |
jobs: | |
contracts-detect-changes: | |
runs-on: ubuntu-latest | |
outputs: | |
path-filter: ${{ steps.filter.outputs.path-filter }} | |
steps: | |
- uses: actions/checkout@v3 | |
if: github.event_name == 'pull_request' | |
- uses: dorny/paths-filter@v2 | |
if: github.event_name == 'pull_request' | |
id: filter | |
with: | |
filters: | | |
path-filter: | |
- './solidity/random-beacon/**' | |
- './.github/workflows/contracts-random-beacon.yml' | |
contracts-lint: | |
needs: contracts-detect-changes | |
if: | | |
github.event_name == 'push' | |
|| needs.contracts-detect-changes.outputs.path-filter == 'true' | |
runs-on: ubuntu-latest | |
defaults: | |
run: | |
working-directory: ./solidity/random-beacon | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-node@v3 | |
with: | |
# Using fixed version, because 18.16 was sometimes causing issues with | |
# artifacts generation during `hardhat compile` - see | |
# https://github.com/NomicFoundation/hardhat/issues/3877 | |
node-version: "18.15.0" | |
cache: "yarn" | |
cache-dependency-path: solidity/random-beacon/yarn.lock | |
- name: Install dependencies | |
run: yarn install --network-concurrency 1 | |
- name: Build | |
run: yarn build | |
- name: Lint | |
run: yarn lint | |
contracts-slither: | |
needs: contracts-detect-changes | |
if: | | |
github.event_name == 'push' | |
|| needs.contracts-detect-changes.outputs.path-filter == 'true' | |
runs-on: ubuntu-latest | |
defaults: | |
run: | |
working-directory: ./solidity/random-beacon | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-node@v3 | |
with: | |
# Using fixed version, because 18.16 was sometimes causing issues with | |
# artifacts generation during `hardhat compile` - see | |
# https://github.com/NomicFoundation/hardhat/issues/3877 | |
node-version: "18.15.0" | |
cache: "yarn" | |
cache-dependency-path: solidity/random-beacon/yarn.lock | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: 3.10.8 | |
- name: Install Solidity | |
env: | |
SOLC_VERSION: 0.8.9 # according to solidity.version in hardhat.config.js | |
run: | | |
pip3 install solc-select | |
solc-select install $SOLC_VERSION | |
solc-select use $SOLC_VERSION | |
- name: Install Slither | |
env: | |
SLITHER_VERSION: 0.8.3 | |
run: pip3 install slither-analyzer==$SLITHER_VERSION | |
- name: Install dependencies | |
run: yarn install --network-concurrency 1 | |
- name: Run Slither | |
run: slither . | |
contracts-build-and-test: | |
needs: contracts-detect-changes | |
if: | | |
github.event_name != 'pull_request' | |
|| needs.contracts-detect-changes.outputs.path-filter == 'true' | |
runs-on: ubuntu-latest | |
defaults: | |
run: | |
working-directory: ./solidity/random-beacon | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-node@v3 | |
with: | |
# Using fixed version, because 18.16 was sometimes causing issues with | |
# artifacts generation during `hardhat compile` - see | |
# https://github.com/NomicFoundation/hardhat/issues/3877 | |
node-version: "18.15.0" | |
cache: "yarn" | |
cache-dependency-path: solidity/random-beacon/yarn.lock | |
- name: Install dependencies | |
run: yarn install --network-concurrency 1 | |
- name: Build solidity contracts | |
run: yarn build | |
- name: Run tests | |
if: github.ref != 'refs/heads/dapp-development' | |
run: yarn test | |
contracts-deployment-dry-run: | |
needs: contracts-detect-changes | |
if: | | |
github.event_name != 'pull_request' | |
|| needs.contracts-detect-changes.outputs.path-filter == 'true' | |
runs-on: ubuntu-latest | |
defaults: | |
run: | |
working-directory: ./solidity/random-beacon | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-node@v3 | |
with: | |
# Using fixed version, because 18.16 was sometimes causing issues with | |
# artifacts generation during `hardhat compile` - see | |
# https://github.com/NomicFoundation/hardhat/issues/3877 | |
node-version: "18.15.0" | |
cache: "yarn" | |
cache-dependency-path: solidity/random-beacon/yarn.lock | |
- name: Install dependencies | |
run: yarn install --network-concurrency 1 --frozen-lockfile | |
- name: Deploy contracts | |
run: yarn deploy:test | |
- name: Build Docker Image | |
uses: ./.github/actions/docker-build-push | |
with: | |
imageName: keep-random-beacon-hardhat | |
context: ./solidity/random-beacon | |
push: false | |
contracts-deployment-testnet: | |
needs: [contracts-build-and-test] | |
if: | | |
github.event_name == 'workflow_dispatch' | |
&& github.ref != 'refs/heads/dapp-development' | |
runs-on: ubuntu-latest | |
defaults: | |
run: | |
working-directory: ./solidity/random-beacon | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-node@v3 | |
with: | |
# Using fixed version, because 18.16 was sometimes causing issues with | |
# artifacts generation during `hardhat compile` - see | |
# https://github.com/NomicFoundation/hardhat/issues/3877 | |
node-version: "18.15.0" | |
cache: "yarn" | |
cache-dependency-path: solidity/random-beacon/yarn.lock | |
registry-url: "https://registry.npmjs.org" | |
- name: Install dependencies | |
run: yarn install --network-concurrency 1 --frozen-lockfile | |
- name: Get upstream packages versions | |
uses: keep-network/ci/actions/upstream-builds-query@v2 | |
id: upstream-builds-query | |
with: | |
upstream-builds: ${{ github.event.inputs.upstream_builds }} | |
query: | | |
threshold-contracts-version = github.com/threshold-network/solidity-contracts#version | |
- name: Resolve latest contracts | |
run: | | |
yarn upgrade \ | |
@threshold-network/solidity-contracts@${{ steps.upstream-builds-query.outputs.threshold-contracts-version }} \ | |
@keep-network/sortition-pools | |
# TODO: Remove this step. We replace sortition pools for deployment on testnet | |
# with forked contracts that were tweaked to make operators joining the pool | |
# easier. This should never be used outside of the test environment. On | |
# test environment it should be used temporarily only. | |
- name: Use Sortition Pool forked contracts | |
run: | | |
yarn upgrade @keep-network/sortition-pools@github:keep-network/sortition-pools#test-fork | |
- name: Configure tenderly | |
env: | |
TENDERLY_TOKEN: ${{ secrets.TENDERLY_TOKEN }} | |
run: ./config_tenderly.sh | |
- name: Deploy contracts | |
env: | |
CHAIN_API_URL: ${{ secrets.SEPOLIA_ETH_HOSTNAME_HTTP }} | |
ACCOUNTS_PRIVATE_KEYS: ${{ secrets.TESTNET_ETH_CONTRACT_OWNER_PRIVATE_KEY }} | |
ETHERSCAN_API_KEY: ${{ secrets.ETHERSCAN_API_KEY }} | |
run: yarn deploy --network ${{ github.event.inputs.environment }} | |
- name: Bump up package version | |
id: npm-version-bump | |
uses: keep-network/npm-version-bump@v2 | |
with: | |
work-dir: solidity/random-beacon | |
environment: ${{ github.event.inputs.environment }} | |
branch: ${{ github.ref }} | |
commit: ${{ github.sha }} | |
- name: Publish to npm | |
env: | |
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} | |
run: npm publish --access=public --tag ${{ github.event.inputs.environment }} --network=${{ github.event.inputs.environment }} | |
- name: Build and Publish Docker image | |
uses: ./.github/actions/docker-build-push | |
with: | |
environment: ${{ github.event.inputs.environment }} | |
imageName: keep-random-beacon-hardhat | |
context: ./solidity/random-beacon | |
push: true | |
gcrJsonKey: ${{ secrets.KEEP_TEST_GCR_JSON_KEY }} | |
- name: Notify CI about completion of the workflow | |
uses: keep-network/ci/actions/notify-workflow-completed@v2 | |
env: | |
GITHUB_TOKEN: ${{ secrets.CI_GITHUB_TOKEN }} | |
with: | |
module: "github.com/keep-network/keep-core/random-beacon" | |
url: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }} | |
environment: ${{ github.event.inputs.environment }} | |
upstream_builds: ${{ github.event.inputs.upstream_builds }} | |
upstream_ref: ${{ github.event.inputs.upstream_ref }} | |
version: ${{ steps.npm-version-bump.outputs.version }} | |
# This job is responsible for publishing packackes with slightly modified | |
# contracts. The modifications are there to help with the process of testing | |
# some features on the T Token Dashboard. The job starts only if workflow | |
# gets triggered by the `workflow_dispatch` event on the branch called | |
# `dapp-development`. | |
contracts-dapp-development-deployment-testnet: | |
needs: [contracts-build-and-test] | |
if: | | |
github.event_name == 'workflow_dispatch' | |
&& github.ref == 'refs/heads/dapp-development' | |
runs-on: ubuntu-latest | |
defaults: | |
run: | |
working-directory: ./solidity/random-beacon | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-node@v3 | |
with: | |
# Using fixed version, because 18.16 was sometimes causing issues with | |
# artifacts generation during `hardhat compile` - see | |
# https://github.com/NomicFoundation/hardhat/issues/3877 | |
node-version: "18.15.0" | |
cache: "yarn" | |
cache-dependency-path: solidity/random-beacon/yarn.lock | |
registry-url: "https://registry.npmjs.org" | |
- name: Install dependencies | |
run: yarn install --network-concurrency 1 --frozen-lockfile | |
- name: Get upstream packages versions | |
uses: keep-network/ci/actions/upstream-builds-query@v2 | |
id: upstream-builds-query | |
with: | |
upstream-builds: ${{ github.event.inputs.upstream_builds }} | |
query: | | |
threshold-contracts-version = github.com/threshold-network/solidity-contracts#version | |
- name: Resolve latest contracts | |
run: | | |
yarn upgrade \ | |
@threshold-network/solidity-contracts@${{ steps.upstream-builds-query.outputs.threshold-contracts-version }} \ | |
@keep-network/sortition-pools | |
- name: Deploy contracts | |
env: | |
CHAIN_API_URL: ${{ secrets.SEPOLIA_ETH_HOSTNAME_HTTP }} | |
ACCOUNTS_PRIVATE_KEYS: ${{ secrets.DAPP_DEV_TESTNET_ETH_CONTRACT_OWNER_PRIVATE_KEY }} | |
ETHERSCAN_API_KEY: ${{ secrets.ETHERSCAN_API_KEY }} | |
run: yarn deploy --network ${{ github.event.inputs.environment }} | |
- name: Bump up package version | |
id: npm-version-bump | |
uses: keep-network/npm-version-bump@v2 | |
with: | |
work-dir: solidity/random-beacon | |
environment: dapp-dev-${{ github.event.inputs.environment }} | |
branch: ${{ github.ref }} | |
commit: ${{ github.sha }} | |
- name: Publish to npm | |
env: | |
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} | |
run: npm publish --access=public --tag dapp-development-${{ github.event.inputs.environment }} --network=${{ github.event.inputs.environment }} | |
- name: Build and Publish Docker image | |
uses: ./.github/actions/docker-build-push | |
with: | |
environment: ${{ github.event.inputs.environment }} | |
imageName: keep-random-beacon-hardhat-dapp-dev | |
context: ./solidity/random-beacon | |
push: true | |
gcrJsonKey: ${{ secrets.KEEP_TEST_GCR_JSON_KEY }} | |
- name: Notify CI about completion of the workflow | |
uses: keep-network/ci/actions/notify-workflow-completed@v2 | |
env: | |
GITHUB_TOKEN: ${{ secrets.CI_GITHUB_TOKEN }} | |
with: | |
module: "github.com/keep-network/keep-core/random-beacon" | |
url: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }} | |
environment: ${{ github.event.inputs.environment }} | |
upstream_builds: ${{ github.event.inputs.upstream_builds }} | |
upstream_ref: dapp-development | |
version: ${{ steps.npm-version-bump.outputs.version }} |