Skip to content

Commit

Permalink
Use build.rs script instead of workflow
Browse files Browse the repository at this point in the history
  • Loading branch information
sharkdp committed Jan 9, 2025
1 parent 35f55f4 commit 9749633
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 43 deletions.
13 changes: 0 additions & 13 deletions .github/workflows/sync_typeshed.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -46,19 +46,6 @@ jobs:
cp -r typeshed/stdlib ruff/crates/red_knot_vendored/vendor/typeshed/stdlib
rm -rf ruff/crates/red_knot_vendored/vendor/typeshed/stdlib/@tests
git -C typeshed rev-parse HEAD > ruff/crates/red_knot_vendored/vendor/typeshed/source_commit.txt
# Patch the typeshed stubs to include `knot_extensions`
source="crates/red_knot_vendored/knot_extensions/knot_extensions.pyi"
target="crates/red_knot_vendored/vendor/typeshed/stdlib/knot_extensions.pyi"
(
echo "# WARNING: This file is generated by the typeshed sync workflow. Do not edit it manually."
echo "# Edit the source file at '$source' instead and then copy it over to this file."
) > "ruff/$target"
cat "ruff/$source" >> "ruff/$target"
(
echo "# Patch applied for red_knot:"
echo "knot_extensions: 3.0-"
) >> ruff/crates/red_knot_vendored/vendor/typeshed/stdlib/VERSIONS
- name: Commit the changes
id: commit
if: ${{ steps.sync.outcome == 'success' }}
Expand Down
17 changes: 15 additions & 2 deletions crates/red_knot_vendored/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
//! in `crates/red_knot_vendored/vendor/typeshed` change.
use std::fs::File;
use std::io::Write;
use std::path::Path;

use path_slash::PathExt;
Expand All @@ -14,6 +15,7 @@ use zip::write::{FileOptions, ZipWriter};
use zip::CompressionMethod;

const TYPESHED_SOURCE_DIR: &str = "vendor/typeshed";
const KNOT_EXTENSIONS_STUBS: &str = "knot_extensions/knot_extensions.pyi";
const TYPESHED_ZIP_LOCATION: &str = "/zipped_typeshed.zip";

/// Recursively zip the contents of an entire directory.
Expand Down Expand Up @@ -55,21 +57,32 @@ fn zip_dir(directory_path: &str, writer: File) -> ZipResult<File> {
// Some unzip tools unzip files with directory paths correctly, some do not!
if absolute_path.is_file() {
println!("adding file {absolute_path:?} as {normalized_relative_path:?} ...");
zip.start_file(normalized_relative_path, options)?;
zip.start_file(&*normalized_relative_path, options)?;
let mut f = File::open(absolute_path)?;
std::io::copy(&mut f, &mut zip).unwrap();

// Patch the VERSIONS file to make `knot_extensions` available
if normalized_relative_path == "stdlib/VERSIONS" {
writeln!(&mut zip, "knot_extensions: 3.0-")?;
}
} else if !normalized_relative_path.is_empty() {
// Only if not root! Avoids path spec / warning
// and mapname conversion failed error on unzip
println!("adding dir {absolute_path:?} as {normalized_relative_path:?} ...");
zip.add_directory(normalized_relative_path, options)?;
}
}

// Patch typeshed and add the stubs for the `knot_extensions` module
println!("adding file {KNOT_EXTENSIONS_STUBS} as stdlib/knot_extensions.pyi ...");
zip.start_file("stdlib/knot_extensions.pyi", options)?;
let mut f = File::open(KNOT_EXTENSIONS_STUBS)?;
std::io::copy(&mut f, &mut zip).unwrap();

zip.finish()
}

fn main() {
println!("cargo::rerun-if-changed={TYPESHED_SOURCE_DIR}");
assert!(
Path::new(TYPESHED_SOURCE_DIR).is_dir(),
"Where is typeshed?"
Expand Down
2 changes: 0 additions & 2 deletions crates/red_knot_vendored/vendor/typeshed/stdlib/VERSIONS
Original file line number Diff line number Diff line change
Expand Up @@ -341,5 +341,3 @@ zipfile._path: 3.12-
zipimport: 3.0-
zlib: 3.0-
zoneinfo: 3.9-
# Patch applied for red_knot:
knot_extensions: 3.0-

This file was deleted.

0 comments on commit 9749633

Please sign in to comment.