You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitHub Actions PowerShell搜索归档耗时优化及Exclude失效求助

解决GitHub Actions PowerShell工作流中排除目录和文件无效的问题

问题根源

  1. -Exclude参数的局限性:Get-ChildItem的-Exclude默认只对当前层级的条目名生效,递归时不会阻止进入指定排除目录(比如DevOps),只会排除根目录下名为DevOps的条目,而目录内的文件依然会被遍历到。
  2. 未启用扩展名排除:原代码定义了$excludeExtensions但未在过滤逻辑中使用,导致.java、.class文件未被排除。
  3. 未处理输入列表空格:若itemsToInclude包含带空格的条目,直接分割会导致匹配失败。

解决方案

修改文件过滤逻辑,直接通过文件完整路径排除目标目录,同时加入扩展名过滤,并处理输入列表的空格:

$zipFileName = "${{ github.workspace }}\package-$env:GITHUB_RUN_NUMBER.zip"

cd "${{ github.workspace }}"

$itemsToInclude = $env:INPUTS_FILESINZIP

Write-Host "itemsToInclude is- $itemsToInclude"

$workspace = "${{ github.workspace }}"

# 定义要排除的目录和扩展名
$excludeDirectory = 'DevOps'
$excludeExtensions = @('.java', '.class')

# 处理输入列表,去除条目前后空格
$itemsToIncludeList = $itemsToInclude -split ',' | ForEach-Object { $_.Trim() }

Write-Host 'Include specific files and folders as per the comma-separated list'

# 过滤文件:排除指定目录、指定扩展名,仅保留目标文件名
$filesToInclude = Get-ChildItem $workspace -Recurse -File | Where-Object {
    # 跳过DevOps目录下的所有文件
    -not $_.FullName.StartsWith((Join-Path $workspace $excludeDirectory), [System.StringComparison]::OrdinalIgnoreCase) -and
    # 排除指定扩展名的文件
    -not $excludeExtensions.Contains($_.Extension) -and
    # 检查文件名是否在包含列表中
    $itemsToIncludeList -contains $_.Name
}

$filesToInclude | ForEach-Object {
    $newZipEntrySplat = @{
        EntryPath   = $_.FullName.Substring($workspace.Length)
        SourcePath  = $_.FullName
        Destination = $zipFileName
    }

    Write-Host "Adding file: $($_.FullName)"
    New-ZipEntry @newZipEntrySplat
}

Write-Host "Zip file created: $zipFileName"

env:
  INPUTS_FILESINZIP: ${{ inputs.filesinzip }}

优化说明

  • 目录排除逻辑:通过$_.FullName.StartsWith直接判断文件是否位于DevOps目录下,从根源跳过该目录的所有文件,减少不必要的遍历操作,大幅缩短耗时。
  • 扩展名过滤:加入-not $excludeExtensions.Contains($_.Extension),直接排除不需要的文件类型。
  • 输入列表处理:用ForEach-Object { $_.Trim() }去除条目前后空格,避免因输入格式问题导致匹配失败。
  • 移除冗余代码:删除提前创建空ZIP文件的逻辑,New-ZipEntry会自动生成不存在的ZIP文件。

内容的提问来源于stack exchange,提问作者Ashar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 08:15:13