From c0bc1866d82c23e2bcbf3c6b05708e324ebadd98 Mon Sep 17 00:00:00 2001 From: Tamir Duberstein Date: Fri, 25 Aug 2023 10:53:16 -0400 Subject: [PATCH 1/4] github: update 6.4.0 URLs Seems the previous spin was pulled. --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c6deec21..5df61008 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -222,7 +222,7 @@ jobs: # linux-image-5.10.0-23-cloud-arm64-unsigned_5.10.179-3_arm64.deb \ printf '%s\0' \ linux-image-6.1.0-10-cloud-arm64-unsigned_6.1.38-2_arm64.deb \ - linux-image-6.4.0-2-cloud-arm64-unsigned_6.4.4-3_arm64.deb \ + linux-image-6.4.0-3-cloud-arm64-unsigned_6.4.11-1_arm64.deb \ | xargs -0 -t -P0 -I {} wget -nd -nv -P test/.tmp/debian-kernels/arm64 ftp://ftp.us.debian.org/debian/pool/main/l/linux/{} - name: Download debian kernels @@ -235,7 +235,7 @@ jobs: # linux-image-5.10.0-23-cloud-amd64-unsigned_5.10.179-3_amd64.deb \ printf '%s\0' \ linux-image-6.1.0-10-cloud-amd64-unsigned_6.1.38-2_amd64.deb \ - linux-image-6.4.0-2-cloud-amd64-unsigned_6.4.4-3_amd64.deb \ + linux-image-6.4.0-3-cloud-amd64-unsigned_6.4.11-1_amd64.deb \ | xargs -0 -t -P0 -I {} wget -nd -nv -P test/.tmp/debian-kernels/amd64 ftp://ftp.us.debian.org/debian/pool/main/l/linux/{} - name: Extract debian kernels From 782eb85d4af056e45c2ffae6f0074bc8303c4b03 Mon Sep 17 00:00:00 2001 From: Tamir Duberstein Date: Fri, 25 Aug 2023 11:07:21 -0400 Subject: [PATCH 2/4] xtask: extract `Errors` type This produces better errors in `cargo xtask public-api` because before this change we'd print errors as display, which didn't show context. Before: ``` Error: public API errors: aya failed to check public API: public_api::Builder::build aya-obj failed to check public API: public_api::Builder::build aya-log failed to check public API: public_api::Builder::build aya-log-common failed to check public API: public_api::Builder::build aya-log-parser failed to check public API: public_api::Builder::build aya-tool failed to check public API: public_api::Builder::build aya-bpf failed to check public API: public_api::Builder::build aya-bpf-bindings failed to check public API: public_api::Builder::build aya-bpf-cty failed to check public API: public_api::Builder::build aya-bpf-macros failed to check public API: public_api::Builder::build aya-log-ebpf-macros failed to check public API: public_api::Builder::build ``` After: ``` Error: aya failed to check public API Caused by: 0: public_api::Builder::build 1: unknown variant `type_alias`, expected one of `module`, `extern_crate`, `import`, `struct`, `struct_field`, `union`, `enum`, `variant`, `function`, `typedef`, `opaque_ty`, `constant`, `trait`, `trait_alias`, `impl`, `static`, `foreign_type`, `macro`, `proc_attribute`, `proc_derive`, `assoc_const`, `assoc_type`, `primitive`, `keyword` at line 1 column 3082463 aya-obj failed to check public API Caused by: 0: public_api::Builder::build 1: unknown variant `type_alias`, expected one of `module`, `extern_crate`, `import`, `union`, `struct`, `struct_field`, `enum`, `variant`, `function`, `trait`, `trait_alias`, `impl`, `typedef`, `opaque_ty`, `constant`, `static`, `foreign_type`, `macro`, `proc_macro`, `primitive`, `assoc_const`, `assoc_type` at line 1 column 129355 aya-log failed to check public API Caused by: 0: public_api::Builder::build 1: unknown variant `type_alias`, expected one of `module`, `extern_crate`, `import`, `struct`, `struct_field`, `union`, `enum`, `variant`, `function`, `typedef`, `opaque_ty`, `constant`, `trait`, `trait_alias`, `impl`, `static`, `foreign_type`, `macro`, `proc_attribute`, `proc_derive`, `assoc_const`, `assoc_type`, `primitive`, `keyword` at line 1 column 311910 aya-log-common failed to check public API Caused by: 0: public_api::Builder::build 1: unknown variant `type_alias`, expected one of `module`, `extern_crate`, `import`, `union`, `struct`, `struct_field`, `enum`, `variant`, `function`, `trait`, `trait_alias`, `impl`, `typedef`, `opaque_ty`, `constant`, `static`, `foreign_type`, `macro`, `proc_macro`, `primitive`, `assoc_const`, `assoc_type` at line 1 column 130456 aya-log-parser failed to check public API Caused by: 0: public_api::Builder::build 1: unknown variant `type_alias`, expected one of `module`, `extern_crate`, `import`, `struct`, `struct_field`, `union`, `enum`, `variant`, `function`, `typedef`, `opaque_ty`, `constant`, `trait`, `trait_alias`, `impl`, `static`, `foreign_type`, `macro`, `proc_attribute`, `proc_derive`, `assoc_const`, `assoc_type`, `primitive`, `keyword` at line 1 column 204930 aya-tool failed to check public API Caused by: 0: public_api::Builder::build 1: unknown variant `type_alias`, expected one of `module`, `extern_crate`, `import`, `struct`, `struct_field`, `union`, `enum`, `variant`, `function`, `typedef`, `opaque_ty`, `constant`, `trait`, `trait_alias`, `impl`, `static`, `foreign_type`, `macro`, `proc_attribute`, `proc_derive`, `assoc_const`, `assoc_type`, `primitive`, `keyword` at line 1 column 234519 aya-bpf failed to check public API Caused by: 0: public_api::Builder::build 1: unknown variant `type_alias`, expected one of `module`, `extern_crate`, `import`, `struct`, `struct_field`, `union`, `enum`, `variant`, `function`, `typedef`, `opaque_ty`, `constant`, `trait`, `trait_alias`, `impl`, `static`, `foreign_type`, `macro`, `proc_attribute`, `proc_derive`, `assoc_const`, `assoc_type`, `primitive`, `keyword` at line 1 column 741697 aya-bpf-bindings failed to check public API Caused by: 0: public_api::Builder::build 1: unknown variant `type_alias`, expected one of `module`, `extern_crate`, `import`, `union`, `struct`, `struct_field`, `enum`, `variant`, `function`, `trait`, `trait_alias`, `impl`, `typedef`, `opaque_ty`, `constant`, `static`, `foreign_type`, `macro`, `proc_macro`, `primitive`, `assoc_const`, `assoc_type` at line 1 column 112445 aya-bpf-cty failed to check public API Caused by: 0: public_api::Builder::build 1: unknown variant `type_alias`, expected one of `module`, `extern_crate`, `import`, `union`, `struct`, `struct_field`, `enum`, `variant`, `function`, `trait`, `trait_alias`, `impl`, `typedef`, `opaque_ty`, `constant`, `static`, `foreign_type`, `macro`, `proc_macro`, `primitive`, `assoc_const`, `assoc_type` at line 1 column 315 aya-bpf-macros failed to check public API Caused by: 0: public_api::Builder::build 1: unknown variant `type_alias`, expected one of `module`, `extern_crate`, `import`, `struct`, `struct_field`, `union`, `enum`, `variant`, `function`, `typedef`, `opaque_ty`, `constant`, `trait`, `trait_alias`, `impl`, `static`, `foreign_type`, `macro`, `proc_attribute`, `proc_derive`, `assoc_const`, `assoc_type`, `primitive`, `keyword` at line 1 column 186226 aya-log-ebpf-macros failed to check public API Caused by: 0: public_api::Builder::build 1: unknown variant `type_alias`, expected one of `module`, `extern_crate`, `import`, `struct`, `struct_field`, `union`, `enum`, `variant`, `function`, `typedef`, `opaque_ty`, `constant`, `trait`, `trait_alias`, `impl`, `static`, `foreign_type`, `macro`, `proc_attribute`, `proc_derive`, `assoc_const`, `assoc_type`, `primitive`, `keyword` at line 1 column 158055 ``` --- xtask/src/lib.rs | 27 +++++++++++++++++++++++ xtask/src/public_api.rs | 49 ++++++++++++++++++++++------------------- xtask/src/run.rs | 22 ++---------------- 3 files changed, 55 insertions(+), 43 deletions(-) diff --git a/xtask/src/lib.rs b/xtask/src/lib.rs index 18cf1b93..84e8c3bc 100644 --- a/xtask/src/lib.rs +++ b/xtask/src/lib.rs @@ -13,3 +13,30 @@ pub fn exec(cmd: &mut Command) -> Result<()> { } Ok(()) } + +#[derive(Debug)] +pub struct Errors(Vec); + +impl Errors { + pub fn new(errors: Vec) -> Self { + Self(errors) + } +} + +impl std::fmt::Display for Errors +where + E: std::fmt::Debug, +{ + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + let Self(errors) = self; + for (i, error) in errors.iter().enumerate() { + if i != 0 { + writeln!(f)?; + } + write!(f, "{:?}", error)?; + } + Ok(()) + } +} + +impl std::error::Error for Errors where E: std::fmt::Debug {} diff --git a/xtask/src/public_api.rs b/xtask/src/public_api.rs index b5b58f07..0ca83f65 100644 --- a/xtask/src/public_api.rs +++ b/xtask/src/public_api.rs @@ -10,6 +10,7 @@ use cargo_metadata::{Metadata, Package}; use clap::Parser; use dialoguer::{theme::ColorfulTheme, Confirm}; use diff::{lines, Result as Diff}; +use xtask::Errors; #[derive(Debug, Parser)] pub struct Options { @@ -37,34 +38,36 @@ pub fn public_api(options: Options, metadata: Metadata) -> Result<()> { workspace_root, packages, .. - } = &metadata; + } = metadata; - let errors = packages - .iter() - .fold(String::new(), |mut buf, Package { name, publish, .. }| { - if !matches!(publish, Some(publish) if publish.is_empty()) { - match check_package_api(name, toolchain, bless, workspace_root.as_std_path()) { - Ok(diff) => { - if !diff.is_empty() { - writeln!( - &mut buf, - "{name} public API changed; re-run with --bless. diff:\n{diff}" - ) - .unwrap(); - } - } - Err(err) => { - writeln!(&mut buf, "{name} failed to check public API: {err}").unwrap(); - } + let errors: Vec<_> = packages + .into_iter() + .map(|Package { name, publish, .. }| { + if matches!(publish, Some(publish) if publish.is_empty()) { + Ok(()) + } else { + let diff = check_package_api(&name, toolchain, bless, workspace_root.as_std_path()) + .with_context(|| format!("{name} failed to check public API"))?; + if diff.is_empty() { + Ok(()) + } else { + Err(anyhow::anyhow!( + "{name} public API changed; re-run with --bless. diff:\n{diff}" + )) } } - buf - }); + }) + .filter_map(|result| match result { + Ok(()) => None, + Err(err) => Some(err), + }) + .collect(); - if !errors.is_empty() { - bail!("public API errors:\n{errors}") + if errors.is_empty() { + Ok(()) + } else { + Err(Errors::new(errors).into()) } - Ok(()) } fn check_package_api( diff --git a/xtask/src/run.rs b/xtask/src/run.rs index 15ee7035..2deca1ad 100644 --- a/xtask/src/run.rs +++ b/xtask/src/run.rs @@ -13,7 +13,7 @@ use std::{ use anyhow::{anyhow, bail, Context as _, Result}; use cargo_metadata::{Artifact, CompilerMessage, Message, Target}; use clap::Parser; -use xtask::{exec, AYA_BUILD_INTEGRATION_BPF}; +use xtask::{exec, Errors, AYA_BUILD_INTEGRATION_BPF}; #[derive(Parser)] enum Environment { @@ -104,24 +104,6 @@ where Ok(executables) } -#[derive(Debug)] -struct Errors(Vec); - -impl std::fmt::Display for Errors { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - let Self(errors) = self; - for (i, error) in errors.iter().enumerate() { - if i != 0 { - writeln!(f)?; - } - write!(f, "{:?}", error)?; - } - Ok(()) - } -} - -impl std::error::Error for Errors {} - /// Build and run the project. pub fn run(opts: Options) -> Result<()> { let Options { @@ -547,7 +529,7 @@ pub fn run(opts: Options) -> Result<()> { if errors.is_empty() { Ok(()) } else { - Err(Errors(errors).into()) + Err(Errors::new(errors).into()) } } } From f988e97b5fa34558a1e2ef490a712703fe83a3ac Mon Sep 17 00:00:00 2001 From: Tamir Duberstein Date: Fri, 25 Aug 2023 11:21:51 -0400 Subject: [PATCH 3/4] Upgrade public-api This fixes `cargo xtask public-api` by picking up https://github.com/aDotInTheVoid/rustdoc-types/commit/577a774c2433beda6. --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 1eb34af9..25d26237 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -78,7 +78,7 @@ num_enum = { version = "0.7", default-features = false } object = { version = "0.32", default-features = false } proc-macro-error = { version = "1.0", default-features = false } proc-macro2 = { version = "1", default-features = false } -public-api = { version = "0.31.2", default-features = false } +public-api = { version = "0.32.0", default-features = false } quote = { version = "1", default-features = false } rbpf = { version = "0.2.0", default-features = false } rustdoc-json = { version = "0.8.6", default-features = false } From 7803db22a062be3cdce760cd6ff7e54b121117ed Mon Sep 17 00:00:00 2001 From: Tamir Duberstein Date: Fri, 25 Aug 2023 13:51:30 -0400 Subject: [PATCH 4/4] github: remove symlinks to apple-provided python See https://github.com/actions/setup-python/issues/577. --- .github/workflows/ci.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5df61008..23fda7fa 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -198,9 +198,10 @@ jobs: run: | set -euxo pipefail brew update - brew install dpkg findutils gnu-tar llvm pkg-config - # Workaround for https://github.com/Homebrew/homebrew-core/pull/139492. - brew reinstall qemu + # https://github.com/actions/setup-python/issues/577 + find /usr/local/bin -type l -exec sh -c 'readlink -f "$1" \ + | grep -q ^/Library/Frameworks/Python.framework/Versions/' _ {} \; -exec rm -v {} \; + brew install dpkg findutils gnu-tar llvm pkg-config qemu echo /usr/local/opt/findutils/libexec/gnubin >> $GITHUB_PATH echo /usr/local/opt/gnu-tar/libexec/gnubin >> $GITHUB_PATH echo /usr/local/opt/llvm/bin >> $GITHUB_PATH