<feed xmlns='http://www.w3.org/2005/Atom'>
<title>DropOut/src-tauri/build.rs, branch dependabot/infrastructure-e738c2e35b</title>
<subtitle>This is a new Minecraft launcher that is currently in development. It is designed to be a modern, fast and efficient launcher. It is written in Rust. Aims to be a Reproducible Minecraft Workspace Manager.</subtitle>
<id>https://git.hydroroll.team/DropOut/atom?h=dependabot%2Finfrastructure-e738c2e35b</id>
<link rel='self' href='https://git.hydroroll.team/DropOut/atom?h=dependabot%2Finfrastructure-e738c2e35b'/>
<link rel='alternate' type='text/html' href='https://git.hydroroll.team/DropOut/'/>
<updated>2026-03-18T03:57:17Z</updated>
<entry>
<title>fix(modpack): 将 CurseForge API Key 改为编译期可选常量 (#118)</title>
<updated>2026-03-18T03:57:17Z</updated>
<author>
<name>Begonia, HE</name>
<email>163421589+BegoniaHe@users.noreply.github.com</email>
</author>
<published>2026-03-18T03:57:17Z</published>
<link rel='alternate' type='text/html' href='https://git.hydroroll.team/DropOut/commit/?id=8c913f2685383bcfa154c947a43571a8d33679ae'/>
<id>urn:sha1:8c913f2685383bcfa154c947a43571a8d33679ae</id>
<content type='text'>
# 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&lt;&amp;str&gt; =
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: 简律纯 &lt;i@jyunko.cn&gt;</content>
</entry>
<entry>
<title>chore: apply prek auto-fixes [skip ci]</title>
<updated>2026-02-15T08:37:03Z</updated>
<author>
<name>HsiangNianian</name>
<email>44714368+HsiangNianian@users.noreply.github.com</email>
</author>
<published>2026-02-15T08:37:03Z</published>
<link rel='alternate' type='text/html' href='https://git.hydroroll.team/DropOut/commit/?id=ab7ad413f893cc2973baed11670408c8a6a3c2e7'/>
<id>urn:sha1:ab7ad413f893cc2973baed11670408c8a6a3c2e7</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Fix Windows MinGW linker error with COFF resource compilation (#96)</title>
<updated>2026-02-15T08:34:35Z</updated>
<author>
<name>Copilot</name>
<email>198982749+Copilot@users.noreply.github.com</email>
</author>
<published>2026-02-15T08:34:35Z</published>
<link rel='alternate' type='text/html' href='https://git.hydroroll.team/DropOut/commit/?id=9c1dda2652f7abc2a562d6c1b513d5b6915167ad'/>
<id>urn:sha1:9c1dda2652f7abc2a562d6c1b513d5b6915167ad</id>
<content type='text'>
# 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

&lt;!-- START COPILOT ORIGINAL PROMPT --&gt;



&lt;details&gt;

&lt;summary&gt;Original prompt&lt;/summary&gt;

&gt; ## Problem
&gt; 
&gt; The Windows x86_64-pc-windows-gnu build is failing in the CI/CD
pipeline with a linker error:
&gt; 
&gt; ```
&gt; error: linking with `x86_64-w64-mingw32-gcc` failed: exit code: 1
&gt; 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
&gt; ```
&gt; 
&gt; 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.
&gt; 
&gt; **Failing Job:** https://github.com/HydroRoll-Team/DropOut/actions
(Job ID: 63620685213)
&gt; **Commit:** e6eb1bd0111d40b3b1fd39fafd583ce5dbf30f03
&gt; **Target:** x86_64-pc-windows-gnu
&gt; 
&gt; ## Solution
&gt; 
&gt; Update the `build.rs` file to conditionally use `embed-resource` crate
when building for the GNU toolchain, which properly generates
MinGW-compatible resource files.
&gt; 
&gt; ### Changes Required
&gt; 
&gt; 1. **Update `src-tauri/Cargo.toml`**: Add `embed-resource` as a build
dependency for Windows GNU targets
&gt; 2. **Update `src-tauri/build.rs`**: Implement conditional resource
compilation:
&gt;    - Use `embed-resource` for `x86_64-pc-windows-gnu` target
&gt;    - Continue using default `tauri-build` for MSVC targets
&gt; 
&gt; ### Implementation Details
&gt; 
&gt; **src-tauri/Cargo.toml** - Add to `[build-dependencies]`:
&gt; ```toml
&gt; [build-dependencies]
&gt; tauri-build = { version = "2.0", features = [] }
&gt; embed-resource = "2.4"
&gt; ```
&gt; 
&gt; **src-tauri/build.rs** - Replace current content:
&gt; ```rust
&gt; fn main() {
&gt; // For MinGW targets, use embed-resource to generate proper COFF
format
&gt;     #[cfg(all(windows, target_env = "gnu"))]
&gt;     {
&gt;         embed_resource::compile("icon.rc", embed_resource::NONE);
&gt;     }
&gt;     
&gt;     tauri_build::build()
&gt; }
&gt; ```
&gt; 
&gt; If `icon.rc` doesn't exist, create **src-tauri/icon.rc**:
&gt; ```rc
&gt; 1 ICON "icons/icon.ico"
&gt; ```
&gt; 
&gt; ### Testing
&gt; 
&gt; After this fix:
&gt; - Windows MSVC builds should continue working as before
&gt; - Windows GNU (MinGW) builds should successfully link without the
"file format not recognized" error
&gt; - The generated resource.lib will be in COFF format compatible with
`x86_64-w64-mingw32-gcc`
&gt; 
&gt; ### References
&gt; 
&gt; - Tauri issue tracker (similar issues):
https://github.com/tauri-apps/tauri/issues
&gt; - embed-resource crate: https://crates.io/crates/embed-resource
&gt; - MinGW resource compilation:
https://sourceforge.net/p/mingw-w64/wiki2/windres/
&gt; 


&lt;/details&gt;



&lt;!-- START COPILOT CODING AGENT SUFFIX --&gt;

*This pull request was created from Copilot chat.*
&gt;

&lt;!-- START COPILOT CODING AGENT TIPS --&gt;
---

✨ Let Copilot coding agent [set things up for
you](https://github.com/HydroRoll-Team/DropOut/issues/new?title=✨+Set+up+Copilot+instructions&amp;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&amp;assignees=copilot)
— coding agent works faster and does higher quality work when set up for
your repo.

---------

Co-authored-by: copilot-swe-agent[bot] &lt;198982749+Copilot@users.noreply.github.com&gt;
Co-authored-by: HsiangNianian &lt;44714368+HsiangNianian@users.noreply.github.com&gt;</content>
</entry>
<entry>
<title>chore(style): format code</title>
<updated>2026-01-13T09:54:42Z</updated>
<author>
<name>HsiangNianian</name>
<email>i@jyunko.cn</email>
</author>
<published>2026-01-13T09:54:42Z</published>
<link rel='alternate' type='text/html' href='https://git.hydroroll.team/DropOut/commit/?id=50f4725c657c6583452d9c85f9b934c3cf2a0f70'/>
<id>urn:sha1:50f4725c657c6583452d9c85f9b934c3cf2a0f70</id>
<content type='text'>
</content>
</entry>
<entry>
<title>feat: add Minecraft DropOut launcher with version fetching and basic UI</title>
<updated>2026-01-13T06:31:37Z</updated>
<author>
<name>HsiangNianian</name>
<email>i@jyunko.cn</email>
</author>
<published>2026-01-13T06:31:37Z</published>
<link rel='alternate' type='text/html' href='https://git.hydroroll.team/DropOut/commit/?id=f878efe456e8f5c557f2cde9d71f120f3e0b38cd'/>
<id>urn:sha1:f878efe456e8f5c557f2cde9d71f120f3e0b38cd</id>
<content type='text'>
- 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.
</content>
</entry>
</feed>
