Files
matrix-rust-sdk/xtask/src/fixup.rs
T
mgoldenberg b65e450813 Support TLS v1.3 on all platforms (#6053)
**Note:** _this pull request has a companion pull request in the
[`complement-crypto`](https://github.com/matrix-org/complement-crypto/pull/229)
repository, which must be merged in conjunction with this one._

_Before merging, this should be tested in conjunction with the Element X
iOS client to ensure that TLS v1.3 is working properly._ @stefanceriu
has agreed to work on this.

## Overview

The primary change in this pull request upgrades the `reqwest`
dependency to its latest version, which defaults to using `rustls` with
support for `rustls-platform-verifier` instead of `native-tls` (see
[`reqwest@0.13.0`](https://github.com/seanmonstar/reqwest/releases/tag/v0.13.0)).
The benefit here is that `rustls` supports TLS v1.3 on all platforms,
whereas [`native-tls` does
not](https://github.com/sfackler/rust-native-tls/pull/278).

Additionally, this pull request makes `rustls` the default TLS
implementation in all the crates in this repository.

This will be particularly helpful with element-hq/element-x-ios#786.

## Changes

- `reqwest` bumped to `0.13.1`
- The API for adding/replacing certificates has changed a bit, so this
required some updating in `HttpSettings::make_client`
- `oauth2-reqwest` added in favor of `oauth2/reqwest` 
    - This is required in order to be compatible with `reqwest^0.13`
- _**`oauth2-reqwest` is currently in alpha release, so it probably
makes sense to let this stabilize a bit.**_ For details, see
https://github.com/ramosbugs/oauth2-rs/issues/333#issuecomment-3906712203.
- `getrandom` bumped to `0.3.4`
    - This is required in order to be compatible with `oauth2@5.1.0`
- `proptest` bumped to `1.9.0`
    - This is required in order to be compatible with `getrandom@0.3.4` 
- Make `rustls` the default TLS implementation

## Questions

### Mirror feature flag names?

A number of feature flags have been replaced in the dependencies above.

1. _**`reqwest/rustls-tls` => `reqwest/rustls`**_ - this is simply a
name change, but is semantically identical (see
[`reqwest@0.13.0`](https://github.com/seanmonstar/reqwest/releases/tag/v0.13.0)).
2. _**`getrandom/js` => `getrandom/wasm_js`**_ - the semantics here have
changed slightly, but it seems to just make it easier to enable the
`wasm_js` backend (see
[`getrandom@0.3.4`](https://github.com/rust-random/getrandom/blob/master/CHANGELOG.md#major-change-to-wasm_js-backend)).

At any rate, I have updated references to these flags in each of the
various `Cargo.toml` files, but have not changed the names of our
exposed features to mimic those in the dependencies.

Any thoughts or preferences on whether to mirror those names? That
would, of course, result in a breaking change.

### Default to using `rustls`? Deprecate `native-tls`?

Now that the dependencies have all been bumped, we can use `rustls` on
all platforms. Should this be the new default given that `native-tls`
will very likely never support TLS v1.3 on Apple devices? And should
`native-tls` be deprecated as a result?

**UPDATE:** _The consensus here seems to be that we should default to
using `rustls`, but that `native-tls` should still be available._

---
Fixes #5800.


- [ ] Public API changes documented in changelogs (optional)

Signed-off-by: Michael Goldenberg <m@mgoldenberg.net>

---------

Signed-off-by: Michael Goldenberg <m@mgoldenberg.net>
2026-03-10 13:38:18 +01:00

85 lines
2.0 KiB
Rust

use clap::{Args, Subcommand};
use xshell::cmd;
use crate::{NIGHTLY, Result, sh, workspace};
#[derive(Args)]
pub struct FixupArgs {
#[clap(subcommand)]
cmd: Option<FixupCommand>,
}
#[derive(Subcommand)]
enum FixupCommand {
/// Fix style
Style,
/// Fix typos
Typos,
/// Fix clippy lints
Clippy,
}
impl FixupArgs {
pub fn run(self) -> Result<()> {
let sh = sh();
let _p = sh.push_dir(workspace::root_path()?);
match self.cmd {
Some(cmd) => match cmd {
FixupCommand::Style => fix_style(),
FixupCommand::Typos => fix_typos(),
FixupCommand::Clippy => fix_clippy(),
},
None => {
fix_style()?;
fix_typos()?;
fix_clippy()?;
Ok(())
}
}
}
}
fn fix_style() -> Result<()> {
let sh = sh();
cmd!(sh, "rustup run {NIGHTLY} cargo fmt").run()?;
Ok(())
}
fn fix_typos() -> Result<()> {
let sh = sh();
// FIXME: Print install instructions if command-not-found (needs an xshell
// change: https://github.com/matklad/xshell/issues/46)
cmd!(sh, "typos --write-changes").run()?;
Ok(())
}
fn fix_clippy() -> Result<()> {
let sh = sh();
cmd!(
sh,
"rustup run {NIGHTLY} cargo clippy --all-targets
--fix --allow-dirty --allow-staged
-- -D warnings "
)
.run()?;
cmd!(
sh,
"rustup run {NIGHTLY} cargo clippy --workspace --all-targets
--fix --allow-dirty --allow-staged
--exclude matrix-sdk-crypto --exclude xtask
--no-default-features --features rustls-tls,sso-login
-- -D warnings"
)
.run()?;
cmd!(
sh,
"rustup run {NIGHTLY} cargo clippy --all-targets -p matrix-sdk-crypto
--allow-dirty --allow-staged --fix
--no-default-features -- -D warnings"
)
.run()?;
Ok(())
}