Browse Source

rework windows launcher build process (#2758)

* update license

* download pre-compiled windows launcher instead of building it with each commit

* remove windows launcher project which has moved to its own repo
pull/2759/head
Jason Dove 3 months ago committed by GitHub
parent
commit
885330f8c5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 28
      .github/workflows/artifacts.yml
  2. 2
      ErsatzTV-Windows/.gitignore
  3. 1035
      ErsatzTV-Windows/Cargo.lock
  4. 20
      ErsatzTV-Windows/Cargo.toml
  5. BIN
      ErsatzTV-Windows/Ersatztv.ico
  6. 6
      ErsatzTV-Windows/build.rs
  7. 2
      ErsatzTV-Windows/ersatztv_windows.rc
  8. 115
      ErsatzTV-Windows/src/main.rs
  9. 4
      LICENSE

28
.github/workflows/artifacts.yml

@ -244,28 +244,10 @@ jobs: @@ -244,28 +244,10 @@ jobs:
main/
retention-days: 1
build_rust_windows:
name: Build rust for Windows
runs-on: windows-latest
steps:
- name: Get the sources
uses: actions/checkout@v4
- name: Build Windows Launcher
shell: bash
run: cargo build --manifest-path=ErsatzTV-Windows/Cargo.toml --release --all-features
- name: Upload Rust Artifact
uses: actions/upload-artifact@v4
with:
name: rust-windows-build
path: ErsatzTV-Windows/target/release/ersatztv_windows.exe
retention-days: 1
package_and_upload_windows:
name: Package & Upload Windows
runs-on: ubuntu-latest
needs: [build_dotnet_windows, build_rust_windows]
needs: build_dotnet_windows
steps:
- name: Download dotnet artifacts
uses: actions/download-artifact@v4
@ -273,10 +255,10 @@ jobs: @@ -273,10 +255,10 @@ jobs:
name: dotnet-windows-build
path: dotnet-build
- name: Download rust artifacts
uses: actions/download-artifact@v4
- name: Download rust launcher
uses: suisei-cn/actions-download-file@v1.3.0
with:
name: rust-windows-build
url: "https://github.com/ErsatzTV/ErsatzTV-Windows/releases/download/v1.0.0/ErsatzTV-Windows.exe"
path: rust-build
- name: Download ffmpeg
@ -299,7 +281,7 @@ jobs: @@ -299,7 +281,7 @@ jobs:
# dotnet shouldn't copy the resources here, but it does
rm -rf "$release_name/Resources"
mv rust-build/ersatztv_windows.exe "$release_name/ErsatzTV-Windows.exe"
mv rust-build/ErsatzTV-Windows.exe "$release_name/ErsatzTV-Windows.exe"
7z e "ffmpeg/${{ steps.downloadffmpeg.outputs.filename }}" -o"$release_name" '*.exe' -r
rm -f "$release_name/ffplay.exe"

2
ErsatzTV-Windows/.gitignore vendored

@ -1,2 +0,0 @@ @@ -1,2 +0,0 @@
target/

1035
ErsatzTV-Windows/Cargo.lock generated

File diff suppressed because it is too large Load Diff

20
ErsatzTV-Windows/Cargo.toml

@ -1,20 +0,0 @@ @@ -1,20 +0,0 @@
[package]
name = "ersatztv_windows"
version = "0.1.0"
edition = "2021"
[dependencies]
tray-item = { git = "https://github.com/olback/tray-item-rs" }
special-folder = { git = "https://github.com/masinc/special-folder-rs" }
process_path = "0.1.4"
[dependencies.windows]
version = "0.43.0"
features = [
"Win32_System_Console",
"Win32_Foundation"
]
[build-dependencies]
windres = "*"
static_vcruntime = "2.0"

BIN
ErsatzTV-Windows/Ersatztv.ico

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

6
ErsatzTV-Windows/build.rs

@ -1,6 +0,0 @@ @@ -1,6 +0,0 @@
use windres::Build;
fn main() {
static_vcruntime::metabuild();
Build::new().compile("ersatztv_windows.rc").unwrap();
}

2
ErsatzTV-Windows/ersatztv_windows.rc

@ -1,2 +0,0 @@ @@ -1,2 +0,0 @@
id ICON "ersatztv.ico"
ersatztv-icon ICON "ersatztv.ico"

115
ErsatzTV-Windows/src/main.rs

@ -1,115 +0,0 @@ @@ -1,115 +0,0 @@
#![windows_subsystem = "windows"]
use special_folder::SpecialFolder;
use std::env;
use std::fs;
use std::os::windows::process::CommandExt;
use std::process::Child;
use std::process::Command;
use std::process::Stdio;
use windows::Win32::System::Console;
use {std::sync::mpsc, tray_item::TrayItem};
const CREATE_NO_WINDOW: u32 = 0x08000000;
enum Message {
Exit,
}
fn main() {
let mut tray = TrayItem::new("ErsatzTV", "ersatztv-icon").unwrap();
let (tx, rx) = mpsc::channel();
tray.add_menu_item("Launch Web UI", || {
let ui_port = env::var("ETV_UI_PORT")
.ok()
.and_then(|val| val.parse::<u16>().ok())
.unwrap_or(8409);
let _ = Command::new("cmd")
.creation_flags(CREATE_NO_WINDOW)
.arg("/C")
.arg("start")
.arg(format!("http://localhost:{}", ui_port))
.stdin(Stdio::null())
.stdout(Stdio::null())
.stderr(Stdio::null())
.spawn();
})
.unwrap();
tray.add_menu_item("Show Logs", || {
let path = SpecialFolder::LocalApplicationData
.get()
.unwrap()
.join("ersatztv")
.join("logs");
match path.to_str() {
None => {}
Some(folder) => {
fs::create_dir_all(folder).unwrap();
let _ = Command::new("explorer.exe")
.arg(folder)
.stdin(Stdio::null())
.stdout(Stdio::null())
.stderr(Stdio::null())
.spawn();
}
}
})
.unwrap();
tray.inner_mut().add_separator().unwrap();
tray.add_menu_item("Exit", move || {
tx.send(Message::Exit).unwrap();
})
.unwrap();
let path = process_path::get_executable_path();
let mut child: Option<Child> = None;
match path {
None => {}
Some(path) => {
let etv = path.parent().unwrap().join("ErsatzTV.exe");
if etv.exists() {
match etv.to_str() {
None => {}
Some(etv) => {
child = Some(
Command::new(etv)
.creation_flags(CREATE_NO_WINDOW)
.stdin(Stdio::null())
.stdout(Stdio::null())
.stderr(Stdio::null())
.spawn()
.unwrap(),
);
}
}
}
}
}
loop {
match rx.recv() {
Ok(Message::Exit) => {
match child {
None => {}
Some(mut child) => {
unsafe {
if Console::AttachConsole(child.id()) == true
{
Console::GenerateConsoleCtrlEvent(Console::CTRL_C_EVENT, 0);
}
}
child.wait().unwrap();
}
}
break;
}
_ => {}
}
}
}

4
LICENSE

@ -1,6 +1,6 @@ @@ -1,6 +1,6 @@
zlib License
Copyright (c) 2022 Jason Dove
Copyright (c) 2026 Jason Dove
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@ -16,4 +16,4 @@ freely, subject to the following restrictions: @@ -16,4 +16,4 @@ freely, subject to the following restrictions:
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
3. This notice may not be removed or altered from any source distribution.

Loading…
Cancel
Save