mirror of
				https://code.forgejo.org/actions/checkout.git
				synced 2025-11-04 14:49:12 +00:00 
			
		
		
		
	Add comprehensive .github/copilot-instructions.md for AI coding agents
Co-authored-by: alberto96a11 <198290213+alberto96a11@users.noreply.github.com>
This commit is contained in:
		
							parent
							
								
									4b4c83ea7a
								
							
						
					
					
						commit
						93a0983ecb
					
				
					 1 changed files with 121 additions and 0 deletions
				
			
		
							
								
								
									
										121
									
								
								.github/copilot-instructions.md
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										121
									
								
								.github/copilot-instructions.md
									
										
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,121 @@
 | 
			
		|||
# GitHub Actions Checkout - AI Coding Instructions
 | 
			
		||||
 | 
			
		||||
## Project Overview
 | 
			
		||||
 | 
			
		||||
This is the official `actions/checkout` GitHub Action for checking out repositories in workflows. It's a TypeScript project that compiles to a single bundled JavaScript file (`dist/index.js`) and supports both git-based and REST API-based repository downloads.
 | 
			
		||||
 | 
			
		||||
## Architecture & Key Components
 | 
			
		||||
 | 
			
		||||
### Core Entry Points
 | 
			
		||||
- **`src/main.ts`**: Main entry point with `run()` and `cleanup()` functions, determined by `stateHelper.IsPost`
 | 
			
		||||
- **`src/git-source-provider.ts`**: Primary orchestrator for repository acquisition (git vs REST API fallback)
 | 
			
		||||
- **`src/input-helper.ts`**: Input validation and GitHub Actions input processing
 | 
			
		||||
- **`action.yml`**: Defines the action interface with comprehensive input/output schema
 | 
			
		||||
 | 
			
		||||
### Critical Data Flow
 | 
			
		||||
1. `main.ts` → `inputHelper.getInputs()` → validates and transforms action inputs
 | 
			
		||||
2. `main.ts` → `gitSourceProvider.getSource(settings)` → orchestrates repository download
 | 
			
		||||
3. `git-source-provider.ts` decides: use Git CLI or fallback to GitHub REST API
 | 
			
		||||
4. State management via `state-helper.ts` for POST action cleanup
 | 
			
		||||
 | 
			
		||||
### Authentication & Security Patterns
 | 
			
		||||
- **Token-based auth**: Uses `@actions/core` to handle GitHub tokens securely
 | 
			
		||||
- **SSH key management**: Configures temporary SSH keys in `git-auth-helper.ts`
 | 
			
		||||
- **Safe directory**: Automatically configures `git config safe.directory` for container compatibility
 | 
			
		||||
 | 
			
		||||
## Development Workflow
 | 
			
		||||
 | 
			
		||||
### Essential Commands
 | 
			
		||||
```bash
 | 
			
		||||
npm ci                    # Install dependencies
 | 
			
		||||
npm run build            # TypeScript → JavaScript + bundle with ncc + generate docs
 | 
			
		||||
npm run format           # Prettier formatting
 | 
			
		||||
npm run lint            # ESLint validation
 | 
			
		||||
npm test                # Jest test suite
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Build Process (Critical!)
 | 
			
		||||
- **`npm run build`** runs: `tsc && ncc build && node lib/misc/generate-docs.js`
 | 
			
		||||
- **Documentation sync**: `src/misc/generate-docs.ts` auto-updates README.md usage section from `action.yml`
 | 
			
		||||
- **Bundling**: Uses `@vercel/ncc` to create single `dist/index.js` file
 | 
			
		||||
- **Always run `npm run build` before commits** - the `dist/` directory must be up-to-date
 | 
			
		||||
 | 
			
		||||
### Testing Strategy
 | 
			
		||||
- **Unit tests**: Jest tests in `__test__/` for all core modules
 | 
			
		||||
- **Integration tests**: Shell scripts (`__test__/verify-*.sh`) test real git operations
 | 
			
		||||
- **E2E tests**: `.github/workflows/test.yml` tests across OS matrix with actual GitHub repos
 | 
			
		||||
 | 
			
		||||
## Project-Specific Conventions
 | 
			
		||||
 | 
			
		||||
### TypeScript Patterns
 | 
			
		||||
- **Interface-driven**: `IGitSourceSettings` centralizes all configuration
 | 
			
		||||
- **Async/await**: All I/O operations use async patterns, not promises
 | 
			
		||||
- **Error handling**: Use `core.setFailed()` for action failures, `core.warning()` for non-critical issues
 | 
			
		||||
 | 
			
		||||
### Git Operation Patterns
 | 
			
		||||
```typescript
 | 
			
		||||
// Check Git version and fallback pattern
 | 
			
		||||
const git = await getGitCommandManager(settings)
 | 
			
		||||
if (git) {
 | 
			
		||||
  // Use Git CLI
 | 
			
		||||
  await git.fetch(refSpec, fetchDepth)
 | 
			
		||||
} else {
 | 
			
		||||
  // Fallback to REST API
 | 
			
		||||
  await githubApiHelper.downloadRepository(...)
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### State Management (Unique Pattern!)
 | 
			
		||||
- **Dual-phase execution**: Same script runs twice (MAIN + POST) determined by `stateHelper.IsPost`
 | 
			
		||||
- **State persistence**: Use `core.saveState()` / `core.getState()` to pass data between phases
 | 
			
		||||
- **Cleanup responsibility**: POST phase cleans up auth tokens, SSH keys, etc.
 | 
			
		||||
 | 
			
		||||
### Input Validation Approach
 | 
			
		||||
- **GitHub context integration**: Defaults repository from `github.context.repo`
 | 
			
		||||
- **Path safety**: Validates paths are within `GITHUB_WORKSPACE`
 | 
			
		||||
- **Flexible refs**: Handles branches, tags, SHAs, and PR refs uniformly
 | 
			
		||||
 | 
			
		||||
## Integration Points
 | 
			
		||||
 | 
			
		||||
### GitHub Actions SDK Usage
 | 
			
		||||
- **`@actions/core`**: Input/output, logging, state management
 | 
			
		||||
- **`@actions/github`**: GitHub context and API access
 | 
			
		||||
- **`@actions/exec`**: Git command execution
 | 
			
		||||
- **`@actions/io`**: File system operations
 | 
			
		||||
 | 
			
		||||
### Git Integration
 | 
			
		||||
- **Version compatibility**: Minimum Git 2.18, with feature detection for sparse-checkout
 | 
			
		||||
- **Authentication modes**: Token-based (default) or SSH key-based
 | 
			
		||||
- **Advanced features**: LFS, submodules, sparse-checkout, partial clones
 | 
			
		||||
 | 
			
		||||
### Container Support
 | 
			
		||||
- **Safe directory**: Critical for container workflows - auto-configures git safe.directory
 | 
			
		||||
- **Credential persistence**: Configures git credential helper for authenticated operations
 | 
			
		||||
 | 
			
		||||
## Common Debugging Patterns
 | 
			
		||||
 | 
			
		||||
### Enable Debug Logging
 | 
			
		||||
```yaml
 | 
			
		||||
steps:
 | 
			
		||||
  - uses: actions/checkout@v5
 | 
			
		||||
    env:
 | 
			
		||||
      ACTIONS_STEP_DEBUG: true
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### REST API Fallback Testing
 | 
			
		||||
```bash
 | 
			
		||||
# Force REST API mode by overriding Git version
 | 
			
		||||
__test__/override-git-version.sh
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Authentication Issues
 | 
			
		||||
- Check `GITHUB_TOKEN` permissions: needs `contents: read`
 | 
			
		||||
- For private repos: requires PAT with repo access
 | 
			
		||||
- Container issues: verify safe.directory configuration
 | 
			
		||||
 | 
			
		||||
## Key Files for Understanding
 | 
			
		||||
- `src/git-source-provider.ts` - Main orchestration logic
 | 
			
		||||
- `src/input-helper.ts` - Action interface and validation
 | 
			
		||||
- `src/git-auth-helper.ts` - Authentication and credential management
 | 
			
		||||
- `action.yml` - Complete input/output specification
 | 
			
		||||
- `.github/workflows/test.yml` - Comprehensive test scenarios
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue