代码之家  ›  专栏  ›  技术社区  ›  Flame_Phoenix

Github操作:没有此类文件或目录错误

  •  0
  • Flame_Phoenix  · 技术社区  · 3 年前

    背景

    我正在尝试让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
      
    

    在这个片段中,我手动创建了所需的文件夹,然后对它们进行断言。输出如下:

        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 当我使用的每个命令都毫无疑问地显示文件夹 确实存在

    问题

    为什么我一直收到这个错误?

    0 回复  |  直到 3 年前
        1
  •  0
  •   Flame_Phoenix    3 年前

    答复

    我的头撞在墙上好几天了,我想我终于想通了。 由于cmd mkdir 行为,因为它的行为与poewrshell中的不同。

    通过更改 Makefile 只在文件夹不存在的情况下创建文件夹,我能够在保持向后兼容性的同时解决这个问题,这是我的要求之一。

    我已经提交了一份带有此修复的PR,在撰写本文时,我很高兴地宣布它已经合并到master中: