Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add job deploying contracts from dapp-development branch #119

Merged
merged 8 commits into from
Aug 17, 2022
85 changes: 82 additions & 3 deletions .github/workflows/contracts.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,24 @@ on:
branches:
- main
pull_request:
# We intend to use `workflow dispatch` in two different situations/paths:
# 1. If a workflow will be manually dspatched from branch named
# `dapp-development`, workflow will deploy the contracts on the selected
# testnet and publish them to NPM registry with `dappdev<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 dspatched 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 for workflow execution"
description: "Environment (network) for workflow execution, e.g. `goerli`"
required: false
default: "dev"
nkuba marked this conversation as resolved.
Show resolved Hide resolved
upstream_builds:
Expand Down Expand Up @@ -56,11 +70,14 @@ jobs:
run: yarn build

- name: Run tests
if: github.ref != 'refs/heads/dapp-development'
run: yarn test

contracts-system-tests:
needs: contracts-detect-changes
if: needs.contracts-detect-changes.outputs.system-tests == 'true'
if: |
needs.contracts-detect-changes.outputs.system-tests == 'true'
&& github.ref != 'refs/heads/dapp-development'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
Expand Down Expand Up @@ -99,7 +116,9 @@ jobs:

contracts-deployment-testnet:
needs: [contracts-build-and-test]
if: github.event_name == 'workflow_dispatch'
if: |
github.event_name == 'workflow_dispatch'
&& github.ref != 'refs/heads/dapp-development'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
Expand Down Expand Up @@ -196,6 +215,66 @@ jobs:
yarn run hardhat --network ${{ github.event.inputs.environment }} \
etherscan-verify --license GPL-3.0 --force-license

# This job is responsible for publishing packages from `dapp-development`
# branch, which are slightly modified to help with the process of testing some
# features on the Threshold Token dApp. The job starts only if workflow gets
# triggered by the `workflow_dispatch` event on the branch `dapp-development`.
contracts-dapp-development-deployment-testnet:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm wondering whether common parts of contracts-deployment-testnet and contracts-dapp-development-deployment-testnet could be extracted to a reusable workflow or action. But this is something that could be handled in a follow-up PR.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Definitely something we could do! There's more places in our workflows where using custom actions or reusable workflows could be useful. Let's not wait for these improvements to not postpone the merge. I will refactor the workflow in the future.

needs: [contracts-build-and-test]
if: |
github.event_name == 'workflow_dispatch'
&& github.ref == 'refs/heads/dapp-development'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2

- uses: actions/setup-node@v2
with:
node-version: "14.x"
cache: "yarn"
registry-url: "https://registry.npmjs.org"

- name: Install dependencies
run: yarn install --frozen-lockfile

- name: Resolve latest contracts
run: yarn upgrade @keep-network/keep-core@${{ github.event.inputs.environment }}

- name: Deploy contracts
env:
CHAIN_API_URL: ${{ secrets.GOERLI_ETH_HOSTNAME_HTTP }}
CONTRACT_OWNER_ACCOUNT_PRIVATE_KEY: ${{ secrets.GOERLI_ETH_CONTRACT_OWNER_PRIVATE_KEY }}
KEEP_CONTRACT_OWNER_ACCOUNT_PRIVATE_KEY: ${{ secrets.GOERLI_KEEP_ETH_CONTRACT_OWNER_PRIVATE_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:
environment: dappdev${{ github.event.inputs.environment }}
nkuba marked this conversation as resolved.
Show resolved Hide resolved
branch: ${{ github.ref }}
commit: ${{ github.sha }}

- name: Publish to npm
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
run: |
npm publish --access=public \
--network=${{ github.event.inputs.environment }} \
--tag dapp-development-${{ github.event.inputs.environment }}

- 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/threshold-network/solidity-contracts"
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
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wondered whether to use explicit value (dapp-development) here, or ${{ github.event.inputs.upstream_ref }}. Decided to use the former - it gives us less flexibility, but the general intention is that we always want to run the downstream modules on the same dapp-development branch. And by hardcoding it, we avoid the nasty consequences of the situation when somebody triggers the workflow from dapp-development branch, but with upstream_ref set to a different branch (which, if not for the harcoded value, would result in triggering of a downstream workflow from that different branch, resulting in publishing of goerli-tagged package that uses modified contracts in it's dependencies) .

version: ${{ steps.npm-version-bump.outputs.version }}

contracts-slither:
runs-on: ubuntu-latest
if: |
Expand Down