mirror of
				https://github.com/actions/checkout.git
				synced 2025-11-04 01:13:36 +00:00 
			
		
		
		
	added filter option & tests
This commit is contained in:
		
							parent
							
								
									96f53100ba
								
							
						
					
					
						commit
						99fc22de1f
					
				
							
								
								
									
										11
									
								
								.github/workflows/test.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										11
									
								
								.github/workflows/test.yml
									
									
									
									
										vendored
									
									
								
							@ -72,6 +72,17 @@ jobs:
 | 
				
			|||||||
        shell: bash
 | 
					        shell: bash
 | 
				
			||||||
        run: __test__/verify-side-by-side.sh
 | 
					        run: __test__/verify-side-by-side.sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      # Filter
 | 
				
			||||||
 | 
					      - name: Fetch filter
 | 
				
			||||||
 | 
					        uses: ./
 | 
				
			||||||
 | 
					        with:
 | 
				
			||||||
 | 
					          filter: 'blob:none'
 | 
				
			||||||
 | 
					          path: fetch-filter
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - name: Verify fetch filter
 | 
				
			||||||
 | 
					        run: __test__/verify-fetch-filter.sh
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      # Sparse checkout
 | 
					      # Sparse checkout
 | 
				
			||||||
      - name: Sparse checkout
 | 
					      - name: Sparse checkout
 | 
				
			||||||
        uses: ./
 | 
					        uses: ./
 | 
				
			||||||
 | 
				
			|||||||
@ -79,6 +79,7 @@ describe('input-helper tests', () => {
 | 
				
			|||||||
    expect(settings.clean).toBe(true)
 | 
					    expect(settings.clean).toBe(true)
 | 
				
			||||||
    expect(settings.commit).toBeTruthy()
 | 
					    expect(settings.commit).toBeTruthy()
 | 
				
			||||||
    expect(settings.commit).toBe('1234567890123456789012345678901234567890')
 | 
					    expect(settings.commit).toBe('1234567890123456789012345678901234567890')
 | 
				
			||||||
 | 
					    expect(settings.filter).toBe(undefined)
 | 
				
			||||||
    expect(settings.sparseCheckout).toBe(undefined)
 | 
					    expect(settings.sparseCheckout).toBe(undefined)
 | 
				
			||||||
    expect(settings.sparseCheckoutConeMode).toBe(true)
 | 
					    expect(settings.sparseCheckoutConeMode).toBe(true)
 | 
				
			||||||
    expect(settings.fetchDepth).toBe(1)
 | 
					    expect(settings.fetchDepth).toBe(1)
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										15
									
								
								__test__/verify-fetch-filter.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										15
									
								
								__test__/verify-fetch-filter.sh
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,15 @@
 | 
				
			|||||||
 | 
					#!/bin/bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Verify .git folder
 | 
				
			||||||
 | 
					if [ ! -d "./fetch-filter/.git" ]; then
 | 
				
			||||||
 | 
					  echo "Expected ./fetch-filter/.git folder to exist"
 | 
				
			||||||
 | 
					  exit 1
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Verify .git/config contains partialclonefilter
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CLONE_FILTER=$(git config --local --get remote.origin.partialclonefilter)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [ "$CLONE_FILTER" != "blob:none" ]; then
 | 
				
			||||||
 | 
					  echo "Expected ./fetch-filter/.git/config to have 'remote.origin.partialclonefilter' set to 'blob:none'"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
@ -53,6 +53,9 @@ inputs:
 | 
				
			|||||||
  clean:
 | 
					  clean:
 | 
				
			||||||
    description: 'Whether to execute `git clean -ffdx && git reset --hard HEAD` before fetching'
 | 
					    description: 'Whether to execute `git clean -ffdx && git reset --hard HEAD` before fetching'
 | 
				
			||||||
    default: true
 | 
					    default: true
 | 
				
			||||||
 | 
					  filter:
 | 
				
			||||||
 | 
					    description: 'Partially clone against a given filter.'
 | 
				
			||||||
 | 
					    default: null
 | 
				
			||||||
  sparse-checkout:
 | 
					  sparse-checkout:
 | 
				
			||||||
    description: >
 | 
					    description: >
 | 
				
			||||||
      Do a sparse checkout on given patterns.
 | 
					      Do a sparse checkout on given patterns.
 | 
				
			||||||
 | 
				
			|||||||
@ -154,7 +154,13 @@ export async function getSource(settings: IGitSourceSettings): Promise<void> {
 | 
				
			|||||||
    // Fetch
 | 
					    // Fetch
 | 
				
			||||||
    core.startGroup('Fetching the repository')
 | 
					    core.startGroup('Fetching the repository')
 | 
				
			||||||
    const fetchOptions: {filter?: string; fetchDepth?: number} = {}
 | 
					    const fetchOptions: {filter?: string; fetchDepth?: number} = {}
 | 
				
			||||||
    if (settings.sparseCheckout) fetchOptions.filter = 'blob:none'
 | 
					
 | 
				
			||||||
 | 
					    if (settings.filter) {
 | 
				
			||||||
 | 
					      fetchOptions.filter = settings.filter
 | 
				
			||||||
 | 
					    } else if (settings.sparseCheckout) {
 | 
				
			||||||
 | 
					      fetchOptions.filter = 'blob:none'
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (settings.fetchDepth <= 0) {
 | 
					    if (settings.fetchDepth <= 0) {
 | 
				
			||||||
      // Fetch all branches and tags
 | 
					      // Fetch all branches and tags
 | 
				
			||||||
      let refSpec = refHelper.getRefSpecForAllHistory(
 | 
					      let refSpec = refHelper.getRefSpecForAllHistory(
 | 
				
			||||||
 | 
				
			|||||||
@ -29,6 +29,11 @@ export interface IGitSourceSettings {
 | 
				
			|||||||
   */
 | 
					   */
 | 
				
			||||||
  clean: boolean
 | 
					  clean: boolean
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * The filter determining which objects to include
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  filter: string | undefined
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /**
 | 
					  /**
 | 
				
			||||||
   * The array of folders to make the sparse checkout
 | 
					   * The array of folders to make the sparse checkout
 | 
				
			||||||
   */
 | 
					   */
 | 
				
			||||||
 | 
				
			|||||||
@ -82,6 +82,10 @@ export async function getInputs(): Promise<IGitSourceSettings> {
 | 
				
			|||||||
  result.clean = (core.getInput('clean') || 'true').toUpperCase() === 'TRUE'
 | 
					  result.clean = (core.getInput('clean') || 'true').toUpperCase() === 'TRUE'
 | 
				
			||||||
  core.debug(`clean = ${result.clean}`)
 | 
					  core.debug(`clean = ${result.clean}`)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Filter
 | 
				
			||||||
 | 
					  result.filter = core.getInput('filter')
 | 
				
			||||||
 | 
					  core.debug(`filter = ${result.filter}`)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Sparse checkout
 | 
					  // Sparse checkout
 | 
				
			||||||
  const sparseCheckout = core.getMultilineInput('sparse-checkout')
 | 
					  const sparseCheckout = core.getMultilineInput('sparse-checkout')
 | 
				
			||||||
  if (sparseCheckout.length) {
 | 
					  if (sparseCheckout.length) {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user