mirror of
				https://github.com/actions/checkout.git
				synced 2025-10-31 15:53:36 +00:00 
			
		
		
		
	Merge 84bd6b238a99496d7b9d021bd7e1e4f6cb61300a into ff7abcd0c3c05ccf6adc123a8cd1fd4fb30fb493
This commit is contained in:
		
						commit
						ed5050a480
					
				
							
								
								
									
										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, now with added support for Deno workflow integration. 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, as well as Deno-based workflow scenarios. | ||||
| 
 | ||||
| ## 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 | ||||
							
								
								
									
										42
									
								
								.github/workflows/deno.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								.github/workflows/deno.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,42 @@ | ||||
| # This workflow uses actions that are not certified by GitHub. | ||||
| # They are provided by a third-party and are governed by | ||||
| # separate terms of service, privacy policy, and support | ||||
| # documentation. | ||||
| 
 | ||||
| # This workflow will install Deno then run `deno lint` and `deno test`. | ||||
| # For more information see: https://github.com/denoland/setup-deno | ||||
| 
 | ||||
| name: Deno | ||||
| 
 | ||||
| on: | ||||
|   push: | ||||
|     branches: ["main"] | ||||
|   pull_request: | ||||
|     branches: ["main"] | ||||
| 
 | ||||
| permissions: | ||||
|   contents: read | ||||
| 
 | ||||
| jobs: | ||||
|   test: | ||||
|     runs-on: ubuntu-latest | ||||
| 
 | ||||
|     steps: | ||||
|       - name: Setup repo | ||||
|         uses: actions/checkout@v4 | ||||
| 
 | ||||
|       - name: Setup Deno | ||||
|         # uses: denoland/setup-deno@v1 | ||||
|         uses: denoland/setup-deno@v1.1.2 | ||||
|         with: | ||||
|           deno-version: v1.x | ||||
| 
 | ||||
|       # Uncomment this step to verify the use of 'deno fmt' on each commit. | ||||
|       # - name: Verify formatting | ||||
|       #   run: deno fmt --check | ||||
| 
 | ||||
|       - name: Run linter | ||||
|         run: deno lint | ||||
| 
 | ||||
|       - name: Run tests | ||||
|         run: deno test -A | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user