Add initial CI job for Windows target (#8088)

Clippy is disabled for now, due to many warnings in both `gpui` and
other code, see
https://github.com/zed-industries/zed/actions/runs/7980269779/job/21789529800
for more details.

Also, due to `#!/usr/bin/env bash` shebang in the `script/clippy`, it
starts in Windows CI with `shell: C:\Program Files\Git\bin\bash.EXE
-euxo pipefail {0}`

https://github.com/zed-industries/zed/actions/runs/7980269779/job/21789529800#step:4:3
It seems more appropriate to use PowerShell instead.

See `todo!("windows")` for all stubbed places currently.

Release Notes:

- N/A
This commit is contained in:
Kirill Bulatov 2024-02-21 00:35:29 +02:00 committed by GitHub
parent 48f0f387f8
commit c97ecc7326
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
12 changed files with 103 additions and 38 deletions

View File

@ -126,6 +126,36 @@ jobs:
- name: Build Zed - name: Build Zed
run: cargo build -p zed run: cargo build -p zed
# todo!(windows): Actually run the tests
windows_tests:
name: (Windows) Run Clippy and tests
runs-on: windows-latest
steps:
- name: Checkout repo
uses: actions/checkout@v4
with:
clean: false
submodules: "recursive"
- name: Restore from cache
uses: actions/cache@v4
with:
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
key: ${{ runner.os }}-cargo-${{ hashFiles('**/rust-toolchain.toml') }}-${{ hashFiles('**/Cargo.lock') }}
# todo!(windows): Actually run clippy
#- name: cargo clippy
# shell: bash -euxo pipefail {0}
# run: script/clippy
- name: Build Zed
run: cargo build -p zed
bundle: bundle:
name: Bundle macOS app name: Bundle macOS app
runs-on: runs-on:

View File

@ -245,7 +245,7 @@ impl Fs for RealFs {
#[cfg(unix)] #[cfg(unix)]
let inode = metadata.ino(); let inode = metadata.ino();
// todo!(windows) // todo!("windows")
#[cfg(windows)] #[cfg(windows)]
let inode = 0; let inode = 0;

View File

@ -61,6 +61,10 @@ pub(crate) fn current_platform() -> Rc<dyn Platform> {
pub(crate) fn current_platform() -> Rc<dyn Platform> { pub(crate) fn current_platform() -> Rc<dyn Platform> {
Rc::new(LinuxPlatform::new()) Rc::new(LinuxPlatform::new())
} }
#[cfg(target_os = "windows")]
pub(crate) fn current_platform() -> Rc<dyn Platform> {
todo!("windows")
}
pub(crate) trait Platform: 'static { pub(crate) trait Platform: 'static {
fn background_executor(&self) -> BackgroundExecutor; fn background_executor(&self) -> BackgroundExecutor;

View File

@ -125,6 +125,9 @@ impl Platform for TestPlatform {
#[cfg(target_os = "macos")] #[cfg(target_os = "macos")]
return Arc::new(crate::platform::mac::MacTextSystem::new()); return Arc::new(crate::platform::mac::MacTextSystem::new());
#[cfg(target_os = "windows")]
todo!("windows")
} }
fn run(&self, _on_finish_launching: Box<dyn FnOnce()>) { fn run(&self, _on_finish_launching: Box<dyn FnOnce()>) {

View File

@ -18,12 +18,16 @@ pub async fn install_cli(cx: &AsyncAppContext) -> Result<()> {
// If the symlink is not there or is outdated, first try replacing it // If the symlink is not there or is outdated, first try replacing it
// without escalating. // without escalating.
smol::fs::remove_file(link_path).await.log_err(); smol::fs::remove_file(link_path).await.log_err();
if smol::fs::unix::symlink(&cli_path, link_path) // todo!("windows")
.await #[cfg(not(windows))]
.log_err()
.is_some()
{ {
return Ok(()); if smol::fs::unix::symlink(&cli_path, link_path)
.await
.log_err()
.is_some()
{
return Ok(());
}
} }
// The symlink could not be created, so use osascript with admin privileges // The symlink could not be created, so use osascript with admin privileges

View File

@ -396,7 +396,7 @@ impl TerminalBuilder {
#[cfg(unix)] #[cfg(unix)]
let (fd, shell_pid) = (pty.file().as_raw_fd(), pty.child().id()); let (fd, shell_pid) = (pty.file().as_raw_fd(), pty.child().id());
// todo!(windows) // todo!("windows")
#[cfg(windows)] #[cfg(windows)]
let (fd, shell_pid) = (-1, 0); let (fd, shell_pid) = (-1, 0);
@ -664,7 +664,7 @@ impl Terminal {
fn update_process_info(&mut self) -> bool { fn update_process_info(&mut self) -> bool {
#[cfg(unix)] #[cfg(unix)]
let mut pid = unsafe { libc::tcgetpgrp(self.shell_fd as i32) }; let mut pid = unsafe { libc::tcgetpgrp(self.shell_fd as i32) };
// todo!(windows) // todo!("windows")
#[cfg(windows)] #[cfg(windows)]
let mut pid = -1; let mut pid = -1;
if pid < 0 { if pid < 0 {

View File

@ -81,11 +81,15 @@ impl super::LspAdapter for OmniSharpAdapter {
archive.unpack(container_dir).await?; archive.unpack(container_dir).await?;
} }
fs::set_permissions( // todo!("windows")
&binary_path, #[cfg(not(windows))]
<fs::Permissions as fs::unix::PermissionsExt>::from_mode(0o755), {
) fs::set_permissions(
.await?; &binary_path,
<fs::Permissions as fs::unix::PermissionsExt>::from_mode(0o755),
)
.await?;
}
Ok(LanguageServerBinary { Ok(LanguageServerBinary {
path: binary_path, path: binary_path,
arguments: server_binary_arguments(), arguments: server_binary_arguments(),

View File

@ -356,11 +356,15 @@ impl LspAdapter for NextLspAdapter {
} }
futures::io::copy(response.body_mut(), &mut file).await?; futures::io::copy(response.body_mut(), &mut file).await?;
fs::set_permissions( // todo!("windows")
&binary_path, #[cfg(not(windows))]
<fs::Permissions as fs::unix::PermissionsExt>::from_mode(0o755), {
) fs::set_permissions(
.await?; &binary_path,
<fs::Permissions as fs::unix::PermissionsExt>::from_mode(0o755),
)
.await?;
}
} }
Ok(LanguageServerBinary { Ok(LanguageServerBinary {

View File

@ -83,11 +83,15 @@ impl super::LspAdapter for LuaLspAdapter {
archive.unpack(container_dir).await?; archive.unpack(container_dir).await?;
} }
fs::set_permissions( // todo!("windows")
&binary_path, #[cfg(not(windows))]
<fs::Permissions as fs::unix::PermissionsExt>::from_mode(0o755), {
) fs::set_permissions(
.await?; &binary_path,
<fs::Permissions as fs::unix::PermissionsExt>::from_mode(0o755),
)
.await?;
}
Ok(LanguageServerBinary { Ok(LanguageServerBinary {
path: binary_path, path: binary_path,
arguments: Vec::new(), arguments: Vec::new(),

View File

@ -74,11 +74,15 @@ impl LspAdapter for RustLspAdapter {
let decompressed_bytes = GzipDecoder::new(BufReader::new(response.body_mut())); let decompressed_bytes = GzipDecoder::new(BufReader::new(response.body_mut()));
let mut file = File::create(&destination_path).await?; let mut file = File::create(&destination_path).await?;
futures::io::copy(decompressed_bytes, &mut file).await?; futures::io::copy(decompressed_bytes, &mut file).await?;
fs::set_permissions( // todo!("windows")
&destination_path, #[cfg(not(windows))]
<fs::Permissions as fs::unix::PermissionsExt>::from_mode(0o755), {
) fs::set_permissions(
.await?; &destination_path,
<fs::Permissions as fs::unix::PermissionsExt>::from_mode(0o755),
)
.await?;
}
remove_matching(&container_dir, |entry| entry != destination_path).await; remove_matching(&container_dir, |entry| entry != destination_path).await;
} }

View File

@ -72,11 +72,15 @@ impl LspAdapter for TaploLspAdapter {
futures::io::copy(decompressed_bytes, &mut file).await?; futures::io::copy(decompressed_bytes, &mut file).await?;
fs::set_permissions( // todo!("windows")
&binary_path, #[cfg(not(windows))]
<fs::Permissions as fs::unix::PermissionsExt>::from_mode(0o755), {
) fs::set_permissions(
.await?; &binary_path,
<fs::Permissions as fs::unix::PermissionsExt>::from_mode(0o755),
)
.await?;
}
} }
Ok(LanguageServerBinary { Ok(LanguageServerBinary {

View File

@ -64,11 +64,15 @@ impl LspAdapter for ZlsAdapter {
archive.unpack(container_dir).await?; archive.unpack(container_dir).await?;
} }
fs::set_permissions( // todo!("windows")
&binary_path, #[cfg(not(windows))]
<fs::Permissions as fs::unix::PermissionsExt>::from_mode(0o755), {
) fs::set_permissions(
.await?; &binary_path,
<fs::Permissions as fs::unix::PermissionsExt>::from_mode(0o755),
)
.await?;
}
Ok(LanguageServerBinary { Ok(LanguageServerBinary {
path: binary_path, path: binary_path,
arguments: vec![], arguments: vec![],