【发布时间】:2022-02-04 17:25:07
【问题描述】:
背景
我正在尝试让 Github Action 与 Windows 和 Bakeware 一起使用,因为我正在尝试使用它创建一个版本。
但是,我在创建文件夹时遇到了意外问题。
代码
以下是一个 github 操作,它是该问题的最小工作示例。 基本上,所有步骤都有效,除了创建单个文件夹:
name: build
env:
MIX_ENV: test
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
build:
name: Build on Windows
runs-on: windows-2019
env:
CC: gcc
MAKE: make
steps:
- uses: actions/checkout@v2
- uses: erlef/setup-beam@v1
with:
elixir-version: '1.13.x' # Define the elixir version [required]
otp-version: '24.2.x' # Define the OTP version [required]
- name: Install choco
shell: powershell
run: |
Set-ExecutionPolicy -ExecutionPolicy Bypass
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
- name: Install bakeware dependencies
shell: powershell
run: choco install -y zstandard make
- name: Install Dependencies
shell: powershell
run: mix deps.get
- name: Run credo code analyser
shell: powershell
run: mix credo --strict
我什至正在使用 powershell 来执行此操作(尽管我不确定是否需要这样做)。
问题
但是我的 GitHub Actions 代码返回此错误:
==> bakeware
mkdir "d:/a/market_manager/market_manager/_build/test/lib/bakeware/obj"
mkdir "d:/a/market_manager/market_manager/_build/test/lib/bakeware/launcher"
mkdir "d:/a/market_manager/market_manager/_build/test/lib/bakeware/obj/zstd/lib/decompress"
mkdir: cannot create directory 'd:/a/market_manager/market_manager/_build/test/lib/bakeware/obj/zstd/lib/decompress': No such file or directory
make: *** [Makefile:70: d:/a/market_manager/market_manager/_build/test/lib/bakeware/obj/zstd/lib/decompress] Error 1
could not compile dependency :bakeware, "mix compile" failed. Errors may have been logged above. You can recompile this dependency with "mix deps.compile bakeware", update it with "mix deps.update bakeware" or clean it with "mix deps.clean bakeware"
** (Mix) Could not compile with "make" (exit status: 2).
对于细心的读者,您会注意到部分内容:
mkdir: cannot create directory 'd:/a/market_manager/market_manager/_build/test/lib/bakeware/obj/zstd/lib/decompress': No such file or directory
研究
通过稍微更改 GitHub 操作并添加一个额外的步骤,我能够检查一些行为:
- name: Compile everything
shell: powershell
run: |
mkdir "d:/a/market_manager/market_manager/_build/test/lib/bakeware/obj"
mkdir "d:/a/market_manager/market_manager/_build/test/lib/bakeware/launcher"
mkdir "d:/a/market_manager/market_manager/_build/test/lib/bakeware/obj/zstd/lib/decompress"
ls .\_build\test\lib\bakeware\obj\zstd\lib\decompress
Test-Path -Path "d:/a/market_manager/market_manager/_build/test/lib/bakeware/obj/zstd/lib/decompress"
mix deps.compile --all
mix compile
env:
CC: C:\ProgramData\Chocolatey\bin\gcc.exe
MAKE: C:\ProgramData\Chocolatey\bin\make.exe
在这个 sn-p 中,我手动创建所需的文件夹,然后对它们进行断言。输出如下:
Directory: D:\a\market_manager\market_manager\_build\test\lib\bakeware
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2/2/2022 11:06 AM obj
d----- 2/2/2022 11:06 AM launcher
Directory: D:\a\market_manager\market_manager\_build\test\lib\bakeware\obj\zstd\lib
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2/2/2022 11:06 AM decompress
True
我们可以看到:
- 所有目录都已创建
-
Test-Path返回True,这意味着'd:/a/market_manager/market_manager/_build/test/lib/bakeware/obj/zstd/lib/decompress'确实存在。
这只会让我更加困惑,因为错误仍然没有改变:
mkdir: cannot create directory 'd:/a/market_manager/market_manager/_build/test/lib/bakeware/obj/zstd/lib/decompress': No such file or directory
make: *** [Makefile:70: d:/a/market_manager/market_manager/_build/test/lib/bakeware/obj/zstd/lib/decompress] Error 1
could not compile dependency :bakeware, "mix compile" failed. Errors may have been logged above. You can recompile this dependency with "mix deps.compile bakeware", update it with "mix deps.update bakeware" or clean it with "mix deps.clean bakeware"
** (Mix) Could not compile with "C:\ProgramData\Chocolatey\bin\make.exe" (exit status: 2).
当我使用的每个命令都毫无疑问地显示该文件夹确实存在时,我真的无法理解错误No such file or directory。
问题
为什么我总是收到这个错误?
【问题讨论】:
-
尝试只创建父文件夹
mkdir "d:/a/market_manager/market_manager/_build/test/lib/bakeware/obj/zstd/lib -
我看不出这有什么帮助,因为文件夹是在 powershell 中递归创建的。
-
PowerShell 的
New-Item(这是mkdir在 PowerShell 中的包装)将递归地创建任何丢失的父文件夹,但我怀疑mkdirChocolatey 使用的是一个 unix 实用程序,它如果没有-p,可能不会这样做。如果是这种情况,创建父文件夹应该可以解决问题 -
公平点,但如果问题是文件夹不存在,那么
Test-Path -Path "d:/a/market_manager/market_manager/_build/test/lib/bakeware/obj/zstd/lib/decompress"将显示False。它在输出中显示True。可以肯定的是,我已经尝试过mkdir "d:/a/market_manager/market_manager/_build/test/lib/bakeware/obj/zstd/lib并且运行失败并出现完全相同的错误。
标签: windows powershell elixir github-actions