| Commit message (Collapse) | Author | Age | Files | Lines |
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
# Description
MinGW linker fails on `resource.lib` because `tauri-build` generates
MSVC-format resources. MinGW requires COFF format. This PR adds
conditional resource compilation using `embed-resource` for GNU targets.
## Type of Change
- [x] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to not work as expected)
- [ ] Documentation update
- [ ] UI/UX improvement
- [ ] Performance improvement
- [ ] Code refactoring (no functional changes)
- [ ] Configuration change
- [ ] Test addition or update
## LLM-Generated Code Disclosure
- [x] This PR contains LLM-generated code, and I **provide** quality
assurance
- [ ] This PR contains LLM-generated code, and I **do not provide**
quality assurance
- [ ] This PR does not contain LLM-generated code
## Related Issues
Fixes the Windows x86_64-pc-windows-gnu build failure in CI (Job ID:
63620685213)
## Changes Made
### Backend (Rust)
- N/A
### Frontend (Svelte)
- N/A
### Configuration
- **src-tauri/Cargo.toml**: Added `embed-resource = "2.4"` as
target-specific build dependency for `cfg(all(windows, target_env =
"gnu"))`
- **src-tauri/build.rs**: Added conditional resource compilation - calls
`embed_resource::compile()` for MinGW, preserves `tauri_build::build()`
for all targets
- **src-tauri/icon.rc**: Created Windows resource file referencing
`icons/icon.ico`
**Key implementation**:
```rust
fn main() {
#[cfg(all(windows, target_env = "gnu"))]
{
embed_resource::compile("icon.rc", embed_resource::NONE);
}
tauri_build::build()
}
```
**Impact**: MSVC builds unchanged, Linux/macOS unaffected (dependency
not loaded), MinGW builds now generate COFF-compatible resources.
## Testing
### Test Environment
- **OS**: Ubuntu 22.04 (Linux validation)
- **DropOut Version**: 0.2.0-alpha.1
- **Minecraft Version Tested**: N/A (build-only fix)
- **Mod Loader**: N/A
### Test Cases
- [ ] Tested on Windows
- [ ] Tested on macOS
- [x] Tested on Linux
- [ ] Tested with vanilla Minecraft
- [ ] Tested with Fabric
- [ ] Tested with Forge
- [ ] Tested game launch
- [ ] Tested authentication flow
- [ ] Tested Java detection/download
### Steps to Test
1. Run `cargo check` on Linux (verified - passes)
2. CI validation pending: `semifold-ci.yaml` "Windows x86_64 (GNU)" job
should complete without linker errors
3. Manual Windows MinGW build verification recommended
## Checklist
### Code Quality
- [x] My code follows the project's style guidelines
- [x] I have performed a self-review of my own code
- [x] I have commented my code, particularly in hard-to-understand areas
- [x] My changes generate no new warnings or errors
### Testing Verification
- [x] I have tested my changes locally
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [x] New and existing unit tests pass locally with my changes
- [x] I have tested on at least one target platform
### Documentation
- [x] I have updated the documentation accordingly
- [ ] I have updated the README if needed
- [x] I have added/updated code comments where necessary
### Dependencies
- [x] I have checked that no unnecessary dependencies were added
- [x] All new dependencies are properly documented
- [x] `Cargo.lock` and/or `pnpm-lock.yaml` are updated (if dependencies
changed)
## Screenshots / Videos
N/A - build configuration change only
## Additional Notes
- Target-specific dependency prevents unnecessary bloat on non-Windows
platforms
- `embed-resource` generates COFF format compatible with
`x86_64-w64-mingw32-gcc`
- No runtime code changes - purely build-time fix
## Breaking Changes
None. Fully backward compatible.
---
**For Maintainers:**
- [ ] Code review completed
- [ ] CI checks passing
- [ ] Ready to merge
<!-- START COPILOT ORIGINAL PROMPT -->
<details>
<summary>Original prompt</summary>
> ## Problem
>
> The Windows x86_64-pc-windows-gnu build is failing in the CI/CD
pipeline with a linker error:
>
> ```
> error: linking with `x86_64-w64-mingw32-gcc` failed: exit code: 1
> note:
D:\a\DropOut\DropOut\target\x86_64-pc-windows-gnu\release\build\dropout-d2b2a5095bbadd51\out\resource.lib:
file not recognized: file format not recognized
> ```
>
> This occurs because `tauri-build` generates `resource.lib` in a format
incompatible with the MinGW (GNU) toolchain. The file is likely being
created in MSVC format instead of the COFF format required by MinGW.
>
> **Failing Job:** https://github.com/HydroRoll-Team/DropOut/actions
(Job ID: 63620685213)
> **Commit:** e6eb1bd0111d40b3b1fd39fafd583ce5dbf30f03
> **Target:** x86_64-pc-windows-gnu
>
> ## Solution
>
> Update the `build.rs` file to conditionally use `embed-resource` crate
when building for the GNU toolchain, which properly generates
MinGW-compatible resource files.
>
> ### Changes Required
>
> 1. **Update `src-tauri/Cargo.toml`**: Add `embed-resource` as a build
dependency for Windows GNU targets
> 2. **Update `src-tauri/build.rs`**: Implement conditional resource
compilation:
> - Use `embed-resource` for `x86_64-pc-windows-gnu` target
> - Continue using default `tauri-build` for MSVC targets
>
> ### Implementation Details
>
> **src-tauri/Cargo.toml** - Add to `[build-dependencies]`:
> ```toml
> [build-dependencies]
> tauri-build = { version = "2.0", features = [] }
> embed-resource = "2.4"
> ```
>
> **src-tauri/build.rs** - Replace current content:
> ```rust
> fn main() {
> // For MinGW targets, use embed-resource to generate proper COFF
format
> #[cfg(all(windows, target_env = "gnu"))]
> {
> embed_resource::compile("icon.rc", embed_resource::NONE);
> }
>
> tauri_build::build()
> }
> ```
>
> If `icon.rc` doesn't exist, create **src-tauri/icon.rc**:
> ```rc
> 1 ICON "icons/icon.ico"
> ```
>
> ### Testing
>
> After this fix:
> - Windows MSVC builds should continue working as before
> - Windows GNU (MinGW) builds should successfully link without the
"file format not recognized" error
> - The generated resource.lib will be in COFF format compatible with
`x86_64-w64-mingw32-gcc`
>
> ### References
>
> - Tauri issue tracker (similar issues):
https://github.com/tauri-apps/tauri/issues
> - embed-resource crate: https://crates.io/crates/embed-resource
> - MinGW resource compilation:
https://sourceforge.net/p/mingw-w64/wiki2/windres/
>
</details>
<!-- START COPILOT CODING AGENT SUFFIX -->
*This pull request was created from Copilot chat.*
>
<!-- START COPILOT CODING AGENT TIPS -->
---
✨ Let Copilot coding agent [set things up for
you](https://github.com/HydroRoll-Team/DropOut/issues/new?title=✨+Set+up+Copilot+instructions&body=Configure%20instructions%20for%20this%20repository%20as%20documented%20in%20%5BBest%20practices%20for%20Copilot%20coding%20agent%20in%20your%20repository%5D%28https://gh.io/copilot-coding-agent-tips%29%2E%0A%0A%3COnboard%20this%20repo%3E&assignees=copilot)
— coding agent works faster and does higher quality work when set up for
your repo.
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: HsiangNianian <44714368+HsiangNianian@users.noreply.github.com>
|
| |\
| |
| |
| | |
information (#71)
|
| | |
| |
| |
| |
| | |
information
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
|
| |/ |
|
| |\ |
|
| | | |
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
- Updated repository URL in Cargo.toml
- Updated GitHub API endpoint in main.rs
- Updated commit links in HomeView.svelte
- Updated issue template links in config.yml
Reviewed-by: Claude Sonnet 4.5
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
| | |
| |
| |
| |
| |
| |
| | |
- Sync instance.version_id after start_game, install_fabric, install_forge
- Add jvm_args_override and memory_override to Instance struct
- Add file management commands: list_instance_directory, delete_instance_file, open_file_explorer
- Support per-instance settings overrides (Java args, memory)
|
| | |
| |
| |
| |
| |
| |
| |
| | |
- Add migrate_to_shared_caches() with hard link preference
- SHA1-based deduplication across all instances
- Copy fallback for cross-filesystem scenarios
- Auto-enable use_shared_caches after successful migration
- UI shows statistics: moved files, hardlinks/copies, MB saved
|
| | |
| |
| |
| |
| |
| | |
- Add pass_filenames: false to fmt hook
- Add -- separator for cargo fmt args
- Manually format code with cargo fmt
|
| | | |
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
## Overview
Fixed critical multi-instance isolation bugs where versions, mod loaders, and
instance state were not properly isolated between instances. These changes ensure
full data isolation and consistent instance metadata.
## Bug Fixes - P0 (Critical Isolation Issues)
### 1. Backend: get_versions() command isolation
- Problem: Used global app_data_dir instead of instance-specific game_dir
- Fix: Added instance_id parameter, now queries instance.game_dir
- Impact: Versions are now properly isolated per instance
### 2. Frontend: delete_version missing instanceId
- Problem: Frontend passed only versionId, not instanceId
- Fix: Updated VersionsView.svelte to pass instanceId parameter
- Impact: Version deletion now targets correct instance
### 3. Frontend: get_version_metadata missing instanceId
- Problem: Metadata queries didn't specify which instance to check
- Fix: Updated VersionsView.svelte to pass instanceId parameter
- Impact: Version info displayed per-instance correctly
### 4. Frontend: Instance switching doesn't refresh versions
- Problem: Switching instances didn't reload version list
- Fix: Added $effect hook in GameState to watch activeInstanceId changes
- Impact: Version list auto-refreshes on instance switch
## Bug Fixes - P1 (State Synchronization)
### 5. Backend: install_fabric doesn't update Instance.mod_loader
- Problem: Instance.mod_loader field wasn't updated after installation
- Fix: Added instance_state.update_instance() call
- Impact: Instance metadata stays in sync
### 6. Backend: install_forge doesn't update Instance.mod_loader
- Problem: Instance.mod_loader field wasn't updated after installation
- Fix: Added instance_state.update_instance() call
- Impact: Instance metadata stays in sync
### 7. Backend: delete_version doesn't clean up Instance state
- Problem: Deleting version didn't clear Instance.version_id or .mod_loader
- Fix: Added cleanup logic to clear stale references
- Impact: Instance state remains valid after deletion
## Testing
- Added comprehensive integration tests in instance_isolation_tests.rs
- Tests document 10 key scenarios for multi-instance isolation
- All code compiles cleanly with no errors
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Update parse_java_version() to properly handle:
- Build metadata (strip '+' and everything after)
- Trailing garbage (strip '-' and everything after, e.g. -Ubuntu)
- Underscore version separators (1.8.0_411 -> 1.8.0.411)
This ensures Java versions are correctly parsed on all platforms:
- Old format: 1.8.0_411 (Java 8 update 411)
- New format: 21.0.3+13-Ubuntu (Java 21 with build metadata)
- Short format: 17.0.1 (Java 17 update 1).
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Add find_root_version() function to walk the inheritance chain and find
the root vanilla Minecraft version from a modded version (Fabric/Forge).
This is useful for determining which vanilla version's client.jar should
be used when launching modded versions, as modded versions inherit from
vanilla versions but don't contain their own client.jar.
The function follows the inheritsFrom field recursively until reaching
a version without a parent (the root vanilla version).
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Complete the rule_matches function to properly evaluate:
- OS name (already working: osx/macos, linux, windows)
- Architecture (arch field): match against env::consts::ARCH
- OS version (version field): accept all versions for now (conservative)
This ensures that architecture-specific libraries (e.g. natives-arm64)
are correctly filtered based on the current platform.
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Replace Ordering::Relaxed with appropriate synchronization:
- Ordering::AcqRel for fetch_add operations that modify shared state
- Ordering::Acquire for loads that depend on other thread's writes
- Ordering::Release for stores that other threads may read
This ensures visibility of downloaded bytes and completed files across
concurrent download tasks without data races.
|
| | |
| |
| |
| |
| |
| |
| |
| |
| | |
Check if the Microsoft account token is expired before attempting to
launch the game. If expired, attempt to refresh using the refresh_token.
If refresh fails, return an error instructing the user to login again.
Also removed #[allow(dead_code)] from is_token_expired since it's
now actively used.
|
| | |
| |
| |
| |
| |
| |
| |
| | |
Prevent race condition in duplicate_instance by copying the source
game directory BEFORE creating and saving the new instance metadata.
This ensures that if the copy fails, no orphaned metadata is created.
Also copy the icon_path from source instance to maintain visual consistency.
|
| | |
| |
| |
| |
| |
| |
| | |
The Forge installer may or may not create the version.json file
depending on the installer version. Check if the file exists after
running the installer before manually creating it to avoid overwriting
any installer-generated configuration.
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The fallback in the reqwest client builder was calling get_client()
recursively, which would cause a stack overflow if Client::builder()
failed. Now uses reqwest::Client::new() as the fallback.
Also fixed User-Agent to be platform-agnostic.
Reviewed-by: Claude Opus 4.5
|
| |/ |
|
| |
|
|
| |
Updated the version number in both Cargo.toml and tauri.conf.json to reflect the new release version 0.1.26. This change ensures consistency across project configuration files.
|
| |
|
|
| |
Enhanced the normalization logic for Java paths by ensuring that the search for "java.exe" in the PATH only occurs for relative paths or the name "java", excluding absolute paths that do not exist. This change improves the reliability of locating the Java executable in various environments.
|
| |
|
|
| |
Added functionality for managing game instances, including creating, deleting, updating, and duplicating instances. Integrated instance selection into the game launch process, allowing users to specify the instance when starting a game. Updated the main application logic to handle instance states and paths, ensuring proper directory management for each instance. Introduced a new module for instance management and updated relevant commands to support instance-specific operations.
|
| |
|
|
| |
Added functionality to determine and validate the required Java version for Minecraft versions, including checks for compatibility with older versions. Implemented event emissions for version installation and deletion, and updated the UI to reflect Java version requirements and installation status. Improved version metadata handling and added support for deleting versions.
|
| |\ |
|
| | |
| |
| |
| | |
Modified the logging statement in the start_game function to display all Java arguments instead of just the first ten, improving debugging capabilities.
|
| | | |
|
| | |
| |
| |
| | |
Modified the content security policy (CSP) in tauri.conf.json to define specific sources for scripts, styles, images, fonts, and connections, improving the application's security posture.
|
| | | |
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Fix a critical bug in normalize_java_path where Unix implementation
would return Ok(non-existent path) when java_path == "java" and the
`which` command failed to find Java in PATH. This caused game launch
failures with confusing error messages.
Key changes:
- Add strip_unc_prefix helper for Windows UNC path handling
- Fix Unix bug: explicitly return error when PATH search fails
- Apply canonicalize + strip_unc_prefix pattern to both platforms
- Enhanced error messages distinguishing PATH vs specific path failures
- Add comprehensive unit tests covering edge cases
- Update documentation to reflect actual behavior
Resolves issue where Windows and Unix users could not launch games
when Java path resolution failed silently.
Reviewed-by: Claude Sonnet 4.5
|
| | |
| |
| |
| | |
Bumped the version of tauri-plugin-dialog in Cargo.toml and @tauri-apps/plugin-dialog in package.json from 2.5.0 to 2.6.0 to incorporate the latest features and improvements.
|
| | |\
| |/
|/| |
|
| | |
| |
| |
| |
| |
| | |
prefixes
Updated the Java installation and executable retrieval functions to resolve symlinks and strip UNC prefixes from paths. This improvement ensures cleaner and more reliable path handling on Windows systems, enhancing compatibility and usability.
|
| | |
| |
| |
| | |
Implemented a helper function to strip the UNC prefix from file paths on Windows, ensuring cleaner path handling. Updated the Java candidate retrieval process to resolve symlinks and apply the new prefix stripping function, enhancing compatibility and usability on Windows systems.
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
- Add normalize_java_path utility function with Windows-specific handling
- Automatically append .exe extension when missing on Windows
- Use 'where' command to locate java.exe in PATH if not found
- Improve error messages with full path display for debugging
- Apply path normalization in both start_game and install_forge commands
This fixes the "Failed to launch java: program not found" error on Windows
by properly handling Java executable paths, including relative paths,
missing extensions, and PATH resolution.
Reviewed-by: Claude Sonnet 4.5
|
| | |
| |
| |
| | |
Bumped the version number in both Cargo.toml and tauri.conf.json to reflect the new release version 0.1.24.
|
| |/
|
|
| |
Enhanced the Java command execution by adding support for Windows-specific creation flags in both the installer and candidate checking functions. This change ensures better compatibility and performance when running Java commands on Windows systems.
|
| |
|
|
| |
Implemented new commands for managing the AI assistant, including health checks, chat interactions, and model listings for both Ollama and OpenAI. Enhanced the configuration system to support raw JSON editing and added a dedicated AssistantConfig structure for better management of assistant settings. This update significantly improves the user experience by providing comprehensive control over AI interactions and configurations.
|
| |
|
|
|
| |
logging of sensitive information
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
|
| | |
|
| |
|
|
| |
improving library management for better compatibility
|
| |
|
|
| |
support modpacks in version management
|
| |
|
|
| |
enhancing version management and user experience in BottomBar
|
| |
|
|
| |
support in the application
|