From f8fa4d1338bc061c6d3e2771ebccb78344fb82eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Drwi=C4=99ga?= Date: Thu, 10 Dec 2020 13:23:33 +0100 Subject: [PATCH] CI build & reformat. (#1) * CI build & reformat. * Fix no default features builds. * Fix v12 build. --- .github/workflows/deny.yml | 30 +++++++++ .github/workflows/lint.yml | 35 ++++++++++ .github/workflows/rust.yml | 106 ++++++++++++++++++++++++++++++ deny.toml | 128 +++++++++++++++++++++++++++++++++++++ frame-metadata/src/lib.rs | 100 +++++++++++++++++++---------- rustfmt.toml | 1 + 6 files changed, 366 insertions(+), 34 deletions(-) create mode 100644 .github/workflows/deny.yml create mode 100644 .github/workflows/lint.yml create mode 100644 .github/workflows/rust.yml create mode 100644 deny.toml create mode 100644 rustfmt.toml diff --git a/.github/workflows/deny.yml b/.github/workflows/deny.yml new file mode 100644 index 0000000..0861970 --- /dev/null +++ b/.github/workflows/deny.yml @@ -0,0 +1,30 @@ +name: Cargo deny + +on: + pull_request: + schedule: + - cron: '0 0 * * *' + push: + branches: + - master + tags: + - v* + paths-ignore: + - 'README.md' +jobs: + cargo-deny: + runs-on: ubuntu-latest + steps: + - name: Cancel Previous Runs + uses: styfle/cancel-workflow-action@0.4.1 + with: + access_token: ${{ github.token }} + - name: Checkout sources & submodules + uses: actions/checkout@master + with: + fetch-depth: 5 + submodules: recursive + - name: Cargo deny + uses: EmbarkStudios/cargo-deny-action@v1 + with: + command: "check --hide-inclusion-graph" diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 0000000..68d8669 --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,35 @@ +name: Check style + +on: + pull_request: + push: + branches: + - master + tags: + - v* + paths-ignore: + - 'README.md' +jobs: +## Check stage + check-fmt: + name: Check RustFmt + runs-on: ubuntu-latest + env: + RUST_BACKTRACE: full + steps: + - name: Cancel Previous Runs + uses: styfle/cancel-workflow-action@0.4.1 + with: + access_token: ${{ github.token }} + - name: Checkout sources & submodules + uses: actions/checkout@master + with: + fetch-depth: 5 + submodules: recursive + - name: Add rustfmt + run: rustup component add rustfmt + - name: rust-fmt check + uses: actions-rs/cargo@master + with: + command: fmt + args: --all -- --check diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml new file mode 100644 index 0000000..6936ea6 --- /dev/null +++ b/.github/workflows/rust.yml @@ -0,0 +1,106 @@ +name: Compilation and Testing Suite + +on: + pull_request: + push: + branches: + - master + tags: + - v* + paths-ignore: + - 'README.md' +jobs: + + check-test-build: + name: Check, test and build + runs-on: ubuntu-latest + env: + RUST_BACKTRACE: full + steps: + - name: Cancel Previous Runs + uses: styfle/cancel-workflow-action@0.4.1 + with: + access_token: ${{ github.token }} + - name: Checkout sources & submodules + uses: actions/checkout@master + with: + fetch-depth: 5 + submodules: recursive +## Check Stage + - name: Checking rust-stable + uses: actions-rs/cargo@master + with: + command: check + toolchain: stable + args: --all --verbose + +## Test Stage + - name: Testing rust-stable + uses: actions-rs/cargo@master + with: + command: test + toolchain: stable + args: --all --verbose + +## Build Stage + - name: Building rust-stable + uses: actions-rs/cargo@master + if: github.ref == 'refs/heads/master' + with: + command: build + toolchain: stable + args: --all --verbose + + check-wasm: + name: Check WASM + runs-on: ubuntu-latest + env: + RUST_BACKTRACE: full + steps: + - name: Cancel Previous Runs + uses: styfle/cancel-workflow-action@0.4.1 + with: + access_token: ${{ github.token }} + - name: Checkout sources & submodules + uses: actions/checkout@master + with: + fetch-depth: 5 + submodules: recursive + - name: Add WASM Utilities + run: rustup target add wasm32-unknown-unknown --toolchain stable +## Check Stage + - name: Checking wasm32 + uses: actions-rs/cargo@master + with: + command: check + toolchain: stable + args: --manifest-path ./frame-metadata/Cargo.toml --target wasm32-unknown-unknown --no-default-features + + check-features: + name: Check Features + runs-on: ubuntu-latest + env: + RUST_BACKTRACE: full + steps: + - name: Cancel Previous Runs + uses: styfle/cancel-workflow-action@0.4.1 + with: + access_token: ${{ github.token }} + - name: Checkout sources & submodules + uses: actions/checkout@master + with: + fetch-depth: 5 + submodules: recursive +## Check Stage + - name: Checking without any features + uses: actions-rs/cargo@master + with: + command: check + toolchain: stable + args: --manifest-path ./frame-metadata/Cargo.toml --no-default-features + - name: Checking v12 + uses: actions-rs/cargo@master + with: + command: check + toolchain: stable + args: --manifest-path ./frame-metadata/Cargo.toml --no-default-features --features v12 diff --git a/deny.toml b/deny.toml new file mode 100644 index 0000000..d6467f7 --- /dev/null +++ b/deny.toml @@ -0,0 +1,128 @@ +# This template contains all of the possible sections and their default values + +# Note that all fields that take a lint level have these possible values: +# * deny - An error will be produced and the check will fail +# * warn - A warning will be produced, but the check will not fail +# * allow - No warning or error will be produced, though in some cases a note will be + +# If 1 or more target triples (and optionally, target_features) are specified, only +# the specified targets will be checked when running `cargo deny check`. This means, +# if a particular package is only ever used as a target specific dependency, such +# as, for example, the `nix` crate only being used via the `target_family = "unix"` +# configuration, that only having windows targets in this list would mean the nix +# crate, as well as any of its exclusive dependencies not shared by any other +# crates, would be ignored, as the target list here is effectively saying which +# targets you are building for. +targets = [ + # The triple can be any string, but only the target triples built in to + # rustc (as of 1.40) can be checked against actual config expressions + #{ triple = "x86_64-unknown-linux-musl" }, + # You can also specify which target_features you promise are enabled for a particular + # target. target_features are currently not validated against the actual valid + # features supported by the target architecture. + #{ triple = "wasm32-unknown-unknown", features = ["atomics"] }, +] + +# This section is considered when running `cargo deny check advisories` +# More documentation for the advisories section can be found here: +# https://github.com/EmbarkStudios/cargo-deny#the-advisories-section +[advisories] +# The path where the advisory database is cloned/fetched into +db-path = "~/.cargo/advisory-db" +# The url of the advisory database to use +db-url = "https://github.com/rustsec/advisory-db" +# The lint level for security vulnerabilities +vulnerability = "warn" +# The lint level for unmaintained crates +unmaintained = "warn" +# The lint level for crates with security notices. Note that as of +# 2019-12-17 there are no security notice advisories in https://github.com/rustsec/advisory-db +notice = "warn" +# A list of advisory IDs to ignore. Note that ignored advisories will still output +# a note when they are encountered. +ignore = [] +# Threshold for security vulnerabilities, any vulnerability with a CVSS score +# lower than the range specified will be ignored. Note that ignored advisories +# will still output a note when they are encountered. +# * None - CVSS Score 0.0 +# * Low - CVSS Score 0.1 - 3.9 +# * Medium - CVSS Score 4.0 - 6.9 +# * High - CVSS Score 7.0 - 8.9 +# * Critical - CVSS Score 9.0 - 10.0 +#severity-threshold = + +# This section is considered when running `cargo deny check licenses` +# More documentation for the licenses section can be found here: +# https://github.com/EmbarkStudios/cargo-deny#the-licenses-section +[licenses] +# The lint level for crates which do not have a detectable license +unlicensed = "warn" +# List of explictly allowed licenses +# See https://spdx.org/licenses/ for list of possible licenses +# [possible values: any SPDX 3.7 short identifier (+ optional exception)]. +allow = [] +# List of explictly disallowed licenses +# See https://spdx.org/licenses/ for list of possible licenses +# [possible values: any SPDX 3.7 short identifier (+ optional exception)]. +deny = ["GPL-3.0"] +# The lint level for licenses considered copyleft +copyleft = "allow" +# Blanket approval or denial for OSI-approved or FSF Free/Libre licenses +# * both - The license will only be approved if it is both OSI-approved *AND* FSF/Free +# * either - The license will be approved if it is either OSI-approved *OR* FSF/Free +# * osi-only - The license will be approved if is OSI-approved *AND NOT* FSF/Free +# * fsf-only - The license will be approved if is FSF/Free *AND NOT* OSI-approved +# * neither - The license will be denied if is FSF/Free *OR* OSI-approved +allow-osi-fsf-free = "either" +# The confidence threshold for detecting a license from license text. +# The higher the value, the more closely the license text must be to the +# canonical license text of a valid SPDX license file. +# [possible values: any between 0.0 and 1.0]. +confidence-threshold = 0.8 + +# This section is considered when running `cargo deny check bans`. +# More documentation about the 'bans' section can be found here: +# https://github.com/EmbarkStudios/cargo-deny#crate-bans-cargo-deny-check-ban +[bans] +# Lint level for when multiple versions of the same crate are detected +multiple-versions = "warn" +# The graph highlighting used when creating dotgraphs for crates +# with multiple versions +# * lowest-version - The path to the lowest versioned duplicate is highlighted +# * simplest-path - The path to the version with the fewest edges is highlighted +# * all - Both lowest-version and simplest-path are used +highlight = "all" +# List of crates that are allowed. Use with care! +allow = [ + #{ name = "ansi_term", version = "=0.11.0" }, +] +# List of crates to deny +deny = [ + # Each entry the name of a crate and a version range. If version is + # not specified, all versions will be matched. + #{ name = "ansi_term", version = "=0.11.0" }, +] +# Certain crates/versions that will be skipped when doing duplicate detection. +skip = [ + #{ name = "ansi_term", version = "=0.11.0" }, +] +# Similarly to `skip` allows you to skip certain crates during duplicate detection, +# unlike skip, it also includes the entire tree of transitive dependencies starting at +# the specified crate, up to a certain depth, which is by default infinite +skip-tree = [ + #{ name = "ansi_term", version = "=0.11.0", depth = 20 }, +] + + +# This section is considered when running `cargo deny check sources`. +# More documentation about the 'sources' section can be found here: +# https://github.com/EmbarkStudios/cargo-deny#crate-sources-cargo-deny-check-sources +[sources] +# Lint level for what to happen when a crate from a crate registry that is not in the allow list is encountered +unknown-registry = "warn" +# Lint level for what to happen when a crate from a git repository that is not in the allow list is encountered +unknown-git = "warn" +# List of URLs for allowed crate registries, by default https://github.com/rust-lang/crates.io-index is included +#allow-registry = [] +# List of URLs for allowed Git repositories +allow-git = [] diff --git a/frame-metadata/src/lib.rs b/frame-metadata/src/lib.rs index 1f8c7b8..b3667fe 100644 --- a/frame-metadata/src/lib.rs +++ b/frame-metadata/src/lib.rs @@ -20,10 +20,10 @@ #![cfg_attr(not(feature = "std"), no_std)] #[cfg(feature = "std")] -use serde::Serialize; -#[cfg(feature = "std")] -use codec::{Decode, Input, Error}; +use codec::{Decode, Error, Input}; use codec::{Encode, Output}; +#[cfg(feature = "std")] +use serde::Serialize; #[cfg(not(feature = "std"))] extern crate alloc; @@ -46,12 +46,20 @@ type StringBuf = &'static str; /// /// For example a `&'static [ &'static str ]` can be decoded to a `Vec`. #[derive(Clone)] -pub enum DecodeDifferent where B: 'static, O: 'static { +pub enum DecodeDifferent +where + B: 'static, + O: 'static, +{ Encode(B), Decoded(O), } -impl Encode for DecodeDifferent where B: Encode + 'static, O: Encode + 'static { +impl Encode for DecodeDifferent +where + B: Encode + 'static, + O: Encode + 'static, +{ fn encode_to(&self, dest: &mut W) { match self { DecodeDifferent::Encode(b) => b.encode_to(dest), @@ -60,14 +68,21 @@ impl Encode for DecodeDifferent where B: Encode + 'static, O: Encode } } -impl codec::EncodeLike for DecodeDifferent where B: Encode + 'static, O: Encode + 'static {} +impl codec::EncodeLike for DecodeDifferent +where + B: Encode + 'static, + O: Encode + 'static, +{ +} #[cfg(feature = "std")] -impl Decode for DecodeDifferent where B: 'static, O: Decode + 'static { +impl Decode for DecodeDifferent +where + B: 'static, + O: Decode + 'static, +{ fn decode(input: &mut I) -> Result { - ::decode(input).map(|val| { - DecodeDifferent::Decoded(val) - }) + ::decode(input).map(|val| DecodeDifferent::Decoded(val)) } } @@ -82,13 +97,16 @@ where } impl Eq for DecodeDifferent - where B: Encode + Eq + PartialEq + 'static, O: Encode + Eq + PartialEq + 'static -{} +where + B: Encode + Eq + PartialEq + 'static, + O: Encode + Eq + PartialEq + 'static, +{ +} impl core::fmt::Debug for DecodeDifferent - where - B: core::fmt::Debug + Eq + 'static, - O: core::fmt::Debug + Eq + 'static, +where + B: core::fmt::Debug + Eq + 'static, + O: core::fmt::Debug + Eq + 'static, { fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { match self { @@ -100,11 +118,14 @@ impl core::fmt::Debug for DecodeDifferent #[cfg(feature = "std")] impl serde::Serialize for DecodeDifferent - where - B: serde::Serialize + 'static, - O: serde::Serialize + 'static, +where + B: serde::Serialize + 'static, + O: serde::Serialize + 'static, { - fn serialize(&self, serializer: S) -> Result where S: serde::Serializer { + fn serialize(&self, serializer: S) -> Result + where + S: serde::Serializer, + { match self { DecodeDifferent::Encode(b) => b.serialize(serializer), DecodeDifferent::Decoded(o) => o.serialize(serializer), @@ -112,7 +133,7 @@ impl serde::Serialize for DecodeDifferent } } -pub type DecodeDifferentArray = DecodeDifferent<&'static [B], Vec>; +pub type DecodeDifferentArray = DecodeDifferent<&'static [B], Vec>; type DecodeDifferentStr = DecodeDifferent<&'static str, StringBuf>; @@ -135,7 +156,9 @@ pub struct FunctionArgumentMetadata { /// Newtype wrapper for support encoding functions (actual the result of the function). #[derive(Clone, Eq)] -pub struct FnEncode(pub fn() -> E) where E: Encode + 'static; +pub struct FnEncode(pub fn() -> E) +where + E: Encode + 'static; impl Encode for FnEncode { fn encode_to(&self, dest: &mut W) { @@ -159,7 +182,10 @@ impl core::fmt::Debug for FnEncode { #[cfg(feature = "std")] impl serde::Serialize for FnEncode { - fn serialize(&self, serializer: S) -> Result where S: serde::Serializer { + fn serialize(&self, serializer: S) -> Result + where + S: serde::Serializer, + { self.0().serialize(serializer) } } @@ -171,7 +197,7 @@ pub struct OuterEventMetadata { pub name: DecodeDifferentStr, pub events: DecodeDifferentArray< (&'static str, FnEncode<&'static [EventMetadata]>), - (StringBuf, Vec) + (StringBuf, Vec), >, } @@ -252,11 +278,14 @@ impl PartialEq for DefaultByteGetter { } } -impl Eq for DefaultByteGetter { } +impl Eq for DefaultByteGetter {} #[cfg(feature = "std")] impl serde::Serialize for DefaultByteGetter { - fn serialize(&self, serializer: S) -> Result where S: serde::Serializer { + fn serialize(&self, serializer: S) -> Result + where + S: serde::Serializer, + { self.0.default_byte().serialize(serializer) } } @@ -364,16 +393,16 @@ pub enum RuntimeMetadata { /// Version 11 for runtime metadata. No longer used. V11(RuntimeMetadataDeprecated), /// Version 12 for runtime metadata. - #[cfg(feature = "v12")] + #[cfg(feature = "v12")] V12(RuntimeMetadataV12), - #[cfg(not(feature = "v12"))] + #[cfg(not(feature = "v12"))] V12(RuntimeMetadataDeprecated), } /// Enum that should fail. #[derive(Eq, PartialEq)] #[cfg_attr(feature = "std", derive(Serialize, Debug))] -pub enum RuntimeMetadataDeprecated { } +pub enum RuntimeMetadataDeprecated {} impl Encode for RuntimeMetadataDeprecated { fn encode_to(&self, _dest: &mut W) {} @@ -391,6 +420,7 @@ impl Decode for RuntimeMetadataDeprecated { /// The metadata of a runtime. #[derive(Eq, Encode, PartialEq)] #[cfg_attr(feature = "std", derive(Decode, Serialize, Debug))] +#[cfg(feature = "v12")] pub struct RuntimeMetadataV12 { /// Metadata of all the modules. pub modules: DecodeDifferentArray, @@ -399,8 +429,16 @@ pub struct RuntimeMetadataV12 { } /// The latest version of the metadata. +#[cfg(feature = "v12")] pub type RuntimeMetadataLastVersion = RuntimeMetadataV12; +#[cfg(feature = "v12")] +impl Into for RuntimeMetadataLastVersion { + fn into(self) -> RuntimeMetadataPrefixed { + RuntimeMetadataPrefixed(META_RESERVED, RuntimeMetadata::V12(self)) + } +} + /// All metadata about an runtime module. #[derive(Clone, PartialEq, Eq, Encode)] #[cfg_attr(feature = "std", derive(Decode, Serialize, Debug))] @@ -424,9 +462,3 @@ impl Into> for RuntimeMetadataPrefixed { self.encode() } } - -impl Into for RuntimeMetadataLastVersion { - fn into(self) -> RuntimeMetadataPrefixed { - RuntimeMetadataPrefixed(META_RESERVED, RuntimeMetadata::V12(self)) - } -} diff --git a/rustfmt.toml b/rustfmt.toml new file mode 100644 index 0000000..218e203 --- /dev/null +++ b/rustfmt.toml @@ -0,0 +1 @@ +hard_tabs = true