diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index d83dadf840..2e947aa19e 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -3,7 +3,7 @@ "build": { "dockerfile": "Dockerfile", "args": { - "DEV_VERSION": "v47", + "DEV_VERSION": "v48", "http_proxy": "${localEnv:http_proxy}", "https_proxy": "${localEnv:https_proxy}" } diff --git a/.github/workflows/beta.yml b/.github/workflows/beta.yml index 8208b20c9b..24cd208abc 100644 --- a/.github/workflows/beta.yml +++ b/.github/workflows/beta.yml @@ -23,7 +23,7 @@ permissions: jobs: build: runs-on: ${{ vars.LINKERD2_PROXY_RUNNER || 'ubuntu-24.04' }} - container: ghcr.io/linkerd/dev:v47-rust + container: ghcr.io/linkerd/dev:v48-rust timeout-minutes: 20 continue-on-error: true steps: diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index 5e64509c0b..09941f9987 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -43,7 +43,7 @@ jobs: runs-on: ${{ vars.LINKERD2_PROXY_RUNNER || 'ubuntu-24.04' }} timeout-minutes: 30 container: - image: docker://ghcr.io/linkerd/dev:v47-rust + image: docker://ghcr.io/linkerd/dev:v48-rust options: --security-opt seccomp=unconfined # 🤷 env: CXX: "/usr/bin/clang++-19" diff --git a/.github/workflows/fuzzers.yml b/.github/workflows/fuzzers.yml index c9f9d23290..9012f11d33 100644 --- a/.github/workflows/fuzzers.yml +++ b/.github/workflows/fuzzers.yml @@ -27,7 +27,7 @@ jobs: list-changed: timeout-minutes: 3 runs-on: ${{ vars.LINKERD2_PROXY_RUNNER || 'ubuntu-24.04' }} - container: docker://rust:1.88.0 + container: docker://rust:1.90.0 steps: - run: apt update && apt install -y jo - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 @@ -48,7 +48,7 @@ jobs: needs: [list-changed] timeout-minutes: 40 runs-on: ${{ vars.LINKERD2_PROXY_RUNNER || 'ubuntu-24.04' }} - container: docker://rust:1.88.0 + container: docker://rust:1.90.0 strategy: matrix: dir: ${{ fromJson(needs.list-changed.outputs.dirs) }} diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 5d114eafd5..3128fad838 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -23,7 +23,7 @@ permissions: jobs: build: runs-on: ${{ vars.LINKERD2_PROXY_RUNNER || 'ubuntu-24.04' }} - container: ghcr.io/linkerd/dev:v47-rust + container: ghcr.io/linkerd/dev:v48-rust timeout-minutes: 20 continue-on-error: true steps: diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index a821ab1755..d9274c3177 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -76,7 +76,7 @@ jobs: if: needs.meta.outputs.actions_changed == 'true' runs-on: ${{ vars.LINKERD2_PROXY_RUNNER || 'ubuntu-24.04' }} steps: - - uses: linkerd/dev/actions/setup-tools@v47 + - uses: linkerd/dev/actions/setup-tools@v48 - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 - run: just action-lint - run: just action-dev-check @@ -85,7 +85,7 @@ jobs: needs: meta if: needs.meta.outputs.cargo_changed == 'true' || needs.meta.outputs.rust_changed == 'true' runs-on: ${{ vars.LINKERD2_PROXY_RUNNER || 'ubuntu-24.04' }} - container: ghcr.io/linkerd/dev:v47-rust + container: ghcr.io/linkerd/dev:v48-rust permissions: contents: read timeout-minutes: 20 @@ -108,7 +108,7 @@ jobs: if: needs.meta.outputs.cargo_changed == 'true' timeout-minutes: 20 runs-on: ${{ vars.LINKERD2_PROXY_RUNNER || 'ubuntu-24.04' }} - container: ghcr.io/linkerd/dev:v47-rust + container: ghcr.io/linkerd/dev:v48-rust strategy: matrix: crate: ${{ fromJson(needs.meta.outputs.cargo_crates) }} @@ -127,7 +127,7 @@ jobs: env: WAIT_TIMEOUT: 2m steps: - - uses: linkerd/dev/actions/setup-tools@v47 + - uses: linkerd/dev/actions/setup-tools@v48 - name: scurl https://run.linkerd.io/install-edge | sh run: | scurl https://run.linkerd.io/install-edge | sh diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d31f284a28..1f6b4852a6 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -155,7 +155,7 @@ jobs: continue-on-error: ${{ needs.meta.outputs.publish != 'true' }} runs-on: ${{ vars.LINKERD2_PROXY_RUNNER || 'ubuntu-24.04' }} timeout-minutes: 40 - container: docker://ghcr.io/linkerd/dev:v47-rust-musl + container: docker://ghcr.io/linkerd/dev:v48-rust-musl env: LINKERD2_PROXY_VENDOR: ${{ github.repository_owner }} LINKERD2_PROXY_VERSION: ${{ needs.meta.outputs.version }} diff --git a/.github/workflows/shellcheck.yml b/.github/workflows/shellcheck.yml index 184c038981..fc0c9308be 100644 --- a/.github/workflows/shellcheck.yml +++ b/.github/workflows/shellcheck.yml @@ -15,6 +15,6 @@ jobs: timeout-minutes: 5 runs-on: ${{ vars.LINKERD2_PROXY_RUNNER || 'ubuntu-24.04' }} steps: - - uses: linkerd/dev/actions/setup-tools@v47 + - uses: linkerd/dev/actions/setup-tools@v48 - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 - run: just sh-lint diff --git a/.github/workflows/toolchain.yml b/.github/workflows/toolchain.yml index 946a08564b..7da809b9ff 100644 --- a/.github/workflows/toolchain.yml +++ b/.github/workflows/toolchain.yml @@ -14,7 +14,7 @@ permissions: jobs: devcontainer: runs-on: ${{ vars.LINKERD2_PROXY_RUNNER || 'ubuntu-24.04' }} - container: ghcr.io/linkerd/dev:v47-rust + container: ghcr.io/linkerd/dev:v48-rust steps: - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 - run: git config --global --add safe.directory "$PWD" # actions/runner#2033 @@ -37,7 +37,7 @@ jobs: workflows: runs-on: ${{ vars.LINKERD2_PROXY_RUNNER || 'ubuntu-24.04' }} steps: - - uses: linkerd/dev/actions/setup-tools@v47 + - uses: linkerd/dev/actions/setup-tools@v48 - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 - shell: bash run: | diff --git a/Dockerfile b/Dockerfile index cfc246a619..b5ca2b37d1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ # This is intended **DEVELOPMENT ONLY**, i.e. so that proxy developers can # easily test the proxy in the context of the larger `linkerd2` project. -ARG RUST_IMAGE=ghcr.io/linkerd/dev:v47-rust +ARG RUST_IMAGE=ghcr.io/linkerd/dev:v48-rust # Use an arbitrary ~recent edge release image to get the proxy # identity-initializing and linkerd-await wrappers. diff --git a/linkerd/app/integration/src/tests/profiles.rs b/linkerd/app/integration/src/tests/profiles.rs index 5a3f1614ee..a235ca722b 100644 --- a/linkerd/app/integration/src/tests/profiles.rs +++ b/linkerd/app/integration/src/tests/profiles.rs @@ -130,7 +130,7 @@ impl TestBuilder { .unwrap() }) .route_async("/0.5", move |req| { - let fail = counter.fetch_add(1, Ordering::Relaxed) % 2 == 0; + let fail = counter.fetch_add(1, Ordering::Relaxed).is_multiple_of(2); async move { // Read the entire body before responding, so that the // client doesn't fail when writing it out. @@ -154,7 +154,7 @@ impl TestBuilder { }) .route_fn("/0.5/sleep", move |_req| { ::std::thread::sleep(Duration::from_secs(1)); - if counter2.fetch_add(1, Ordering::Relaxed) % 2 == 0 { + if counter2.fetch_add(1, Ordering::Relaxed).is_multiple_of(2) { Response::builder() .status(533) .body(BoxBody::from_static("nope")) @@ -167,7 +167,7 @@ impl TestBuilder { } }) .route_fn("/0.5/100KB", move |_req| { - if counter3.fetch_add(1, Ordering::Relaxed) % 2 == 0 { + if counter3.fetch_add(1, Ordering::Relaxed).is_multiple_of(2) { Response::builder() .status(533) .body(BoxBody::new(http_body_util::Full::new(Bytes::from(vec![ diff --git a/linkerd/http/prom/src/record_response.rs b/linkerd/http/prom/src/record_response.rs index 5da034d6d9..90a5a2f246 100644 --- a/linkerd/http/prom/src/record_response.rs +++ b/linkerd/http/prom/src/record_response.rs @@ -226,7 +226,7 @@ where fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll { let this = self.project(); - let res = futures::ready!(this.inner.poll(cx)).map_err(Into::into); + let res = futures::ready!(this.inner.poll(cx)); let mut state = this.state.take(); match res { Ok(rsp) => { diff --git a/linkerd/http/route/src/grpc/match.rs b/linkerd/http/route/src/grpc/match.rs index e5a32dfc01..e6555a7aec 100644 --- a/linkerd/http/route/src/grpc/match.rs +++ b/linkerd/http/route/src/grpc/match.rs @@ -111,9 +111,6 @@ pub mod proto { #[derive(Debug, thiserror::Error)] pub enum InvalidRouteMatch { - #[error("invalid RPC match: {0}")] - Rpc(#[from] InvalidRpcMatch), - #[error("invalid header match: {0}")] Header(#[from] InvalidHeaderMatch), @@ -121,17 +118,12 @@ pub mod proto { MissingRpc, } - // Currently, RPC match conversion is infallible; but this could change in - // the future. - #[derive(Debug, thiserror::Error)] - pub enum InvalidRpcMatch {} - impl TryFrom for MatchRoute { type Error = InvalidRouteMatch; fn try_from(pb: api::GrpcRouteMatch) -> Result { Ok(MatchRoute { - rpc: pb.rpc.ok_or(InvalidRouteMatch::MissingRpc)?.try_into()?, + rpc: pb.rpc.ok_or(InvalidRouteMatch::MissingRpc)?.into(), headers: pb .headers .into_iter() @@ -140,11 +132,10 @@ pub mod proto { }) } } - impl TryFrom for MatchRpc { - type Error = InvalidRpcMatch; - fn try_from(pb: api::GrpcRpcMatch) -> Result { - Ok(MatchRpc { + impl From for MatchRpc { + fn from(pb: api::GrpcRpcMatch) -> Self { + MatchRpc { service: if pb.service.is_empty() { None } else { @@ -155,7 +146,7 @@ pub mod proto { } else { Some(pb.method) }, - }) + } } } } diff --git a/rust-toolchain.toml b/rust-toolchain.toml index e88baf106b..ff100edcbb 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,2 +1,2 @@ [toolchain] -channel = "1.88.0" +channel = "1.90.0"