mirror of
https://github.com/The-Low-Code-Foundation/OpenNoodl.git
synced 2026-03-08 01:53:30 +01:00
247 lines
7.9 KiB
Markdown
247 lines
7.9 KiB
Markdown
# TASK-002C: GitHub Clone & Connect - Changelog
|
|
|
|
## 2025-01-17 - Subtask A: Clone from GitHub ✅ COMPLETE
|
|
|
|
### Implemented Features
|
|
|
|
#### 1. GitHub Tab in Launcher
|
|
|
|
- New "GitHub" tab added to the launcher navigation
|
|
- Shows user's GitHub avatar when connected
|
|
- Only available when authenticated
|
|
|
|
#### 2. Noodl Project Detection
|
|
|
|
- Scans all repos for `project.json` at root
|
|
- Shows scanning progress: "Scanning X repositories for project.json..."
|
|
- Only displays repos that are confirmed Noodl projects
|
|
- Caches detection results for 1 minute
|
|
|
|
#### 3. Repository Organization
|
|
|
|
- Groups repos by source: Personal vs Organization
|
|
- Collapsible organization sections with project counts
|
|
- Shows repo details: name, privacy status, description, last updated
|
|
|
|
#### 4. Clone Functionality
|
|
|
|
- Clone button on each Noodl project card
|
|
- User selects destination folder via native dialog
|
|
- Progress indicator during clone
|
|
- **Legacy project detection**: After cloning, detects React 17 projects and shows:
|
|
- **Migrate** - Opens migration wizard
|
|
- **Read-Only** - Opens in read-only mode
|
|
- **Cancel** - Adds to projects list without opening
|
|
|
|
#### 5. OAuth Improvements
|
|
|
|
- Fixed cache bug: null values now properly handled (undefined vs null)
|
|
- Fixed scope: Token now has proper permissions for private repo access
|
|
- Connection status persists across sessions
|
|
|
|
### Files Modified
|
|
|
|
**Editor (noodl-editor):**
|
|
|
|
- `src/editor/src/pages/ProjectsPage/ProjectsPage.tsx` - Added handleCloneRepo with legacy detection
|
|
- `src/editor/src/services/github/GitHubClient.ts` - Fixed cache, simplified isNoodlProject
|
|
- `src/editor/src/services/GitHubOAuthService.ts` - Fixed token persistence
|
|
|
|
**Core UI (noodl-core-ui):**
|
|
|
|
- `src/preview/launcher/Launcher/views/GitHubRepos.tsx` - New GitHub repos view
|
|
- `src/preview/launcher/Launcher/hooks/useGitHubRepos.ts` - Hook for fetching/detecting repos
|
|
- `src/preview/launcher/Launcher/Launcher.tsx` - Added GitHub tab
|
|
- `src/preview/launcher/Launcher/LauncherContext.tsx` - Added GitHub context props
|
|
|
|
### Bug Fixes
|
|
|
|
- Fixed cache returning stale null values (404 results)
|
|
- Removed premature `nodegx.project.json` check
|
|
- Fixed OAuth flow to properly complete on macOS
|
|
|
|
### Known Limitations
|
|
|
|
- Only checks default branch for project.json
|
|
- API rate limit: ~5000 requests/hour (sufficient for most users)
|
|
- Large organizations may take time to scan all repos
|
|
|
|
---
|
|
|
|
## 2025-01-17 - Subtask B: Connect Project to GitHub ✅ COMPLETE
|
|
|
|
### Implemented Features
|
|
|
|
#### 1. Enhanced Git State Detection
|
|
|
|
- Extended `useGitHubRepository` hook to return detailed git state:
|
|
- `no-git` - No .git folder, project not under version control
|
|
- `git-no-remote` - Has .git but no remote configured
|
|
- `remote-not-github` - Has remote but not github.com
|
|
- `github-connected` - Connected to GitHub
|
|
|
|
#### 2. Connect to GitHub Flow
|
|
|
|
- **ConnectToGitHubView** - Main view showing state-appropriate options
|
|
- State-specific messaging:
|
|
- No git: "Initialize Git Repository"
|
|
- No remote: "Connect to GitHub"
|
|
- Not GitHub: Shows current remote URL with explanation
|
|
|
|
#### 3. Create New Repository
|
|
|
|
- **CreateRepoModal** - Full modal for creating new GitHub repos
|
|
- Features:
|
|
- Repository name with validation (GitHub naming rules)
|
|
- Optional description
|
|
- Visibility toggle (Private/Public, defaults to Private)
|
|
- Organization picker (lists user's organizations)
|
|
- After creation:
|
|
- Initializes git if needed
|
|
- Adds remote origin
|
|
- Creates initial commit
|
|
- Pushes to remote
|
|
|
|
#### 4. Connect to Existing Repository
|
|
|
|
- **SelectRepoModal** - Browse and select from user's repos
|
|
- Features:
|
|
- Lists all user repos + organization repos
|
|
- Search/filter by name or description
|
|
- Grouped by owner (Personal vs Organization)
|
|
- Shows privacy status and last updated
|
|
- After connecting:
|
|
- Initializes git if needed
|
|
- Sets remote URL
|
|
- Fetches from remote if repo has commits
|
|
- Attempts to merge remote changes
|
|
|
|
### Files Added
|
|
|
|
**ConnectToGitHub Components:**
|
|
|
|
- `components/ConnectToGitHub/ConnectToGitHubView.tsx` - Main view component
|
|
- `components/ConnectToGitHub/CreateRepoModal.tsx` - Create repo modal
|
|
- `components/ConnectToGitHub/SelectRepoModal.tsx` - Select existing repo modal
|
|
- `components/ConnectToGitHub/ConnectToGitHub.module.scss` - Styles
|
|
- `components/ConnectToGitHub/index.ts` - Exports
|
|
|
|
### Files Modified
|
|
|
|
- `hooks/useGitHubRepository.ts` - Enhanced with `ProjectGitState` type and `refetch` function
|
|
- `services/github/GitHubTypes.ts` - Added `CreateRepositoryOptions` interface
|
|
- `services/github/GitHubClient.ts` - Added `createRepository` method
|
|
- `GitHubPanel.tsx` - Integrated ConnectToGitHubView for unconnected states
|
|
|
|
---
|
|
|
|
## 2025-01-17 - Subtask C: Push/Pull from GitHub Panel ✅ COMPLETE
|
|
|
|
### Implemented Features
|
|
|
|
#### 1. Git Sync Status Hook
|
|
|
|
- **useGitSyncStatus** - Monitors git sync status in real-time
|
|
- Tracks:
|
|
- `ahead` - Number of commits ahead of remote
|
|
- `behind` - Number of commits behind remote
|
|
- `hasUncommittedChanges` - Whether there are local changes
|
|
- Provides:
|
|
- `push()` - Push to remote (auto-commits if uncommitted changes)
|
|
- `pull()` - Pull from remote (stashes changes, merges, pops stash)
|
|
- `refresh()` - Manually refresh sync status
|
|
- Auto-refreshes on project save and remote changes
|
|
|
|
#### 2. Sync Toolbar
|
|
|
|
- **SyncToolbar** - Toolbar displayed at top of GitHubPanel when connected
|
|
- Shows:
|
|
- Repository name (owner/repo)
|
|
- Sync status (uncommitted changes, up to date)
|
|
- Buttons:
|
|
- **Pull** - Pull from remote, shows badge with behind count
|
|
- **Push** - Push to remote, shows badge with ahead count or "!" for uncommitted
|
|
- **Refresh** - Manually refresh sync status (spinning animation while loading)
|
|
- Visual feedback:
|
|
- Highlighted buttons when there are changes to push/pull
|
|
- Error bar for operation failures
|
|
|
|
#### 3. Push Operation
|
|
|
|
- Checks for uncommitted changes
|
|
- Auto-commits with "Auto-commit before push" message
|
|
- Pushes to remote
|
|
- Refreshes sync status
|
|
|
|
#### 4. Pull Operation
|
|
|
|
- Stashes local changes if present
|
|
- Fetches from remote
|
|
- Merges remote branch into current branch
|
|
- Pops stash to restore local changes
|
|
- Notifies project to refresh
|
|
|
|
### Files Added
|
|
|
|
**SyncToolbar Component:**
|
|
|
|
- `components/SyncToolbar/SyncToolbar.tsx` - Toolbar with push/pull buttons
|
|
- `components/SyncToolbar/SyncToolbar.module.scss` - Styles
|
|
- `components/SyncToolbar/index.ts` - Exports
|
|
|
|
**Hooks:**
|
|
|
|
- `hooks/useGitSyncStatus.ts` - Git sync status monitoring
|
|
|
|
### Files Modified
|
|
|
|
- `GitHubPanel.tsx` - Added SyncToolbar to connected state view
|
|
|
|
---
|
|
|
|
## Summary
|
|
|
|
### All Subtasks Complete ✅
|
|
|
|
| Subtask | Status | Description |
|
|
| ------------------------------ | -------- | ----------------------------------------------- |
|
|
| A: Clone from GitHub | Complete | Clone Noodl projects from GitHub in launcher |
|
|
| B: Connect Project to GitHub | Complete | Initialize git, create/connect repo from editor |
|
|
| C: Push/Pull from GitHub Panel | Complete | Push/pull with sync status in GitHubPanel |
|
|
|
|
### Files Created (New)
|
|
|
|
```
|
|
packages/noodl-editor/src/editor/src/views/panels/GitHubPanel/
|
|
├── components/
|
|
│ ├── ConnectToGitHub/
|
|
│ │ ├── ConnectToGitHub.module.scss
|
|
│ │ ├── ConnectToGitHubView.tsx
|
|
│ │ ├── CreateRepoModal.tsx
|
|
│ │ ├── SelectRepoModal.tsx
|
|
│ │ └── index.ts
|
|
│ └── SyncToolbar/
|
|
│ ├── SyncToolbar.module.scss
|
|
│ ├── SyncToolbar.tsx
|
|
│ └── index.ts
|
|
└── hooks/
|
|
└── useGitSyncStatus.ts
|
|
```
|
|
|
|
### Files Modified
|
|
|
|
```
|
|
packages/noodl-editor/src/editor/src/
|
|
├── services/github/
|
|
│ ├── GitHubClient.ts (added createRepository)
|
|
│ └── GitHubTypes.ts (added CreateRepositoryOptions)
|
|
└── views/panels/GitHubPanel/
|
|
├── GitHubPanel.tsx (integrated new components)
|
|
└── hooks/
|
|
└── useGitHubRepository.ts (enhanced state detection)
|
|
```
|
|
|
|
---
|
|
|
|
_Completed: January 2025_
|