lukka / run-cmake

GitHub Action to build C++ applications with CMake (CMakePresets.json), Ninja and vcpkg on GitHub.
MIT License
171 stars 19 forks source link

Action does not work without `run-vcpkg` with no vcpkg.json #142

Open LecrisUT opened 1 week ago

LecrisUT commented 1 week ago

I have encountered this issue in: https://github.com/spglib/spglib/actions/runs/9647881847/job/26607773265

I was trying to update run-cmake to v10, but on windoes-latest (related to the fix in v10.6) I get an error of:

error: Could not locate a manifest (vcpkg.json) above the current working directory.
This vcpkg distribution does not have a classic mode instance.

    at Object.<anonymous> (D:\a\_actions\lukka\run-cmake\v10\dist\index.js:6984:23)
    at Generator.next (<anonymous>)
    at fulfilled (D:\a\_actions\lukka\run-cmake\v10\dist\index.js:6942:58)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
Error: run-cmake action execution failed: 'Error: vcpkg failed with: 

error: Could not locate a manifest (vcpkg.json) above the current working directory.
This vcpkg distribution does not have a classic mode instance.
'
Error: The step failed and an error occurred when attempting to determine whether to continue on error.
Error: The template is not valid. spglib/spglib/.github/workflows/step_test.yaml@2e8efab81cdff5825fddad6c5c3d35c127aa08db (Line: 75, Col: 28): Unexpected value ''

The project does not have any vcpkg.json yet as I am still thinking on how to package this. Any possibilities to make it fallback when no vcpkg.json is found?

lukka commented 1 week ago

@LecrisUT this should be a regression introduced recently in vcpkg, you may find out if you try using an older version of vpkg: it would be super helpful if you can identify in which version this occurred.

To work around this, you may try removing VCPKG_ROOT entry from the env variables, e.g. like

uses: run-cmake
env:
  VCPKG_ROOT:

That way run-cmake does not attempt to set up the environment using the vcpkg env command (see the last block at the bottom of the flowchart).

LecrisUT commented 1 week ago

That might be difficult because I can't run run-vcpkg because I don't have a vcpkg.json. What I was considering is to have a try...catch around the first vcpkg command and if the error message contains "Could not locate a manifest" or has an equivalent exit code, than move on aa if there is no vcpkg support. Afaiu the only check is at VCPKG_ROOT, but maybe an additional check or even a glob check for **/vcpkg.json would be helpful here.