如何在GitHub Action中用PowerShell生成哈希文件并保存下载文件?
解决GitHub Actions中用PowerShell保存文件到仓库的问题
你的核心问题是:GitHub Actions运行器(runner)是临时环境,生成的文件不会自动同步回仓库,必须手动执行Git提交和推送操作。以下是完整的实现方案,完全手动编写工作流,不依赖预制Action:
1. 调整PowerShell脚本(script.ps1)
把原脚本替换为更规范的PowerShell写法,同时实现文件下载和哈希保存:
# 替换为你要下载的文件实际URL $pkgurl = 'https://example.com/your-target-file.ext' # 下载文件到仓库根目录,可自定义文件名 $downloadedFileName = 'downloaded-file.ext' # 下载文件 Invoke-WebRequest -Uri $pkgurl -OutFile ".\$downloadedFileName" # 计算SHA512哈希并保存到sss.txt(确保UTF-8编码) Get-FileHash -Path ".\$downloadedFileName" -Algorithm SHA512 | Select-Object -ExpandProperty Hash | Out-File .\sss.txt -Encoding utf8
2. 更新工作流配置文件
在原工作流基础上,添加Git身份配置和提交推送步骤:
name: Get Hash & Download File on: [workflow_dispatch] jobs: build: name: Run Script & Push Changes runs-on: windows-latest steps: - name: 检出仓库代码 uses: actions/checkout@v3 - name: 运行PowerShell脚本 run: .\script.ps1 shell: pwsh - name: 配置Git身份 run: | git config --global user.name "GitHub Actions" git config --global user.email "actions@github.com" shell: pwsh - name: 提交并推送变更 run: | # 仅添加需要同步的文件 git add .\$downloadedFileName .\sss.txt # 检查是否有实际变更,避免空提交报错 if (-not (git diff --quiet && git diff --staged --quiet)) { git commit -m "Update downloaded file and hash" git push } shell: pwsh
关键说明
- Git身份配置:运行器默认没有Git用户信息,必须配置后才能提交代码。
- 空提交避免:用
git diff检查文件是否有实际变更,只有当内容变化时才执行提交,防止工作流因空提交失败。 - 编码问题:用
Out-File -Encoding utf8确保生成的文本文件编码与仓库一致,避免乱码。 - 权限说明:GitHub Actions默认提供的
GITHUB_TOKEN拥有仓库的写入权限,无需额外配置密钥即可推送变更。
内容的提问来源于stack exchange,提问作者user20682592
相关产品推荐
相关产品推荐

