diff --git a/.cirrus.yml b/.cirrus.yml index 4fb70d7b3b..c16590f98f 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -50,7 +50,7 @@ task: setup_script: - kldload mqueuefs - fetch https://sh.rustup.rs -o rustup.sh - - sh rustup.sh -y --profile=minimal --default-toolchain $MSRV + - sh rustup.sh -y --profile=minimal --default-toolchain stable - . $HOME/.cargo/env - rustup target add i686-unknown-freebsd - rustup component add clippy diff --git a/.github/actions/build/action.yml b/.github/actions/build/action.yml index 9cf2fbff5d..c44b8e10f7 100644 --- a/.github/actions/build/action.yml +++ b/.github/actions/build/action.yml @@ -21,6 +21,11 @@ inputs: required: false default: -D warnings + TARGETS: + description: 'Build all targets or only default?' + required: false + default: "--all-targets" + TOOL: description: 'Tool used to involve the BUILD command, can be cargo or cross' required: false @@ -30,6 +35,16 @@ inputs: required: false default: + NOCLIPPY: + description: "whether to run cargo clippy" + required: false + default: false + + NODOC: + description: "whether to run cargo doc" + required: false + default: false + NOHACK: description: "whether to run cargo hack" required: false @@ -52,13 +67,15 @@ runs: - name: build shell: bash - run: ${{ inputs.TOOL }} ${{ inputs.BUILD }} ${{ inputs.ZFLAGS }} --target ${{ inputs.TARGET }} --all-targets --all-features + run: ${{ inputs.TOOL }} ${{ inputs.BUILD }} ${{ inputs.ZFLAGS }} --target ${{ inputs.TARGET }} ${{ inputs.TARGETS }} --all-features - name: doc + if: inputs.NODOC == 'false' shell: bash run: ${{ inputs.TOOL }} doc ${{ inputs.ZFLAGS }} --no-deps --target ${{ inputs.TARGET }} --all-features - name: clippy + if: inputs.NOCLIPPY == 'false' shell: bash run: ${{ inputs.TOOL}} clippy ${{ inputs.ZFLAGS }} --target ${{ inputs.TARGET }} --all-targets --all-features -- ${{ inputs.CLIPPYFLAGS }} diff --git a/.github/actions/test/action.yml b/.github/actions/test/action.yml index 31a6fd7aa6..6aa2bfe5ae 100644 --- a/.github/actions/test/action.yml +++ b/.github/actions/test/action.yml @@ -19,6 +19,10 @@ inputs: required: false default: -D warnings -A unknown-lints + RUSTDOCFLAGS: + required: false + default: -D warnings + runs: using: "composite" steps: @@ -26,6 +30,7 @@ runs: shell: bash run: | echo "RUSTFLAGS=${{ inputs.RUSTFLAGS }}" >> $GITHUB_ENV + echo "RUSTDOCFLAGS=${{ inputs.RUSTDOCFLAGS }}" >> $GITHUB_ENV - name: test shell: bash diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index fc7fa1324d..2da4220637 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,10 +14,6 @@ permissions: env: MSRV: 1.69.0 - # Rust's Loongarch support merged in 1.71.0 - MSRV_LOONGARCH: 1.71.0 - # Minimal Rust version to support all 3 official OpenHarmony targets as tier2 - MSRV_OHOS: 1.78.0 RUSTFLAGS: -Dwarnings jobs: @@ -32,7 +28,7 @@ jobs: - name: setup Rust uses: dtolnay/rust-toolchain@master with: - toolchain: '${{ env.MSRV }}' + toolchain: stable components: clippy - name: build @@ -59,7 +55,7 @@ jobs: - name: setup Rust uses: dtolnay/rust-toolchain@master with: - toolchain: '${{ env.MSRV }}' + toolchain: stable components: clippy - name: build @@ -79,7 +75,7 @@ jobs: # cross needs to execute Docker, GitHub Action already has it installed cross: runs-on: ubuntu-24.04 - needs: [rustfmt, minver, macos, x86_64_linux_native_builds, rust_stable] + needs: [rustfmt, minver, macos, x86_64_linux_native_builds] strategy: fail-fast: false matrix: @@ -108,8 +104,7 @@ jobs: - name: setup Rust uses: dtolnay/rust-toolchain@master with: - # Use a newer version rustc if the target is Loongarch, remove this workaround after MSRV is newer than 1.71.0 - toolchain: "${{ matrix.target == 'loongarch64-unknown-linux-gnu' && env.MSRV_LOONGARCH || env.MSRV }}" + toolchain: stable components: clippy # cross relies on docker or podman, GitHub Acton already has it installed. @@ -132,6 +127,7 @@ jobs: SUDO: "" TOOL: cross RUSTFLAGS: --cfg qemu -D warnings + RUSTDOCFLAGS: --cfg qemu - name: before_cache_script run: rm -rf $CARGO_HOME/registry/index @@ -156,7 +152,7 @@ jobs: - name: setup Rust uses: dtolnay/rust-toolchain@master with: - toolchain: '${{ env.MSRV }}' + toolchain: stable components: clippy - name: install targets @@ -193,7 +189,7 @@ jobs: - name: setup Rust uses: dtolnay/rust-toolchain@master with: - toolchain: '${{ env.MSRV }}' + toolchain: stable components: clippy - name: install targets @@ -212,38 +208,11 @@ jobs: - name: before_cache_script run: sudo rm -rf $CARGO_HOME/registry/index; - rust_stable: - runs-on: ubuntu-latest - env: - TARGET: x86_64-unknown-linux-gnu - steps: - - name: checkout - uses: actions/checkout@v4 - - - name: setup Rust - uses: dtolnay/rust-toolchain@stable - with: - components: clippy - - - name: build - uses: ./.github/actions/build - with: - TARGET: '${{ env.TARGET }}' - - - name: test - uses: ./.github/actions/test - with: - TARGET: '${{ env.TARGET }}' - - - name: before_cache_script - run: sudo rm -rf $CARGO_HOME/registry/index - - # Tasks for cross-compiling, but no testing cross_compiling: runs-on: ubuntu-latest - needs: [rustfmt, minver, macos, x86_64_linux_native_builds, rust_stable] + needs: [rustfmt, minver, macos, x86_64_linux_native_builds] env: BUILD: check strategy: @@ -282,8 +251,7 @@ jobs: - name: setup Rust uses: dtolnay/rust-toolchain@master with: - # Use a newer version rustc if it is OpenHarmony, remove this workaround after MSRV is newer than 1.78.0 - toolchain: "${{ contains(matrix.target, 'ohos') && env.MSRV_OHOS || env.MSRV }}" + toolchain: stable components: clippy - name: install targets @@ -299,10 +267,56 @@ jobs: - name: before_cache_script run: rm -rf $CARGO_HOME/registry/index + # Check that Nix will build on the MSRV, on a variety of operating systems. + # But don't check the tests. Those are not required to build on MSRV. + msrv: + runs-on: ubuntu-latest + needs: [rustfmt, minver, macos, x86_64_linux_native_builds] + env: + BUILD: check + NOCLIPPY: true + NODOC: true + NOHACK: true + TARGETS: "" + strategy: + fail-fast: false + matrix: + include: + - target: aarch64-linux-android + - target: x86_64-unknown-linux-gnu + - target: x86_64-unknown-linux-musl + - target: aarch64-apple-darwin + - target: x86_64-unknown-freebsd + - target: x86_64-unknown-netbsd + steps: + - name: checkout + uses: actions/checkout@v4 + + - name: setup Rust + uses: dtolnay/rust-toolchain@master + with: + toolchain: $MSRV + + - name: install targets + run: rustup target add ${{ matrix.target }} + + - name: build + uses: ./.github/actions/build + with: + TARGET: '${{ matrix.target }}' + TARGETS: '${{ env.TARGETS }}' + BUILD: '${{ env.BUILD }}' + NOCLIPPY: '${{ env.NOCLIPPY }}' + NODOC: '${{ env.NODOC }}' + NOHACK: '${{ env.NOHACK }}' + + - name: before_cache_script + run: rm -rf $CARGO_HOME/registry/index + redox: runs-on: ubuntu-latest - needs: [rustfmt, minver, macos, x86_64_linux_native_builds, rust_stable] + needs: [rustfmt, minver, macos, x86_64_linux_native_builds] env: TARGET: x86_64-unknown-redox CLIPPYFLAGS: -D warnings diff --git a/src/fcntl.rs b/src/fcntl.rs index 6504c1dcf2..4b439d03ed 100644 --- a/src/fcntl.rs +++ b/src/fcntl.rs @@ -1038,6 +1038,7 @@ pub unsafe trait Flockable: std::os::fd::AsRawFd {} pub struct Flock(T); #[cfg(not(any(target_os = "redox", target_os = "solaris")))] +#[allow(clippy::unnecessary_unwrap)] // https://github.com/rust-lang/rust-clippy/issues/15744 impl Drop for Flock { fn drop(&mut self) { let res = Errno::result(unsafe { libc::flock(self.0.as_raw_fd(), libc::LOCK_UN) }); diff --git a/src/sys/aio.rs b/src/sys/aio.rs index a5f368637a..ad23356dba 100644 --- a/src/sys/aio.rs +++ b/src/sys/aio.rs @@ -1154,12 +1154,12 @@ pub fn aio_suspend( /// pub static SIGNALED: AtomicBool = AtomicBool::new(false); /// /// extern fn sigfunc(_: c_int) { -/// SIGNALED.store(true, Ordering::Relaxed); +/// SIGNALED.store(true, Ordering::Release); /// } /// let sa = SigAction::new(SigHandler::Handler(sigfunc), /// SaFlags::SA_RESETHAND, /// SigSet::empty()); -/// SIGNALED.store(false, Ordering::Relaxed); +/// SIGNALED.store(false, Ordering::Release); /// unsafe { sigaction(Signal::SIGUSR2, &sa) }.unwrap(); /// /// const WBUF: &[u8] = b"abcdef123456"; @@ -1173,7 +1173,7 @@ pub fn aio_suspend( /// )); /// let sev = SigevNotify::SigevSignal { signal: Signal::SIGUSR2, si_value: 0 }; /// lio_listio(LioMode::LIO_NOWAIT, &mut[aiow.as_mut()], sev).unwrap(); -/// while !SIGNALED.load(Ordering::Relaxed) { +/// while !SIGNALED.load(Ordering::Acquire) { /// thread::sleep(time::Duration::from_millis(10)); /// } /// // At this point, since `lio_listio` returned success and delivered its diff --git a/src/sys/personality.rs b/src/sys/personality.rs index 9623fb8663..f77f36b681 100644 --- a/src/sys/personality.rs +++ b/src/sys/personality.rs @@ -78,10 +78,10 @@ pub fn get() -> Result { /// /// Example: /// -// Disable test on aarch64 until we know why it fails. +// Disable test on aarch64 and with QEMU. seccomp interference is suspected. // https://github.com/nix-rust/nix/issues/2060 -#[cfg_attr(target_arch = "aarch64", doc = " ```no_run")] -#[cfg_attr(not(target_arch = "aarch64"), doc = " ```")] +#[cfg_attr(any(qemu, target_arch = "aarch64"), doc = " ```no_run")] +#[cfg_attr(not(any(qemu, target_arch = "aarch64")), doc = " ```")] /// # use nix::sys::personality::{self, Persona}; /// let mut pers = personality::get().unwrap(); /// assert!(!pers.contains(Persona::ADDR_NO_RANDOMIZE)); diff --git a/src/sys/socket/sockopt.rs b/src/sys/socket/sockopt.rs index 49b305920f..e06dded5bb 100644 --- a/src/sys/socket/sockopt.rs +++ b/src/sys/socket/sockopt.rs @@ -1972,12 +1972,14 @@ impl<'a> Set<'a, OsString> for SetOsString<'a> { /// Getter for a `CString` value. #[cfg(apple_targets)] +#[cfg(feature = "net")] struct GetCString> { len: socklen_t, val: MaybeUninit, } #[cfg(apple_targets)] +#[cfg(feature = "net")] impl> Get for GetCString { fn uninit() -> Self { GetCString { diff --git a/test/test_sendfile.rs b/test/test_sendfile.rs index ab50a1d040..c59edb2a9e 100644 --- a/test/test_sendfile.rs +++ b/test/test_sendfile.rs @@ -159,10 +159,10 @@ fn test_sendfile_dragonfly() { fn test_sendfile_darwin() { // Declare the content let header_strings = - vec!["HTTP/1.1 200 OK\n", "Content-Type: text/plain\n", "\n"]; + ["HTTP/1.1 200 OK\n", "Content-Type: text/plain\n", "\n"]; let body = "Xabcdef123456"; let body_offset = 1; - let trailer_strings = vec!["\n", "Served by Make Believe\n"]; + let trailer_strings = ["\n", "Served by Make Believe\n"]; // Write the body to a file let mut tmp = tempfile().unwrap(); @@ -195,7 +195,7 @@ fn test_sendfile_darwin() { + &trailer_strings.concat(); // Verify the message that was sent - assert_eq!(bytes_written as usize, expected_string.as_bytes().len()); + assert_eq!(bytes_written as usize, expected_string.len()); let mut read_string = String::new(); let bytes_read = rd.read_to_string(&mut read_string).unwrap(); @@ -258,7 +258,7 @@ fn test_sendfilev() { + &trailer_strings.concat(); // Verify the message that was sent - assert_eq!(bytes_written, expected_string.as_bytes().len()); + assert_eq!(bytes_written, expected_string.len()); let mut read_string = String::new(); let bytes_read = rd.read_to_string(&mut read_string).unwrap();