Kv tsp secrets2 (#6094)

* compact the macros
copy generated files

* some comments

* Cleanup and update to the latest SHAs

* sdffds

* working hybrid

* cleanup

* clang

* Update cmake-modules/TSPCompile.cmake

Co-authored-by: Rick Winter <rick.winter@microsoft.com>

---------

Co-authored-by: Rick Winter <rick.winter@microsoft.com>
This commit is contained in:
gearama 2024-10-15 12:13:49 -07:00 committed by GitHub
parent 4dba315a29
commit 0ec700a819
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 140 additions and 32 deletions

View File

@ -3,8 +3,17 @@
find_package(Git)
macro(GenerateCodeFromTypeSpec TSP_SHA TSP_REPO_PATH TSP_DESTINATION CODEGEN_SHA CODEGEN_DESTINATION )
message("Generating code using the following params TSP_SHA=${TSP_SHA} TSP_REPO_PATH=${TSP_REPO_PATH} TSP_DESTINATION=${TSP_DESTINATION} CODEGEN_SHA=${CODEGEN_SHA} CODEGEN_DESTINATION=${CODEGEN_DESTINATION}")
set(CODEGEN_PATH packages/typespec-cpp)
DownloadTSPFiles(${TSP_SHA} ${TSP_REPO_PATH} ${TSP_DESTINATION})
DownloadCodeGenerator(${CODEGEN_SHA} ${CODEGEN_DESTINATION})
GenerateCodeFromTSP(${TSP_DESTINATION} ${TSP_REPO_PATH} ${CODEGEN_DESTINATION} ${CODEGEN_PATH})
endmacro()
macro(DownloadTSPFiles TSP_SHA TSP_REPO_PATH TSP_DESTINATION)
message ("Downloading TSP files using the following params TSP_REPO=${TSP_REPO} TSP_SHA=${TSP_SHA} TSP_REPO_PATH=${TSP_REPO_PATH} TSP_DESTINATION=${TSP_DESTINATION}")
message ("Downloading TSP files using the following params TSP_REPO=${TSP_REPO} TSP_SHA=${TSP_SHA} TSP_REPO_PATH=${TSP_REPO_PATH} TSP_DESTINATION=${TSP_DESTINATION}")
if(Git_FOUND)
message("Git found: ${GIT_EXECUTABLE}")
@ -49,7 +58,7 @@ macro(DownloadTSPFiles TSP_SHA TSP_REPO_PATH TSP_DESTINATION)
endmacro()
macro (DownloadCodeGenerator CODEGEN_SHA CODEGEN_DESTINATION)
message("Downloading CODEGEN files using the following params CODEGEN_REPO=${CODEGEN_REPO} CODEGEN_SHA=${CODEGEN_SHA} CODEGEN_DESTINATION=${CODEGEN_DESTINATION}")
message("Downloading CODEGEN files using the following params CODEGEN_REPO=${CODEGEN_REPO} CODEGEN_SHA=${CODEGEN_SHA} CODEGEN_DESTINATION=${CODEGEN_DESTINATION}")
if(Git_FOUND)
message("Git found: ${GIT_EXECUTABLE}")
@ -85,24 +94,38 @@ macro(GenerateCodeFromTSP TSP_DESTINATION TSP_REPO_PATH CODEGEN_DESTINATION CODE
message("Generating code using the following params TSP_DESTINATION=${TSP_DESTINATION} TSP_REPO_PATH=${TSP_REPO_PATH} CODEGEN_DESTINATION=${CODEGEN_DESTINATION}")
message("Remember to Download the typspec-cpp emitter from npmjs.org")
#TODO : https://github.com/Azure/azure-sdk-for-cpp/issues/6071
set(DOWNLOAD_CODEGEN_FOLDER ${CMAKE_SOURCE_DIR}/build/${CODEGEN_DESTINATION}/${CODEGEN_PATH})
set(DOWNLOAD_CODEGEN_FOLDER ${CMAKE_SOURCE_DIR}/build/${CODEGEN_DESTINATION}/${CODEGEN_PATH}/specs/)
set(DOWNLOAD_TSP_FOLDER ${CMAKE_SOURCE_DIR}/build/${TSP_DESTINATION}/${TSP_REPO_PATH})
set(CODEGEN_CPP_FOLDER ${DOWNLOAD_CODEGEN_FOLDER}/../../../codegen.cpp)
set(CODEGEN_CPP_FOLDER ${DOWNLOAD_CODEGEN_FOLDER}/../../../codegen.cpp)
set(SCRIPTS_FOLDER ${CMAKE_SOURCE_DIR}/eng/scripts/typespec/)
message("Will copy tsp files from ${DOWNLOAD_TSP_FOLDER} to ${DOWNLOAD_CODEGEN_FOLDER}")
#copy tsp files to the codegen folder
file(COPY ${DOWNLOAD_TSP_FOLDER}
DESTINATION ${DOWNLOAD_CODEGEN_FOLDER})
execute_process(COMMAND npm install -g @azure-tools/typespec-client-generator-cli
WORKING_DIRECTORY ${DOWNLOAD_CODEGEN_FOLDER})
message("Will copy tsp generation scripts from ${SCRIPTS_FOLDER} to ${DOWNLOAD_CODEGEN_FOLDER}")
file(COPY ${SCRIPTS_FOLDER}
DESTINATION ${DOWNLOAD_CODEGEN_FOLDER})
execute_process(COMMAND npm install -g @azure-tools/typespec-azure-rulesets
WORKING_DIRECTORY ${DOWNLOAD_CODEGEN_FOLDER})
#generate code
#build codegen
message("Building codegen in folder ${DOWNLOAD_CODEGEN_FOLDER}")
execute_process(COMMAND pwsh Build-Codegen.ps1
WORKING_DIRECTORY ${DOWNLOAD_CODEGEN_FOLDER})
#generate code
message("Use codegen in folder ${DOWNLOAD_CODEGEN_FOLDER}")
execute_process(COMMAND pwsh Generate-Code.ps1
WORKING_DIRECTORY ${DOWNLOAD_CODEGEN_FOLDER})
endmacro()
macro(UpdateCodeFilesFromGenerated CODEGEN_DESTINATION INCLUDE_DESTINATION SOURCE_DESTINATION)
message("Updating code files using the following params CODEGEN_DESTINATION=${CODEGEN_DESTINATION} INCLUDE_DESTINATION=${INCLUDE_DESTINATION} SOURCE_DESTINATION=${SOURCE_DESTINATION}")
set(CODEGEN_PATH packages/typespec-cpp/specs)
set(INCLUDE_SRC ${CMAKE_SOURCE_DIR}/build/${CODEGEN_DESTINATION}/${CODEGEN_PATH}/generated/inc/)
set(SOURCE_SRC ${CMAKE_SOURCE_DIR}/build/${CODEGEN_DESTINATION}/${CODEGEN_PATH}/generated/src/)
message("Copying files from ${INCLUDE_SRC} to ${INCLUDE_DESTINATION}")
file(COPY ${INCLUDE_SRC} DESTINATION ${INCLUDE_DESTINATION})
message("Copying files from ${SOURCE_SRC} to ${SOURCE_DESTINATION}")
file(COPY ${SOURCE_SRC} DESTINATION ${SOURCE_DESTINATION})
endmacro()

View File

@ -0,0 +1,39 @@
# Copyright (c) Microsoft Corporation. All rights reserved.
# SPDX-License-Identifier: MIT
[CmdletBinding()]
param(
[switch] $ForceInstall = $false,
[switch] $Reinstall = $false
)
pushd
cd ..\..\
cd codegen.cpp
if ($Reinstall) {
rm -Recurse -Force .\node_modules\ && rm .\package-lock.json
}
if ($ForceInstall) {
npm install --force
} else {
npm install
}
npm run build
cd ..\typespec-cpp
if ($Reinstall) {
rm -Recurse -Force .\node_modules\ && rm .\package-lock.json
}
if ($ForceInstall) {
npm install --force
} else {
npm install
}
npm run build
popd

View File

@ -0,0 +1,7 @@
# Copyright (c) Microsoft Corporation. All rights reserved.
# SPDX-License-Identifier: MIT
[CmdletBinding()]
param()
Get-ChildItem -Exclude *.cpp,*.tsp,*.ps1,*.yaml,.clang-format,generated | Remove-Item -Recurse -Force

View File

@ -0,0 +1,44 @@
# Copyright (c) Microsoft Corporation. All rights reserved.
# SPDX-License-Identifier: MIT
[CmdletBinding()]
param(
[Parameter(Mandatory=$false)]
[string] $ClangFormatPath = "clang-format"
)
$ErrorActionPreference = "Stop"
$PSNativeCommandUseErrorActionPreference = $true
pushd
cd $PSScriptRoot
cd ../
$typespecCppDir = Get-Location
popd
pushd
Write-Host "Invoking: tsp compile ."
tsp compile --emit $typespecCppDir .
if (-not (Test-Path ".clang-format")) {
$oldProgressPreference = $ProgressPreference
$ProgressPreference = "SilentlyContinue"
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/Azure/azure-sdk-for-cpp/azure-core_1.13.0/.clang-format" -OutFile ".clang-format"
$ProgressPreference = $oldProgressPreference
}
try {
& "$ClangFormatPath" -version
} catch {
Write-Error "Clang-Format not found at: $ClangFormatPath"
popd
exit 1
}
Write-Host "Formatting generated code with clang-format"
Get-ChildItem generated -Include *.cpp, *.hpp -Recurse | ForEach-Object -Process{
" Processing: $_"
& "$ClangFormatPath" -i $_
}
popd

View File

@ -31,35 +31,30 @@ include(AzureConfigRTTI)
include(AzureBuildTargetForCI)
# Add create_map_file function
include(CreateMapFile)
option(TSP_GEN "Generate from TypeSpec" OFF)
if(TSP_GEN)
include(TSPCompile)
option(AZURE_TSP_KV_SECRETS_GEN "Generate KeyVault Secrets from TypeSpec" OFF)
message("KeyVault Secrets TSP Generation ${AZURE_TSP_KV_SECRETS_GEN}")
set(TSP_DESTINATION "keyvault_secrets")
set(TSP_REPO "https://github.com/Azure/azure-rest-api-specs.git")
set(TSP_SHA "1da5a85c4dc4f4f1caa47fff691e85960ef4bf20")
set(TSP_REPO_PATH "specification/keyvault/data-plane/Security.KeyVault.Secrets/")
DownloadTSPFiles(${TSP_REPO} ${TSP_SHA} ${TSP_REPO_PATH} ${TSP_DESTINATION})
endif()
option(AZURE_TSP_KV_SECRETS_GEN "Generate from TypeSpec" OFF)
message("KeyVault Secrets TSP Generation ${az_TSP_KV_SECRETS_GEN}")
if(AZURE_TSP_KV_SECRETS_GEN)
include(TSPCompile)
#typespec related repo information
set(TSP_REPO_PATH "specification/keyvault/data-plane/Security.KeyVault.Secrets/")
set(TSP_SHA "1124d1074d262dc20a010c2a9d366f8e7a452927")
set(TSP_SHA "1da5a85c4dc4f4f1caa47fff691e85960ef4bf20")
set(TSP_DESTINATION "keyvault_secrets")
set(CODEGEN_SHA "b4107ff1b9ce83aedf1d299a63575b6c27434de0")
#codegen related repo information
set(CODEGEN_SHA "1a9e3b7a337d5553603b8326dd3be5024d53b28a")
set(CODEGEN_DESTINATION "typespec-cpp")
set(CODEGEN_PATH "packages/typespec-cpp/samples/keyvault/secrets")
#destination folders
set(INCLUDE_DESTINATION "${CMAKE_CURRENT_SOURCE_DIR}/inc/azure/keyvault/secrets")
set(SOURCE_DESTINATION "${CMAKE_CURRENT_SOURCE_DIR}/src")
DownloadTSPFiles(${TSP_SHA} ${TSP_REPO_PATH} ${TSP_DESTINATION})
DownloadCodeGenerator(${CODEGEN_SHA} ${CODEGEN_DESTINATION})
GenerateCodeFromTSP(${TSP_DESTINATION} ${TSP_REPO_PATH} ${CODEGEN_DESTINATION} ${CODEGEN_PATH})
#generate code from typespec
GenerateCodeFromTypeSpec(${TSP_SHA} ${TSP_REPO_PATH} ${TSP_DESTINATION} ${CODEGEN_SHA} ${CODEGEN_DESTINATION})
#update code files left this as a separate step as generating and moving result around
#conceptually are two different steps
UpdateCodeFilesFromGenerated(${CODEGEN_DESTINATION} ${INCLUDE_DESTINATION} ${SOURCE_DESTINATION})
endif()
if(FETCH_SOURCE_DEPS)