{"id":29089192,"url":"https://github.com/nnegi88/gitlab-merge-fleet","last_synced_at":"2025-08-17T13:30:57.100Z","repository":{"id":301524314,"uuid":"1009511108","full_name":"nnegi88/GitLab-Merge-Fleet","owner":"nnegi88","description":"A modern GitLab multi-repository merge request management tool with AI-powered code reviews","archived":false,"fork":false,"pushed_at":"2025-06-27T09:36:19.000Z","size":92,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-27T10:27:00.654Z","etag":null,"topics":["ai-code-review","frontend","gitlab","merge-requests","vue","vuetify"],"latest_commit_sha":null,"homepage":"","language":"Vue","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/nnegi88.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","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-27T08:51:12.000Z","updated_at":"2025-06-27T10:02:03.000Z","dependencies_parsed_at":"2025-06-27T10:27:32.202Z","dependency_job_id":null,"html_url":"https://github.com/nnegi88/GitLab-Merge-Fleet","commit_stats":null,"previous_names":["nnegi88/gitlab-merge-fleet"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/nnegi88/GitLab-Merge-Fleet","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nnegi88%2FGitLab-Merge-Fleet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nnegi88%2FGitLab-Merge-Fleet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nnegi88%2FGitLab-Merge-Fleet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nnegi88%2FGitLab-Merge-Fleet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nnegi88","download_url":"https://codeload.github.com/nnegi88/GitLab-Merge-Fleet/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nnegi88%2FGitLab-Merge-Fleet/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262371661,"owners_count":23300591,"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","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":["ai-code-review","frontend","gitlab","merge-requests","vue","vuetify"],"created_at":"2025-06-28T04:01:24.520Z","updated_at":"2025-08-17T13:30:57.078Z","avatar_url":"https://github.com/nnegi88.png","language":"Vue","funding_links":[],"categories":[],"sub_categories":[],"readme":"# GitLab Merge Fleet\n\nA modern, frontend-only GitLab multi-repository merge request management tool with AI-powered code reviews.\n\n## Features\n\n- **Multi-Repository Management**: View and manage merge requests across multiple GitLab repositories in a unified dashboard\n- **AI Code Reviews**: Integrated Google Gemini 2.5 Flash for intelligent code review and analysis\n- **Modern UI**: Built with Vue.js 3 and Vuetify 3 Material Design components\n- **Real-time Updates**: Efficient data fetching with TanStack Vue Query and automatic caching\n- **Secure**: User-provided tokens stored encrypted in browser localStorage\n- **No Backend Required**: Fully frontend-only architecture\n\n## Technology Stack\n\n- **Frontend**: Vue.js 3.4+ with Composition API\n- **UI Framework**: Vuetify 3 with Material Design 3 blueprint\n- **Build Tool**: Vite 5+ for fast development and builds\n- **State Management**: Pinia for reactive state management\n- **Data Fetching**: TanStack Vue Query with intelligent caching\n- **Icons**: Material Design Icons (@mdi/font)\n- **Markdown**: Professional rendering with `marked` library\n- **AI Integration**: Google Gemini 2.5 Flash Preview for code reviews\n- **Architecture**: Modular service-based architecture with dependency injection\n\n## Quick Start\n\n### Prerequisites\n\n- Node.js 18+ \n- GitLab Personal Access Token with `api`, `read_repository`, `write_repository` scopes\n- Google Gemini API key (optional, for AI reviews)\n\n### Installation\n\n1. Clone the repository:\n```bash\ngit clone https://github.com/yourusername/gitlab-merge-fleet.git\ncd gitlab-merge-fleet\n```\n\n2. Install dependencies:\n```bash\nnpm install\n```\n\n3. Start development server:\n```bash\nnpm run dev\n```\n\n4. Open http://localhost:4000 and configure your GitLab token in Settings\n\n### Build for Production\n\n```bash\nnpm run build\nnpm run preview\n```\n\n## Configuration\n\n### GitLab Setup\n1. Navigate to Settings page in the application\n2. Add your GitLab base URL: `https://gitlab.example.com`\n3. Provide your GitLab Personal Access Token\n4. Configure repository filters as needed\n\n### AI Reviews (Optional)\n1. Obtain a Google Gemini API key\n2. Add it in the Settings page\n3. AI review functionality will be enabled automatically\n\n## Architecture\n\nThe codebase follows a modular, service-based architecture designed for extensibility and maintainability:\n\n### Service Layer Architecture\n- **Configuration Layer**: Centralized configuration in `src/config/`\n- **Service Layer**: Modular, injectable services in `src/services/`\n- **Utility Layer**: Core utilities and analyzers in `src/utils/`\n- **API Layer**: External integrations in `src/api/`\n- **Component Layer**: Vue.js components in `src/components/` and `src/pages/`\n\n### Dependency Injection\nAll services support constructor-based dependency injection for testing and customization:\n```javascript\nconst customFileAnalysis = new CustomFileAnalysisService(options)\nconst analyzer = new RepositoryAnalyzer(options, customFileAnalysis)\n```\n\n## Project Structure\n\n```\nsrc/\n├── components/          # Reusable Vue components\n│   ├── FilterBar.vue   # Advanced filtering interface\n│   ├── Layout.vue      # Application layout wrapper\n│   └── MergeRequestList.vue # MR list display\n├── pages/              # Page components\n│   ├── Dashboard.vue   # Main dashboard\n│   ├── Settings.vue    # Configuration page\n│   └── Setup.vue       # Initial setup wizard\n├── stores/             # Pinia state stores\n│   └── authStore.js    # Authentication state\n├── config/             # Centralized configuration\n│   └── analysis.js     # File analysis \u0026 filtering config\n├── services/           # Modular business logic services\n│   ├── fileAnalysis.js # File filtering \u0026 prioritization\n│   ├── promptBuilder.js # AI prompt generation\n│   └── reviewParser.js # AI response parsing\n├── api/                # API integration\n│   ├── gitlab.js       # GitLab API client\n│   └── gemini.js       # AI review service\n├── utils/              # Utility functions\n│   ├── repositoryAnalyzer.js # Repository analysis\n│   └── dateUtils.js    # Date formatting\n└── plugins/            # Vue plugins\n    └── vuetify.js      # Vuetify configuration\n```\n\n## Development\n\n### Available Commands\n\n```bash\n# Development server (port 4000)\nnpm run dev\n\n# Production build\nnpm run build\n\n# Preview production build\nnpm run preview\n\n# Lint code\nnpm run lint\n```\n\n### Development Guidelines\n\n- Use Vuetify 3 components exclusively for UI consistency\n- Follow Material Design 3 patterns and spacing\n- Use Material Design Icons (mdi-*) for all iconography\n- Implement proper loading states and error handling\n- Test with GitLab Enterprise Edition 14.9.0-ee compatibility\n- Follow the modular service architecture for new features\n- Use dependency injection for testable, extensible code\n\n## Features in Detail\n\n### Multi-Repository Dashboard\n- Unified view of merge requests across selected repositories\n- Advanced filtering by state, author, labels, and date ranges\n- Real-time pipeline status with GitLab 14.9 compatibility\n- Sortable columns and pagination\n\n### AI Code Reviews\n- Complete diff analysis using Google Gemini 2.5 Flash\n- Structured markdown output with professional rendering\n- One-click posting of reviews as GitLab comments\n- Configurable review parameters\n\n### Bulk Operations\n- Create multiple merge requests across repositories\n- Bulk branch creation with consistent naming\n- Template-based MR descriptions\n\n## GitLab Compatibility\n\nDesigned for GitLab Enterprise Edition 14.9.0-ee with:\n- Custom pipeline enrichment for older GitLab versions\n- Proper handling of EE-specific features (approval rules, weights)\n- Efficient API usage with rate limiting considerations\n\n## Security\n\n- Personal Access Tokens encrypted using Web Crypto API\n- All sensitive data stored locally in browser\n- No server-side storage or transmission of credentials\n- HTTPS-only communication with GitLab instance\n\n## Deployment\n\n### GitHub Pages (Automatic)\n\nThe project includes GitHub Actions workflow for automatic deployment to GitHub Pages:\n\n1. Push changes to the `main` branch\n2. GitHub Actions will automatically build and deploy\n3. Access your deployment at: `https://[username].github.io/GitLab-Merge-Fleet/`\n\n### Manual Deployment\n\nFor other static hosting services:\n\n```bash\nnpm run build\n```\n\nThe built files will be in the `dist/` directory and can be served from any web server or CDN.\n\nFor manual GitHub Pages deployment:\n```bash\nnpm run deploy\n```\n\n### Configuration Files\n- `.env.example` - Example environment variables\n\n## Extending the Application\n\nThe codebase is designed for extensibility through a modular service architecture. See [`EXTENSION_POINTS.md`](./EXTENSION_POINTS.md) for detailed documentation on:\n\n- Adding new file analysis strategies\n- Implementing custom AI prompt builders\n- Creating custom review parsers\n- Extending the repository analyzer\n- Adding new AI providers\n- Implementing custom workflows\n\n### Quick Extension Example\n```javascript\n// Create custom file analysis for React projects\nclass ReactFileAnalysisService extends FileAnalysisService {\n  prioritizeFiles(files, languages) {\n    const prioritized = super.prioritizeFiles(files, languages)\n    return prioritized.map(file =\u003e {\n      if (file.path.includes('components/') || file.path.includes('hooks/')) {\n        file.priority += 10 // Boost React-specific files\n      }\n      return file\n    })\n  }\n}\n\n// Use custom service\nconst customAnalyzer = new RepositoryAnalyzer({}, new ReactFileAnalysisService())\n```\n\n## Contributing\n\n1. Create a feature branch from `main`\n2. Make your changes following the development guidelines\n3. Follow the modular architecture patterns for new features\n4. Test thoroughly with the development server\n5. Run `npm run lint` to ensure code quality\n6. Create a merge request with a clear description\n\n## Support\n\nFor issues and questions:\n- Create an issue in the GitLab repository\n- Review the CLAUDE.md file for detailed implementation notes\n\n## License\n\nMIT License - see LICENSE file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnnegi88%2Fgitlab-merge-fleet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnnegi88%2Fgitlab-merge-fleet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnnegi88%2Fgitlab-merge-fleet/lists"}