diff --git a/.github/scripts/cmd/cmd.py b/.github/scripts/cmd/cmd.py index 1c08b621467d..f7dd88df4bda 100755 --- a/.github/scripts/cmd/cmd.py +++ b/.github/scripts/cmd/cmd.py @@ -5,14 +5,13 @@ import json import argparse import _help +import importlib.util _HelpAction = _help._HelpAction f = open('.github/workflows/runtimes-matrix.json', 'r') runtimesMatrix = json.load(f) -print(f'runtimesMatrix: {runtimesMatrix}\n') - runtimeNames = list(map(lambda x: x['name'], runtimesMatrix)) common_args = { @@ -69,6 +68,17 @@ for arg, config in common_args.items(): parser_ui.add_argument(arg, **config) +""" +PRDOC +""" +# Import generate-prdoc.py dynamically +spec = importlib.util.spec_from_file_location("generate_prdoc", ".github/scripts/generate-prdoc.py") +generate_prdoc = importlib.util.module_from_spec(spec) +spec.loader.exec_module(generate_prdoc) + +parser_prdoc = subparsers.add_parser('prdoc', help='Generates PR documentation') +generate_prdoc.setup_parser(parser_prdoc) + def main(): global args, unknown, runtimesMatrix args, unknown = parser.parse_known_args() @@ -215,6 +225,13 @@ def main(): print('❌ Failed to format code') sys.exit(1) + elif args.command == 'prdoc': + # Call the main function from ./github/scripts/generate-prdoc.py module + exit_code = generate_prdoc.main(args) + if exit_code != 0 and not args.continue_on_fail: + print('❌ Failed to generate prdoc') + sys.exit(exit_code) + print('🚀 Done') if __name__ == '__main__': diff --git a/.github/scripts/cmd/test_cmd.py b/.github/scripts/cmd/test_cmd.py index 4cf1b290915d..a2f29b075dae 100644 --- a/.github/scripts/cmd/test_cmd.py +++ b/.github/scripts/cmd/test_cmd.py @@ -31,12 +31,18 @@ def setUp(self): self.patcher3 = patch('argparse.ArgumentParser.parse_known_args') self.patcher4 = patch('os.system', return_value=0) self.patcher5 = patch('os.popen') + self.patcher6 = patch('importlib.util.spec_from_file_location', return_value=MagicMock()) + self.patcher7 = patch('importlib.util.module_from_spec', return_value=MagicMock()) + self.patcher8 = patch('cmd.generate_prdoc.main', return_value=0) self.mock_open = self.patcher1.start() self.mock_json_load = self.patcher2.start() self.mock_parse_args = self.patcher3.start() self.mock_system = self.patcher4.start() self.mock_popen = self.patcher5.start() + self.mock_spec_from_file_location = self.patcher6.start() + self.mock_module_from_spec = self.patcher7.start() + self.mock_generate_prdoc_main = self.patcher8.start() # Ensure that cmd.py uses the mock_runtimes_matrix import cmd @@ -48,6 +54,9 @@ def tearDown(self): self.patcher3.stop() self.patcher4.stop() self.patcher5.stop() + self.patcher6.stop() + self.patcher7.stop() + self.patcher8.stop() def test_bench_command_normal_execution_all_runtimes(self): self.mock_parse_args.return_value = (argparse.Namespace( @@ -317,5 +326,14 @@ def test_update_ui_command(self, mock_system, mock_parse_args): mock_exit.assert_not_called() mock_system.assert_called_with('sh ./scripts/update-ui-tests.sh') + @patch('argparse.ArgumentParser.parse_known_args', return_value=(argparse.Namespace(command='prdoc', continue_on_fail=False), [])) + @patch('os.system', return_value=0) + def test_prdoc_command(self, mock_system, mock_parse_args): + with patch('sys.exit') as mock_exit: + import cmd + cmd.main() + mock_exit.assert_not_called() + self.mock_generate_prdoc_main.assert_called_with(mock_parse_args.return_value[0]) + if __name__ == '__main__': unittest.main() \ No newline at end of file diff --git a/.github/scripts/generate-prdoc.py b/.github/scripts/generate-prdoc.py index a6a97008dca6..451e1b8fa01b 100644 --- a/.github/scripts/generate-prdoc.py +++ b/.github/scripts/generate-prdoc.py @@ -113,17 +113,28 @@ def yaml_multiline_string_presenter(dumper, data): yaml.add_representer(str, yaml_multiline_string_presenter) -def parse_args(): - parser = argparse.ArgumentParser() +# parse_args is also used by cmd/cmd.py +def setup_parser(parser=None): + if parser is None: + parser = argparse.ArgumentParser() parser.add_argument("--pr", type=int, required=True) parser.add_argument("--audience", type=str, default="TODO") parser.add_argument("--bump", type=str, default="TODO") parser.add_argument("--force", type=str) - return parser.parse_args() + + return parser -if __name__ == "__main__": - args = parse_args() +def main(args): force = True if (args.force or "false").lower() == "true" else False print(f"Args: {args}, force: {force}") setup_yaml() - from_pr_number(args.pr, args.audience, args.bump, force) + try: + from_pr_number(args.pr, args.audience, args.bump, force) + return 0 + except Exception as e: + print(f"Error generating prdoc: {e}") + return 1 + +if __name__ == "__main__": + args = setup_parser().parse_args() + main(args) \ No newline at end of file diff --git a/.github/scripts/generate-prdoc.requirements.txt b/.github/scripts/generate-prdoc.requirements.txt new file mode 100644 index 000000000000..c17aceff63a0 --- /dev/null +++ b/.github/scripts/generate-prdoc.requirements.txt @@ -0,0 +1,6 @@ +requests +cargo-workspace +PyGithub +whatthepatch +pyyaml +toml \ No newline at end of file diff --git a/.github/workflows/cmd.yml b/.github/workflows/cmd.yml index 79a4f6c3b19c..645b5444aa0f 100644 --- a/.github/workflows/cmd.yml +++ b/.github/workflows/cmd.yml @@ -2,7 +2,7 @@ name: Command on: issue_comment: # listen for comments on issues - types: [ created ] + types: [created] permissions: # allow the action to comment on the PR contents: write @@ -35,14 +35,14 @@ jobs: try { const org = '${{ github.event.repository.owner.login }}'; const username = '${{ github.event.comment.user.login }}'; - + const membership = await github.rest.orgs.checkMembershipForUser({ org: org, username: username }); - + console.log(membership, membership.status, membership.status === 204); - + if (membership.status === 204) { return 'true'; } else { @@ -52,7 +52,7 @@ jobs: } catch (error) { console.log(error) } - + return 'false'; reject-non-members: @@ -140,12 +140,14 @@ jobs: } }) help: - needs: [ clean, is-org-member ] + needs: [clean, is-org-member] if: ${{ startsWith(github.event.comment.body, '/cmd') && contains(github.event.comment.body, '--help') && needs.is-org-member.outputs.member == 'true' }} runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 + with: + ref: ${{ github.event.pull_request.head.sha }} - name: Get command uses: actions-ecosystem/action-regex-match@v2 @@ -160,6 +162,7 @@ jobs: CMD: ${{ steps.get-pr-comment.outputs.group2 }} # to avoid "" around the command run: | echo 'help<> $GITHUB_OUTPUT + python3 -m pip install -r .github/scripts/generate-prdoc.requirements.txt python3 .github/scripts/cmd/cmd.py $CMD >> $GITHUB_OUTPUT echo 'EOF' >> $GITHUB_OUTPUT @@ -173,11 +176,11 @@ jobs: owner: context.repo.owner, repo: context.repo.repo, body: `
Command help: - + \`\`\` ${{ steps.help.outputs.help }} \`\`\` - +
` }) @@ -208,7 +211,7 @@ jobs: }) set-image: - needs: [ clean, is-org-member ] + needs: [clean, is-org-member] if: ${{ startsWith(github.event.comment.body, '/cmd') && !contains(github.event.comment.body, '--help') && needs.is-org-member.outputs.member == 'true' }} runs-on: ubuntu-latest outputs: @@ -222,13 +225,13 @@ jobs: run: | BODY=$(echo "${{ github.event.comment.body }}" | xargs) IMAGE_OVERRIDE=$(echo $BODY | grep -oe 'docker.io/paritytech/ci-unified:.*\s' | xargs) - + cat .github/env >> $GITHUB_OUTPUT - + if [ -n "$IMAGE_OVERRIDE" ]; then echo "IMAGE=$IMAGE_OVERRIDE" >> $GITHUB_OUTPUT fi - + if [[ $BODY == "/cmd bench"* ]]; then echo "RUNNER=arc-runners-polkadot-sdk-benchmark" >> $GITHUB_OUTPUT elif [[ $BODY == "/cmd update-ui"* ]]; then @@ -239,7 +242,7 @@ jobs: # Get PR branch name, because the issue_comment event does not contain the PR branch name get-pr-branch: - needs: [ set-image ] + needs: [set-image] runs-on: ubuntu-latest outputs: pr-branch: ${{ steps.get-pr.outputs.pr_branch }} @@ -278,9 +281,9 @@ jobs: echo "The repository is ${{ steps.get-pr.outputs.repo }}" cmd: - needs: [ set-image, get-pr-branch ] + needs: [set-image, get-pr-branch] env: - JOB_NAME: 'cmd' + JOB_NAME: "cmd" runs-on: ${{ needs.set-image.outputs.RUNNER }} container: image: ${{ needs.set-image.outputs.IMAGE }} @@ -301,18 +304,17 @@ jobs: -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ -H "Accept: application/vnd.github.v3+json" \ https://api.github.com/repos/${{ github.repository }}/actions/runs/${{ github.run_id }}/jobs | jq '.jobs[] | select(.name | contains("${{ env.JOB_NAME }}")) | .html_url') - + runLink=$(curl -s \ -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ -H "Accept: application/vnd.github.v3+json" \ https://api.github.com/repos/${{ github.repository }}/actions/runs/${{ github.run_id }} | jq '.html_url') - + echo "job_url=${jobLink}" echo "run_url=${runLink}" echo "job_url=$jobLink" >> $GITHUB_OUTPUT echo "run_url=$runLink" >> $GITHUB_OUTPUT - - name: Comment PR (Start) if: ${{ !contains(github.event.comment.body, '--quiet') }} uses: actions/github-script@v7 @@ -320,7 +322,7 @@ jobs: github-token: ${{ secrets.GITHUB_TOKEN }} script: | let job_url = ${{ steps.build-link.outputs.job_url }} - + github.rest.issues.createComment({ issue_number: context.issue.number, owner: context.repo.owner, @@ -331,8 +333,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 with: - repository: ${{ needs.get-pr-branch.outputs.repo }} - ref: ${{ needs.get-pr-branch.outputs.pr-branch }} + ref: ${{ github.event.pull_request.head.sha }} - name: Install dependencies for bench if: startsWith(steps.get-pr-comment.outputs.group2, 'bench') @@ -348,6 +349,7 @@ jobs: # Fixes "detected dubious ownership" error in the ci git config --global --add safe.directory '*' git remote -v + python3 -m pip install -r .github/scripts/generate-prdoc.requirements.txt python3 .github/scripts/cmd/cmd.py $CMD git status git diff @@ -357,7 +359,7 @@ jobs: if [ -n "$(git status --porcelain)" ]; then git config --local user.email "action@github.com" git config --local user.name "GitHub Action" - + git pull --rebase origin ${{ needs.get-pr-branch.outputs.pr-branch }} git add . git restore --staged Cargo.lock # ignore changes in Cargo.lock @@ -381,7 +383,7 @@ jobs: --change added changed \ --ignore-errors \ refs/remotes/origin/master refs/heads/${{ needs.get-pr-branch.outputs.pr-branch }}) - + # Save the multiline result to the output { echo "result<\n\nSubweight results:\n\n${subweight}\n\n` : ''; - + github.rest.issues.createComment({ issue_number: context.issue.number, owner: context.repo.owner, diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0f645512e8e4..3c6ec93f6c2f 120000 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1 +1 @@ -docs/contributor/CONTRIBUTING.md \ No newline at end of file +docs/contributor/CONTRIBUTING.md1 diff --git a/docs/contributor/commands-readme.md b/docs/contributor/commands-readme.md index 2bb9bd7e7d58..861c3ac784d5 100644 --- a/docs/contributor/commands-readme.md +++ b/docs/contributor/commands-readme.md @@ -9,13 +9,14 @@ Note: it works only for members of the `paritytech` organization. `/cmd --help` to see the usage of a specific command - ### Commands - `/cmd fmt` to format the code in the PR. It commits back with the formatted code (fmt) and configs (taplo). - `/cmd bench` to generate weights for a runtime. Read more about [Weight Generation](weight-generation.md) +- `/cmd prdoc` to generate a prdoc for a PR. Read more about [PRDoc](prdoc.md) + ### Flags 1.`--quiet` to suppress the output of the command in the comments. @@ -32,12 +33,14 @@ The pipeline logs will include what is failed (like which runtimes/pallets), the or they keep failing, and you're rerunning them again, it's handy to add this flag to keep a PR clean. ### Adding new Commands + Feel free to add new commands to the workflow, however **_note_** that triggered workflows will use the actions from `main` (default) branch, meaning they will take effect only after the PR with new changes/command is merged. If you want to test the new command, it's better to test in your fork and local-to-fork PRs, where you control the default branch. ### Examples + The regex in cmd.yml is: `^(\/cmd )([-\/\s\w.=:]+)$` accepts only alphanumeric, space, "-", "/", "=", ":", "." chars. `/cmd bench --runtime bridge-hub-westend --pallet=pallet_name` diff --git a/docs/contributor/prdoc.md b/docs/contributor/prdoc.md index 3dddcc10f5d0..826158a24be9 100644 --- a/docs/contributor/prdoc.md +++ b/docs/contributor/prdoc.md @@ -18,24 +18,33 @@ A `.prdoc` file is a YAML file with a defined structure (ie JSON Schema). Please 1. Open a Pull Request and get the PR number. 1. Generate the file with `prdoc generate `. The output filename will be printed. 1. Optional: Install the `prdoc/schema_user.json` schema in your editor, for example -[VsCode](https://github.com/paritytech/prdoc?tab=readme-ov-file#schemas). + [VsCode](https://github.com/paritytech/prdoc?tab=readme-ov-file#schemas). 1. Edit your `.prdoc` file according to the [Audience](#pick-an-audience) and [SemVer](#record-semver-changes) sections. 1. Check your prdoc with `prdoc check -n `. This is optional since the CI will also check it. > **Tip:** GitHub CLI and jq can be used to provide the number of your PR to generate the correct file: > `prdoc generate $(gh pr view --json number | jq '.number') -o prdoc` +Alternatively you can call the prdoc from PR via `/cmd prdoc` (see args with `/cmd prdoc --help`) in a comment to PR to trigger it from CI. + +Options: + +- `pr`: The PR number to generate the PrDoc for. +- `audience`: The audience of whom the changes may concern. +- `bump`: A default bump level for all crates. The PrDoc will likely need to be edited to reflect the actual changes after generation. +- `force`: Whether to overwrite any existing PrDoc. + ## Pick An Audience While describing a PR, the author needs to consider which audience(s) need to be addressed. The list of valid audiences is described and documented in the JSON schema as follow: - `Node Dev`: Those who build around the client side code. Alternative client builders, SMOLDOT, those who consume RPCs. - These are people who are oblivious to the runtime changes. They only care about the meta-protocol, not the protocol - itself. + These are people who are oblivious to the runtime changes. They only care about the meta-protocol, not the protocol + itself. - `Runtime Dev`: All of those who rely on the runtime. A parachain team that is using a pallet. A DApp that is using a - pallet. These are people who care about the protocol (WASM), not the meta-protocol (client). + pallet. These are people who care about the protocol (WASM), not the meta-protocol (client). - `Node Operator`: Those who don't write any code and only run code. @@ -64,10 +73,10 @@ For example when you modified two crates and record the changes: ```yaml crates: -- name: frame-example - bump: major -- name: frame-example-pallet - bump: minor + - name: frame-example + bump: major + - name: frame-example-pallet + bump: minor ``` It means that downstream code using `frame-example-pallet` is still guaranteed to work as before, while code using diff --git a/polkadot/runtime/westend/src/weights/pallet_balances.rs b/polkadot/runtime/westend/src/weights/pallet_balances.rs index 5e91f31920ca..51fb51dbe576 100644 --- a/polkadot/runtime/westend/src/weights/pallet_balances.rs +++ b/polkadot/runtime/westend/src/weights/pallet_balances.rs @@ -16,26 +16,29 @@ //! Autogenerated weights for `pallet_balances` //! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 32.0.0 -//! DATE: 2024-05-06, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 42.0.0 +//! DATE: 2024-09-11, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-unxyhko3-project-674-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` -//! WASM-EXECUTION: `Compiled`, CHAIN: `Some("westend-dev")`, DB CACHE: 1024 +//! HOSTNAME: `52412de739f1`, CPU: `Intel(R) Xeon(R) CPU @ 2.80GHz` +//! WASM-EXECUTION: `Compiled`, CHAIN: `None`, DB CACHE: 1024 // Executed Command: -// target/production/polkadot +// frame-omni-bencher +// v1 // benchmark // pallet -// --steps=50 -// --repeat=20 // --extrinsic=* +// --runtime=target/release/wbuild/westend-runtime/westend_runtime.wasm +// --pallet=pallet_balances +// --header=/__w/polkadot-sdk/polkadot-sdk/polkadot/file_header.txt +// --output=./polkadot/runtime/westend/src/weights // --wasm-execution=compiled +// --steps=50 +// --repeat=20 // --heap-pages=4096 -// --json-file=/builds/parity/mirrors/polkadot-sdk/.git/.artifacts/bench.json -// --pallet=pallet_balances -// --chain=westend-dev -// --header=./polkadot/file_header.txt -// --output=./polkadot/runtime/westend/src/weights/ +// --no-storage-info +// --no-min-squares +// --no-median-slopes #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] @@ -54,8 +57,8 @@ impl pallet_balances::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `3593` - // Minimum execution time: 43_248_000 picoseconds. - Weight::from_parts(43_872_000, 0) + // Minimum execution time: 79_165_000 picoseconds. + Weight::from_parts(80_535_000, 0) .saturating_add(Weight::from_parts(0, 3593)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) @@ -66,8 +69,8 @@ impl pallet_balances::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `3593` - // Minimum execution time: 33_990_000 picoseconds. - Weight::from_parts(34_693_000, 0) + // Minimum execution time: 62_625_000 picoseconds. + Weight::from_parts(63_676_000, 0) .saturating_add(Weight::from_parts(0, 3593)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) @@ -76,10 +79,10 @@ impl pallet_balances::WeightInfo for WeightInfo { /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) fn force_set_balance_creating() -> Weight { // Proof Size summary in bytes: - // Measured: `174` + // Measured: `52` // Estimated: `3593` - // Minimum execution time: 12_681_000 picoseconds. - Weight::from_parts(13_183_000, 0) + // Minimum execution time: 20_592_000 picoseconds. + Weight::from_parts(21_810_000, 0) .saturating_add(Weight::from_parts(0, 3593)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) @@ -88,10 +91,10 @@ impl pallet_balances::WeightInfo for WeightInfo { /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) fn force_set_balance_killing() -> Weight { // Proof Size summary in bytes: - // Measured: `174` + // Measured: `52` // Estimated: `3593` - // Minimum execution time: 17_474_000 picoseconds. - Weight::from_parts(18_063_000, 0) + // Minimum execution time: 32_787_000 picoseconds. + Weight::from_parts(33_393_000, 0) .saturating_add(Weight::from_parts(0, 3593)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) @@ -100,10 +103,10 @@ impl pallet_balances::WeightInfo for WeightInfo { /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) fn force_transfer() -> Weight { // Proof Size summary in bytes: - // Measured: `103` + // Measured: `52` // Estimated: `6196` - // Minimum execution time: 45_699_000 picoseconds. - Weight::from_parts(46_099_000, 0) + // Minimum execution time: 80_876_000 picoseconds. + Weight::from_parts(82_085_000, 0) .saturating_add(Weight::from_parts(0, 6196)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) @@ -114,8 +117,8 @@ impl pallet_balances::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `3593` - // Minimum execution time: 42_453_000 picoseconds. - Weight::from_parts(43_133_000, 0) + // Minimum execution time: 78_967_000 picoseconds. + Weight::from_parts(79_985_000, 0) .saturating_add(Weight::from_parts(0, 3593)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) @@ -124,10 +127,10 @@ impl pallet_balances::WeightInfo for WeightInfo { /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) fn force_unreserve() -> Weight { // Proof Size summary in bytes: - // Measured: `174` + // Measured: `52` // Estimated: `3593` - // Minimum execution time: 15_066_000 picoseconds. - Weight::from_parts(15_605_000, 0) + // Minimum execution time: 25_587_000 picoseconds. + Weight::from_parts(26_509_000, 0) .saturating_add(Weight::from_parts(0, 3593)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) @@ -139,11 +142,11 @@ impl pallet_balances::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0 + u * (136 ±0)` // Estimated: `990 + u * (2603 ±0)` - // Minimum execution time: 14_180_000 picoseconds. - Weight::from_parts(14_598_000, 0) + // Minimum execution time: 24_853_000 picoseconds. + Weight::from_parts(25_576_000, 0) .saturating_add(Weight::from_parts(0, 990)) - // Standard Error: 13_221 - .saturating_add(Weight::from_parts(13_422_901, 0).saturating_mul(u.into())) + // Standard Error: 25_058 + .saturating_add(Weight::from_parts(22_940_183, 0).saturating_mul(u.into())) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(u.into()))) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(u.into()))) .saturating_add(Weight::from_parts(0, 2603).saturating_mul(u.into())) @@ -152,24 +155,24 @@ impl pallet_balances::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 5_130_000 picoseconds. - Weight::from_parts(5_257_000, 0) + // Minimum execution time: 8_857_000 picoseconds. + Weight::from_parts(9_522_000, 0) .saturating_add(Weight::from_parts(0, 0)) } fn burn_allow_death() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 27_328_000 picoseconds. - Weight::from_parts(27_785_000, 0) + // Minimum execution time: 48_847_000 picoseconds. + Weight::from_parts(49_640_000, 0) .saturating_add(Weight::from_parts(0, 0)) } fn burn_keep_alive() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 17_797_000 picoseconds. - Weight::from_parts(18_103_000, 0) + // Minimum execution time: 32_133_000 picoseconds. + Weight::from_parts(32_661_000, 0) .saturating_add(Weight::from_parts(0, 0)) } } diff --git a/prdoc/pr_5648.prdoc b/prdoc/pr_5648.prdoc new file mode 100644 index 000000000000..887e2679ff27 --- /dev/null +++ b/prdoc/pr_5648.prdoc @@ -0,0 +1,9 @@ +title: '[Bot] Revive prdoc bot' +doc: +- audience: '123' + description: |- + Prdoc bot was deleted in https://github.com/paritytech/polkadot-sdk/pull/5457 just after being added in https://github.com/paritytech/polkadot-sdk/pull/5331 without replacement. + Now bringing it back until it is integrated into the new command structure. + + Formatting is now also fixed, such that the title is always first and the description renders correctly. +crates: []