chore: update release process (#2278)
* chore: strip ethers prefix for the ethers-wasm example * chore: set publish to false and version to 0.0.0 for all example crates * chore: remove unused release helpers * chore: move CHANGELOG.md to CHANGELOG-OLD.md * chore: update lockfile and wasm renames * chore: renames * chore: use git-cliff for generating CHANGELOG.md * chore: renames * chore: update release.toml * chore: move examples script mv \ scripts/examples.sh \ bin/run_all_examples * chore: add release script * fix: update release script and document * fix: mv * docs: remove 'update changelog' in PR template
This commit is contained in:
parent
5879a84667
commit
f7a066e700
|
@ -29,5 +29,4 @@ the code change.
|
|||
|
||||
- [ ] Added Tests
|
||||
- [ ] Added Documentation
|
||||
- [ ] Updated the changelog
|
||||
- [ ] Breaking changes
|
||||
|
|
|
@ -172,7 +172,7 @@ jobs:
|
|||
with:
|
||||
node-version: 16
|
||||
- name: Run wasm example
|
||||
working-directory: examples/ethers-wasm
|
||||
working-directory: examples/wasm
|
||||
run: |
|
||||
yarn
|
||||
yarn anvil &
|
||||
|
@ -194,4 +194,4 @@ jobs:
|
|||
run: ./.github/scripts/install_test_binaries.sh
|
||||
- uses: Swatinem/rust-cache@v2
|
||||
- name: Build and run all examples
|
||||
run: ./scripts/examples.sh
|
||||
run: ./bin/run_all_examples
|
||||
|
|
|
@ -1,99 +0,0 @@
|
|||
name: release
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: "0 0 * * 0"
|
||||
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
release_type:
|
||||
type: choice
|
||||
description: Release type
|
||||
options:
|
||||
- major
|
||||
- minor
|
||||
- patch
|
||||
- rc
|
||||
- beta
|
||||
- alpha
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
jobs:
|
||||
release:
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
CARGO_TOKEN: ${{ secrets.CARGO_TOKEN }}
|
||||
RELEASE_TYPE: ${{ github.event.inputs.release_type }}
|
||||
steps:
|
||||
- name: Checkout sources
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Configure git
|
||||
run: |
|
||||
git config user.name github-actions
|
||||
git config user.email github-actions@github.com
|
||||
- name: Rust stable
|
||||
uses: actions-rs/toolchain@v1
|
||||
with:
|
||||
profile: minimal
|
||||
toolchain: stable
|
||||
- uses: Swatinem/rust-cache@v1
|
||||
with:
|
||||
cache-on-failure: true
|
||||
- name: Install cargo-release
|
||||
uses: actions-rs/install@v0.1
|
||||
with:
|
||||
crate: cargo-release
|
||||
version: latest
|
||||
- name: Cargo login
|
||||
run: |
|
||||
cargo login $CARGO_TOKEN
|
||||
- name: Dry-run cargo release
|
||||
run: |
|
||||
cargo release --workspace ${RELEASE_TYPE:-alpha} --exclude ethers-wasm
|
||||
- name: Publish release
|
||||
run: |
|
||||
cargo release --workspace ${RELEASE_TYPE:-alpha} --exclude ethers-wasm --execute --no-confirm
|
||||
- name: Setup node
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 14
|
||||
- run: |
|
||||
npm i semver
|
||||
- name: Install git-cliff
|
||||
uses: actions-rs/install@v0.1
|
||||
with:
|
||||
crate: git-cliff
|
||||
version: latest
|
||||
- name: Publish changelog
|
||||
id: changelog
|
||||
run: |
|
||||
current_version=$(git tag --contains HEAD -l "v*" | head -1)
|
||||
from_version=$(node .github/scripts/release-tag-from.js $current_version $RELEASE_TYPE)
|
||||
echo from $from_version to $current_version
|
||||
|
||||
echo "::set-output name=release_version::$(echo $current_version)"
|
||||
|
||||
if git rev-parse "$from_version" >/dev/null 2>&1; then
|
||||
echo "tag exists, can generate changelog";
|
||||
else
|
||||
echo "tag does not exist, cannot generate changelog, publish github release manually"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
git cliff $from_version..$current_version > GENERATED_CHANGELOG.md
|
||||
cat GENERATED_CHANGELOG.md
|
||||
- name: Create GitHub release
|
||||
id: release
|
||||
uses: actions/create-release@v1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
RELEASE_VERSION: ${{ steps.changelog.outputs.release_version }}
|
||||
with:
|
||||
tag_name: ${{ env.RELEASE_VERSION }}
|
||||
release_name: ${{ env.RELEASE_VERSION }}
|
||||
body_path: GENERATED_CHANGELOG.md
|
||||
prerelease: ${{ env.RELEASE_TYPE == 'alpha' }}
|
|
@ -0,0 +1,406 @@
|
|||
# Changelog
|
||||
|
||||
The old `ethers-rs` changelog, that has been discontinued.
|
||||
|
||||
The new one is located [here](./CHANGELOG.md), which is automatically generated by [git-cliff](https://github.com/orhun/git-cliff).
|
||||
|
||||
## ethers-core
|
||||
|
||||
### Unreleased
|
||||
|
||||
- Add support for `ethlive` as a chain name [#2268](https://github.com/gakonst/ethers-rs/pull/2268)
|
||||
- Make `Chain` more round-trip friendly [#2270](https://github.com/gakonst/ethers-rs/pull/2270)
|
||||
- Add `other: OtherFields` to `TransactionReceipt` [#2209](https://github.com/gakonst/ethers-rs/pull/2209)
|
||||
- Add `Signature::recover_typed_data` [#2120](https://github.com/gakonst/ethers-rs/pull/2120)
|
||||
- Add `abi::encode_packed` [#2104](https://github.com/gakonst/ethers-rs/pull/2104)
|
||||
- Add support for custom JavaScript tracer to `debug_traceCall` and `debug_traceTransaction` [#2064](https://github.com/gakonst/ethers-rs/pull/2064)
|
||||
- Add a `Send` bound to the `IntoFuture` implementation of `ContractCall` [#2083](https://github.com/gakonst/ethers-rs/pull/2083)
|
||||
- Bump [`svm-rs`](https://github.com/roynalnaruto/svm-rs) dependency to fix conflicts with Rust Crytpo packages [#2051](https://github.com/gakonst/ethers-rs/pull/2051)
|
||||
- Avoid unnecessary allocations in `utils` [#2046](https://github.com/gakonst/ethers-rs/pull/2046)
|
||||
- Add abigen support for hardhat generated bytecode json format [#2012](https://github.com/gakonst/ethers-rs/pull/2012)
|
||||
- Fix typo in `RwClient` docs for `write_client` method.
|
||||
- Add support for Geth `debug_traceCall` [#1949](https://github.com/gakonst/ethers-rs/pull/1949)
|
||||
- Add support for Geth built-in tracer and config [#2121](https://github.com/gakonst/ethers-rs/pull/2121)
|
||||
- Graceful handling of WebSocket transport errors [#1889](https://github.com/gakonst/ethers-rs/issues/1889) [#1815](https://github.com/gakonst/ethers-rs/issues/1815)
|
||||
- `MiddlewareBuilder` trait to instantiate a `Provider` as `Middleware` layers.
|
||||
- An `Event` builder can be instantiated specifying the event filter type, without the need to instantiate a contract.
|
||||
- Add 'ethers_core::types::OpCode' and use in 'ethers_core::types::VMOperation' [#1857](https://github.com/gakonst/ethers-rs/issues/1857)
|
||||
- Remove rust_decimals dependency for ethers-core
|
||||
- Add support for numbers greater than 2^96 for `ethers_core::utils::parse_units` [#1822](https://github.com/gakonst/ethers-rs/issues/1822)
|
||||
- Add comment about safety of u8 -> u64 cast in `ethers_core::types::Signature`
|
||||
- Stop defaulting to the `"latest"` block in `eth_estimateGas` params [#1657](https://github.com/gakonst/ethers-rs/pull/1657)
|
||||
- Fix geth trace types for debug_traceTransaction rpc
|
||||
- Fix RLP decoding of legacy `Transaction`
|
||||
- Fix RLP encoding of `TransactionReceipt` [#1661](https://github.com/gakonst/ethers-rs/pull/1661)
|
||||
- Add `Unit8` helper type [#1639](https://github.com/gakonst/ethers-rs/pull/1639)
|
||||
- Add `evm.deployedBytecode.immutableReferences` output selector [#1523](https://github.com/gakonst/ethers-rs/pull/1523)
|
||||
- Added `get_erc1155_token_transfer_events` function for etherscan client [#1503](https://github.com/gakonst/ethers-rs/pull/1503)
|
||||
- Add support for Geth `debug_traceTransaction` [#1469](https://github.com/gakonst/ethers-rs/pull/1469)
|
||||
- Use correct, new transaction type for `typool_content` RPC endpoint [#1501](https://github.com/gakonst/ethers-rs/pull/1501)
|
||||
- Fix the default config for generated `BuildInfo` [#1458](https://github.com/gakonst/ethers-rs/pull/1458)
|
||||
- Allow configuration of the output directory of the generated `BuildInfo` [#1433](https://github.com/gakonst/ethers-rs/pull/1433)
|
||||
- capture unknown fields in `Block` and `Transaction` type via new `OtherFields` type [#1423](https://github.com/gakonst/ethers-rs/pull/1423)
|
||||
- Methods like `set_to()` from `TypedTransaction` can be chained
|
||||
- Use H64 for Block Nonce [#1396](https://github.com/gakonst/ethers-rs/pull/1396)
|
||||
- Add `as_*_mut` methods on `TypedTransaction`
|
||||
[#1310](https://github.com/gakonst/ethers-rs/pull/1310)
|
||||
- AWS EIP712 data signing no longer signs with EIP155
|
||||
- Added Cronos testnet to etherscan options [#1276](https://github.com/gakonst/ethers-rs/pull/1276)
|
||||
- Fix parsing of a pending block
|
||||
[#1272](https://github.com/gakonst/ethers-rs/pull/1272)
|
||||
- Removed Cronos mainnet beta from `is_legacy` [1246](https://github.com/gakonst/ethers-rs/pull/1246)
|
||||
- Fix RLP decoding of `from` field for `Eip1559TransactionRequest` and
|
||||
`Eip2930TransactionRequest`, remove `Eip1559TransactionRequest` `sighash`
|
||||
method [#1180](https://github.com/gakonst/ethers-rs/pull/1180)
|
||||
- Fix RLP encoding of absent access list in `Transaction` [1137](https://github.com/gakonst/ethers-rs/pull/1137)
|
||||
- Pass compilation time as additional argument to `Reporter::on_solc_success` [#1098](https://github.com/gakonst/ethers-rs/pull/1098)
|
||||
- Fix aws signer bug which maps un-normalized signature to error if no normalization occurs (in `aws::utils::decode_signature`)
|
||||
- Implement signed transaction RLP decoding [#1096](https://github.com/gakonst/ethers-rs/pull/1096)
|
||||
- `Transaction::from` will default to `Address::zero()`. Add `recover_from` and
|
||||
`recover_from_mut` methods for recovering the sender from signature, and also
|
||||
setting the same on tx [#1075](https://github.com/gakonst/ethers-rs/pull/1075).
|
||||
- Add Etherscan account API endpoints [#939](https://github.com/gakonst/ethers-rs/pull/939)
|
||||
- Add FTM Mainet and testnet to parse method "try_from" from Chain.rs and add cronos mainet and testnet to "from_str"
|
||||
- Add FTM mainnet and testnet Multicall addresses [#927](https://github.com/gakonst/ethers-rs/pull/927)
|
||||
- Add Cronos mainnet beta and testnet to the list of known chains
|
||||
[#926](https://github.com/gakonst/ethers-rs/pull/926)
|
||||
- `Chain::to_string` will return the same chain name as `Chain::from_str`
|
||||
- Add `eth_syncing` [#848](https://github.com/gakonst/ethers-rs/pull/848)
|
||||
- Fix overflow and possible divide-by-zero in `estimate_priority_fee`
|
||||
- Add BSC mainnet and testnet to the list of known chains
|
||||
[#831](https://github.com/gakonst/ethers-rs/pull/831)
|
||||
- Returns error on invalid type conversion instead of panicking
|
||||
[#691](https://github.com/gakonst/ethers-rs/pull/691/files)
|
||||
- Change types mapping for solidity `bytes` to rust `ethers::core::Bytes` and
|
||||
solidity `uint8[]` to rust `Vec<u8>`.
|
||||
[#613](https://github.com/gakonst/ethers-rs/pull/613)
|
||||
- Fix `format_units` to return a `String` of representing a decimal point float
|
||||
such that the decimal places don't get truncated.
|
||||
[#597](https://github.com/gakonst/ethers-rs/pull/597)
|
||||
- Implement hex display format for `ethers::core::Bytes`
|
||||
[#624](https://github.com/gakonst/ethers-rs/pull/624).
|
||||
- Fix `fee_history` to first try with `block_count` encoded as a hex `QUANTITY`.
|
||||
[#668](https://github.com/gakonst/ethers-rs/pull/668)
|
||||
- Fix `fill_transaction` to set nonces in transactions, if the sender is known
|
||||
and no nonce is specified
|
||||
- Move `fill_transaction` implementation to the provider, to allow middleware
|
||||
to properly override its behavior.
|
||||
- Add informational messages to solc installation and compilation.
|
||||
- Significantly refactor `MultiAbigen` module generation. Now allows for lib
|
||||
generation, and does not make unnecessary disk writes.
|
||||
[#854](https://github.com/gakonst/ethers-rs/pull/852)
|
||||
- Refactor `ethers-contract-abigen` to use `eyre` instead of `anyhow` via
|
||||
[#858](https://github.com/gakonst/ethers-rs/pull/858)
|
||||
- Add `Deployer.send_with_receipt -> Result<(Contract, Receipt), Error>`
|
||||
so that the receipt can be returned to the called when deploying
|
||||
a contract [#865](https://github.com/gakonst/ethers-rs/pull/865)
|
||||
- Add Arbitrum mainnet and testnet to the list of known chains
|
||||
- Add ENS avatar and TXT records resolution
|
||||
[#889](https://github.com/gakonst/ethers-rs/pull/889)
|
||||
- Do not override gas limits provided by an outer middleware when including an EIP-2930 access list
|
||||
[#901](https://github.com/gakonst/ethers-rs/pull/901)
|
||||
- Add a getter to `ProjectCompileOutput` that returns a mapping of compiler
|
||||
versions to a vector of name + contract struct tuples
|
||||
[#908](https://github.com/gakonst/ethers-rs/pull/908)
|
||||
- Add Yul compilation [#994](https://github.com/gakonst/ethers-rs/pull/994)
|
||||
- Enforce commutativity of ENS reverse resolution
|
||||
[#996](https://github.com/gakonst/ethers-rs/pull/996)
|
||||
- Add `TransactionReceipt::to` and `TransactionReceipt::from`
|
||||
[#1184](https://github.com/gakonst/ethers-rs/pull/1184)
|
||||
- Add `From<H160>` and From<Vec<H160>> traits to `ValueOrArray<H160>` [#1199](https://github.com/gakonst/ethers-rs/pull/1200)
|
||||
- Fix handling of Websocket connection errors [#1287](https://github.com/gakonst/ethers-rs/pull/1287)
|
||||
- Add Arithmetic Shift Right operation for I256 [#1323](https://github.com/gakonst/ethers-rs/issues/1323)
|
||||
- [#1535](https://github.com/gakonst/ethers-rs/pull/1535) Add support to Aurora and Aurora testnet networks.
|
||||
- [#1632](https://github.com/gakonst/ethers-rs/pull/1632) Re-export `H32` from `ethabi`.
|
||||
- [#1634](https://github.com/gakonst/ethers-rs/pull/1634) Derive missing `Clone`, `Copy` and `Debug` impls in ethers-etherscan.
|
||||
- Bytes debug format now displays hex literals [#1658](https://github.com/gakonst/ethers-rs/pull/1658)
|
||||
- [#1451](https://github.com/gakonst/ethers-rs/issues/1451) Add Arithmetic Shift Left operation for I256
|
||||
- [#1860](https://github.com/gakonst/ethers-rs/pull/1860) Update I256 type documentation calling out the inconsistency
|
||||
between its right shift operator and standard library numeric types.
|
||||
- [#842](https://github.com/gakonst/ethers-rs/issues/842) Add support for I256 types in `parse_units` and `format_units`.
|
||||
Added `twos_complement` function for I256.
|
||||
- [#1934](https://github.com/gakonst/ethers-rs/pull/1934) Allow 16 calls in multicall.
|
||||
- [#1941](https://github.com/gakonst/ethers-rs/pull/1941) Add `add_calls` and `call_array` for `Multicall`.
|
||||
- Added basic event log filtering example.
|
||||
|
||||
## ethers-contract-abigen
|
||||
|
||||
### Unreleased
|
||||
|
||||
- Abigen now generates events with new `<B, M>` generic pattern [#2103](https://github.com/gakonst/ethers-rs/pull/2103)
|
||||
- Fix Cargo.toml generation issue that could cause dependency conflicts [#1852](https://github.com/gakonst/ethers-rs/pull/1852)
|
||||
- Use corresponding rust structs for event fields if they're solidity structs [#1674](https://github.com/gakonst/ethers-rs/pull/1674)
|
||||
- Add `ContractFilter` to filter contracts in `MultiAbigen` [#1564](https://github.com/gakonst/ethers-rs/pull/1564)
|
||||
- generate error bindings for custom errors [#1549](https://github.com/gakonst/ethers-rs/pull/1549)
|
||||
- Support overloaded events
|
||||
[#1233](https://github.com/gakonst/ethers-rs/pull/1233)
|
||||
- Relax Clone requirements when Arc<Middleware> is used
|
||||
[#1183](https://github.com/gakonst/ethers-rs/pull/1183)
|
||||
- Generate a deploy function if bytecode is provided in the abigen! input (json artifact)
|
||||
[#1030](https://github.com/gakonst/ethers-rs/pull/1030).
|
||||
- Generate correct bindings of struct's field names that are reserved words
|
||||
[#989](https://github.com/gakonst/ethers-rs/pull/989).
|
||||
- Generate correct binding module names that are reserved words
|
||||
[#1498](https://github.com/gakonst/ethers-rs/pull/1498). Note: this changes
|
||||
generated module names to snake case. For example, `MyContract` is now
|
||||
`my_contract` rather than `mycontract_mod`.
|
||||
- The `Cargo.toml` generated by bindings now includes the `abigen` feature on
|
||||
ethers. [#1508](https://github.com/gakonst/ethers-rs/pull/1508)
|
||||
- More descriptive contract deserialization errors.
|
||||
[#1633](https://github.com/gakonst/ethers-rs/pull/1633)
|
||||
|
||||
### 0.6.0
|
||||
|
||||
- Add `MultiAbigen` to generate a series of contract bindings that can be kept in the repo
|
||||
[#724](https://github.com/gakonst/ethers-rs/pull/724).
|
||||
- Add provided `event_derives` to call and event enums as well
|
||||
[#721](https://github.com/gakonst/ethers-rs/pull/721).
|
||||
- Implement snowtrace and polygonscan on par with the etherscan integration
|
||||
[#666](https://github.com/gakonst/ethers-rs/pull/666).
|
||||
|
||||
## ethers-solc
|
||||
|
||||
### Unreleased
|
||||
|
||||
- Add `OutputContext` to `ArtifactOutput` trait
|
||||
[#1621](https://github.com/gakonst/ethers-rs/pull/1621)
|
||||
- On windows all paths in the `ProjectCompilerOutput` are now slashed by default
|
||||
[#1540](https://github.com/gakonst/ethers-rs/pull/1540)
|
||||
- `ArtifactOutput::write_extras` now takes the `Artifacts` directly
|
||||
[#1491](https://github.com/gakonst/ethers-rs/pull/1491)
|
||||
- Make `ethers-solc` optional dependency of `ethers`, needs `ethers-solc` feature to activate
|
||||
[#1463](https://github.com/gakonst/ethers-rs/pull/1463)
|
||||
- Add `rawMetadata:String` field to configurable contract output
|
||||
[#1365](https://github.com/gakonst/ethers-rs/pull/1365)
|
||||
- Use relative source paths and `solc --base-path`
|
||||
[#1317](https://github.com/gakonst/ethers-rs/pull/1317)
|
||||
- Save cache entry objects with relative paths
|
||||
[#1307](https://github.com/gakonst/ethers-rs/pull/1307)
|
||||
- Bundle svm, svm-builds and sha2 dependencies in new `svm-solc` feature
|
||||
[#1071](https://github.com/gakonst/ethers-rs/pull/1071)
|
||||
- Emit artifact files for source files without any ContractDefinition
|
||||
[#1296](https://github.com/gakonst/ethers-rs/pull/1296)
|
||||
- Wrap `ethabi::Contract` into new type `LosslessAbi` and `abi: Option<Abi>` with `abi: Option<LosslessAbi>` in `ConfigurableContractArtifact`
|
||||
[#952](https://github.com/gakonst/ethers-rs/pull/952)
|
||||
- Let `Project` take ownership of `ArtifactOutput` and change trait interface
|
||||
[#907](https://github.com/gakonst/ethers-rs/pull/907)
|
||||
- Total revamp of the `Project::compile` pipeline
|
||||
[#802](https://github.com/gakonst/ethers-rs/pull/802)
|
||||
- Support multiple versions of compiled contracts
|
||||
- Breaking: deprecate hardhat cache file compatibility, cache file now tracks artifact paths and their versions
|
||||
- Fix flatten replacement target location
|
||||
[#846](https://github.com/gakonst/ethers-rs/pull/846)
|
||||
- Fix duplicate files during flattening
|
||||
[#813](https://github.com/gakonst/ethers-rs/pull/813)
|
||||
- Add ability to flatten file imports
|
||||
[#774](https://github.com/gakonst/ethers-rs/pull/774)
|
||||
- Add dependency graph and resolve all imported libraryfiles
|
||||
[#750](https://github.com/gakonst/ethers-rs/pull/750)
|
||||
- `Remapping::find_many` does not return a `Result` anymore
|
||||
[#707](https://github.com/gakonst/ethers-rs/pull/707)
|
||||
- Add support for hardhat artifacts
|
||||
[#677](https://github.com/gakonst/ethers-rs/pull/677)
|
||||
- Add more utility functions to the `Artifact` trait
|
||||
[#673](https://github.com/gakonst/ethers-rs/pull/673)
|
||||
- Return cached artifacts from project `compile` when the cache only contains
|
||||
some files
|
||||
- Add support for library linking and make `Bytecode`'s `object` filed an
|
||||
`enum BytecodeObject` [#656](https://github.com/gakonst/ethers-rs/pull/656).
|
||||
- Nit: remove accidentally doubled double-quotes in an error message
|
||||
- Fix when compiler-out metadata is empty and there's no internalType [#1182](https://github.com/gakonst/ethers-rs/pull/1182)
|
||||
- Add basic `solc` model checker options.
|
||||
[#1258](https://github.com/gakonst/ethers-rs/pull/1258)
|
||||
|
||||
### 0.6.0
|
||||
|
||||
- add `EthAbiCodec` proc macro to derive `AbiEncode` `AbiDecode` implementation
|
||||
[#704](https://github.com/gakonst/ethers-rs/pull/704)
|
||||
- move `AbiEncode` `AbiDecode` trait to ethers-core and implement for core types
|
||||
[#531](https://github.com/gakonst/ethers-rs/pull/531)
|
||||
- Add EIP-712 `sign_typed_data` signer method; add ethers-core type `Eip712`
|
||||
trait and derive macro in ethers-derive-eip712
|
||||
[#481](https://github.com/gakonst/ethers-rs/pull/481)
|
||||
|
||||
### 0.5.3
|
||||
|
||||
- Allow configuring the optimizer & passing arbitrary arguments to solc
|
||||
[#427](https://github.com/gakonst/ethers-rs/pull/427)
|
||||
- Decimal support for `ethers_core::utils::parse_units`
|
||||
[#463](https://github.com/gakonst/ethers-rs/pull/463)
|
||||
- Fixed Wei unit calculation in `Units`
|
||||
[#460](https://github.com/gakonst/ethers-rs/pull/460)
|
||||
- Add `ethers_core::utils::get_create2_address_from_hash`
|
||||
[#444](https://github.com/gakonst/ethers-rs/pull/444)
|
||||
- Bumped ethabi to 0.15.0 and fixing breaking changes
|
||||
[#469](https://github.com/gakonst/ethers-rs/pull/469),
|
||||
[#448](https://github.com/gakonst/ethers-rs/pull/448),
|
||||
[#445](https://github.com/gakonst/ethers-rs/pull/445)
|
||||
|
||||
### 0.5.2
|
||||
|
||||
- Correctly RLP Encode transactions as received from the mempool
|
||||
([#415](https://github.com/gakonst/ethers-rs/pull/415))
|
||||
|
||||
## ethers-providers
|
||||
|
||||
### Unreleased
|
||||
|
||||
- Breaking: WS now includes reconnection logic and a changed `connect`
|
||||
interface. Old behavior can be accessed via the `legacy_ws` feature
|
||||
[#2181](https://github.com/gakonst/ethers-rs/pull/2181)
|
||||
- Re-organize the crate. #[2150](https://github.com/gakonst/ethers-rs/pull/2159)
|
||||
- Convert provider errors to arbitrary middleware errors
|
||||
[#1920](https://github.com/gakonst/ethers-rs/pull/1920)
|
||||
- Add a subset of the `admin` namespace
|
||||
[1880](https://github.com/gakonst/ethers-rs/pull/1880)
|
||||
- Return String for net version
|
||||
[1376](https://github.com/gakonst/ethers-rs/pull/1376)
|
||||
- Stream of paginated logs that load logs in small pages
|
||||
[1285](https://github.com/gakonst/ethers-rs/pull/1285)
|
||||
- Load previous logs before subscribing to new logs in case fromBlock is set
|
||||
[1264](https://github.com/gakonst/ethers-rs/pull/1264)
|
||||
- Add retries to the pending transaction future
|
||||
[1221](https://github.com/gakonst/ethers-rs/pull/1221)
|
||||
- Add support for basic and bearer authentication in http and non-wasm websockets.
|
||||
[829](https://github.com/gakonst/ethers-rs/pull/829)
|
||||
- Export `ethers_providers::IpcError` and `ethers_providers::QuorumError`
|
||||
[1012](https://github.com/gakonst/ethers-rs/pull/1012)
|
||||
|
||||
### 0.6.0
|
||||
|
||||
- re-export error types for `Http` and `Ws` providers in
|
||||
[#570](https://github.com/gakonst/ethers-rs/pull/570)
|
||||
- add a method on the `Middleware` to broadcast a tx with a series of escalating
|
||||
gas prices via [#566](https://github.com/gakonst/ethers-rs/pull/566)
|
||||
- Remove unnecessary `Serialize` constraint to `R` (the Response type) in the
|
||||
`request` method of `JsonRpcClient`.
|
||||
- Fix `http Provider` data race when generating new request `id`s.
|
||||
- Add support for `net_version` RPC method.
|
||||
[595](https://github.com/gakonst/ethers-rs/pull/595)
|
||||
- Add support for `evm_snapshot` and `evm_revert` dev RPC methods.
|
||||
[640](https://github.com/gakonst/ethers-rs/pull/640)
|
||||
|
||||
### 0.5.3
|
||||
|
||||
- Expose `ens` module [#435](https://github.com/gakonst/ethers-rs/pull/435)
|
||||
- Add `eth_getProof` [#459](https://github.com/gakonst/ethers-rs/pull/459)
|
||||
|
||||
### 0.5.2
|
||||
|
||||
- Set resolved ENS name during gas estimation
|
||||
([1e5a9e](https://github.com/gakonst/ethers-rs/commit/1e5a9efb3c678eecd43d5c341b4932da35445831))
|
||||
|
||||
## ethers-signers
|
||||
|
||||
### Unreleased
|
||||
|
||||
- fix: `LedgerSigner` has improved tracing and a ledger app bug mitigation
|
||||
[#2192](https://github.com/gakonst/ethers-rs/pull/2192)
|
||||
- `eth-keystore-rs` crate updated. Allow an optional name for the to-be-generated
|
||||
keystore file [#910](https://github.com/gakonst/ethers-rs/pull/910)
|
||||
- [1983](https://github.com/gakonst/ethers-rs/pull/1983) Added a `from_bytes` function for the `Wallet` type.
|
||||
- Allow parsing of private key that has `0x` prefix
|
||||
[#2037](https://github.com/gakonst/ethers-rs/pull/2037)
|
||||
|
||||
### 0.6.0
|
||||
|
||||
- `LocalWallet::new_keystore` now returns a tuple `(LocalWallet, String)`
|
||||
instead of `LocalWallet`, where the string represents the UUID of the newly
|
||||
created encrypted JSON keystore. The JSON keystore is stored as a file
|
||||
`/dir/uuid`. The issue [#557](https://github.com/gakonst/ethers-rs/issues/557)
|
||||
is addressed [#559](https://github.com/gakonst/ethers-rs/pull/559)
|
||||
|
||||
## ethers-contract
|
||||
|
||||
### Unreleased
|
||||
|
||||
- (Breaking) Add `Revert` to `ContractError`. Add `impl EthError for String`.
|
||||
Modify existing `ContractError` variants to prevent accidental improper
|
||||
usage. Change `MulticallError` to use `ContractError::Revert`. Add
|
||||
convenience methods to decode errors from reverts.
|
||||
[#2172](https://github.com/gakonst/ethers-rs/pull/2172)
|
||||
- (Breaking) Improve Multicall result handling
|
||||
[#2164](https://github.com/gakonst/ethers-rs/pull/2105)
|
||||
- (Breaking) Make `Event` objects generic over borrow & remove lifetime
|
||||
[#2105](https://github.com/gakonst/ethers-rs/pull/2105)
|
||||
- Make `Factory` objects generic over the borrow trait, to allow non-arc mware
|
||||
[#2103](https://github.com/gakonst/ethers-rs/pull/2103)
|
||||
- Make `Contract` objects generic over the borrow trait, to allow non-arc mware
|
||||
[#2082](https://github.com/gakonst/ethers-rs/pull/2082)
|
||||
- Return pending transaction from `Multicall::send`
|
||||
[#2044](https://github.com/gakonst/ethers-rs/pull/2044)
|
||||
- Add abigen to default features
|
||||
[#1684](https://github.com/gakonst/ethers-rs/pull/1684)
|
||||
- Add extra Multicall helper methods
|
||||
[#1666](https://github.com/gakonst/ethers-rs/pull/1666)
|
||||
- Update Multicall to Multicall3
|
||||
[#1584](https://github.com/gakonst/ethers-rs/pull/1584)
|
||||
- Add `Event::stream_with_meta` and `Event::subscribe_with_meta`
|
||||
[#1483](https://github.com/gakonst/ethers-rs/pull/1483)
|
||||
- Added tx builder methods to `ContractFactory`
|
||||
[#1289](https://github.com/gakonst/ethers-rs/pull/1289)
|
||||
- Relax Clone requirements when Arc<Middleware> is used
|
||||
[#1183](https://github.com/gakonst/ethers-rs/pull/1183)
|
||||
- Add `EventStream::select` to combine streams with different event types
|
||||
[#725](https://github.com/gakonst/ethers-rs/pull/725)
|
||||
- Substitute output tuples with rust struct types for function calls
|
||||
[#664](https://github.com/gakonst/ethers-rs/pull/664)
|
||||
- Add AbiType implementation during EthAbiType expansion
|
||||
[#647](https://github.com/gakonst/ethers-rs/pull/647)
|
||||
- fix Etherscan conditional HTTP support
|
||||
[#632](https://github.com/gakonst/ethers-rs/pull/632)
|
||||
- use `CARGO_MANIFEST_DIR` as root for relative paths in abigen
|
||||
[#631](https://github.com/gakonst/ethers-rs/pull/631)
|
||||
|
||||
### 0.6.0
|
||||
|
||||
- Provide a way to opt out of networking support in abigen proc macro with
|
||||
`abigen-offline` feature [#580](https://github.com/gakonst/ethers-rs/pull/580)
|
||||
- Add `.call()` method to `Deployer` for performing dry runs of contract
|
||||
deployments. [#554](https://github.com/gakonst/ethers-rs/pull/554)
|
||||
- Improve error message from failure in `ethers_contract_abigen::Source::parse`
|
||||
[#552](https://github.com/gakonst/ethers-rs/pull/552)
|
||||
- use enumerated aliases for overloaded functions
|
||||
[#545](https://github.com/gakonst/ethers-rs/pull/545)
|
||||
- add `EthCall` trait and derive macro which generates matching structs for
|
||||
contract calls [#517](https://github.com/gakonst/ethers-rs/pull/517)
|
||||
- Use rust types as contract function inputs for human readable abi
|
||||
[#482](https://github.com/gakonst/ethers-rs/pull/482)
|
||||
- `abigen!` now generates `Display` for all events using the new `EthDisplay`
|
||||
macro [#513](https://github.com/gakonst/ethers-rs/pull/513)
|
||||
- `abigen!` now supports overloaded functions natively
|
||||
[#501](https://github.com/gakonst/ethers-rs/pull/501)
|
||||
- `abigen!` now supports multiple contracts
|
||||
[#498](https://github.com/gakonst/ethers-rs/pull/498)
|
||||
|
||||
### Unreleased
|
||||
|
||||
### 0.5.3
|
||||
|
||||
- (De)Tokenize structs and events with only a single field as `Token:Tuple`
|
||||
([#417](https://github.com/gakonst/ethers-rs/pull/417))
|
||||
|
||||
## ethers-middleware
|
||||
|
||||
### Unreleased
|
||||
|
||||
- Added `openssl` and `rustls` feature flags
|
||||
[#1961](https://github.com/gakonst/ethers-rs/pull/1961)
|
||||
- Relax Clone requirements when Arc<Middleware> is used
|
||||
[#1183](https://github.com/gakonst/ethers-rs/pull/1183)
|
||||
- Ensure a consistent chain ID between a Signer and Provider in SignerMiddleware
|
||||
[#1095](https://gakonst/ethers-rs/pull/1095)
|
||||
- Add BlockNative gas oracle [#1175](https://github.com/gakonst/ethers-rs/pull/1175)
|
||||
|
||||
### 0.6.0
|
||||
|
||||
- add the missing constructor for `Timelag` middleware via
|
||||
[#568](https://github.com/gakonst/ethers-rs/pull/568)
|
||||
- Removes GasNow as a gas price oracle
|
||||
[#508](https://github.com/gakonst/ethers-rs/pull/508)
|
||||
- add initialize_nonce public function to initialize NonceMiddleManager
|
||||
|
||||
### 0.5.3
|
||||
|
||||
- Added Time Lagged middleware
|
||||
[#457](https://github.com/gakonst/ethers-rs/pull/457)
|
2358
CHANGELOG.md
2358
CHANGELOG.md
File diff suppressed because it is too large
Load Diff
|
@ -134,14 +134,13 @@ include one or more tests to ensure that ethers-rs does not regress in the futur
|
|||
#### Unit Tests
|
||||
|
||||
Functions which have very specific tasks should be unit tested. We encourage using
|
||||
table tests to cover a large number of cases in a succinct readable manner. A good example
|
||||
is the [create2](https://github.com/gakonst/ethers-rs/blob/1d7bdef0bd792867454da28c4e9c193681295fb2/ethers-core/src/utils/mod.rs#L110-L163) unit tests.
|
||||
table tests to cover a large number of cases in a succinct readable manner. A good
|
||||
example is the [utils](./ethers-core/src/utils/mod.rs#L647) unit tests.
|
||||
|
||||
#### Integration tests
|
||||
|
||||
Integration tests go in the same crate as the code they are testing. Each sub
|
||||
crate should have a `dev-dependency` on `ethers` itself. This makes all
|
||||
utilities available to use in tests, no matter the crate being tested.
|
||||
Integration tests go in the same crate as the code they are testing, in the
|
||||
`tests/it/` directory.
|
||||
|
||||
The best strategy for writing a new integration test is to look at existing
|
||||
integration tests in the crate and follow the style.
|
||||
|
@ -155,27 +154,23 @@ that the example is correct and provides additional test coverage.
|
|||
The trick to documentation tests is striking a balance between being succinct
|
||||
for a reader to understand and actually testing the API.
|
||||
|
||||
Same as with integration tests, when writing a documentation test, the full
|
||||
`ethers` crate is available. This is especially useful for getting access to the
|
||||
runtime to run the example.
|
||||
|
||||
The documentation tests will be visible from both the crate specific
|
||||
documentation **and** the `ethers` facade documentation via the re-export. The
|
||||
example should be written from the point of view of a user that is using the
|
||||
`ethers` crate. As such, the example should use the API via the facade and not by
|
||||
directly referencing the crate.
|
||||
`ethers` crate.
|
||||
|
||||
The type level example for `ethers_providers::Provider` provides a good example of a
|
||||
documentation test:
|
||||
|
||||
````rust
|
||||
/// ```no_run
|
||||
/// use ethers::providers::{JsonRpcClient, Provider, Http};
|
||||
/// use std::convert::TryFrom;
|
||||
/// # async fn foo() -> Result<(), Box<dyn std::error::Error>> {
|
||||
/// use ethers_providers::{Middleware, Provider, Http};
|
||||
///
|
||||
/// let provider = Provider::<Http>::try_from("https://eth.llamarpc.com").expect("could not instantiate HTTP Provider");
|
||||
/// let provider = Provider::<Http>::try_from(
|
||||
/// "https://eth.llamarpc.com"
|
||||
/// ).expect("could not instantiate HTTP Provider");
|
||||
///
|
||||
/// # async fn foo<P: JsonRpcClient>(provider: &Provider<P>) -> Result<(), Box<dyn std::error::Error>> {
|
||||
/// let block = provider.get_block(100u64).await?;
|
||||
/// println!("Got block: {}", serde_json::to_string(&block)?);
|
||||
/// # Ok(())
|
||||
|
@ -205,52 +200,15 @@ notes about [commit squashing](#commit-squashing)).
|
|||
|
||||
#### Commit message guidelines
|
||||
|
||||
A good commit message should describe what changed and why.
|
||||
Commit messages should follow the [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/)
|
||||
specification.
|
||||
|
||||
1. The first line should:
|
||||
Here's a few examples from the master branch's commit log:
|
||||
|
||||
- contain a short description of the change (preferably 50 characters or less,
|
||||
and no more than 72 characters)
|
||||
- be entirely in lowercase with the exception of proper nouns, acronyms, and
|
||||
the words that refer to code, like function/variable names
|
||||
- be prefixed with the name of the sub crate being changed (without the `ethers-`
|
||||
prefix) and start with an imperative verb. If modifying `ethers` proper,
|
||||
omit the crate prefix.
|
||||
|
||||
Examples:
|
||||
|
||||
- providers: introduce ENS querying for names and addresses
|
||||
- re-export the abi, types and utils modules from `ethers_core`
|
||||
|
||||
2. Keep the second line blank.
|
||||
3. Wrap all other lines at 72 columns (except for long URLs).
|
||||
4. If your patch fixes an open issue, you can add a reference to it at the end
|
||||
of the log. Use the `Fixes: #` prefix and the issue number. For other
|
||||
references use `Refs: #`. `Refs` may include multiple issues, separated by a
|
||||
comma.
|
||||
|
||||
Examples:
|
||||
|
||||
- `Fixes: #1337`
|
||||
- `Refs: #1234`
|
||||
|
||||
Sample complete commit message:
|
||||
|
||||
```txt
|
||||
subcrate: explain the commit in one line
|
||||
|
||||
Body of commit message is a few lines of text, explaining things
|
||||
in more detail, possibly giving some background about the issue
|
||||
being fixed, etc.
|
||||
|
||||
The body of the commit message can be several paragraphs, and
|
||||
please do proper word-wrap and keep columns shorter than about
|
||||
72 characters or so. That way, `git log` will show things
|
||||
nicely even when it is indented.
|
||||
|
||||
Fixes: #1337
|
||||
Refs: #453, #154
|
||||
```
|
||||
- feat(abigen): support empty events
|
||||
- chore: bump crypto deps
|
||||
- test: simplify test cleanup
|
||||
- fmt: run rustfmt
|
||||
|
||||
### Opening the Pull Request
|
||||
|
||||
|
@ -380,17 +338,14 @@ When releasing the workspace:
|
|||
existing APIs. If so, resolve those issues and make a `minor` change
|
||||
release. Otherwise, if it is necessary to make a breaking release, make a
|
||||
`major` change release.
|
||||
2. **Dry run the release** by running `cargo release --workspace <release_type>`
|
||||
3. **Update the changelog for the crate.** Changelog for all crates go in
|
||||
[`CHANGELOG.md`](./CHANGELOG.md). Any unreleased changes changelogs should
|
||||
be moved to respective crates released changelogs. Change descriptions
|
||||
may be taken from the Git history, but should be edited to ensure a consistent
|
||||
format, based on [Keep A Changelog][keep-a-changelog]. Other entries in that
|
||||
crate's changelog may also be used for reference.
|
||||
4. **Release the crate.** Run the following command:
|
||||
|
||||
```bash
|
||||
cargo release --workspace <release_type> --execute
|
||||
```
|
||||
2. **Dry run the release.** Running the `cargo release` command without the
|
||||
`--execute` flag will perform a dry run.
|
||||
3. **Release the crate.**
|
||||
Run the `bin/release` script with the `--execute` flag.
|
||||
This will update the package versions in the relevant manifests, create
|
||||
git tags, automatically generate the [`CHANGELOG.md`](./CHANGELOG.md) file
|
||||
with [git-cliff], and finally publish the crates to `crates.io`.
|
||||
For more information, see the top comment in the script file.
|
||||
|
||||
[keep-a-changelog]: https://github.com/olivierlacan/keep-a-changelog/blob/master/CHANGELOG.md
|
||||
[git-cliff]: https://github.com/orhun/git-cliff
|
||||
|
|
|
@ -1497,25 +1497,9 @@ dependencies = [
|
|||
"yansi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ethers-wasm"
|
||||
version = "2.0.0"
|
||||
dependencies = [
|
||||
"console_error_panic_hook",
|
||||
"ethers",
|
||||
"hex",
|
||||
"serde",
|
||||
"serde-wasm-bindgen",
|
||||
"serde_json",
|
||||
"wasm-bindgen",
|
||||
"wasm-bindgen-futures",
|
||||
"wasm-bindgen-test",
|
||||
"web-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "examples-anvil"
|
||||
version = "2.0.0"
|
||||
version = "0.0.0"
|
||||
dependencies = [
|
||||
"ethers",
|
||||
"eyre",
|
||||
|
@ -1524,14 +1508,14 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "examples-big-numbers"
|
||||
version = "2.0.0"
|
||||
version = "0.0.0"
|
||||
dependencies = [
|
||||
"ethers",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "examples-contracts"
|
||||
version = "2.0.0"
|
||||
version = "0.0.0"
|
||||
dependencies = [
|
||||
"ethers",
|
||||
"eyre",
|
||||
|
@ -1542,7 +1526,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "examples-events"
|
||||
version = "2.0.0"
|
||||
version = "0.0.0"
|
||||
dependencies = [
|
||||
"ethers",
|
||||
"eyre",
|
||||
|
@ -1565,7 +1549,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "examples-middleware"
|
||||
version = "2.0.0"
|
||||
version = "0.0.0"
|
||||
dependencies = [
|
||||
"async-trait",
|
||||
"ethers",
|
||||
|
@ -1578,7 +1562,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "examples-providers"
|
||||
version = "2.0.0"
|
||||
version = "0.0.0"
|
||||
dependencies = [
|
||||
"async-trait",
|
||||
"ethers",
|
||||
|
@ -1593,7 +1577,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "examples-queries"
|
||||
version = "2.0.0"
|
||||
version = "0.0.0"
|
||||
dependencies = [
|
||||
"ethers",
|
||||
"eyre",
|
||||
|
@ -1604,7 +1588,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "examples-subscriptions"
|
||||
version = "2.0.0"
|
||||
version = "0.0.0"
|
||||
dependencies = [
|
||||
"ethers",
|
||||
"eyre",
|
||||
|
@ -1615,7 +1599,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "examples-transactions"
|
||||
version = "2.0.0"
|
||||
version = "0.0.0"
|
||||
dependencies = [
|
||||
"ethers",
|
||||
"eyre",
|
||||
|
@ -1626,7 +1610,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "examples-wallets"
|
||||
version = "2.0.0"
|
||||
version = "0.0.0"
|
||||
dependencies = [
|
||||
"ethers",
|
||||
"eyre",
|
||||
|
@ -1635,6 +1619,22 @@ dependencies = [
|
|||
"tokio",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "examples-wasm"
|
||||
version = "0.0.0"
|
||||
dependencies = [
|
||||
"console_error_panic_hook",
|
||||
"ethers",
|
||||
"hex",
|
||||
"serde",
|
||||
"serde-wasm-bindgen",
|
||||
"serde_json",
|
||||
"wasm-bindgen",
|
||||
"wasm-bindgen-futures",
|
||||
"wasm-bindgen-test",
|
||||
"web-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "eyre"
|
||||
version = "0.6.8"
|
||||
|
|
|
@ -134,7 +134,7 @@ ethers = { version = "1.0.2", features = ["openssl"] }
|
|||
|
||||
## Note on WASM and FFI bindings
|
||||
|
||||
You should be able to build a wasm app that uses ethers-rs (see the [example](./examples/ethers-wasm) for reference). If ethers fails to
|
||||
You should be able to build a wasm app that uses ethers-rs (see the [example](./examples/wasm) for reference). If ethers fails to
|
||||
compile in WASM, please
|
||||
[open an issue](https://github.com/gakonst/ethers-rs/issues/new/choose).
|
||||
There is currently no plan to provide an official JS/TS-accessible library
|
||||
|
|
119
bin/publish
119
bin/publish
|
@ -1,119 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
USAGE="Publish a new release of a ethers-rs crate
|
||||
USAGE:
|
||||
$(basename "$0") [OPTIONS] [CRATE] [VERSION]
|
||||
OPTIONS:
|
||||
-v, --verbose Use verbose Cargo output
|
||||
-d, --dry-run Perform a dry run (do not publish or tag the release)
|
||||
-h, --help Show this help text and exit"
|
||||
|
||||
DRY_RUN=""
|
||||
VERBOSE=""
|
||||
|
||||
err() {
|
||||
echo -e "\e[31m\e[1merror:\e[0m $@" 1>&2;
|
||||
}
|
||||
|
||||
status() {
|
||||
WIDTH=12
|
||||
printf "\e[32m\e[1m%${WIDTH}s\e[0m %s\n" "$1" "$2"
|
||||
}
|
||||
|
||||
verify() {
|
||||
status "Verifying" "if $CRATE v$VERSION can be released"
|
||||
ACTUAL=$(cargo pkgid | sed -n 's/.*#\(.*\)/\1/p')
|
||||
|
||||
if [ "$ACTUAL" != "$VERSION" ]; then
|
||||
err "expected to release version $VERSION, but Cargo.toml contained $ACTUAL"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if git tag -l | grep -Fxq "$TAG" ; then
|
||||
err "git tag \`$TAG\` already exists"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
PATH_DEPS=$(grep -F "path = \"" Cargo.toml | sed -e 's/^/ /')
|
||||
if [ -n "$PATH_DEPS" ]; then
|
||||
err "crate \`$CRATE\` contained path dependencies:\n$PATH_DEPS"
|
||||
echo "path dependencies must be removed prior to release"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
release() {
|
||||
status "Releasing" "$CRATE v$VERSION"
|
||||
cargo package $VERBOSE
|
||||
cargo publish $VERBOSE $DRY_RUN
|
||||
|
||||
status "Tagging" "$TAG"
|
||||
if [ -n "$DRY_RUN" ]; then
|
||||
echo "# git tag $TAG && git push --tags"
|
||||
else
|
||||
git tag "$TAG" && git push --tags
|
||||
fi
|
||||
}
|
||||
|
||||
while [[ $# -gt 0 ]]
|
||||
do
|
||||
|
||||
case "$1" in
|
||||
-h|--help)
|
||||
echo "$USAGE"
|
||||
exit 0
|
||||
;;
|
||||
-v|--verbose)
|
||||
VERBOSE="--verbose"
|
||||
set +x
|
||||
shift
|
||||
;;
|
||||
-d|--dry-run)
|
||||
DRY_RUN="--dry-run"
|
||||
shift
|
||||
;;
|
||||
-*)
|
||||
err "unknown flag \"$1\""
|
||||
echo "$USAGE"
|
||||
exit 1
|
||||
;;
|
||||
*) # crate or version
|
||||
if [ -z "$CRATE" ]; then
|
||||
CRATE="$1"
|
||||
elif [ -z "$VERSION" ]; then
|
||||
VERSION="$1"
|
||||
else
|
||||
err "unknown positional argument \"$1\""
|
||||
echo "$USAGE"
|
||||
exit 1
|
||||
fi
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
done
|
||||
# set -- "${POSITIONAL[@]}"
|
||||
|
||||
if [ -z "$VERSION" ]; then
|
||||
err "no version specified!"
|
||||
HELP=1
|
||||
fi
|
||||
|
||||
if [ -n "$CRATE" ]; then
|
||||
TAG="$CRATE-$VERSION"
|
||||
else
|
||||
err "no crate specified!"
|
||||
HELP=1
|
||||
fi
|
||||
|
||||
if [ -n "$HELP" ]; then
|
||||
echo "$USAGE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -d "$CRATE" ]; then
|
||||
(cd "$CRATE" && verify && release )
|
||||
else
|
||||
err "no such crate \"$CRATE\""
|
||||
exit 1
|
||||
fi
|
|
@ -0,0 +1,131 @@
|
|||
#!/usr/bin/env bash
|
||||
# Creates a new release of all the ethers crates in the workspace
|
||||
#
|
||||
# Note that this intended be run with the --execute flag, as the dry run will
|
||||
# perform all the checks that a normal `cargo release` command would.
|
||||
# This is because this script will execute only a few of the steps because it
|
||||
# has to run `git-cliff` to create the changelog in between steps, and exclude
|
||||
# all the example crates from the version bump.
|
||||
|
||||
set -e
|
||||
|
||||
info() {
|
||||
printf "\e[34;1minfo\e[0m: %s\n" "$1"
|
||||
}
|
||||
|
||||
throw() {
|
||||
printf "\e[31;1merror\e[0m: %s\n\n%s\n" "$1" "$USAGE" 1>&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
exec_or_print() {
|
||||
if [ "$EXECUTE" ]; then
|
||||
"$@"
|
||||
else
|
||||
echo "Skipping due to dry run. Command:" "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
USAGE="Create a new release of the ethers workspace crates
|
||||
|
||||
Usage:
|
||||
$(basename "$0") [OPTIONS] <VERSION>
|
||||
|
||||
Options:
|
||||
-s, --sign Sign commits and tag
|
||||
-v, --verbose Use verbose Cargo output
|
||||
-e, --execute Actually perform a release. Dry-run mode is the default
|
||||
-h, --help Show this help text and exit
|
||||
|
||||
Arguments:
|
||||
<VERSION> See 'cargo release --help'. Levels are not supported"
|
||||
|
||||
SIGN_COMMIT=""
|
||||
SIGN_TAG=""
|
||||
VERBOSE=""
|
||||
EXECUTE=""
|
||||
VERSION=""
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
-s|--sign)
|
||||
SIGN_COMMIT="--sign-commit"
|
||||
SIGN_TAG="--sign-tag"
|
||||
shift
|
||||
;;
|
||||
-v|--verbose)
|
||||
VERBOSE="--verbose"
|
||||
shift
|
||||
;;
|
||||
-x|--execute)
|
||||
EXECUTE="--execute"
|
||||
shift
|
||||
;;
|
||||
-h|--help)
|
||||
echo "$USAGE"
|
||||
exit 0
|
||||
;;
|
||||
|
||||
--)
|
||||
VERSION="$2"
|
||||
break
|
||||
;;
|
||||
|
||||
-*)
|
||||
throw "unrecognized option: '$1'"
|
||||
;;
|
||||
|
||||
*)
|
||||
if [ "$VERSION" ]; then
|
||||
throw "only one version can be specified"
|
||||
else
|
||||
VERSION="$1"
|
||||
fi
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [ ! "$VERSION" ]; then
|
||||
throw "a version must be set" 1>&2
|
||||
fi
|
||||
|
||||
# check for necessary binaries
|
||||
NECESSARY=(cargo-release git-cliff)
|
||||
MISSING=""
|
||||
for bin in "${NECESSARY[@]}"; do
|
||||
if ! command -v "$bin" &>/dev/null; then
|
||||
MISSING=true
|
||||
echo "'$bin' is required to run this command, but it is not installed" 1>&2
|
||||
fi
|
||||
done
|
||||
[ "$MISSING" ] && throw "missing necessary binaries"
|
||||
|
||||
# exclude examples
|
||||
WORKSPACE_FLAGS=(--workspace)
|
||||
for ex in examples/*; do
|
||||
if [ -d "$ex" ]; then
|
||||
crate=$(echo "$ex" | tr / -)
|
||||
WORKSPACE_FLAGS+=(--exclude "$crate")
|
||||
fi
|
||||
done
|
||||
|
||||
# shellcheck disable=SC2206
|
||||
COMMON_FLAGS=($VERBOSE $EXECUTE)
|
||||
|
||||
info "bumping crate versions"
|
||||
cargo release version "${WORKSPACE_FLAGS[@]}" "${COMMON_FLAGS[@]}" "$VERSION"
|
||||
|
||||
info "creating changelog"
|
||||
exec_or_print git cliff -t "$VERSION" -o CHANGELOG.md
|
||||
|
||||
info "creating git commit"
|
||||
exec_or_print cargo release commit "${COMMON_FLAGS[@]}" $SIGN_COMMIT
|
||||
|
||||
info "publishing crates"
|
||||
exec_or_print cargo release publish "${COMMON_FLAGS[@]}" "${WORKSPACE_FLAGS[@]}"
|
||||
|
||||
info "tagging commits"
|
||||
cargo release tag "${COMMON_FLAGS[@]}" "${WORKSPACE_FLAGS[@]}" $SIGN_TAG
|
||||
|
||||
info "pushing commits and tags to remote"
|
||||
cargo release push "${COMMON_FLAGS[@]}" "${WORKSPACE_FLAGS[@]}"
|
|
@ -0,0 +1,83 @@
|
|||
# configuration file for git-cliff
|
||||
# see https://github.com/orhun/git-cliff#configuration-file
|
||||
|
||||
[changelog]
|
||||
# changelog header
|
||||
header = """
|
||||
# Changelog
|
||||
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
This changelog is automatically generated by [git-cliff](https://github.com/orhun/git-cliff),
|
||||
which is configured [here](./cliff.toml).
|
||||
|
||||
Please do not manually edit this file.\n
|
||||
"""
|
||||
# template for the changelog body
|
||||
# https://tera.netlify.app/docs/#introduction
|
||||
body = """
|
||||
{% if version %}\
|
||||
## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
|
||||
{% else %}\
|
||||
## [Unreleased]
|
||||
{% endif %}\
|
||||
{% for group, commits in commits | group_by(attribute="group") %}
|
||||
### {{ group | title }}
|
||||
{% for commit in commits %}
|
||||
- {% if commit.breaking %}[**breaking**] {% endif %}{{ commit.message | upper_first | split(pat="\\n") | first }}\
|
||||
{% endfor %}
|
||||
{% endfor %}\n
|
||||
"""
|
||||
# remove the leading and trailing whitespace from the template
|
||||
trim = true
|
||||
# changelog footer
|
||||
footer = """
|
||||
<!-- generated by git-cliff -->
|
||||
"""
|
||||
|
||||
[git]
|
||||
# parse the commits based on https://www.conventionalcommits.org
|
||||
conventional_commits = true
|
||||
# filter out the commits that are not conventional
|
||||
filter_unconventional = false
|
||||
# process each line of a commit as an individual commit
|
||||
split_commits = false
|
||||
# regex for preprocessing the commit messages
|
||||
commit_preprocessors = [
|
||||
# replace issue numbers
|
||||
{ pattern = '\((\w+\s)?#([0-9]+)\)', replace = "([#${2}](https://github.com/gakonst/ethers-rs/issues/${2}))" },
|
||||
]
|
||||
# regex for parsing and grouping commits
|
||||
commit_parsers = [
|
||||
{ message = "^feat", group = "Features" },
|
||||
{ message = "^fix", group = "Bug Fixes" },
|
||||
{ message = "^doc", group = "Documentation" },
|
||||
{ message = "(.*deps)|(.*dependencies)|(.*[Bb]ump)", group = "Depedencies" },
|
||||
{ message = "^perf", group = "Performance" },
|
||||
{ message = "^refactor", group = "Refactor" },
|
||||
{ message = "(^style)|(.*fmt)", group = "Styling" },
|
||||
{ message = "^test", group = "Testing" },
|
||||
{ message = ".*release", skip = true },
|
||||
{ message = "^revert", skip = true },
|
||||
{ message = "^chore", group = "Miscellaneous Tasks" },
|
||||
{ message = ".*", group = "Other" },
|
||||
]
|
||||
# protect breaking changes from being skipped due to matching a skipping commit_parser
|
||||
protect_breaking_commits = true
|
||||
# filter out the commits that are not matched by commit parsers
|
||||
filter_commits = false
|
||||
# glob pattern for matching git tags
|
||||
tag_pattern = "*"
|
||||
# regex for skipping tags
|
||||
# skip_tags = "v0.1.0-beta.1"
|
||||
# regex for ignoring tags
|
||||
ignore_tags = "^ethers.*"
|
||||
# sort the tags topologically
|
||||
topo_order = false
|
||||
# sort the commits inside sections by oldest/newest order
|
||||
sort_commits = "newest"
|
||||
# limit the number of commits included in the changelog.
|
||||
# limit_commits = 42
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "examples-anvil"
|
||||
version = "2.0.0"
|
||||
version = "0.0.0"
|
||||
publish = false
|
||||
authors = ["Andrea Simeoni <andreasimeoni84@gmail.com>"]
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "examples-big-numbers"
|
||||
version = "2.0.0"
|
||||
version = "0.0.0"
|
||||
publish = false
|
||||
authors = ["Andrea Simeoni <andreasimeoni84@gmail.com>"]
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "examples-contracts"
|
||||
version = "2.0.0"
|
||||
version = "0.0.0"
|
||||
publish = false
|
||||
authors = ["Andrea Simeoni <andreasimeoni84@gmail.com>"]
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "examples-events"
|
||||
version = "2.0.0"
|
||||
version = "0.0.0"
|
||||
publish = false
|
||||
authors = ["Andrea Simeoni <andreasimeoni84@gmail.com>"]
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "examples-middleware"
|
||||
version = "2.0.0"
|
||||
version = "0.0.0"
|
||||
publish = false
|
||||
authors = ["Andrea Simeoni <andreasimeoni84@gmail.com>"]
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "examples-providers"
|
||||
version = "2.0.0"
|
||||
version = "0.0.0"
|
||||
publish = false
|
||||
authors = ["Andrea Simeoni <andreasimeoni84@gmail.com>"]
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "examples-queries"
|
||||
version = "2.0.0"
|
||||
version = "0.0.0"
|
||||
publish = false
|
||||
authors = ["Andrea Simeoni <andreasimeoni84@gmail.com>"]
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "examples-subscriptions"
|
||||
version = "2.0.0"
|
||||
version = "0.0.0"
|
||||
publish = false
|
||||
authors = ["Andrea Simeoni <andreasimeoni84@gmail.com>"]
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "examples-transactions"
|
||||
version = "2.0.0"
|
||||
version = "0.0.0"
|
||||
publish = false
|
||||
authors = ["Andrea Simeoni <andreasimeoni84@gmail.com>"]
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "examples-wallets"
|
||||
version = "2.0.0"
|
||||
version = "0.0.0"
|
||||
publish = false
|
||||
authors = ["Andrea Simeoni <andreasimeoni84@gmail.com>"]
|
||||
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
[package]
|
||||
name = "ethers-wasm"
|
||||
version = "2.0.0"
|
||||
name = "examples-wasm"
|
||||
version = "0.0.0"
|
||||
authors = ["Matthias Seitz <matthias.seitz@outlook.de>"]
|
||||
license = "MIT OR Apache-2.0"
|
||||
publish = false
|
||||
|
||||
rust-version.workspace = true
|
||||
edition.workspace = true
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"name": "ethers-wasm",
|
||||
"name": "examples-wasm",
|
||||
"license": "MIT OR Apache-2.0",
|
||||
"private": "true",
|
||||
"scripts": {
|
|
@ -5,7 +5,7 @@ use ethers::{
|
|||
signers::Signer,
|
||||
types::Chain,
|
||||
};
|
||||
use ethers_wasm::{utils, SimpleContract};
|
||||
use examples_wasm::{utils, SimpleContract};
|
||||
use std::sync::Arc;
|
||||
use wasm_bindgen_test::*;
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
allow-branch = ["master"]
|
||||
pre-release-commit-message = "chore: release"
|
||||
tag-message = "chore: release {{crate_name}} v{{version}}"
|
Loading…
Reference in New Issue