Add Docker image, Compose, CI/CD workflows and docs
- Multi-arch (amd64/arm64) panel image: static musl binary on scratch, cross-compiled with cargo-zigbuild (no QEMU), non-root, healthcheck - docker-compose.yml + .env.example for one-command deployment - CI: fmt, clippy, tests, web type-checks, Windows launcher build, real-network installs of vanilla/Fabric/Quilt/Forge/NeoForge, Docker build - Release: Windows NSIS installer with baked-in panel URL, GHCR image push and GitHub release (tag push or manual dispatch) - README, admin guide, Microsoft auth setup, architecture, development - rustfmt config and formatting pass Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011ARcGWxLx21FwXJ3yfGriS
This commit is contained in:
54 files changed
+1019
-219
No files matched your search
@@ -7,11 +7,20 @@ use scopenet_core::{progress, Layout};
|
||||
use scopenet_shared::Loader;
|
||||
|
||||
async fn run(mc: &str, loader: Loader) {
|
||||
let root = std::env::var("SCOPENET_TEST_ROOT").map(std::path::PathBuf::from).unwrap_or_else(|_| std::env::temp_dir().join("scopenet-online"));
|
||||
let root =
|
||||
std::env::var("SCOPENET_TEST_ROOT").map(std::path::PathBuf::from).unwrap_or_else(|_| std::env::temp_dir().join("scopenet-online"));
|
||||
let layout = Layout::new(&root);
|
||||
let client = scopenet_core::http::client();
|
||||
let game_dir = layout.instance_dir(&format!("{mc}-{}", loader.as_str()));
|
||||
let spec = InstallSpec { mc_version: mc.into(), loader, loader_version: None, java_override: None, game_dir: game_dir.clone(), concurrency: 16, deep_verify: false };
|
||||
let spec = InstallSpec {
|
||||
mc_version: mc.into(),
|
||||
loader,
|
||||
loader_version: None,
|
||||
java_override: None,
|
||||
game_dir: game_dir.clone(),
|
||||
concurrency: 16,
|
||||
deep_verify: false,
|
||||
};
|
||||
let installed = install(&client, &layout, &spec, &progress::noop()).await.unwrap_or_else(|e| panic!("{mc} {loader:?}: {e:#}"));
|
||||
|
||||
for path in installed.classpath(&layout) {
|
||||
@@ -20,7 +29,13 @@ async fn run(mc: &str, loader: Loader) {
|
||||
assert!(installed.java.exists(), "java missing at {}", installed.java.display());
|
||||
|
||||
let opts = LaunchOptions {
|
||||
auth: Auth { username: "CiBot".into(), uuid: scopenet_shared::offline_uuid("CiBot"), access_token: "0".into(), user_type: "legacy".into(), xuid: None },
|
||||
auth: Auth {
|
||||
username: "CiBot".into(),
|
||||
uuid: scopenet_shared::offline_uuid("CiBot"),
|
||||
access_token: "0".into(),
|
||||
user_type: "legacy".into(),
|
||||
xuid: None,
|
||||
},
|
||||
game_dir,
|
||||
memory_min_mb: 512,
|
||||
memory_max_mb: 2048,
|
||||
|
||||
Reference in new issue
Block a user