简体   繁体   中英

Github Actions using CMake, conan and Vulkan SDK fail because conanfile.py cannot be found

I am trying to build a Vulkan project using Github actions, CMake and conan package manager.

Here is my Github setup: https://github.com/inexorgame/vulkan-renderer/blob/hanni/github_actions/.github/workflows/build_cmake.yml

name: CMake Build Matrix

on: [push]

jobs:
  build:
    name: ${{ matrix.config.name }}
    runs-on: ${{ matrix.config.os }}
    strategy:
      fail-fast: false
      matrix:
        config:
        - {
            name: "Windows Latest MSVC", artifact: "Windows-MSVC.tar.xz",
            os: windows-latest,
            build_type: "Release", cc: "cl", cxx: "cl",
            environment_script: "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Auxiliary/Build/vcvars64.bat"
          }
        - {
            name: "Windows Latest MinGW", artifact: "Windows-MinGW.tar.xz",
            os: windows-latest,
            build_type: "Release", cc: "gcc", cxx: "g++"
          }
        - {
            name: "Ubuntu Latest GCC", artifact: "Linux.tar.xz",
            os: ubuntu-latest,
            build_type: "Release", cc: "gcc", cxx: "g++"
          }
        - {
            name: "Ubuntu Latest clang", artifact: "Linux.tar.xz",
            os: ubuntu-latest,
            build_type: "Release", cc: "clang", cxx: "clang"
          }

    steps:
    - uses: actions/checkout@v1

    - name: Download Vulkan SDK.
      run: |
           wget https://github.com/premake/premake-core/releases/download/v5.0.0-alpha11/premake-5.0.0-alpha11-linux.tar.gz?Human=true -O premake-5.0.0-alpha11-linux.tar.gz
           tar -xzvf premake-5.0.0-alpha11-linux.tar.gz
           sudo apt-get update -qq
           sudo apt-get install -y libassimp-dev libglm-dev graphviz libxcb-dri3-0 libxcb-present0 libpciaccess0 cmake ninja-build libpng-dev libxcb-dri3-dev libx11-dev libx11-xcb-dev libmirclient-dev libwayland-dev libxrandr-dev
           export VK_VERSION=1.2.131.1
           wget -O vulkansdk-linux-x86_64-$VK_VERSION.tar.gz https://sdk.lunarg.com/sdk/download/$VK_VERSION/linux/vulkansdk-linux-x86_64-$VK_VERSION.tar.gz
           tar zxf vulkansdk-linux-x86_64-$VK_VERSION.tar.gz
           export VULKAN_SDK=$TRAVIS_BUILD_DIR/$VK_VERSION/x86_64
           ls
    - name: Download Conan package manager.
      run: |
           pwd
           pip3 install wheel setuptools
           pip3 install conan
           export PATH=$PATH:/home/runner/.local/bin
           echo $PATH
           conan --version
           ls
    - name: Download Ninja and CMake
      id: cmake_and_ninja
      shell: cmake -P {0}
      run: |
        set(ninja_version "1.9.0")
        set(cmake_version "3.16.2")
        message(STATUS "Using host CMake version: ${CMAKE_VERSION}")
        if ("${{ runner.os }}" STREQUAL "Windows")
          set(ninja_suffix "win.zip")
          set(cmake_suffix "win64-x64.zip")
          set(cmake_dir "cmake-${cmake_version}-win64-x64/bin")
        elseif ("${{ runner.os }}" STREQUAL "Linux")
          set(ninja_suffix "linux.zip")
          set(cmake_suffix "Linux-x86_64.tar.gz")
          set(cmake_dir "cmake-${cmake_version}-Linux-x86_64/bin")
        endif()
        set(ninja_url "https://github.com/ninja-build/ninja/releases/download/v${ninja_version}/ninja-${ninja_suffix}")
        file(DOWNLOAD "${ninja_url}" ./ninja.zip SHOW_PROGRESS)
        execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvf ./ninja.zip)
        set(cmake_url "https://github.com/Kitware/CMake/releases/download/v${cmake_version}/cmake-${cmake_version}-${cmake_suffix}")
        file(DOWNLOAD "${cmake_url}" ./cmake.zip SHOW_PROGRESS)
        execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvf ./cmake.zip)
        # Save the path for other steps
        file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}/${cmake_dir}" cmake_dir)
        message("::set-output name=cmake_dir::${cmake_dir}")
        if (NOT "${{ runner.os }}" STREQUAL "Windows")
          execute_process(
            COMMAND chmod +x ninja
            COMMAND chmod +x ${cmake_dir}/cmake
          )
        endif()
    - name: Configure
      shell: cmake -P {0}

      run: |
        set(ENV{CC} ${{ matrix.config.cc }})
        set(ENV{CXX} ${{ matrix.config.cxx }})
        if ("${{ runner.os }}" STREQUAL "Windows" AND NOT "x${{ matrix.config.environment_script }}" STREQUAL "x")
          execute_process(
            COMMAND "${{ matrix.config.environment_script }}" && set
            OUTPUT_FILE environment_script_output.txt
          )
          file(STRINGS environment_script_output.txt output_lines)
          foreach(line IN LISTS output_lines)
            if (line MATCHES "^([a-zA-Z0-9_-]+)=(.*)$")
              set(ENV{${CMAKE_MATCH_1}} "${CMAKE_MATCH_2}")
            endif()
          endforeach()
        endif()
        file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}/ninja" ninja_program)
        execute_process(
          COMMAND ${{ steps.cmake_and_ninja.outputs.cmake_dir }}/cmake
            -S .
            -B build
            -D CMAKE_BUILD_TYPE=${{ matrix.config.build_type }}
            -G Ninja
            -DVULKAN_SDK_INCLUDES=$VULKAN_SDK/includes
            -DVULKAN_SDK_LIBRARIES=$VULKAN_SDK/Lib
            -D CMAKE_MAKE_PROGRAM=${ninja_program}
          RESULT_VARIABLE result
        )
        if (NOT result EQUAL 0)
          message(FATAL_ERROR "Bad exit status")
        endif()
    - name: Build
      shell: cmake -P {0}
      run: |
        set(ENV{NINJA_STATUS} "[%f/%t %o/sec] ")
        if ("${{ runner.os }}" STREQUAL "Windows" AND NOT "x${{ matrix.config.environment_script }}" STREQUAL "x")
          file(STRINGS environment_script_output.txt output_lines)
          foreach(line IN LISTS output_lines)
            if (line MATCHES "^([a-zA-Z0-9_-]+)=(.*)$")
              set(ENV{${CMAKE_MATCH_1}} "${CMAKE_MATCH_2}")
            endif()
          endforeach()
        endif()
        execute_process(
          COMMAND ${{ steps.cmake_and_ninja.outputs.cmake_dir }}/cmake --build build
          RESULT_VARIABLE result
        )
        if (NOT result EQUAL 0)
          message(FATAL_ERROR "Bad exit status")
        endif()
    - name: Run tests
      shell: cmake -P {0}
      run: |
        include(ProcessorCount)
        ProcessorCount(N)
        execute_process(
          COMMAND ${{ steps.cmake_and_ninja.outputs.cmake_dir }}/ctest -j ${N}
          WORKING_DIRECTORY build
          RESULT_VARIABLE result
        )
        if (NOT result EQUAL 0)
          message(FATAL_ERROR "Running tests failed!")
        endif()
    - name: Install Strip
      run: ${{ steps.cmake_and_ninja.outputs.cmake_dir }}/cmake --install build --prefix instdir --strip


    - name: Pack
      working-directory: instdir
      run: ${{ steps.cmake_and_ninja.outputs.cmake_dir }}/cmake -E tar cJfv ../${{ matrix.config.artifact }} .


    - name: Upload
      uses: actions/upload-artifact@v1
      with:
        path: ./${{ matrix.config.artifact }}
        name: ${{ matrix.config.artifact }}

  release:
    if: contains(github.ref, 'tags/v')
    runs-on: ubuntu-latest
    needs: build

    steps:
    - name: Create Release
      id: create_release
      uses: actions/create-release@v1.0.0
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      with:
        tag_name: ${{ github.ref }}
        release_name: Release ${{ github.ref }}
        draft: false
        prerelease: false

    - name: Store Release url
      run: |
        echo "${{ steps.create_release.outputs.upload_url }}" > ./upload_url
    - uses: actions/upload-artifact@v1
      with:
        path: ./upload_url
        name: upload_url

  publish:
    if: contains(github.ref, 'tags/v')
    name: ${{ matrix.config.name }}
    runs-on: ${{ matrix.config.os }}
    strategy:
      fail-fast: false
      matrix:
        config:
        - {
            name: "Windows Latest MSVC", artifact: "Windows-MSVC.tar.xz",
            os: ubuntu-latest
          }
        - {
            name: "Windows Latest MinGW", artifact: "Windows-MinGW.tar.xz",
            os: ubuntu-latest
          }
        - {
            name: "Ubuntu Latest GCC", artifact: "Linux.tar.xz",
            os: ubuntu-latest
          }
        - {
            name: "Ubuntu Latest clang", artifact: "Linux.tar.xz",
            os: ubuntu-latest
          }
    needs: release

    steps:
    - name: Download artifact
      uses: actions/download-artifact@v1
      with:
        name: ${{ matrix.config.artifact }}
        path: ./

    - name: Download URL
      uses: actions/download-artifact@v1
      with:
        name: upload_url
        path: ./
    - id: set_upload_url
      run: |
        upload_url=`cat ./upload_url`
        echo ::set-output name=upload_url::$upload_url
    - name: Upload to Release
      id: upload_to_release
      uses: actions/upload-release-asset@v1.0.1
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      with:
        upload_url: ${{ steps.set_upload_url.outputs.upload_url }}
        asset_path: ./${{ matrix.config.artifact }}
        asset_name: ${{ matrix.config.artifact }}
        asset_content_type: application/x-gtar

Here is my Github action log: https://github.com/inexorgame/vulkan-renderer/runs/595870693?check_suite_focus=true .

-- Detecting CXX compile features - done
-- CMAKE_VERSION = 3.16.2
-- CMAKE_GENERATOR = Ninja
-- C Compiler executable: /usr/bin/gcc
-- CXX Compiler executable: /usr/bin/g++
-- Linker executable: /usr/bin/ld
-- Build type: Release
-- Downloading conan.cmake from https://github.com/conan-io/cmake-conan
-- Conan: Adding bincrafters remote repositoy (https://api.bintray.com/conan/bincrafters/public-conan)
-- Conan: Automatic detection of conan settings from cmake
-- Conan: Settings= -s;build_type=Release;-s;compiler=gcc;-s;compiler.version=7;-s;compiler.libcxx=libstdc++11
-- Conan executing: conan install /home/runner/work/vulkan-renderer/vulkan-renderer/conanfile.py -s build_type=Release -s compiler=gcc -s compiler.version=7 -s compiler.libcxx=libstdc++11 -g=cmake --build=outdated
CMake Error at build/conan.cmake:399 (message):
  Conan install failed='No such file or directory'
Call Stack (most recent call first):
  build/conan.cmake:485 (conan_cmake_install)
  cmake/conan_setup.cmake:20 (conan_cmake_run)
  CMakeLists.txt:64 (include)


-- Configuring incomplete, errors occurred!
See also "/home/runner/work/vulkan-renderer/vulkan-renderer/build/CMakeFiles/CMakeOutput.log".
CMake Error at /home/runner/work/_temp/4108ad3e-7358-4e0e-b25f-e6ffb6745416:31 (message):
  Bad exit status


##[error]Process completed with exit code 1.

Here is a ls after installing conan:

/usr/share/rust/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/home/runner/.dotnet/tools:/home/runner/.config/composer/vendor/bin:/home/runner/.local/bin
Conan version 1.24.0
1.2.131.1
BUILDING.md
CMakeLists.txt
CODEDESIGN.md
CODE_OF_CONDUCT.md
CONTRIBUTING.md
Doxyfile
LICENSE.md
README.md
assets
benchmarks
cmake
conanfile.py
configuration
documentation
generate_documentation.bat
illustrations
premake-5.0.0-alpha11-linux.tar.gz
premake5
shaders
src
tests
third_party
vma-dumps
vma-replays
vulkansdk-linux-x86_64-1.2.131.1.tar.gz

Why can't it find conanfile.py ? It is in the same directory?

For now I just want gcc on Linux to work.

Thank you for your help, Johannes.

to add entries to the PATH environment variable that you want to leverage in any subsequent step you need to use the add-path command, eg:

- run: |
    echo "::add-path::/home/runner/.local/bin"

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM