From 5687a1cab38ac5d61be2d943a74d73f123012bd5 Mon Sep 17 00:00:00 2001 From: Pierre Millot Date: Fri, 21 Jan 2022 12:35:35 +0100 Subject: [PATCH 1/6] fix: improve script consistancy and format --- .github/workflows/check.yml | 2 +- package.json | 5 ++- scripts/builds/clients.sh | 57 +++++++++++++--------------- scripts/builds/specs.sh | 60 ++++++++++-------------------- scripts/ci/create-client-matrix.sh | 4 +- scripts/ci/create-spec-matrix.sh | 6 +-- scripts/formatter.sh | 53 ++++++++++++++++++++++++++ scripts/generate.sh | 28 ++++++++------ scripts/playground.sh | 10 ++--- scripts/post-gen/global.sh | 3 ++ scripts/post-gen/java.sh | 54 +++++---------------------- scripts/post-gen/javascript.sh | 28 -------------- scripts/pre-gen/java.sh | 3 ++ scripts/runCTS.sh | 11 ++++-- tests/package.json | 3 +- 15 files changed, 153 insertions(+), 174 deletions(-) create mode 100755 scripts/formatter.sh delete mode 100755 scripts/post-gen/javascript.sh diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index d35029ccfcd..8d731779d17 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -24,7 +24,7 @@ jobs: uses: ./.github/actions/setup - name: Lint GitHub actions - run: yarn eslint --ext=yml .github/actions .github/workflows + run: yarn github-actions:lint outputs: RUN_SPECS: ${{ steps.setup.outputs.RUN_SPECS }} diff --git a/package.json b/package.json index e3c882ec4c7..0376e77d7b3 100644 --- a/package.json +++ b/package.json @@ -22,8 +22,9 @@ "post:generate": "./scripts/post-gen/global.sh", "generate": "./scripts/multiplexer.sh ${2:-nonverbose} ./scripts/generate.sh ${0:-all} ${1:-all} && yarn post:generate ${0:-all}", "playground": "./scripts/multiplexer.sh ${2:-nonverbose} ./scripts/playground.sh ${0:-javascript} ${1:-search}", - "specs:format": "yarn prettier --write specs", - "specs:lint": "eslint --ext=yml specs/ .github/ && yarn openapi lint" + "specs:format": "eslint --ext=yml specs/ --fix", + "specs:lint": "eslint --ext=yml specs/$0", + "github-actions:lint": "eslint --ext=yml .github/" }, "devDependencies": { "@openapitools/openapi-generator-cli": "2.4.18", diff --git a/scripts/builds/clients.sh b/scripts/builds/clients.sh index 0b5cc3ffec8..e1cfb8a60e6 100755 --- a/scripts/builds/clients.sh +++ b/scripts/builds/clients.sh @@ -7,39 +7,34 @@ DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null && pwd)" # Move to the root (easier to locate other scripts) cd ${DIR}/../.. -lang=$1 -client=$2 -generator="$lang-$client" -package=$(cat openapitools.json | jq -r --arg generator "$generator" '."generator-cli".generators[$generator].additionalProperties.packageName') - -# Commands are based on the lang -build_client(){ - echo "> Building $generator..." - - if [[ $lang == 'javascript' ]]; then - yarn workspace $package build - elif [[ $lang == 'java' ]]; then - CMD="mvn install -f clients/$package/pom.xml" - if [[ $VERBOSE == "true" ]]; then - $CMD - else - set +e - log=$($CMD) - - if [[ $? != 0 ]]; then - echo "$log" - exit 1 - fi - set -e - fi - fi -} +LANGUAGE=$1 +CLIENT=$2 +GENERATOR="$LANGUAGE-$CLIENT" +PACKAGE=$(cat openapitools.json | jq -r --arg generator "$GENERATOR" '."generator-cli".generators[$generator].additionalProperties.packageName') +if [[ -z $PACKAGE ]]; then + echo "Unknown package ${PACKAGE}" + exit 1 +fi +# Commands are based on the LANGUAGE +echo "> Building $GENERATOR..." -if [[ -z $package ]]; then - echo "Unknown package ${package}" - exit 1 +if [[ $LANGUAGE == 'javascript' ]]; then + CMD="yarn workspace $PACKAGE build" +elif [[ $LANGUAGE == 'java' ]]; then + CMD="mvn install -f clients/$PACKAGE/pom.xml" fi -build_client +if [[ $VERBOSE == "true" ]]; then + $CMD +else + set +e + log=$($CMD) + + if [[ $? != 0 ]]; then + echo "$log" + exit 1 + fi + set -e +fi diff --git a/scripts/builds/specs.sh b/scripts/builds/specs.sh index 4067366d544..acb22996d06 100755 --- a/scripts/builds/specs.sh +++ b/scripts/builds/specs.sh @@ -9,58 +9,40 @@ fi # Break on non-zero code set -e -SPEC=$1 -OUTPUT=$2 - -SPECS=() -CLIENT="" - DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null && pwd)" # Move to the root (easier to locate other scripts) cd ${DIR}/../.. -find_specs() { - echo "> Searching for available specs..." - - SPECS=($(find specs/*/spec.yml)) - - echo "" -} +CLIENT=$1 +OUTPUT=$2 check_format_spec() { - local spec=$1 - - echo "> Checking format of input spec file ${spec}" - - yarn eslint --ext=yml ${spec} - + local client=$1 + echo "> Checking format of $client spec" + yarn specs:lint $client echo "" } build_spec() { - local spec=$1 - - yarn openapi bundle ${spec} -o specs/dist/${CLIENT}.${OUTPUT} --ext ${OUTPUT} - + local client=$1 + yarn openapi bundle specs/${client}/spec.yml -o specs/dist/${client}.${OUTPUT} --ext ${OUTPUT} echo "" } -validate_spec() { - local spec=$1 - - yarn openapi lint specs/dist/${CLIENT}.${OUTPUT} - +validate_output_spec() { + local client=$1 + yarn openapi lint specs/dist/${client}.${OUTPUT} echo "" } -find_specs +CLIENTS=$(find specs/*/spec.yml | awk -F / '{ print $(NF-1) }') -if [[ $SPEC == "all" ]]; then - SPECS=("${SPECS[@]}") -elif [[ ${SPECS[*]} =~ ${SPEC} ]]; then - SPECS=("specs/${SPEC}/spec.yml") +if [[ $CLIENT == "all" ]]; then + CLIENTS=("${CLIENTS[@]}") +elif [[ ${CLIENTS[*]} =~ ${CLIENT} ]]; then + CLIENTS=($CLIENT) else - echo "Unknown spec ${SPEC}" + echo "Unknown spec ${CLIENT}" exit 1 fi @@ -69,10 +51,8 @@ if [[ $OUTPUT != "yml" ]] && [[ $OUTPUT != "json" ]]; then exit 1 fi -for spec in "${SPECS[@]}"; do - CLIENT=$(echo $spec | awk -F / '{ print $(NF-1) }') - - check_format_spec $spec - build_spec $spec - validate_spec $spec +for client in "${CLIENTS[@]}"; do + check_format_spec $client + build_spec $client + validate_output_spec $client done diff --git a/scripts/ci/create-client-matrix.sh b/scripts/ci/create-client-matrix.sh index f369d23bf16..413bd2672de 100755 --- a/scripts/ci/create-client-matrix.sh +++ b/scripts/ci/create-client-matrix.sh @@ -4,7 +4,7 @@ LANGUAGE=$1 BASE_CHANGED=$2 BASE_BRANCH=$3 -clients=$(cat openapitools.json | jq --arg lang $LANGUAGE -c '."generator-cli".generators +CLIENTS=$(cat openapitools.json | jq --arg lang $LANGUAGE -c '."generator-cli".generators | with_entries( if (.key | test($lang + "-.*")) then ({key:.key,value:.value}) @@ -20,7 +20,7 @@ clients=$(cat openapitools.json | jq --arg lang $LANGUAGE -c '."generator-cli".g | .[]') to_test='{"client": []}' -for pair in $clients; do +for pair in $CLIENTS; do name=$(echo $pair | jq '.name') folder=$(echo $pair | jq '.folder') spec_changed=$(git diff --shortstat origin/$BASE_BRANCH..HEAD -- specs/$name | wc -l) diff --git a/scripts/ci/create-spec-matrix.sh b/scripts/ci/create-spec-matrix.sh index dad804c6ce3..92dac17b539 100755 --- a/scripts/ci/create-spec-matrix.sh +++ b/scripts/ci/create-spec-matrix.sh @@ -4,11 +4,11 @@ BASE_CHANGED=$1 BASE_BRANCH=$2 specs='{"client":[]}' -generators=( $(cat openapitools.json | jq '."generator-cli".generators' | jq -r 'keys[]') ) +GENERATORS=( $(cat openapitools.json | jq '."generator-cli".generators' | jq -r 'keys[]') ) -for generator in "${generators[@]}"; do +for generator in "${GENERATORS[@]}"; do client=${generator#*-} - if [[ ! ${specs[*]} =~ $client ]]; then + if [[ ! ${SPECS[*]} =~ $client ]]; then changed=$(git diff --shortstat origin/$BASE_BRANCH..HEAD -- specs/$client | wc -l) if [[ $BASE_CHANGED == "true" || $changed > 0 ]]; then specs=$(echo $specs | jq --arg client $client '.client |= .+ [$client]') diff --git a/scripts/formatter.sh b/scripts/formatter.sh new file mode 100755 index 00000000000..2f5eb596a38 --- /dev/null +++ b/scripts/formatter.sh @@ -0,0 +1,53 @@ +#!/bin/bash + +# Break on non-zero code +set -e + +DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null && pwd)" +# Move to the root (easier to locate other scripts) +cd ${DIR}/.. + +LANGUAGE=$1 +FOLDER=$2 + +if [[ $LANGUAGE == 'javascript' ]]; then + # jsdoc/require-hyphen-before-param-description fails to lint more than + # 6 parameters, we re-run the script if failed to lint the rest + CMD="yarn eslint --ext=ts ${FOLDER} --fix || yarn eslint --ext=ts ${FOLDER} --fix" +elif [[ $LANGUAGE == 'java' ]]; then + # Download the formatter if not present and run it + javaFormatter="google-java-format-1.13.0-all-deps.jar" + + if [[ ! -f "dist/$javaFormatter" ]]; then + echo "Downloading formatter dependency" + mkdir dist + curl -L "https://github.com/google/google-java-format/releases/download/v1.13.0/$javaFormatter" > dist/$javaFormatter + fi + + CMD="find $FOLDER -type f -name \"*.java\" | xargs java --add-exports jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED \ + --add-exports jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED \ + --add-exports jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED \ + --add-exports jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED \ + --add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED \ + -jar dist/$javaFormatter -r \ + && yarn prettier --write $FOLDER" +else + echo "Cannot format unknow language $LANGUAGE" + exit 1 +fi + +echo "> Formatting ${LANGUAGE} in ${FOLDER}..." + +if [[ $VERBOSE == "true" ]]; then + # CAREFUL WITH EVAL (not safe) + eval $CMD +else + set +e + log=$(eval $CMD) + + if [[ $? != 0 ]]; then + echo "$log" + exit 1 + fi + set -e +fi diff --git a/scripts/generate.sh b/scripts/generate.sh index 4194a4e2ee6..befdfc4e70c 100755 --- a/scripts/generate.sh +++ b/scripts/generate.sh @@ -7,28 +7,28 @@ DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null && pwd)" # Move to the root (easier to locate other scripts) cd ${DIR}/.. -lang=$1 -client=$2 -generator="$1-$2" +LANGUAGE=$1 +CLIENT=$2 +GENERATOR="$1-$2" # build spec before generating client build_spec() { - yarn build:specs $client + yarn build:specs $CLIENT } # Run the pre generation script if it exists. run_pre_gen() { - pregen="./scripts/pre-gen/${lang}.sh" + pregen="./scripts/pre-gen/${LANGUAGE}.sh" if [[ -f "$pregen" ]]; then - echo "> Running pre-gen script for $generator..." - $pregen $client + echo "> Running pre-gen script for $GENERATOR..." + $pregen $CLIENT fi } generate_client() { - echo "> Generating code for $generator..." - CMD="yarn openapi-generator-cli generate --generator-key $generator" + echo "> Generating code for $GENERATOR..." + CMD="yarn openapi-generator-cli generate --generator-key $GENERATOR" if [[ $VERBOSE == "true" ]]; then $CMD else @@ -45,12 +45,16 @@ generate_client() { # Run the post generation script if it exists. run_post_gen() { - postgen="./scripts/post-gen/${lang}.sh" + postgen="./scripts/post-gen/${LANGUAGE}.sh" + + folder=$(cat openapitools.json | jq -r --arg generator "$GENERATOR" '."generator-cli".generators[$generator].output' | sed 's/#{cwd}\///g') if [[ -f "$postgen" ]]; then - echo "> Running post-gen script for $generator..." - $postgen "$generator" + echo "> Running post-gen script for $GENERATOR..." + $postgen $folder $GENERATOR fi + + ./scripts/formatter.sh $LANGUAGE $folder } if [[ ! $CI ]]; then diff --git a/scripts/playground.sh b/scripts/playground.sh index faee821068e..de418f379c4 100755 --- a/scripts/playground.sh +++ b/scripts/playground.sh @@ -7,14 +7,14 @@ DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null && pwd)" # Move to the root (easier to locate other scripts) cd ${DIR}/.. -lang=$1 -client=$2 +LANGUAGE=$1 +CLIENT=$2 # Run the pre generation script if it exists. run_playground() { - if [[ $lang == 'javascript' ]]; then - yarn workspace javascript-playground start:$client - elif [[ $lang == 'java' ]]; then + if [[ $LANGUAGE == 'javascript' ]]; then + yarn workspace javascript-playground start:$CLIENT + elif [[ $LANGUAGE == 'java' ]]; then mvn clean compile exec:java -f playground/java/pom.xml fi } diff --git a/scripts/post-gen/global.sh b/scripts/post-gen/global.sh index e0663554a17..5696f10fffb 100755 --- a/scripts/post-gen/global.sh +++ b/scripts/post-gen/global.sh @@ -1,5 +1,8 @@ #!/bin/bash +# Break on non-zero code +set -e + LANGUAGE=$1 if [[ $CI ]]; then diff --git a/scripts/post-gen/java.sh b/scripts/post-gen/java.sh index 9cba61f1593..2f9b3f37d7b 100755 --- a/scripts/post-gen/java.sh +++ b/scripts/post-gen/java.sh @@ -1,7 +1,9 @@ #!/bin/bash -export GENERATOR=$1 -export CLIENT=$(cat openapitools.json | jq -r --arg generator "$GENERATOR" '."generator-cli".generators[$generator].output' | sed 's/#{cwd}\///g') +# Break on non-zero code +set -e + +FOLDER=$1 # Restore the oneOf spec mv ./specs/search/paths/search/search.yml.bak ./specs/search/paths/search/search.yml @@ -9,17 +11,17 @@ mv ./specs/search/paths/objects/deleteBy.yml.bak ./specs/search/paths/objects/de mv ./specs/search/paths/objects/partialUpdate.yml.bak ./specs/search/paths/objects/partialUpdate.yml # Replace {} (OpenAPI default) with new Object -find "$CLIENT" -type f -name "*.java" | xargs sed -i -e 's~= {}~= new Object()~g' +find "$FOLDER" -type f -name "*.java" | xargs sed -i -e 's~= {}~= new Object()~g' # Create a special class for the OneOf integer string (not complete yet, juste here for compilation) -echo "package com.algolia.model;public class OneOfintegerstring {}" > $CLIENT/algoliasearch-core/com/algolia/model/OneOfintegerstring.java -echo "package com.algolia.model;public class OneOfstringbuiltInOperation {}" > $CLIENT/algoliasearch-core/com/algolia/model/OneOfstringbuiltInOperation.java +echo "package com.algolia.model;public class OneOfintegerstring {}" > $FOLDER/algoliasearch-core/com/algolia/model/OneOfintegerstring.java +echo "package com.algolia.model;public class OneOfstringbuiltInOperation {}" > $FOLDER/algoliasearch-core/com/algolia/model/OneOfstringbuiltInOperation.java # Generate types for the EchoRequester, to be able to keep the correct response type on the API method. # Extract the normal response to extend it -responses=($(grep -o 'public .*ApiCallback<.*>' $CLIENT/algoliasearch-core/com/algolia/**/*Api.java | sed 's/public.*ApiCallback$//; s/ //; s/^Map' $FOLDER/algoliasearch-core/com/algolia/**/*Api.java | sed 's/public.*ApiCallback$//; s/ //; s/^Map $CLIENT/algoliasearch-core/com/algolia/utils/echo/EchoResponse.java - -format_client() { - echo "> Formatting $GENERATOR..." - - # Download the formatter if not present and run it - javaFormatter="google-java-format-1.13.0-all-deps.jar" - - if [[ ! -f "dist/$javaFormatter" ]]; then - echo "Downloading formatter dependency" - mkdir dist - curl -L "https://github.com/google/google-java-format/releases/download/v1.13.0/$javaFormatter" > dist/$javaFormatter - fi - - find $CLIENT -type f -name "*.java" | xargs java --add-exports jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED \ - --add-exports jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED \ - --add-exports jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED \ - --add-exports jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED \ - --add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED \ - -jar dist/$javaFormatter -r - - CMD="yarn prettier --write $CLIENT" - if [[ $VERBOSE == "true" ]]; then - $CMD - else - set +e - log=$($CMD) - - if [[ $? != 0 ]]; then - echo "$log" - exit 1 - fi - set -e - fi -} - -format_client +echo $mustacheData | yarn mustache - scripts/post-gen/javaEchoResponse.mustache > $FOLDER/algoliasearch-core/com/algolia/utils/echo/EchoResponse.java diff --git a/scripts/post-gen/javascript.sh b/scripts/post-gen/javascript.sh deleted file mode 100755 index c75a676ba97..00000000000 --- a/scripts/post-gen/javascript.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash - -export GENERATOR=$1 -export CLIENT=$(cat openapitools.json | jq -r --arg generator "$GENERATOR" '."generator-cli".generators[$generator].output' | sed 's/#{cwd}\///g') - -lint_client() { - echo "> Linting ${GENERATOR}..." - CMD="yarn eslint --ext=ts ${CLIENT} --fix" - if [[ $VERBOSE == "true" ]]; then - $CMD - else - set +e - log=$($CMD) - - if [[ $? != 0 ]]; then - # jsdoc/require-hyphen-before-param-description fails to lint more than - # 6 parameters, we re-run the script if failed to lint the rest - $CMD - - if [[ $? != 0 ]]; then - exit 1 - fi - fi - set -e - fi -} - -lint_client diff --git a/scripts/pre-gen/java.sh b/scripts/pre-gen/java.sh index 7eebd12f0ec..aed35431065 100755 --- a/scripts/pre-gen/java.sh +++ b/scripts/pre-gen/java.sh @@ -1,5 +1,8 @@ #!/bin/bash +# Break on non-zero code +set -e + # Remove the oneOf in the spec until it's supported (https://github.com/OpenAPITools/openapi-generator/issues/10880). # Remove the oneOf and only keep the last $ref diff --git a/scripts/runCTS.sh b/scripts/runCTS.sh index d94142f9f7a..0a5b5f9baca 100755 --- a/scripts/runCTS.sh +++ b/scripts/runCTS.sh @@ -7,14 +7,17 @@ DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null && pwd)" # Move to the root (easier to locate other scripts) cd ${DIR}/.. -lang=$1 +LANGUAGE=$1 # Run the pre generation script if it exists. run_cts() { - if [[ $lang == 'javascript' ]]; then + if [[ $LANGUAGE == 'javascript' ]]; then yarn workspace javascript-tests test - elif [[ $lang == 'java' ]]; then - mvn clean compile exec:java -f tests/output/java/pom.xml + elif [[ $LANGUAGE == 'java' ]]; then + mvn clean test -f tests/output/java/pom.xml + else + echo "Cannot run CTS on unknown language $LANGUAGE" + exit 1 fi } diff --git a/tests/package.json b/tests/package.json index bcc6b8dfe77..5c1ac8d9899 100644 --- a/tests/package.json +++ b/tests/package.json @@ -7,8 +7,7 @@ "scripts": { "build": "tsc", "generate:methods:requets": "node dist/tests/src/methods/requests/main.js ${0:-javascript} ${1:-search}", - "generate": "yarn generate:methods:requets ${0:-javascript} ${1:-search} && yarn lint:fix", - "lint:fix": "yarn workspace javascript-tests lint:fix", + "generate": "yarn generate:methods:requets ${0:-javascript} ${1:-search} && ../scripts/formatter.sh ${0:-javascript} tests/output/${0:-javascript}", "start": "yarn build && yarn generate ${0:-javascript} ${1:-search}" }, "devDependencies": { From ef1b04f60ba14a8e8a211dfad5144d49afe3be5f Mon Sep 17 00:00:00 2001 From: Pierre Millot Date: Fri, 21 Jan 2022 15:20:59 +0100 Subject: [PATCH 2/6] review --- Dockerfile | 5 ++++- package.json | 2 +- scripts/ci/create-spec-matrix.sh | 9 +++++---- scripts/formatter.sh | 11 +---------- scripts/post-gen/global.sh | 2 +- specs/sources/common/schemas/Task.yml | 2 +- 6 files changed, 13 insertions(+), 18 deletions(-) diff --git a/Dockerfile b/Dockerfile index 1e64e9e2cb6..d560b62c77d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,9 +4,12 @@ FROM node:$NODE_VERSION-alpine ENV DOCKER=true -RUN apk add openjdk11 maven jq bash perl curl +RUN apk add openjdk11 maven jq bash perl ENV JAVA_HOME=/usr/lib/jvm/default-jvm +# Java formatter +ADD https://github.com/google/google-java-format/releases/download/v1.13.0/google-java-format-1.13.0-all-deps.jar /tmp/ + WORKDIR /app CMD ["bash"] diff --git a/package.json b/package.json index 0376e77d7b3..13b1cb73b5e 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "post:generate": "./scripts/post-gen/global.sh", "generate": "./scripts/multiplexer.sh ${2:-nonverbose} ./scripts/generate.sh ${0:-all} ${1:-all} && yarn post:generate ${0:-all}", "playground": "./scripts/multiplexer.sh ${2:-nonverbose} ./scripts/playground.sh ${0:-javascript} ${1:-search}", - "specs:format": "eslint --ext=yml specs/ --fix", + "specs:fix": "eslint --ext=yml specs/ --fix", "specs:lint": "eslint --ext=yml specs/$0", "github-actions:lint": "eslint --ext=yml .github/" }, diff --git a/scripts/ci/create-spec-matrix.sh b/scripts/ci/create-spec-matrix.sh index 92dac17b539..5272f91c205 100755 --- a/scripts/ci/create-spec-matrix.sh +++ b/scripts/ci/create-spec-matrix.sh @@ -3,25 +3,26 @@ BASE_CHANGED=$1 BASE_BRANCH=$2 -specs='{"client":[]}' GENERATORS=( $(cat openapitools.json | jq '."generator-cli".generators' | jq -r 'keys[]') ) +SPECS=() +to_check='{"client":[]}' for generator in "${GENERATORS[@]}"; do client=${generator#*-} if [[ ! ${SPECS[*]} =~ $client ]]; then changed=$(git diff --shortstat origin/$BASE_BRANCH..HEAD -- specs/$client | wc -l) if [[ $BASE_CHANGED == "true" || $changed > 0 ]]; then - specs=$(echo $specs | jq --arg client $client '.client |= .+ [$client]') + to_check=$(echo $to_check | jq --arg client $client '.client |= .+ [$client]') fi fi done # Convert the array to json for the matrix -if [[ $(echo $specs | jq '.client | length') == 0 ]]; then +if [[ $(echo $to_check | jq '.client | length') == 0 ]]; then # client cannot be empty or the matrix will fail matrix='{"client":["no-run"]}' else - matrix=$(echo $specs | jq -c) + matrix=$(echo $to_check | jq -c) fi echo $matrix diff --git a/scripts/formatter.sh b/scripts/formatter.sh index 2f5eb596a38..7da2570c098 100755 --- a/scripts/formatter.sh +++ b/scripts/formatter.sh @@ -15,21 +15,12 @@ if [[ $LANGUAGE == 'javascript' ]]; then # 6 parameters, we re-run the script if failed to lint the rest CMD="yarn eslint --ext=ts ${FOLDER} --fix || yarn eslint --ext=ts ${FOLDER} --fix" elif [[ $LANGUAGE == 'java' ]]; then - # Download the formatter if not present and run it - javaFormatter="google-java-format-1.13.0-all-deps.jar" - - if [[ ! -f "dist/$javaFormatter" ]]; then - echo "Downloading formatter dependency" - mkdir dist - curl -L "https://github.com/google/google-java-format/releases/download/v1.13.0/$javaFormatter" > dist/$javaFormatter - fi - CMD="find $FOLDER -type f -name \"*.java\" | xargs java --add-exports jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED \ --add-exports jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED \ --add-exports jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED \ --add-exports jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED \ --add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED \ - -jar dist/$javaFormatter -r \ + -jar /tmp/google-java-format-1.13.0-all-deps.jar -r \ && yarn prettier --write $FOLDER" else echo "Cannot format unknow language $LANGUAGE" diff --git a/scripts/post-gen/global.sh b/scripts/post-gen/global.sh index 5696f10fffb..fb6002bcace 100755 --- a/scripts/post-gen/global.sh +++ b/scripts/post-gen/global.sh @@ -26,7 +26,7 @@ build_js_common() { format_specs() { echo "> Formatting specs..." - CMD="yarn specs:format" + CMD="yarn specs:fix" if [[ $VERBOSE == "true" ]]; then $CMD else diff --git a/specs/sources/common/schemas/Task.yml b/specs/sources/common/schemas/Task.yml index 28c3fdafe6d..91bd903998e 100644 --- a/specs/sources/common/schemas/Task.yml +++ b/specs/sources/common/schemas/Task.yml @@ -6,7 +6,7 @@ task: type: string description: The id of the task. format: uuid - example: 'e0f6db8a-24f5-4092-83a4-1b2c6cb6d809' + example: e0f6db8a-24f5-4092-83a4-1b2c6cb6d809 type: type: string description: The type of the task executed. From d5265973854ec3b5e385b93e61d869fa139336c4 Mon Sep 17 00:00:00 2001 From: Pierre Millot Date: Fri, 21 Jan 2022 15:28:28 +0100 Subject: [PATCH 3/6] split format command --- tests/package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/package.json b/tests/package.json index 5c1ac8d9899..bbd9e6aa5a2 100644 --- a/tests/package.json +++ b/tests/package.json @@ -7,7 +7,8 @@ "scripts": { "build": "tsc", "generate:methods:requets": "node dist/tests/src/methods/requests/main.js ${0:-javascript} ${1:-search}", - "generate": "yarn generate:methods:requets ${0:-javascript} ${1:-search} && ../scripts/formatter.sh ${0:-javascript} tests/output/${0:-javascript}", + "format": "../scripts/formatter.sh ${0:-javascript} tests/output/${0:-javascript}", + "generate": "yarn generate:methods:requets ${0:-javascript} ${1:-search} && yarn format ${0:-javascript}", "start": "yarn build && yarn generate ${0:-javascript} ${1:-search}" }, "devDependencies": { From b986a63bf55412951d2b9543e4d0f249e5d0cfa8 Mon Sep 17 00:00:00 2001 From: Pierre Millot Date: Fri, 21 Jan 2022 15:46:13 +0100 Subject: [PATCH 4/6] download formatter for CI too --- .github/actions/cache/action.yml | 5 +++++ Dockerfile | 2 +- scripts/formatter.sh | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/actions/cache/action.yml b/.github/actions/cache/action.yml index 11f0cae1481..c0f7fdf8def 100644 --- a/.github/actions/cache/action.yml +++ b/.github/actions/cache/action.yml @@ -123,3 +123,8 @@ runs: if: ${{ inputs.language == 'java' }} shell: bash run: mvn clean install -f clients/algoliasearch-client-java-2/pom.xml + + - name: Download Java formatter + if: ${{ inputs.language == 'java' }} + shell: bash + run: curl -L "https://github.com/google/google-java-format/releases/download/v1.13.0/google-java-format-1.13.0-all-deps.jar" > /tmp/java-formatter.jar diff --git a/Dockerfile b/Dockerfile index d560b62c77d..e2624523f4e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,7 +8,7 @@ RUN apk add openjdk11 maven jq bash perl ENV JAVA_HOME=/usr/lib/jvm/default-jvm # Java formatter -ADD https://github.com/google/google-java-format/releases/download/v1.13.0/google-java-format-1.13.0-all-deps.jar /tmp/ +ADD https://github.com/google/google-java-format/releases/download/v1.13.0/google-java-format-1.13.0-all-deps.jar /tmp/java-formatter.jar WORKDIR /app diff --git a/scripts/formatter.sh b/scripts/formatter.sh index 7da2570c098..3ffb323d432 100755 --- a/scripts/formatter.sh +++ b/scripts/formatter.sh @@ -20,7 +20,7 @@ elif [[ $LANGUAGE == 'java' ]]; then --add-exports jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED \ --add-exports jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED \ --add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED \ - -jar /tmp/google-java-format-1.13.0-all-deps.jar -r \ + -jar /tmp/java-formatter.jar -r \ && yarn prettier --write $FOLDER" else echo "Cannot format unknow language $LANGUAGE" From 54e8fb71d150340238e476febdfbddc582b90070 Mon Sep 17 00:00:00 2001 From: Pierre Millot Date: Fri, 21 Jan 2022 15:51:56 +0100 Subject: [PATCH 5/6] need for cts too --- .github/actions/cache/action.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/actions/cache/action.yml b/.github/actions/cache/action.yml index c0f7fdf8def..35832800a41 100644 --- a/.github/actions/cache/action.yml +++ b/.github/actions/cache/action.yml @@ -125,6 +125,6 @@ runs: run: mvn clean install -f clients/algoliasearch-client-java-2/pom.xml - name: Download Java formatter - if: ${{ inputs.language == 'java' }} + if: ${{ inputs.language == 'java' || inputs.job == 'cts' }} shell: bash run: curl -L "https://github.com/google/google-java-format/releases/download/v1.13.0/google-java-format-1.13.0-all-deps.jar" > /tmp/java-formatter.jar From 997c9b5b51f787f6567d6c73905541ed04abbfac Mon Sep 17 00:00:00 2001 From: Pierre Millot Date: Mon, 24 Jan 2022 11:32:52 +0100 Subject: [PATCH 6/6] README --- README.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/README.md b/README.md index ba399604f60..eb0a0ccc467 100644 --- a/README.md +++ b/README.md @@ -66,6 +66,19 @@ yarn docker build:specs yarn docker build:specs recommend ``` +#### Fix the specs format + +This is used by the build script and should not need to be called manually but if you want to format all specs file do: +```bash +yarn docker specs:fix +``` + +If you just want to check the format (not override the files), run: +```bash +yarn docker specs:lint +yarn docker specs:lint search +``` + ### Generate clients based on the [`specs`](./specs/) #### Usage