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

Automatically publish @celo/contracts and @celo/abis with contract releases #10297

Merged
merged 65 commits into from
Nov 13, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
65 commits
Select commit Hold shift + click to select a range
6030487
chore: npm publish scripts WIP
nicolasbrugneaux May 5, 2023
720fd4d
feat: add types
nicolasbrugneaux May 10, 2023
b997d18
release v9
nicolasbrugneaux May 19, 2023
3584a83
chore: add wagmi types generation
nicolasbrugneaux May 24, 2023
9e76902
chore: [email protected]
nicolasbrugneaux May 30, 2023
ef5f56f
chore: change licensing
nicolasbrugneaux Oct 5, 2023
7bb3dd9
fix: typings in build.ts
nicolasbrugneaux Oct 5, 2023
8e891ad
fix: remove unnecessary step from build
nicolasbrugneaux Oct 6, 2023
10d0682
fix: update dependencies in order to make everything work
nicolasbrugneaux Oct 11, 2023
912c562
chore: update actions
nicolasbrugneaux Oct 11, 2023
b0521e4
chore: update actions
nicolasbrugneaux Oct 11, 2023
52668e5
chore: disable akyeless for testing
nicolasbrugneaux Oct 11, 2023
9fc9a87
chore: install yarn
nicolasbrugneaux Oct 11, 2023
b974821
fix: add run?
nicolasbrugneaux Oct 11, 2023
eaaa728
chore: change version in package.jsons
nicolasbrugneaux Oct 12, 2023
399492a
chore: disable akyeless for testing
nicolasbrugneaux Oct 12, 2023
eef905b
chore: add back the cd
nicolasbrugneaux Oct 12, 2023
e2ef7ec
chore: i dont even know
nicolasbrugneaux Oct 12, 2023
7cfc549
chore: use working-directory
nicolasbrugneaux Oct 12, 2023
4a2ae80
Merge branch 'master' into chore/contract-publishing
nicolasbrugneaux Oct 12, 2023
d2ccba5
chore: change runner
nicolasbrugneaux Oct 12, 2023
1ca9b42
chore: correct version number
nicolasbrugneaux Oct 12, 2023
4221d75
chore: handle workflow input and remove custom branch push rule
nicolasbrugneaux Oct 12, 2023
4a9f388
Merge branch 'master' into chore/contract-publishing
nicolasbrugneaux Oct 16, 2023
5e368df
Merge branch 'master' into chore/contract-publishing
nicolasbrugneaux Oct 16, 2023
c7e3149
fix: contractkit wrapper spelling changed for some reason
nicolasbrugneaux Oct 16, 2023
8f2dc4c
chore: add changeset
nicolasbrugneaux Oct 16, 2023
30deaab
fix: CLI importing generated file path
nicolasbrugneaux Oct 16, 2023
f3b6a65
fix: tslint errors
nicolasbrugneaux Oct 17, 2023
91beae3
Merge branch 'master' into chore/contract-publishing
nicolasbrugneaux Oct 17, 2023
7295f3e
fix: core-contract version
nicolasbrugneaux Oct 17, 2023
7593231
Update celo-monorepo.yml
martinvol Oct 18, 2023
d2c152c
Merge branch 'master' into chore/contract-publishing
nicolasbrugneaux Nov 2, 2023
d040cde
Merge branch 'master' into chore/contract-publishing
nicolasbrugneaux Nov 3, 2023
14ebac6
fix: generate devchain if not exists
nicolasbrugneaux Nov 6, 2023
a5bc73a
Merge branch 'master' into chore/contract-publishing
martinvol Nov 6, 2023
7a0ec0f
chore: remove unecessary file
nicolasbrugneaux Nov 7, 2023
228a42e
fix: repo url in the abis and contracts packages
nicolasbrugneaux Nov 7, 2023
c7bce48
fix: try fixing errors coming from the CR10 merge
nicolasbrugneaux Nov 7, 2023
771c0ec
Merge branch 'master' into chore/contract-publishing
nicolasbrugneaux Nov 7, 2023
2a7b44e
chore: rollback to es5 for tsconfig.json
nicolasbrugneaux Nov 7, 2023
ddfa7bd
fix: action typo
nicolasbrugneaux Nov 7, 2023
399fe8f
fix: dependency graph
nicolasbrugneaux Nov 7, 2023
67b272b
fixed build for protocol
martinvol Nov 7, 2023
9be5fe7
turn on SSH
martinvol Nov 7, 2023
03f67a5
fixed syntax
martinvol Nov 7, 2023
3afe965
Try to fix a git submodule bug
martinvol Nov 7, 2023
04b4626
Fixed submodules issue
martinvol Nov 8, 2023
ddb4030
forgot to comming package.json
martinvol Nov 8, 2023
34398cf
force remove of all submodules
martinvol Nov 8, 2023
0295409
disabled ssh
martinvol Nov 8, 2023
40b7cf1
try not to remove the modules folder
martinvol Nov 8, 2023
ed330df
enabled ssh in Protocol Test Release
martinvol Nov 8, 2023
73da5fa
turn on the right ssh
martinvol Nov 8, 2023
9c372ae
Fixed chain submodules after checkout
martinvol Nov 8, 2023
f995d8e
Merge branch 'master' of github.com:celo-org/celo-monorepo into chore…
martinvol Nov 8, 2023
edc04ba
deleted checkouts and see if it works
martinvol Nov 8, 2023
80c8f29
retrigger ci, didn't start last commit
martinvol Nov 8, 2023
a9424ca
Merge branch 'master' of github.com:celo-org/celo-monorepo into chore…
martinvol Nov 8, 2023
2c56ad3
Merge branch 'master' into chore/contract-publishing
martinvol Nov 9, 2023
c1fc2f8
commit yarn lock
martinvol Nov 9, 2023
a0ef94e
Merge branch 'master' into chore/contract-publishing
martinvol Nov 9, 2023
d98f427
yarn lock, again
martinvol Nov 9, 2023
cdecfd8
Merge branch 'master' of github.com:celo-org/celo-monorepo into chore…
martinvol Nov 13, 2023
da74a13
better yarn.lock merge
martinvol Nov 13, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .changeset/itchy-tips-repair.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
---
nicolasbrugneaux marked this conversation as resolved.
Show resolved Hide resolved
---
78 changes: 78 additions & 0 deletions .github/workflows/publish-contracts-abi-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
name: Publish ABIs and Solidity files to NPM
on:
release:
types: [released]

workflow_dispatch:
inputs:
npm_version:
description: 'NPM version'
required: true
type: string
jobs:
publish:
runs-on: ['self-hosted', 'org', '8-cpu']
container:
# Update image at https://github.com/celo-org/infrastructure/blob/master/terraform/root-modules/gcp/integration-tests-gke/files/github-arc/Dockerfiles/Dockerfile-monorepo
image: us-west1-docker.pkg.dev/devopsre/actions-runner-controller/celo-monorepo:node18
permissions:
contents: write
id-token: write
repository-projects: read
steps:
- uses: actions/checkout@v4
- name: Akeyless Get Secrets
id: get_auth_token
uses: docker://us-west1-docker.pkg.dev/devopsre/akeyless-public/akeyless-action:latest
with:
api-url: https://api.gateway.akeyless.celo-networks-dev.org
access-id: p-kf9vjzruht6l
static-secrets: '{"/static-secrets/apps-tooling-circle/npm-publish-token":"NPM_TOKEN"}'
# Setup .npmrc file to publish to npm
- uses: actions/setup-node@v3
with:
node-version: '18.x'
registry-url: 'https://registry.npmjs.org'
scope: '@celo'

- name: 'Setup yarn'
shell: bash
run: |
npm install --global yarn
source ~/.bashrc

- name: 'Install packages'
run: yarn

- name: Check if a release should be published
run: yarn --silent is_contract_release >> "$GITHUB_ENV"
working-directory: packages/protocol
env:
GITHUB_TAG: ${{ github.ref_name }}
INPUT_VERSION: ${{ inputs.npm_version }}

- if: ${{ env.RELEASE_VERSION != '' }}
name: Compile solidity contracts and typescript files
run: yarn build && yarn prepare_contracts_and_abis_publishing
working-directory: packages/protocol
env:
RELEASE_TYPE: ${{ env.RELEASE_TYPE }}
RELEASE_VERSION: ${{ env.RELEASE_VERSION }}

- if: ${{ env.RELEASE_VERSION != '' }}
name: Publish @celo/contracts
run: yarn publish contracts --tag latest --version $RELEASE_VERSION --no-git-tag-version
working-directory: packages/protocol
env:
RELEASE_TYPE: ${{ env.RELEASE_TYPE }}
RELEASE_VERSION: ${{ env.RELEASE_VERSION }}
NPM_TOKEN: ${{ env.NPM_TOKEN }}

- if: ${{ env.RELEASE_VERSION != '' }}
name: Publish @celo/abis
run: yarn publish build/contracts --tag latest --version $RELEASE_VERSION --no-git-tag-version
working-directory: packages/protocol
env:
RELEASE_TYPE: ${{ env.RELEASE_TYPE }}
RELEASE_VERSION: ${{ env.RELEASE_VERSION }}
NPM_TOKEN: ${{ env.NPM_TOKEN }}
4 changes: 2 additions & 2 deletions packages/cli/src/commands/transfer/erc20.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Ierc20 } from '@celo/contractkit/lib/generated/IERC20'
import { IERC20 } from '@celo/contractkit/lib/generated/IERC20'
import { Erc20Wrapper } from '@celo/contractkit/lib/wrappers/Erc20Wrapper'
import { flags } from '@oclif/command'
import BigNumber from 'bignumber.js'
Expand Down Expand Up @@ -42,7 +42,7 @@ export default class TransferErc20 extends BaseCommand {
const value = new BigNumber(res.flags.value)

this.kit.defaultAccount = from
let celoToken: Erc20Wrapper<Ierc20>
let celoToken: Erc20Wrapper<IERC20>
try {
celoToken = await this.kit.contracts.getErc20(res.flags.erc20Address)
// this call allow us to check if it is a valid erc20
Expand Down
2 changes: 2 additions & 0 deletions packages/protocol/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -39,3 +39,5 @@ deployedGrants.json
cache/
out/

wagmi.config.js
wagmi.config.js.map
4 changes: 2 additions & 2 deletions packages/protocol/contractPackages.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
export interface ContractPackage {
path?: string
folderPath?: string
name?: string
contracstFolder?: string
name: string
contracts: string[]
contracstFolder?: string
proxyContracts?: string[]
truffleConfig?: string
solidityVersion?: string
Expand Down
3 changes: 3 additions & 0 deletions packages/protocol/contracts/.npmignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
test/*
package.abis.json
README.abis.md
37 changes: 37 additions & 0 deletions packages/protocol/contracts/README.abis.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Celo core contracts ABIS

Smart contracts ABIS for the Celo protocol.

## Usage

### Installation

```bash
npm install @celo/abis
```

or

```bash
yarn add @celo/abis
```

### In your javascript or ts

```ts
// json abi
import Accounts from '@celo/abis/Accounts.json'

// ethers
import { Accounts } from '@celo/abis/types/ethers'

// web3
import Accounts from '@celo/abis/types/web3/Accounts'

// truffle
import { AccountsContract } from '@celo/abis/types/truffle'
```

## License

All packages are licensed under the terms of the Apache 2.0 License unless otherwise specified in the LICENSE file at package's root.
36 changes: 36 additions & 0 deletions packages/protocol/contracts/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# Celo core contracts

Smart contracts for the Celo protocol.

## Usage

### Installation

```bash
npm install @celo/contracts
```

or

```bash
yarn add @celo/contracts
```

### In your Solidity contracts

```solidity
pragma solidity ^0.5.13;

import '@celo/contracts/common/UsingRegistryV2.sol';

contract Example is UsingRegistryV2 {
constructor() public {
require(getAccounts().createAccount());
}
}

```

## License

The contents of this package are licensed under the terms of the GNU Lesser Public License V3
14 changes: 14 additions & 0 deletions packages/protocol/contracts/package.abis.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"name": "@celo/abis",
"version": "0.0.0-template.version",
"author": "cLabs",
"license": "LGPL-3.0",
"repository": {
"type": "git",
"url": "https://github.com/celo-org/celo-monorepo.git",
"directory": "packages/protocol/contracts"
},
"scripts": {},
"dependencies": {},
"types": "./types/ethers/index.d.ts"
}
13 changes: 13 additions & 0 deletions packages/protocol/contracts/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"name": "@celo/contracts",
"version": "0.0.0-template.version",
"author": "cLabs",
"license": "LGPL-3.0",
"repository": {
"type": "git",
"url": "https://github.com/celo-org/celo-monorepo.git",
"directory": "packages/protocol/contracts"
},
"scripts": {},
"dependencies": {}
}
11 changes: 4 additions & 7 deletions packages/protocol/lib/registry-utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
* an environment.
*/

import { ContractPackage, MENTO_PACKAGE } from "../contractPackages"
import { ContractPackage, MENTO_PACKAGE, SOLIDITY_08_PACKAGE } from "../contractPackages"

export const celoRegistryAddress = '0x000000000000000000000000000000000000ce10'

Expand Down Expand Up @@ -54,6 +54,7 @@ export const usesRegistry = [

export const hasEntryInRegistry: ContractPackage[]= [
{
name: "default",
contracts:[
CeloContractName.Accounts,
CeloContractName.Attestations,
Expand All @@ -72,12 +73,8 @@ export const hasEntryInRegistry: ContractPackage[]= [
CeloContractName.SortedOracles,
]
},
{
contracts:[
CeloContractName.GasPriceMinimum,
],
path: "contracts-0.8"
},
SOLIDITY_08_PACKAGE
,
{
...MENTO_PACKAGE,
// not all Mentro contracts are supposed to be in the Registry
Expand Down
17 changes: 13 additions & 4 deletions packages/protocol/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,12 @@
"build:ts": "rm -f migrations/*.js* && ts-node --preferTsExts ./scripts/build.ts --truffleTypes ./types/typechain && tsc -b && mv migrations_ts/*.js* migrations",
"gas": "yarn run test --gas",
"pull-submodules": "git submodule update --init --recursive",
"delete-submodules": "rm -rf $(git submodule | awk '{ print $2 }')",
"build:sol": "yarn pull-submodules && mkdir -p migrations && ts-node --preferTsExts ./scripts/build.ts --solidity ${BUILD_DIR:-./build}",
"build": "yarn build:sol && yarn build:ts",
"prebuild": "rm -rf ./build",
"is_contract_release": "ts-node ./scripts/is-contract-release.ts",
"prepare_contracts_and_abis_publishing": "ts-node ./scripts/prepare-contracts-and-abis-publishing.ts",
"sourcify-publish": "ts-node ./scripts/sourcify-publish.ts",
"migrate": "./scripts/bash/migrate.sh",
"set_block_gas_limit": "./scripts/bash/set_block_gas_limit.sh",
Expand Down Expand Up @@ -101,8 +105,9 @@
"web3-utils": "1.10.0"
},
"devDependencies": {
"@celo/odis-identifiers": "^1.0.0",
"@celo/phone-utils": "^5.0.5",
"@celo/typechain-target-web3-v1-celo": "0.2.0",
"@celo/typechain-target-web3-v1-celo": "^1.0.0",
"@celo/typescript": "0.0.1",
"@types/bn.js": "^5.1.0",
"@types/chai": "^4.1.3",
Expand All @@ -113,16 +118,20 @@
"@types/targz": "^1.0.0",
"@types/tmp": "^0.1.0",
"@types/yargs": "^13.0.2",
"@wagmi/cli": "^1.0.1",
"cross-env": "^5.1.6",
"eth-gas-reporter": "^0.2.16",
"merkle-patricia-tree": "4.0.0",
"rimraf": "^5.0.5",
"semver": "^7.5.4",
"targz": "^1.0.1",
"tmp": "^0.1.0",
"truffle-typings": "^1.0.6",
"ts-generator": "^0.0.8",
"ts-node": "^10.9.1",
"typechain": "1.0.5",
"typechain-target-truffle": "1.0.2",
"ts-generator": "^0.0.8",
"typechain": "^4.0.3",
"typechain-target-truffle": "^1.0.2",
"typechain-target-ethers-v5": "^5.0.1",
"yargs": "^14.0.0"
}
}
29 changes: 23 additions & 6 deletions packages/protocol/scripts/build.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,14 @@

import Web3V1Celo from '@celo/typechain-target-web3-v1-celo'
import { execSync } from 'child_process'
import { existsSync, readJSONSync } from 'fs-extra'
import fsExtraPkg from 'fs-extra'
import minimist, { ParsedArgs } from 'minimist'
import path from 'path'
import { tsGenerator } from 'ts-generator'
import { MENTO_PACKAGE, SOLIDITY_08_PACKAGE } from '../contractPackages'

const { existsSync, readJSONSync } = fsExtraPkg

const ROOT_DIR = path.normalize(path.join(__dirname, '../'))
const BUILD_DIR = path.join(ROOT_DIR, process.env.BUILD_DIR ?? './build')

Expand Down Expand Up @@ -83,7 +85,7 @@ const OtherContracts = [
'UsingRegistry',
]

const contractPackages = [MENTO_PACKAGE, SOLIDITY_08_PACKAGE]
const contractPackages = [MENTO_PACKAGE, SOLIDITY_08_PACKAGE].filter(Boolean)

const Interfaces = ['ICeloToken', 'IERC20', 'ICeloVersionedContract']

Expand Down Expand Up @@ -165,6 +167,16 @@ function generateFilesForTruffle(outdir: string) {
exec(`yarn run --silent typechain --target=truffle --outDir "${outdir}" "${globPattern}"`)
}

function generateFilesForEthers(outdir: string) {
console.log(`protocol: Generating Ethers Types to ${outdir}`)
exec(`rm -rf "${outdir}"`)

const contractKitContracts = CoreContracts.concat('Proxy').concat(Interfaces)
const globPattern = `${BUILD_DIR}/contracts/@(${contractKitContracts.join('|')}).json`

exec(`yarn run --silent typechain --target=ethers-v5 --outDir "${outdir}" "${globPattern}"`)
}

async function generateFilesForContractKit(outdir: string) {
console.log(`protocol: Generating Web3 Types to ${outdir}`)
exec(`rm -rf ${outdir}`)
Expand Down Expand Up @@ -206,27 +218,32 @@ async function generateFilesForContractKit(outdir: string) {
}

const _buildTargets: ParsedArgs = {
_: [],
_: [] as string[],
solidity: undefined,
truffleTypes: undefined,
web3Types: undefined,
}
ethersTypes: undefined,
} as const
type BuildTargets = Record<keyof typeof _buildTargets, string>

async function main(buildTargets: ParsedArgs) {
async function main(buildTargets: BuildTargets) {
if (buildTargets.solidity) {
compile(buildTargets.solidity)
}
if (buildTargets.truffleTypes) {
generateFilesForTruffle(buildTargets.truffleTypes)
}
if (buildTargets.ethersTypes) {
generateFilesForEthers(buildTargets.ethersTypes)
}
if (buildTargets.web3Types) {
await generateFilesForContractKit(buildTargets.web3Types)
}
}

const argv = minimist(process.argv.slice(2), {
string: Object.keys(_buildTargets),
})
}) as unknown as BuildTargets

main(argv).catch((err) => {
console.error(err)
Expand Down
Loading
Loading