*: Install rust and cargo when running presubmit.sh Update the rustfmt version to match downstream. Format existing code with `cargo fmt` to pass presubmit. Bug: b/439013538 Change-Id: Iabb97123b6929378e54c568bc37450d15fef73a1 Reviewed-on: https://bluetooth-review.googlesource.com/c/bluetooth/+/2781 Reviewed-by: Marie Janssen <jamuraa@google.com> Commit-Queue: Dayeong Lee <dayeonglee@google.com>
diff --git a/.gitignore b/.gitignore index f4fd39f..8bcc936 100644 --- a/.gitignore +++ b/.gitignore
@@ -1,2 +1,5 @@ # Vim swap files. *.swp + +# CIPD files. +infra/packages
diff --git a/infra/cipd.ensure b/infra/cipd.ensure new file mode 100644 index 0000000..03d9b0c --- /dev/null +++ b/infra/cipd.ensure
@@ -0,0 +1,15 @@ +$VerifiedPlatform linux-amd64 +$VerifiedPlatform mac-amd64 +$ParanoidMode CheckPresence + +# LLVM. +fuchsia/third_party/clang/${platform} git_revision:3576f05db125006ffbe22bfc199a269bf2a4a06f +fuchsia/third_party/gcc/${os=linux}-amd64 git_revision:52a883ddece2f70a67aa37c9170bfa22253ae2c4,98583463abed11c7659028c0d68a9619fed5f559 +fuchsia/third_party/gcc/${os=mac}-amd64 git_revision:fbe5e908de76aa240bbcd2f144c156eccc863604,25558d2fc0e8b77d4c522c322012b048db4c1485 + +# Rust. +fuchsia/third_party/rust/host/${platform} git_revisions:afa859f8121bf2985362a2c8414dc71a825ccf2d,03b0f55d9c6319a851a60bb084faca0e32a38f2b +fuchsia/third_party/rust/target/x86_64-unknown-linux-gnu git_revisions:afa859f8121bf2985362a2c8414dc71a825ccf2d,03b0f55d9c6319a851a60bb084faca0e32a38f2b +fuchsia/third_party/rust/target/thumbv7m-none-eabi git_revisions:afa859f8121bf2985362a2c8414dc71a825ccf2d,03b0f55d9c6319a851a60bb084faca0e32a38f2b +@Subdir rust_bindgen +fuchsia/third_party/rust_bindgen/${platform} git_revision:f518815cc14a7f8c292964bb37179a1070d7e18a
diff --git a/infra/env_setup.sh b/infra/env_setup.sh new file mode 100644 index 0000000..ab8aafc --- /dev/null +++ b/infra/env_setup.sh
@@ -0,0 +1,23 @@ +# No "#!" line. This script should be sourced, not executed. + +# set -o errexit # Exit on errors. +# set -o nounset # Error on unset variables. +# set -o xtrace # Print commands. + +_abspath () { + $(command -v python3 || command -v python) -c "import os.path; print(os.path.abspath('$@'))" +} + +export INFRA=$(dirname $(_abspath "$BASH_SOURCE")) + +cipd ensure -ensure-file "$INFRA/cipd.ensure" -root "$INFRA/packages" + +export PATH="$INFRA/packages/bin:$INFRA/packages:$PATH" + +if [[ "$(uname -m)" == "x86_64" ]]; then + ln -sf $INFRA/packages/bin/x86_64-elf-gcc $INFRA/packages/bin/cc + ln -sf $INFRA/packages/bin/x86_64-elf-gcc $INFRA/packages/bin/gcc +else + ln -sf $INFRA/packages/bin/aarch64-elf-gcc $INFRA/packages/bin/cc + ln -sf $INFRA/packages/bin/aarch64-elf-gcc $INFRA/packages/bin/gcc +fi
diff --git a/presubmit.sh b/presubmit.sh index 3da037b..f05c74a 100755 --- a/presubmit.sh +++ b/presubmit.sh
@@ -1,8 +1,27 @@ #!/bin/bash # Presubmit script for CI/CD -# Exit on error, print commands, and exit on unset variables. -set -eux +# Exit on error, and exit on unset variables. +set -o errexit +set -o nounset + +# Create .cargo/config.toml for the musl target +# TODO: add a line for mac. +BASE_DIR=$(dirname "$0") +mkdir -p "$BASE_DIR/.cargo" +cat > "$BASE_DIR/.cargo/config.toml" <<EOL +[target.x86_64-unknown-linux-musl] +rustflags = ["-C", "linker=clang", "-C", "link-arg=-fuse-ld=lld"] + +[target.x86_64-unknown-linux-gnu] +rustflags = ["-C", "linker=clang", "-C", "link-arg=-fuse-ld=lld"] +EOL + +# Install tools. +. "$(dirname "$0")/infra/env_setup.sh" + +# Print commands as they're executed. +set -o xtrace # Change to the rust directory to run cargo commands. cd "$(dirname "$0")/rust" @@ -14,11 +33,16 @@ # 2. Check formatting. # `cargo fmt -- --check` will exit with a non-zero status code if any # files are not formatted correctly. -cargo fmt -- --check +if ! cargo fmt -- --check; then + { set +x; } 2>/dev/null + echo "Please run \`cargo fmt\` to format your code" + exit 1 +fi + # 3. Run tests. # `set -e` will cause the script to exit if any tests fail. cargo test { set +x; } 2>/dev/null -echo "Presubmit checks passed!"; +echo "Presubmit checks passed!"
diff --git a/rust/bt-ascs/src/types.rs b/rust/bt-ascs/src/types.rs index fd6014d..ce5a579 100644 --- a/rust/bt-ascs/src/types.rs +++ b/rust/bt-ascs/src/types.rs
@@ -546,7 +546,11 @@ type Error = bt_common::packet_encoding::Error; fn try_from(value: u8) -> Result<Self, Self::Error> { - if value > 0xEF { Err(Self::Error::OutOfRange) } else { Ok(CigId(value)) } + if value > 0xEF { + Err(Self::Error::OutOfRange) + } else { + Ok(CigId(value)) + } } } @@ -567,7 +571,11 @@ type Error = bt_common::packet_encoding::Error; fn try_from(value: u8) -> Result<Self, Self::Error> { - if value > 0xEF { Err(Self::Error::OutOfRange) } else { Ok(CisId(value)) } + if value > 0xEF { + Err(Self::Error::OutOfRange) + } else { + Ok(CisId(value)) + } } }
diff --git a/rust/bt-bass/src/types.rs b/rust/bt-bass/src/types.rs index 3f8e2d3..70c97ad 100644 --- a/rust/bt-bass/src/types.rs +++ b/rust/bt-bass/src/types.rs
@@ -1340,10 +1340,8 @@ broadcast_id: BroadcastId::try_from(0x00010203).unwrap(), pa_sync_state: PaSyncState::NotSynced, big_encryption: EncryptionStatus::NotEncrypted, - subgroups: vec![ - BigSubgroup::new(None) - .with_metadata(vec![Metadata::ParentalRating(Rating::AllAge)]), /* encoded_len = 8 */ - ], + subgroups: vec![BigSubgroup::new(None) + .with_metadata(vec![Metadata::ParentalRating(Rating::AllAge)]) /* encoded_len = 8 */], }); assert_eq!(state.encoded_len(), 23); let mut buf = vec![0; state.encoded_len()];
diff --git a/rust/bt-common/src/generic_audio/codec_capabilities.rs b/rust/bt-common/src/generic_audio/codec_capabilities.rs index a5c23a5..5386d78 100644 --- a/rust/bt-common/src/generic_audio/codec_capabilities.rs +++ b/rust/bt-common/src/generic_audio/codec_capabilities.rs
@@ -163,9 +163,11 @@ fn encode_value(&self, buf: &mut [u8]) -> Result<(), crate::packet_encoding::Error> { match self { CodecCapability::SupportedAudioChannelCounts(counts) => { - buf[0] = counts - .iter() - .fold(0, |acc, count| if *count > 8 { acc } else { acc | (1 << (*count - 1)) }); + buf[0] = + counts.iter().fold( + 0, + |acc, count| if *count > 8 { acc } else { acc | (1 << (*count - 1)) }, + ); } CodecCapability::SupportedFrameDurations(support) => { buf[0] = match support {
diff --git a/rust/bt-pacs/src/server.rs b/rust/bt-pacs/src/server.rs index e2f185f..c3bfa1a 100644 --- a/rust/bt-pacs/src/server.rs +++ b/rust/bt-pacs/src/server.rs
@@ -135,7 +135,11 @@ impl<T: bt_gatt::ServerTypes> LocalServiceState<T> { fn is_published(&self) -> bool { - if let LocalServiceState::NotPublished { .. } = self { false } else { true } + if let LocalServiceState::NotPublished { .. } = self { + false + } else { + true + } } } @@ -499,46 +503,37 @@ #[test] fn build_server_error() { // No sink or source PACs. - assert!( - ServerBuilder::new() - .build::<FakeTypes>( - AudioContexts::new( - HashSet::from([ContextType::Conversational, ContextType::Media]), - HashSet::from([ContextType::Media]), - ), - AudioContexts::new(HashSet::from([ContextType::Media]), HashSet::new()), - ) - .is_err() - ); + assert!(ServerBuilder::new() + .build::<FakeTypes>( + AudioContexts::new( + HashSet::from([ContextType::Conversational, ContextType::Media]), + HashSet::from([ContextType::Media]), + ), + AudioContexts::new(HashSet::from([ContextType::Media]), HashSet::new()), + ) + .is_err()); // Sink audio context in available not in supported. - assert!( - default_server_builder() - .build::<FakeTypes>( - AudioContexts::new( - HashSet::from([ContextType::Conversational, ContextType::Media]), - HashSet::from([ContextType::Media]), - ), - AudioContexts::new(HashSet::from([ContextType::Alerts]), HashSet::new()), - ) - .is_err() - ); + assert!(default_server_builder() + .build::<FakeTypes>( + AudioContexts::new( + HashSet::from([ContextType::Conversational, ContextType::Media]), + HashSet::from([ContextType::Media]), + ), + AudioContexts::new(HashSet::from([ContextType::Alerts]), HashSet::new()), + ) + .is_err()); // Sink audio context in available not in supported. - assert!( - default_server_builder() - .build::<FakeTypes>( - AudioContexts::new( - HashSet::from([ContextType::Conversational, ContextType::Media]), - HashSet::from([ContextType::Media]), - ), - AudioContexts::new( - HashSet::from([]), - HashSet::from([ContextType::EmergencyAlarm]) - ), - ) - .is_err() - ); + assert!(default_server_builder() + .build::<FakeTypes>( + AudioContexts::new( + HashSet::from([ContextType::Conversational, ContextType::Media]), + HashSet::from([ContextType::Media]), + ), + AudioContexts::new(HashSet::from([]), HashSet::from([ContextType::EmergencyAlarm])), + ) + .is_err()); } #[test]
diff --git a/rust/rustfmt.toml b/rust/rustfmt.toml index 71b39c8..61b5ed3 100644 --- a/rust/rustfmt.toml +++ b/rust/rustfmt.toml
@@ -1,7 +1,5 @@ # rustfmt which matches most of our downstream - -edition = "2021" -version = "Two" +edition = "2024" # The "Default" setting has a heuristic which splits lines too aggresively. # We are willing to revisit this setting in future versions of rustfmt.