Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CI: Attempt to fix build failure on windows #2084

Merged
merged 3 commits into from
Feb 20, 2025

Conversation

M2-TE
Copy link
Contributor

@M2-TE M2-TE commented Feb 19, 2025

Window CI sometimes fails due to "permission errors":

Output
run VulkanHppGenerator
  clang-format version 18.1.8
  VulkanHppGenerator: Found VulkanHppGenerator: Loading D:\a\Vulkan-Hpp\Vulkan-Hpp\Vulkan-Headers\registry\vk.xml
  VulkanHppGenerator: Parsing D:\a\Vulkan-Hpp\Vulkan-Hpp\Vulkan-Headers\registry\vk.xml
  VulkanHppGenerator: Spec warning on line 642: enum <VkDeviceCreateFlagBits> not required in any feature or extension!
  VulkanHppGenerator: Spec warning on line 798: enum <VkImageFormatConstraintsFlagBitsFUCHSIA> not required in any feature or extension!
  VulkanHppGenerator: Spec warning on line 621: enum <VkQueryPoolCreateFlagBits> not required in any feature or extension!
  VulkanHppGenerator: Spec warning on line 700: enum <VkSemaphoreCreateFlagBits> not required in any feature or extension!
  VulkanHppGenerator: Spec warning on line 777: enum <VkShaderModuleCreateFlagBits> not required in any feature or extension!
CUSTOMBUILD : clang-format error : unable to overwrite file D:/a/Vulkan-Hpp/Vulkan-Hpp/vulkan/vulkan.cppm: permission denied [D:\a\Vulkan-Hpp\Vulkan-Hpp\build\11\Debug\build_vulkan_hpp.vcxproj]
  VulkanHppGenerator: Generating D:/a/Vulkan-Hpp/Vulkan-Hpp/vulkan/vulkan.cppm ...
  VulkanHppGenerator: Generating D:/a/Vulkan-Hpp/Vulkan-Hpp/vulkan/vulkan.hpp ...
  VulkanHppGenerator: Generating D:/a/Vulkan-Hpp/Vulkan-Hpp/vulkan/vulkan_enums.hpp ...
  VulkanHppGenerator: Generating D:/a/Vulkan-Hpp/Vulkan-Hpp/vulkan/vulkan_extension_inspection.hpp ...
  VulkanHppGenerator: Formatting D:/a/Vulkan-Hpp/Vulkan-Hpp/vulkan/vulkan_extension_inspection.hpp ...
  VulkanHppGenerator: Generating D:/a/Vulkan-Hpp/Vulkan-Hpp/vulkan/vulkan_format_traits.hpp ...
  VulkanHppGenerator: Generating D:/a/Vulkan-Hpp/Vulkan-Hpp/vulkan/vulkan_funcs.hpp ...
  VulkanHppGenerator: Generating D:/a/Vulkan-Hpp/Vulkan-Hpp/vulkan/vulkan_handles.hpp ...
  VulkanHppGenerator: Generating D:/a/Vulkan-Hpp/Vulkan-Hpp/vulkan/vulkan_hash.hpp ...
  VulkanHppGenerator: Generating D:/a/Vulkan-Hpp/Vulkan-Hpp/vulkan/vulkan_hpp_macros.hpp ...
  VulkanHppGenerator: Formatting D:/a/Vulkan-Hpp/Vulkan-Hpp/vulkan/vulkan_hpp_macros.hpp ...
  VulkanHppGenerator: Generating D:/a/Vulkan-Hpp/Vulkan-Hpp/vulkan/vulkan_shared.hpp ...
  VulkanHppGenerator: Generating D:/a/Vulkan-Hpp/Vulkan-Hpp/vulkan/vulkan_static_assertions.hpp ...
  VulkanHppGenerator: Formatting D:/a/Vulkan-Hpp/Vulkan-Hpp/vulkan/vulkan_shared.hpp ...
  VulkanHppGenerator: Generating D:/a/Vulkan-Hpp/Vulkan-Hpp/vulkan/vulkan_structs.hpp ...
  VulkanHppGenerator: Generating D:/a/Vulkan-Hpp/Vulkan-Hpp/vulkan/vulkan_to_string.hpp ...
  VulkanHppGenerator: Formatting D:/a/Vulkan-Hpp/Vulkan-Hpp/vulkan/vulkan_format_traits.hpp ...
  VulkanHppGenerator: Formatting D:/a/Vulkan-Hpp/Vulkan-Hpp/vulkan/vulkan.hpp ...
  VulkanHppGenerator: Formatting D:/a/Vulkan-Hpp/Vulkan-Hpp/vulkan/vulkan.cppm ...
  VulkanHppGenerator: Formatting D:/a/Vulkan-Hpp/Vulkan-Hpp/vulkan/vulkan_enums.hpp ...
  VulkanHppGenerator: Formatting D:/a/Vulkan-Hpp/Vulkan-Hpp/vulkan/vulkan_hash.hpp ...
  VulkanHppGenerator: Formatting D:/a/Vulkan-Hpp/Vulkan-Hpp/vulkan/vulkan_static_assertions.hpp ...
  VulkanHppGenerator: Formatting D:/a/Vulkan-Hpp/Vulkan-Hpp/vulkan/vulkan_to_string.hpp ...
  VulkanHppGenerator: Formatting D:/a/Vulkan-Hpp/Vulkan-Hpp/vulkan/vulkan_handles.hpp ...
  VulkanHppGenerator: Formatting D:/a/Vulkan-Hpp/Vulkan-Hpp/vulkan/vulkan_funcs.hpp ...
  VulkanHppGenerator: Formatting D:/a/Vulkan-Hpp/Vulkan-Hpp/vulkan/vulkan_structs.hpp ...
  VulkanHppGenerator: Generating D:/a/Vulkan-Hpp/Vulkan-Hpp/vulkan/vulkan_raii.hpp ...
  VulkanHppGenerator: Formatting D:/a/Vulkan-Hpp/Vulkan-Hpp/vulkan/vulkan_raii.hpp ...
  Building Custom Rule D:/a/Vulkan-Hpp/Vulkan-Hpp/CMakeLists.txt
C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Microsoft\VC\v170\Microsoft.CppCommon.targets(254,5): error MSB8066: Custom build for 'D:\a\Vulkan-Hpp\Vulkan-Hpp\build\11\Debug\CMakeFiles\b72a330e21ee03dd2afda6fc8f956936\vulkan.hpp.rule;D:\a\Vulkan-Hpp\Vulkan-Hpp\build\11\Debug\CMakeFiles\50308fb54619814b0b89830c2dc6d[167](https://github.com/KhronosGroup/Vulkan-Hpp/actions/runs/13414491313/job/37471943457#step:4:168)\build_vulkan_hpp.rule;D:\a\Vulkan-Hpp\Vulkan-Hpp\CMakeLists.txt' exited with code -1. [D:\a\Vulkan-Hpp\Vulkan-Hpp\build\11\Debug\build_vulkan_hpp.vcxproj]
Error: Process completed with exit code 1.

I've encountered this sort of error in other projects on windows when trying to write to still opened files. The only place in the generator code where this error can occur is in the writeToFile function, specifically after closing the ofstream and trying to write to the newly created file via clangd-format:

Vulkan-Hpp/XMLHelper.hpp

Lines 560 to 576 in 8ab6cb5

void writeToFile( std::string const & str, std::string const & fileName )
{
std::ofstream ofs( fileName );
assert( !ofs.fail() );
ofs << str;
ofs.close();
#if defined( CLANG_FORMAT_EXECUTABLE )
messager.message( "VulkanHppGenerator: Formatting " + fileName + " ...\n" );
const std::string commandString = "\"" CLANG_FORMAT_EXECUTABLE "\" -i --style=file " + fileName;
const int ret = std::system( commandString.c_str() );
if ( ret != 0 )
{
throw std::runtime_error( "VulkanHppGenerator: failed to format file " + fileName + " with error <" + std::to_string( ret ) + ">" );
}
#endif
}

Normally, I would expect ofs.close() to flush the stream, but as it never explicitly calls flush() internally, I've added it manually. Let's see if it actually helps..

@M2-TE M2-TE marked this pull request as draft February 19, 2025 17:26
@asuessenbach
Copy link
Contributor

Apparently, adding a flush does not help.

What do you think about scoping ofs, like

  {
    std::ofstream ofs( fileName );
    assert( !ofs.fail() );
    ofs << str;
  }

@M2-TE M2-TE marked this pull request as ready for review February 20, 2025 12:28
@M2-TE
Copy link
Contributor Author

M2-TE commented Feb 20, 2025

That seems to have worked at least!
Do you want to rerun the checks a few times before merging?

@asuessenbach
Copy link
Contributor

Do you want to rerun the checks a few times before merging?

I think, rerunning at least once is worth a try. That probably needs some push from your side.

@asuessenbach
Copy link
Contributor

Well, I think (hope?), it's fine now.

Thanks a lot again for your contribution!

@asuessenbach asuessenbach merged commit 4c8fe92 into KhronosGroup:main Feb 20, 2025
58 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants