aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src-tauri/build.rs
Commit message (Collapse)AuthorAgeFilesLines
* fix(modpack): 将 CurseForge API Key 改为编译期可选常量 (#118)Begonia, HE2026-03-181-0/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | # fix(modpack): 将 CurseForge API Key 改为编译期可选常量 修复 `env!()` 宏在开发者本地无 `CURSEFORGE_API_KEY` 时导致编译失败的问题,改用 `option_env!()` + build.rs 中的 `dotenvy` 读取 .env 文件,实现编译期嵌入、缺失时优雅降级。 ## 更改类型 - [x] Bug 修复(修复问题的非破坏性更改) - [ ] 新功能(添加功能的非破坏性更改) - [ ] 破坏性更改(会导致现有功能无法正常工作的修复或功能) - [ ] 文档更新 - [ ] UI/UX 改进 - [ ] 性能优化 - [ ] 代码重构(无功能性更改) - [x] 配置更改 - [ ] 测试添加或更新 ## LLM 生成代码声明 - [x] 此 PR 不包含 LLM 生成的代码,我**提供**质量担保 ## 相关 Issue 相关 #110 #117 ## 更改内容 ### 后端 (Rust) - modpack.rs:将 `env!("CURSEFORGE_API_KEY")` 替换为 `const CURSEFORGE_API_KEY: Option<&str> = option_env!("CURSEFORGE_API_KEY")`,key 不存在时编译为 `None`,调用 CurseForge 功能时返回友好错误而非 panic - build.rs:添加 `dotenvy::dotenv()` 调用,允许通过 .env 文件在编译期注入 key,并注册 `cargo:rerun-if-changed` / `cargo:rerun-if-env-changed` 确保增量构建正确 ### 前端 (Svelte) - 无 ### 配置 - Cargo.toml:在 `[build-dependencies]` 中添加 `dotenvy = { version = "0.15", default-features = false }` - .gitignore:添加 .env / `.env.local` 忽略规则,防止 key 被意外提交 - .env.example:新增示例文件,说明可选配置项及获取方式 ## 测试 ### 测试环境 - **操作系统**:Fedora Linux 6.19.6-300.fc44.x86_64 x86_64 - **DropOut 版本**:0.2.0-alpha.5 - **测试的 Minecraft 版本**:N/A - **Mod 加载器**:N/A ### 测试用例 - [ ] 已在 Windows 上测试 - [ ] 已在 macOS 上测试 - [x] 已在 Linux 上测试 - [ ] 已测试原版 Minecraft - [ ] 已测试 Fabric - [ ] 已测试 Forge - [ ] 已测试游戏启动 - [ ] 已测试登录流程 - [ ] 已测试 Java 检测/下载 ### 测试步骤 1. 不设置 `CURSEFORGE_API_KEY`,不创建 .env 文件,直接执行 `cargo check` → 应编译通过(无报错) 2. 创建 .env 文件并写入 `CURSEFORGE_API_KEY=test_key`,执行 `cargo check` → 应编译通过,key 被嵌入二进制 3. 不含 key 的构建中触发 CurseForge modpack 导入 → 应返回友好错误提示而非 panic ## 检查清单 ### 代码质量 - [x] 我的代码遵循项目的代码风格指南 - [x] 我已对自己的代码进行了自审 - [ ] 我已对难以理解的区域添加了注释 - [x] 我的更改没有产生新的警告或错误 ### 测试验证 - [x] 我已在本地测试了我的更改 - [ ] 我已添加测试来证明我的修复有效或功能正常工作 - [x] 新的和现有的单元测试在本地通过 - [x] 我至少在一个目标平台上进行了测试 ### 文档更新 - [ ] 我已相应地更新了文档 - [ ] 如有需要,我已更新 README - [ ] 我已在必要处添加/更新代码注释 ### 依赖项 - [x] 我已检查没有添加不必要的依赖项 - [x] 所有新依赖项都已正确记录 - [x] Cargo.lock 已更新 ## 附加说明 `dotenvy` 仅作为 **build-dependency**,不会进入最终二进制。官方发布构建通过 CI 环境变量注入 key,普通开发者无需任何操作即可正常编译和运行。 Co-authored-by: 简律纯 <i@jyunko.cn>
* chore: apply prek auto-fixes [skip ci]HsiangNianian2026-02-151-1/+1
|
* Fix Windows MinGW linker error with COFF resource compilation (#96)Copilot2026-02-151-0/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | # 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>
* chore(style): format codeHsiangNianian2026-01-131-1/+1
|
* feat: add Minecraft DropOut launcher with version fetching and basic UIHsiangNianian2026-01-131-0/+3
- Implemented version manifest fetching from Mojang API. - Created launcher configuration and main launcher logic. - Added SVG and PNG icons for the application. - Developed a simple HTML/CSS interface for the launcher. - Integrated Tauri commands for backend communication. - Added utility functions for file operations and config parsing.