英文:
Github Actions and Windows: using Cygwin bash instead of git-bash
问题
我正在使用在 Windows 上运行的 Github Actions。镜像是 `windows-2022`,并且在工作流程的一部分中安装了 Cygwin。据我了解,Windows 镜像已经预装了 git-bash。
Cygwin 的安装步骤如下:
- name: "Windows: Cygwin 下载"
if: runner.os == 'Windows'
run: |
Invoke-WebRequest 'https://cygwin.com/setup-x86_64.exe' -OutFile 'setup-x86_64.exe'
- name: "Windows: Cygwin 设置"
if: runner.os == 'Windows'
# 由于某种原因,PowerShell 中的设置无法正确完成
shell: cmd
run: .\setup-x86_64.exe --quiet-mode --site http://cygwin.mirror.constant.com --symlink-type=sys --packages mingw64-i686-binutils=2.37-2,mingw64-x86_64-binutils=2.37-2,curl,diffutils,git,m4,make,mercurial,mingw64-i686-gcc-core,mingw64-i686-gcc-g++,mingw64-x86_64-gcc-core,mingw64-x86_64-gcc-g++,patch,perl,rsync,unzip
当我为步骤指定 `shell: bash` 时,我发现无法运行任何 Cygwin 工具。`bash --version` 报告:
GNU bash, version 5.2.12(1)-release (x86_64-pc-msys)
而 `C:\\cygwin64\\bin\\bash --version` 报告:
GNU bash, version 4.4.12(3)-release (x86_64-unknown-cygwin)
因此,显然我是在运行 `git-bash` 而不是 Cygwin 版本。
如何让 Github Actions 在 Cygwin 的 bash 版本中执行特定步骤(或所有步骤)?
英文:
I am working with Github Actions running on Windows. The image is windows-2022
and has Cygwin installed a part of the workflow. As I have learned, the Windows image has git-bash on board already.
Cygwin is installed as follows:
- name: "Windows: Cygwin download"
if: runner.os == 'Windows'
run: |
Invoke-WebRequest 'https://cygwin.com/setup-x86_64.exe' -OutFile 'setup-x86_64.exe'
- name: "Windows: Cygwin setup"
if: runner.os == 'Windows'
# The setup does not complete properly in powershell for some reason
shell: cmd
run: .\setup-x86_64.exe --quiet-mode --site http://cygwin.mirror.constant.com --symlink-type=sys --packages mingw64-i686-binutils=2.37-2,mingw64-x86_64-binutils=2.37-2,curl,diffutils,git,m4,make,mercurial,mingw64-i686-gcc-core,mingw64-i686-gcc-g++,mingw64-x86_64-gcc-core,mingw64-x86_64-gcc-g++,patch,perl,rsync,unzip
When I specify shell: bash
for a step, I find I cannot run any Cygwin tools. bash --version
reports:
GNU bash, version 5.2.12(1)-release (x86_64-pc-msys)
whereas C:\\cygwin64\\bin\\bash --version
reports:
GNU bash, version 4.4.12(3)-release (x86_64-unknown-cygwin)
So apparently I am running in git-bash
rather than the Cygwin version.
How can I get GHA to execute a particular step (or all of them) in Cygwin’s version of bash, not git-bash?
答案1
得分: 2
使用以下方式配置Cygwin与shell
:
shell: C:\cygwin64\bin\bash.exe --login '{0}'
对于所有步骤,请使用defaults.run
。但是,在Windows运行器中(2019或2022),至少需要为安装Cygwin的一步指定不同的shell,就像您在工作流程中已经在做的那样。
对于逐步的shell配置,您可以使用jobs.<job_id>.steps[*].shell
。
这个操作(https://github.com/marketplace/actions/install-cygwin)可能对安装Cygwin会有所帮助,而不是自己手动安装。
英文:
Configure Cygwin with shell
like this:
shell: C:\cygwin64\bin\bash.exe --login '{0}'
For all the steps, use defaults.run
. However, Cygwin is not preinstalled in Windows runners (2019 or 2022), at least for one step which installs Cygwin, you'll have to specify a different shell as you're already doing in your workflow.
For per-step shell configuration, you can use jobs.<job_id>.steps[*].shell
.
This action (https://github.com/marketplace/actions/install-cygwin) might be helpful for installing Cygwin instead of doing it yourself.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论