{"id":30668243,"url":"https://github.com/gameframex/gameframex.changedlog","last_synced_at":"2025-08-31T23:46:58.264Z","repository":{"id":298076968,"uuid":"998787917","full_name":"GameFrameX/GameFrameX.ChangedLog","owner":"GameFrameX","description":null,"archived":false,"fork":false,"pushed_at":"2025-06-09T08:58:29.000Z","size":0,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-09T09:37:04.859Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/GameFrameX.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-06-09T08:50:35.000Z","updated_at":"2025-06-09T08:58:32.000Z","dependencies_parsed_at":"2025-06-09T09:47:33.328Z","dependency_job_id":null,"html_url":"https://github.com/GameFrameX/GameFrameX.ChangedLog","commit_stats":null,"previous_names":["gameframex/gameframex.changedlog"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/GameFrameX/GameFrameX.ChangedLog","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GameFrameX%2FGameFrameX.ChangedLog","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GameFrameX%2FGameFrameX.ChangedLog/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GameFrameX%2FGameFrameX.ChangedLog/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GameFrameX%2FGameFrameX.ChangedLog/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/GameFrameX","download_url":"https://codeload.github.com/GameFrameX/GameFrameX.ChangedLog/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GameFrameX%2FGameFrameX.ChangedLog/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273056033,"owners_count":25037873,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-31T02:00:09.071Z","response_time":79,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-08-31T23:46:56.878Z","updated_at":"2025-08-31T23:46:58.233Z","avatar_url":"https://github.com/GameFrameX.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# GameFrameX.ChangedLog\n\n一个功能强大的自动化变更日志生成工具，支持基于Git标签生成结构化的变更日志文档。\n\n[![.NET](https://img.shields.io/badge/.NET-8.0-blue.svg)](https://dotnet.microsoft.com/download)\n[![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)\n[![Docker](https://img.shields.io/badge/docker-supported-blue.svg)](https://hub.docker.com/)\n\n## 🚀 功能特性\n\n- 🏷️ **基于Git标签自动生成变更日志** - 自动识别Git标签并生成对应版本的变更记录\n- 📝 **智能提交分组** - 根据提交消息中的`[类型]`标记自动分组（如`[feat]`、`[fix]`、`[docs]`等）\n- 🔗 **自动生成提交链接** - 为每个提交生成GitHub链接，方便查看详细信息\n- 📅 **时间顺序排列** - 按时间倒序排列版本，最新版本在前\n- 🔄 **提交合并** - 相同消息内容的提交会自动合并，避免重复记录\n- ⚙️ **灵活配置** - 支持自定义输出路径和仓库路径\n- 🐳 **Docker支持** - 提供完整的Docker化解决方案\n- 🌍 **环境变量配置** - 支持通过环境变量进行配置\n\n## 📋 系统要求\n\n- .NET 8.0 或更高版本\n- Git（用于访问仓库历史）\n- Docker（可选，用于容器化部署）\n\n## 🛠️ 安装与使用\n\n### 方式一：本地运行\n\n#### 1. 克隆项目\n```bash\ngit clone https://github.com/gameframex/GameFrameX.ChangedLog.git\ncd GameFrameX.ChangedLog\n```\n\n#### 2. 构建项目\n```bash\n# 使用解决方案文件构建\ndotnet build GameFrameX.ChangedLog.sln\n\n# 或直接构建项目\ndotnet build src/ChangelogGenerator.csproj\n```\n\n#### 3. 运行程序\n```bash\n# 使用默认设置（当前目录作为仓库，输出到CHANGELOG.md）\ndotnet run --project src/ChangelogGenerator.csproj\n\n# 指定仓库路径和输出文件\ndotnet run --project src/ChangelogGenerator.csproj -- --repository /path/to/your/repo --output /path/to/output/CHANGELOG.md\n```\n\n### 方式二：Docker运行\n\n#### 1. 使用Docker Compose（推荐）\n```bash\n# 修改docker-compose.yml中的仓库路径\n# 然后运行\ndocker-compose up\n```\n\n#### 2. 手动构建和运行Docker镜像\n```bash\n# 构建镜像\ndocker build -f src/Dockerfile -t changelog-generator .\n\n# 运行容器\ndocker run -v /path/to/your/repo:/app/repository -v ./output:/app/output changelog-generator\n```\n\n### 方式三：作为GitHub Action使用\n\n在您的仓库中创建`.github/workflows/changelog.yml`文件：\n\n```yaml\nname: Generate Changelog\n\non:\n  push:\n    tags:\n      - 'v*'\n\njobs:\n  changelog:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n        with:\n          fetch-depth: 0\n      \n      - name: Setup .NET\n        uses: actions/setup-dotnet@v3\n        with:\n          dotnet-version: '8.0.x'\n      \n      - name: Generate Changelog\n        run: |\n          git clone https://github.com/gameframex/GameFrameX.ChangedLog.git changelog-tool\n          cd changelog-tool\n          dotnet run --project src/ChangelogGenerator.csproj -- --repository ${{ github.workspace }} --output ${{ github.workspace }}/CHANGELOG.md\n      \n      - name: Commit Changelog\n        run: |\n          git config --local user.email \"action@github.com\"\n          git config --local user.name \"GitHub Action\"\n          git add CHANGELOG.md\n          git commit -m \"Update CHANGELOG.md for ${{ github.ref_name }}\" || exit 0\n          git push\n```\n\n## ⚙️ 配置选项\n\n### 命令行参数\n\n| 参数 | 描述 | 默认值 |\n|------|------|--------|\n| `--repository` | Git仓库路径 | `./repository` |\n| `--output` | 输出文件路径 | `CHANGELOG.md` |\n\n### 环境变量\n\n| 环境变量 | 描述 | 默认值 |\n|----------|------|--------|\n| `CHANGELOG_REPOSITORY_PATH` | Git仓库路径 | `.` |\n| `CHANGELOG_OUTPUT_PATH` | 输出文件路径 | `CHANGELOG.md` |\n\n\u003e 注意：环境变量的优先级低于命令行参数\n\n## 📝 提交消息格式\n\n为了获得最佳的变更日志效果，建议使用以下提交消息格式：\n\n```\n[类型] 简短描述\n\n详细描述（可选）\n```\n\n### 支持的类型标记\n\n- `[feat]` - 新功能\n- `[fix]` - 错误修复\n- `[docs]` - 文档更新\n- `[style]` - 代码格式调整\n- `[refactor]` - 代码重构\n- `[test]` - 测试相关\n- `[chore]` - 构建过程或辅助工具的变动\n\n### 示例\n\n```bash\ngit commit -m \"[feat] 添加用户认证功能\"\ngit commit -m \"[fix] 修复登录页面样式问题\"\ngit commit -m \"[docs] 更新API文档\"\n```\n\n## 📁 项目结构\n\n```\nGameFrameX.ChangedLog/\n├── src/                          # 源代码目录\n│   ├── Models/                   # 数据模型\n│   │   ├── CommitInfo.cs        # 提交信息模型\n│   │   └── GitTag.cs            # Git标签模型\n│   ├── Services/                # 服务类\n│   │   ├── GitService.cs        # Git操作服务\n│   │   └── ChangelogService.cs  # 变更日志生成服务\n│   ├── Program.cs               # 程序入口\n│   ├── ChangelogGenerator.csproj # 项目文件\n│   └── Dockerfile               # Docker构建文件\n├── tests/                       # 测试目录\n├── .github/workflows/           # GitHub Actions工作流\n├── docker-compose.yml           # Docker Compose配置\n├── GameFrameX.ChangedLog.sln    # 解决方案文件\n└── README.md                    # 项目说明文档\n```\n\n## 🧪 运行测试\n\n```bash\n# 运行所有测试\ndotnet test\n\n# 运行特定测试项目\ndotnet test tests/ChangelogGenerator.Tests.csproj\n\n# 运行测试并生成覆盖率报告\ndotnet test --collect:\"XPlat Code Coverage\"\n```\n\n## 📄 生成的变更日志示例\n\n```markdown\n# Changelog\n\n## [v2.1.0] - 2024-01-15\n\n### feat\n- 添加用户认证功能 ([a1b2c3d](../../commit/a1b2c3d))\n- 支持多语言界面 ([e4f5g6h](../../commit/e4f5g6h))\n\n### fix\n- 修复登录页面样式问题 ([i7j8k9l](../../commit/i7j8k9l))\n- 解决数据库连接超时问题 ([m0n1o2p](../../commit/m0n1o2p))\n\n### docs\n- 更新API文档 ([q3r4s5t](../../commit/q3r4s5t))\n\n## [v2.0.0] - 2024-01-01\n\n### feat\n- 重构核心架构 ([u6v7w8x](../../commit/u6v7w8x))\n\n* *This Changelog was automatically generated by [GameFrameX.ChangedLog](https://github.com/gameframex/GameFrameX.ChangedLog)*\n```\n\n## 🤝 贡献指南\n\n我们欢迎任何形式的贡献！请遵循以下步骤：\n\n1. Fork 本仓库\n2. 创建您的特性分支 (`git checkout -b feature/AmazingFeature`)\n3. 提交您的更改 (`git commit -m '[feat] 添加某个很棒的功能'`)\n4. 推送到分支 (`git push origin feature/AmazingFeature`)\n5. 打开一个 Pull Request\n\n## 📜 许可证\n\n本项目采用 MIT 许可证 - 查看 [LICENSE](LICENSE) 文件了解详情。\n\n## 🔗 相关链接\n\n- [GameFrameX 框架](https://github.com/gameframex)\n- [问题反馈](https://github.com/gameframex/GameFrameX.ChangedLog/issues)\n- [功能请求](https://github.com/gameframex/GameFrameX.ChangedLog/issues/new?template=feature_request.md)\n\n## 📞 支持\n\n如果您在使用过程中遇到任何问题，请通过以下方式获取帮助：\n\n- 📋 [提交Issue](https://github.com/gameframex/GameFrameX.ChangedLog/issues)\n- 💬 [讨论区](https://github.com/gameframex/GameFrameX.ChangedLog/discussions)\n\n---\n\n⭐ 如果这个项目对您有帮助，请给我们一个星标！\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgameframex%2Fgameframex.changedlog","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgameframex%2Fgameframex.changedlog","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgameframex%2Fgameframex.changedlog/lists"}