From a688dfac4957bc3707e1df453f5d735b7c7ba791 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Thei=C3=9Fen?= Date: Mon, 8 Sep 2025 13:29:59 +0200 Subject: [PATCH 1/4] Move revive fixtures into release directory --- substrate/frame/revive/fixtures/build.rs | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/substrate/frame/revive/fixtures/build.rs b/substrate/frame/revive/fixtures/build.rs index f26ca85f5e303..2a2d1031b7a85 100644 --- a/substrate/frame/revive/fixtures/build.rs +++ b/substrate/frame/revive/fixtures/build.rs @@ -414,17 +414,11 @@ fn create_out_dir() -> Result { } out_dir.join("target") } + .join("release") .join("pallet-revive-fixtures"); - // clean up some leftover symlink from previous versions of this script - let mut out_exists = out_dir.exists(); - if out_exists && !out_dir.is_dir() { - fs::remove_file(&out_dir).context("Failed to remove `OUT_DIR`.")?; - out_exists = false; - } - - if !out_exists { - fs::create_dir(&out_dir) + if !out_dir.exists() { + fs::create_dir_all(&out_dir) .context(format!("Failed to create output directory: {})", out_dir.display(),))?; } @@ -480,7 +474,6 @@ pub fn main() -> Result<()> { println!("cargo::rerun-if-env-changed={OVERRIDE_RUSTUP_TOOLCHAIN_ENV_VAR}"); println!("cargo::rerun-if-env-changed={OVERRIDE_STRIP_ENV_VAR}"); println!("cargo::rerun-if-env-changed={OVERRIDE_OPTIMIZE_ENV_VAR}"); - println!("cargo::rerun-if-changed={}", out_dir.display()); // the fixtures have a dependency on the uapi crate println!("cargo::rerun-if-changed={}", fixtures_dir.display()); From 65c137c38f6fdfd0733f4a9fd9a2b22ac049da21 Mon Sep 17 00:00:00 2001 From: "cmd[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 8 Sep 2025 13:25:16 +0000 Subject: [PATCH 2/4] Update from github-actions[bot] running command 'prdoc --audience runtime_dev --bump patch' --- prdoc/pr_9670.prdoc | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 prdoc/pr_9670.prdoc diff --git a/prdoc/pr_9670.prdoc b/prdoc/pr_9670.prdoc new file mode 100644 index 0000000000000..5295faeb56f1e --- /dev/null +++ b/prdoc/pr_9670.prdoc @@ -0,0 +1,14 @@ +title: Move revive fixtures into release directory +doc: +- audience: Runtime Dev + description: |- + https://github.com/paritytech/polkadot-sdk/pull/8980 did fix the fellowship CI but it triggers a rebuild of the fixtures every single time you run tests. Annoying during development. + + Instead of rebuilding, we just move the fixtures into the `target/release` directory where it should be cached by the fellowship CI. + + Verifying that it works here: https://github.com/polkadot-fellows/runtimes/pull/891 + + Why: Re-running when the output dir changes will make it re-run every time. Since every run changes the output dir. +crates: +- name: pallet-revive-fixtures + bump: patch From 3b42bb76d642b08c47d5cd9e2fba65bfe5a872e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Thei=C3=9Fen?= Date: Wed, 1 Oct 2025 21:20:24 +0400 Subject: [PATCH 3/4] Move output into OUT_DIR --- substrate/frame/revive/fixtures/build.rs | 78 ++++-------------------- 1 file changed, 13 insertions(+), 65 deletions(-) diff --git a/substrate/frame/revive/fixtures/build.rs b/substrate/frame/revive/fixtures/build.rs index 2c6bf9493ccb9..30240a80d62d6 100644 --- a/substrate/frame/revive/fixtures/build.rs +++ b/substrate/frame/revive/fixtures/build.rs @@ -385,60 +385,6 @@ fn write_output(build_dir: &Path, out_dir: &Path, entries: Vec) -> Result Ok(()) } -/// Create a directory in the `target` as output directory -fn create_out_dir() -> Result { - let temp_dir: PathBuf = - env::var("OUT_DIR").context("Failed to fetch `OUT_DIR` env variable")?.into(); - - // this is set in case the user has overridden the target directory - let out_dir = if let Ok(path) = env::var("CARGO_TARGET_DIR") { - let path = PathBuf::from(path); - - if path.is_absolute() { - path - } else { - let output = std::process::Command::new(env!("CARGO")) - .arg("locate-project") - .arg("--workspace") - .arg("--message-format=plain") - .output() - .context("Failed to determine workspace root")? - .stdout; - - let workspace_root = Path::new( - std::str::from_utf8(&output) - .context("Invalid output from `locate-project`")? - .trim(), - ) - .parent() - .expect("Workspace root path contains the `Cargo.toml`; qed"); - - PathBuf::from(workspace_root).join(path) - } - } else { - // otherwise just traverse up from the out dir - let mut out_dir: PathBuf = temp_dir.clone(); - loop { - if !out_dir.pop() { - bail!("Cannot find project root.") - } - if out_dir.join("Cargo.lock").exists() { - break; - } - } - out_dir.join("target") - } - .join("release") - .join("pallet-revive-fixtures"); - - if !out_dir.exists() { - fs::create_dir_all(&out_dir) - .context(format!("Failed to create output directory: {})", out_dir.display(),))?; - } - - Ok(out_dir) -} - /// Generate the fixture_location.rs file with macros and sol! definitions. fn generate_fixture_location(temp_dir: &Path, out_dir: &Path, entries: &[Entry]) -> Result<()> { let mut file = fs::File::create(temp_dir.join("fixture_location.rs")) @@ -494,11 +440,16 @@ fn generate_fixture_location(temp_dir: &Path, out_dir: &Path, entries: &[Entry]) } pub fn main() -> Result<()> { + // input pathes let fixtures_dir: PathBuf = env::var("CARGO_MANIFEST_DIR")?.into(); let contracts_dir = fixtures_dir.join("contracts"); - let out_dir = create_out_dir().context("Cannot determine output directory")?; - let build_dir = out_dir.join("build"); - fs::create_dir_all(&build_dir).context("Failed to create build directory")?; + + // output pathes + let out_dir: PathBuf = env::var("OUT_DIR").context("Failed to fetch `OUT_DIR` env variable")?.into(); + let out_fixtures_dir = out_dir.join("fixtures"); + let out_build_dir = out_dir.join("build"); + fs::create_dir_all(&out_fixtures_dir).context("Failed to create output fixture directory")?; + fs::create_dir_all(&out_build_dir).context("Failed to create output build directory")?; println!("cargo::rerun-if-env-changed={OVERRIDE_RUSTUP_TOOLCHAIN_ENV_VAR}"); println!("cargo::rerun-if-env-changed={OVERRIDE_STRIP_ENV_VAR}"); @@ -523,20 +474,17 @@ pub fn main() -> Result<()> { .filter(|e| matches!(e.contract_type, ContractType::Rust)) .collect(); if !rust_entries.is_empty() { - create_cargo_toml(&fixtures_dir, rust_entries.into_iter(), &build_dir)?; - invoke_build(&build_dir)?; - write_output(&build_dir, &out_dir, entries.clone())?; + create_cargo_toml(&fixtures_dir, rust_entries.into_iter(), &out_build_dir)?; + invoke_build(&out_build_dir)?; + write_output(&out_build_dir, &out_fixtures_dir, entries.clone())?; } // Compile Solidity contracts - compile_solidity_contracts(&contracts_dir, &out_dir, &entries)?; + compile_solidity_contracts(&contracts_dir, &out_fixtures_dir, &entries)?; } - let temp_dir: PathBuf = - env::var("OUT_DIR").context("Failed to fetch `OUT_DIR` env variable")?.into(); - // Generate fixture_location.rs with sol! macros - generate_fixture_location(&temp_dir, &out_dir, &entries)?; + generate_fixture_location(&out_dir, &out_fixtures_dir, &entries)?; Ok(()) } From 72639b53d73c60d527e9fde0fbe63ee85d2b4d32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Thei=C3=9Fen?= Date: Wed, 1 Oct 2025 21:30:23 +0400 Subject: [PATCH 4/4] fmt --- substrate/frame/revive/fixtures/build.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/substrate/frame/revive/fixtures/build.rs b/substrate/frame/revive/fixtures/build.rs index 30240a80d62d6..126f2325dcdbe 100644 --- a/substrate/frame/revive/fixtures/build.rs +++ b/substrate/frame/revive/fixtures/build.rs @@ -445,7 +445,8 @@ pub fn main() -> Result<()> { let contracts_dir = fixtures_dir.join("contracts"); // output pathes - let out_dir: PathBuf = env::var("OUT_DIR").context("Failed to fetch `OUT_DIR` env variable")?.into(); + let out_dir: PathBuf = + env::var("OUT_DIR").context("Failed to fetch `OUT_DIR` env variable")?.into(); let out_fixtures_dir = out_dir.join("fixtures"); let out_build_dir = out_dir.join("build"); fs::create_dir_all(&out_fixtures_dir).context("Failed to create output fixture directory")?;