Last active
October 9, 2021 15:03
-
-
Save ambientlight/db77ee6f65989f426841d2426220cb18 to your computer and use it in GitHub Desktop.
Autorest codegen for python, typescript, golang, c#, java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
if [[ -z $1 ]] ; then | |
echo "Missing swagger readme search path, usage: ./gen_all.sh SEARCH_PATH" | |
echo 'Sample: ./gen_all.sh "specification/maps/data-plane/Render/readme.md"' | |
exit 0 | |
else | |
SEARCH_PATH=$1 | |
fi | |
./gen_python.sh $SEARCH_PATH | |
./gen_go.sh $SEARCH_PATH | |
./gen_csharp.sh $SEARCH_PATH | |
./gen_java.sh $SEARCH_PATH | |
./gen_js.sh $SEARCH_PATH |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
if [[ -z $1 ]] ; then | |
echo "Missing swagger readme search path, usage: ./gen_csharp.sh SEARCH_PATH [SDK_PATH]" | |
echo 'Sample: ./gen_csharp.sh "specification/maps/data-plane/*/readme.md"' | |
exit 0 | |
else | |
SEARCH_PATH=$1 | |
fi | |
if [[ -z $2 ]] ; then | |
echo "Using ../azure-sdk-for-net for csharp sdk" | |
SDK_PATH="../azure-sdk-for-net" | |
else | |
SDK_PATH=$2 | |
fi | |
VERSION=1.0.0-beta.1 | |
VERSION_MESSAGE="Initial preview" | |
find $SEARCH_PATH | while read README_PATH ; do | |
README_FPATH=$(dirname $README_PATH) | |
SRCPATH=$(cat $README_FPATH/readme.csharp.md | grep '^\s*output-folder:' | sed "s/output-folder://" | dos2unix | xargs dirname) | |
SERVICE_NAME=$(dirname $SRCPATH | xargs basename) | |
TRACK2_COMMAND='npx [email protected] --use=@autorest/[email protected] --skip-csproj --skip-upgrade-check '"$README_PATH"' --modeler.debugger --use='"$(realpath ~)"'/.nuget/packages/microsoft.azure.autorest.csharp/3.0.0-beta.20210615.2/buildMultiTargeting/../tools/netcoreapp3.1/any/ --output-folder='"$(realpath $SDK_PATH)"'/sdk/maps/'"$SERVICE_NAME"'/src/Generated --namespace='"$SERVICE_NAME"' --clear-output-folder=true --shared-source-folders="'"$(realpath $SDK_PATH/)"'/eng//../sdk/core/Azure.Core/src/Shared/;'"$(realpath ~)"'/.nuget/packages/microsoft.azure.autorest.csharp/3.0.0-beta.20210615.2/buildMultiTargeting/../content/Generator.Shared/" --public-clients' | |
echo $TRACK2_COMMAND | |
eval $TRACK2_COMMAND | |
cp $SDK_PATH/sdk/template/Azure.Template/src/Azure.Template.csproj $SDK_PATH/sdk/maps/$SERVICE_NAME/src/$SERVICE_NAME.csproj | |
cp $SDK_PATH/sdk/template/Azure.Template/Directory.Build.props $SDK_PATH/sdk/maps/$SERVICE_NAME/ | |
# update meta | |
sed -i "s/<Version>.*<\/Version>/<Version>$VERSION<\/Version>/" $SDK_PATH/sdk/maps/$SERVICE_NAME/src/$SERVICE_NAME.csproj | |
sed -i "s/<AssemblyTitle>.*<\/AssemblyTitle>/<AssemblyTitle>Azure Maps $SERVICE_NAME<\/AssemblyTitle>/" $SDK_PATH/sdk/maps/$SERVICE_NAME/src/$SERVICE_NAME.csproj | |
sed -i "s/<PackageTags>.*<\/PackageTags>/<PackageTags>Azure;Azure Maps;Maps $SERVICE_NAME<\/PackageTags>/" $SDK_PATH/sdk/maps/$SERVICE_NAME/src/$SERVICE_NAME.csproj | |
sed -i "s/<Description>.*<\/Description>/<Description>Azure Maps $SERVICE_NAME<\/Description>/" $SDK_PATH/sdk/maps/$SERVICE_NAME/src/$SERVICE_NAME.csproj | |
sed -i "s/<\/PropertyGroup>/<NoWarn>\$(NoWarn);AZC0001;AZC0012<\/NoWarn><\/PropertyGroup>/" $SDK_PATH/sdk/maps/$SERVICE_NAME/src/$SERVICE_NAME.csproj | |
# inject additional shared source | |
sed -z "s/<ItemGroup>\n\s*<Compile/<ItemGroup>\n <Compile Include=\"\$(AzureCoreSharedSources)Argument.cs\" Link=\"Shared\%(RecursiveDir)\%(Filename)%(Extension)\" \/>\n <Compile Include=\"\$(AzureCoreSharedSources)AzureKeyCredentialPolicy.cs\" Link=\"Shared\%(RecursiveDir)\%(Filename)%(Extension)\" \/>\n <Compile/" $SDK_PATH/sdk/maps/$SERVICE_NAME/src/$SERVICE_NAME.csproj > $SDK_PATH/sdk/maps/$SERVICE_NAME/src/$SERVICE_NAME.tmp.csproj | |
mv $SDK_PATH/sdk/maps/$SERVICE_NAME/src/$SERVICE_NAME.tmp.csproj $SDK_PATH/sdk/maps/$SERVICE_NAME/src/$SERVICE_NAME.csproj | |
# the build somehow add condiitional dependencies if autorest.md is present, otherwise I cannot explain build failing without empty autorest.md... | |
touch $SDK_PATH/sdk/maps/$SERVICE_NAME/src/autorest.md | |
# add changelog and generate Nuget package | |
echo -e "# Release History\n\n## $VERSION ($(date +%Y-%m-%d))\n- $VERSION_MESSAGE" > $SDK_PATH/sdk/maps/$SERVICE_NAME/CHANGELOG.md | |
dotnet pack $SDK_PATH/sdk/maps/$SERVICE_NAME/src/$SERVICE_NAME.csproj /p:RunApiCompat=$false | |
#dotnet build $SDK_PATH/sdk/maps/$SERVICE_NAME/src/$SERVICE_NAME.csproj /t:RunApiCompat /p:TargetFramework=netstandard2.0 /flp:v=m | |
done |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
if [[ -z $1 ]] ; then | |
echo "Missing swagger readme search path, usage: ./gen_go.sh SEARCH_PATH [SDK_PATH]" | |
echo 'Sample: ./gen_go.sh "specification/maps/data-plane/*/readme.md"' | |
exit 0 | |
else | |
SEARCH_PATH=$1 | |
fi | |
if [[ -z $2 ]] ; then | |
echo "Using ../azure-sdk-for-go for go sdk" | |
SDK_PATH="../azure-sdk-for-go" | |
else | |
SDK_PATH=$2 | |
fi | |
VERSION=1.0.0 | |
find $SEARCH_PATH | while read README_PATH ; do | |
SERVICE_NAME=$(dirname ${README_PATH,,} | xargs basename) | |
COMMAND="autorest --go --track2 --use=@autorest/[email protected] $README_PATH --go-sdk-folder=$SDK_PATH --multiapi --export-clients --module=$SERVICE_NAME --module-version=$VERSION --clear-output-folder=true" | |
echo $COMMAND | |
eval $COMMAND | |
done | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
if [[ -z $1 ]] ; then | |
echo "Missing swagger readme search path, usage: ./gen_java.sh SEARCH_PATH [SDK_PATH]" | |
echo 'Sample: ./gen_java.sh "specification/maps/data-plane/*/readme.md"' | |
exit 0 | |
else | |
SEARCH_PATH=$1 | |
fi | |
if [[ -z $2 ]] ; then | |
echo "Using ../azure-sdk-for-java for java sdk" | |
SDK_PATH="../azure-sdk-for-java" | |
else | |
SDK_PATH=$2 | |
fi | |
SPOTBUGS_EXCLUDE='<?xml version="1.0" encoding="UTF-8"?> | |
<FindBugsFilter> | |
<Match> | |
<Bug pattern="UPM_UNCALLED_PRIVATE_METHOD"/> | |
</Match> | |
<Match> | |
<Bug pattern="NP_LOAD_OF_KNOWN_NULL_VALUE"/> | |
</Match> | |
<Match> | |
<Bug pattern="SIC_INNER_SHOULD_BE_STATIC_ANON"/> | |
</Match> | |
<Match> | |
<Bug pattern="NM_CONFUSING"/> | |
</Match> | |
</FindBugsFilter> | |
' | |
SPOTBUGS_PLUGIN_CONFIG='<plugin><groupId>com\.github\.spotbugs<\/groupId><artifactId>spotbugs-maven-plugin<\/artifactId><version>4\.2\.0<\/version><configuration><excludeFilterFile>.\/spotbugs\/sportbugs-exclude\.xml<\/excludeFilterFile><\/configuration><\/plugin>' | |
find $SEARCH_PATH -print | while read README_PATH ; do | |
# WARNING: this doesnot yet generate a base pom.xml file | |
TRACK2_COMMAND="autorest --java --use:@autorest/[email protected] --sync-methods=all --track2 --version=3.3.2 --generate-sync-async-clients:true --java.azure-libraries-for-java-folder=$SDK_PATH/sdk/maps --pipeline.modelerfour.additional-checks=false --pipeline.modelerfour.lenient-model-deduplication=true --sdk-integration --java.license-header=MICROSOFT_MIT_SMALL $README_PATH" | |
README_FPATH=$(dirname $README_PATH) | |
SERVICE_NAME=$(cat $README_FPATH/readme.java.md | grep '^\s*output-folder:' | sed "s/output-folder://" | dos2unix | xargs basename) | |
TARGET_PATH="$SDK_PATH/sdk/maps/$SERVICE_NAME" | |
SERVICE_COMPONENENTS=(${SERVICE_NAME//-/ }) | |
echo $TRACK2_COMMAND | |
eval $TRACK2_COMMAND | |
mkdir -p $TARGET_PATH/spotbugs | |
# replace meta | |
sed -i "s/<groupId>com.azure.resourcemanager<\/groupId>/<groupId>com.azure<\/groupId>/" $TARGET_PATH/pom.xml | |
sed -i "s/<artifactId>azure-resourcemanager-${SERVICE_COMPONENENTS[2]}-generated<\/artifactId>/<artifactId>${SERVICE_NAME,,}<\/artifactId>/" $TARGET_PATH/pom.xml | |
sed -i '0,/<name>.*<\/name>/ '"s/<name>.*<\/name>/<name>Microsoft Azure client library for $SERVICE_NAME service<\/name>/" $TARGET_PATH/pom.xml | |
sed -i '0,/<name>.*<\/name>/ '"s/<description>.*<\/description>/<description>This package contains the Microsoft $SERVICE_NAME SDK\.<\/description>>/" $TARGET_PATH/pom.xml | |
# add spotbugs exclusions | |
echo "$SPOTBUGS_EXCLUDE" > $TARGET_PATH/spotbugs/sportbugs-exclude.xml | |
REPLACE_EXPR="s/<plugins>/<plugins>"$SPOTBUGS_PLUGIN_CONFIG"/" | |
sed -i $REPLACE_EXPR $TARGET_PATH/pom.xml | |
mvn clean install -f $TARGET_PATH/pom.xml | |
done |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# npm install -g @microsoft/rush | |
if [[ -z $1 ]] ; then | |
echo "Missing swagger readme search path, usage: ./gen_js.sh SEARCH_PATH [SDK_PATH]" | |
echo 'Sample: ./gen_js.sh "specification/maps/data-plane/*/readme.md"' | |
exit 0 | |
else | |
SEARCH_PATH=$1 | |
fi | |
if [[ -z $2 ]] ; then | |
echo "Using ../azure-sdk-for-js for js sdk" | |
SDK_PATH="../azure-sdk-for-js" | |
else | |
SDK_PATH=$2 | |
fi | |
find $SEARCH_PATH -print | while read README_PATH ; do | |
TRACK2_COMMAND="autorest --typescript --track2 --license-header=MICROSOFT_MIT_NO_VERSION --clear-output-folder=true --typescript-sdks-folder=$SDK_PATH $README_PATH" | |
README_FPATH=$(dirname $README_PATH) | |
SRCPATH=$(cat $README_FPATH/readme.typescript.md | grep '^\s*output-folder:' | sed "s/output-folder://" | dos2unix) | |
SERVICE_NAME=$(basename $SRCPATH | tr -d \") | |
TARGET_PATH="$SDK_PATH/sdk/maps/$SERVICE_NAME/" | |
echo $TRACK2_COMMAND | |
eval $TRACK2_COMMAND | |
DESCRIPTION="A client library for Azure Maps ${SERVICE_NAME,,}" | |
cd $TARGET_PATH | |
jq -s '.[0] + { | |
name: "@azure/'"${SERVICE_NAME,,}"'", | |
description: "'"${DESCRIPTION}"'", | |
version: "'"${VERSION}"'" | |
} | del(."//metadata") | |
| del(."//sampleConfiguration") | |
+ {module: "dist-esm/index.js", types: "types/'"${SERVICE_NAME,,}"'.d.ts"} | |
| .dependencies += { | |
"@azure/core-client": "^1.0.0", | |
"@azure/core-paging": "^1.1.1", | |
"@azure/core-lro": "^2.2.2", | |
"@azure/abort-controller": "^1.0.0", | |
"@azure/core-asynciterator-polyfill": "^1.0.0", | |
"@azure/core-rest-pipeline": "^1.1.0", | |
} | |
| .files = ["dist/", "dist-esm/", "types/'"${SERVICE_NAME,,}"'.d.ts"] | |
| .scripts."build:types" = "downlevel-dts types types/3.1" | |
| .typesVersions."<3.6"."*" = ["types/3.1/index.d.ts"]' ../../template/template/package.json > package.json | |
jq -s '.[0] | |
| .compilerOptions += { noUnusedLocals: false, noUnusedParameters: false } | |
| .compilerOptions.paths."@azure/'"${SERVICE_NAME,,}"'" = ["./src/generated/index"] | |
| del(.compilerOptions.paths."@azure/template")' ../../template/template/tsconfig.json > tsconfig.json | |
cp ../../template/template/rollup.config.js rollup.config.js | |
jq -s '.[0] | |
| .mainEntryPointFilePath = "types/index.d.ts" | |
| .dtsRollup.publicTrimmedFilePath = "types/'"${SERVICE_NAME,,}"'.d.ts" | |
' ../../template/template/api-extractor.json api-extractor.json > api-extractor.json | |
if cat ../../../rush.json | grep -q "" ; then | |
echo "rush.json already contains @azure/${SERVICE_NAME,,}" | |
else | |
echo "adding @azure/${SERVICE_NAME,,} into rush.json" | |
cat ../../../rush.json | head -n -3 > ../../../rush.temp.json | |
mv ../../../rush.temp.json ../../../rush.json | |
RUSH_CONFIG=' }, | |
{ | |
"packageName": "@azure/'"${SERVICE_NAME,,}"'", | |
"projectFolder": "sdk/maps/'"${SERVICE_NAME,,}"'", | |
"versionPolicyName": "client" | |
} | |
] | |
}' | |
echo "$RUSH_CONFIG" >> ../../../rush.json | |
fi | |
mkdir -p review | |
cd - | |
done | |
cd $SDK_PATH | |
rush update | |
rush build | |
find sdk/maps/*/* -maxdepth 1 -name "package.json" -print | while read PACKAGEJSON_PATH ; do | |
TARGET_PATH="$(dirname $PACKAGEJSON_PATH)" | |
echo $TARGET_PATH | |
RP=$(pwd) | |
cd $TARGET_PATH | |
rushx build | |
rushx pack | |
cd $RP | |
done |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
if [[ -z $1 ]] ; then | |
echo "Missing swagger readme search path, usage: ./gen_python.sh SEARCH_PATH [SDK_PATH]" | |
echo 'Sample: ./gen_python.sh "specification/maps/data-plane/*/readme.md"' | |
exit 0 | |
else | |
SEARCH_PATH=$1 | |
fi | |
if [[ -z $2 ]] ; then | |
echo "Using ../azure-sdk-for-python for js sdk" | |
SDK_PATH="../azure-sdk-for-python" | |
else | |
SDK_PATH=$2 | |
fi | |
TARGET_GENINPUT_PATH="genInput.json" | |
TARGET_GENOUTPUT_PATH="genOutput.json" | |
TARGET_PACKAGEOUTPUT_PATH="packageOutput.json" | |
CHANGED=$(find $(dirname $SEARCH_PATH) -print | xargs python -c 'import json, sys; print(json.dumps([v for v in sys.argv[1:]]))') | |
RELATED=$(find $SEARCH_PATH -print | xargs python -c 'import json, sys; print(json.dumps([v for v in sys.argv[1:]]))') | |
echo '{"relatedReadmeMdFiles":'"$RELATED"', "changedFiles":'"$CHANGED"', "specFolder":"../azure-rest-api-specs/"}' > "$SDK_PATH/$TARGET_GENINPUT_PATH" | |
cd $SDK_PATH | |
ln -s tools/azure-sdk-tools/packaging_tools/ packaging_tools | |
python -m packaging_tools.auto_codegen $TARGET_GENINPUT_PATH $TARGET_GENOUTPUT_PATH | |
python -m packaging_tools.auto_package $TARGET_GENOUTPUT_PATH $TARGET_PACKAGEOUTPUT_PATH |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment