From 045b8a1235ec907b182912c422a990d94279da3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Vannicatte?= Date: Thu, 31 Mar 2022 16:22:16 +0200 Subject: [PATCH 1/5] feat(script): convert matrix scripts --- .github/actions/cache/action.yml | 95 ++++++++++++++++++++++++++++-- .github/actions/setup/action.yml | 8 +-- .github/workflows/check.yml | 7 ++- scripts/ci/create-client-matrix.sh | 41 ------------- scripts/ci/create-spec-matrix.sh | 29 --------- scripts/ci/createClientMatrix.ts | 79 +++++++++++++++++++++++++ scripts/ci/createSpecMatrix.ts | 45 ++++++++++++++ scripts/ci/types.ts | 16 +++++ scripts/package.json | 2 + 9 files changed, 242 insertions(+), 80 deletions(-) delete mode 100755 scripts/ci/create-client-matrix.sh delete mode 100755 scripts/ci/create-spec-matrix.sh create mode 100644 scripts/ci/createClientMatrix.ts create mode 100644 scripts/ci/createSpecMatrix.ts create mode 100644 scripts/ci/types.ts diff --git a/.github/actions/cache/action.yml b/.github/actions/cache/action.yml index 8d96b26a4a..1b24bbc610 100644 --- a/.github/actions/cache/action.yml +++ b/.github/actions/cache/action.yml @@ -339,7 +339,7 @@ runs: )}} # Restore Java clients: used during 'cts' or 'codegen' - - name: Restore built Java client + - name: Restore built Java search client if: ${{ inputs.job == 'cts' || inputs.job == 'codegen' }} uses: actions/cache@v2 with: @@ -347,13 +347,14 @@ runs: key: | ${{ env.CACHE_VERSION }}-${{ hashFiles( - 'clients/algoliasearch-client-java-2/**', + 'clients/algoliasearch-client-java-2/search/**', + 'clients/algoliasearch-client-java-2/model/search/**', 'templates/java/**', 'specs/bundled/search.yml' )}} # Restore PHP clients: used during 'cts' or 'codegen' - - name: Restore built PHP client + - name: Restore built PHP search client if: ${{ inputs.job == 'cts' || inputs.job == 'codegen' }} uses: actions/cache@v2 with: @@ -361,10 +362,96 @@ runs: key: | ${{ env.CACHE_VERSION }}-${{ hashFiles( - 'clients/algoliasearch-client-php/*', + 'clients/algoliasearch-client-php/lib/Api/SearchApi.php', + 'clients/algoliasearch-client-php/lib/Configuration/SearchConfig.php', + 'templates/php/**', 'specs/bundled/search.yml' )}} + - name: Restore built PHP recommend client + if: ${{ inputs.job == 'cts' || inputs.job == 'codegen' }} + uses: actions/cache@v2 + with: + path: clients/algoliasearch-client-php + key: | + ${{ env.CACHE_VERSION }}-${{ + hashFiles( + 'clients/algoliasearch-client-php/lib/Api/RecommendApi.php', + 'clients/algoliasearch-client-php/lib/Configuration/RecommendConfig.php', + 'templates/php/**', + 'specs/bundled/recommend.yml' + )}} + + - name: Restore built PHP personalization client + if: ${{ inputs.job == 'cts' || inputs.job == 'codegen' }} + uses: actions/cache@v2 + with: + path: clients/algoliasearch-client-php + key: | + ${{ env.CACHE_VERSION }}-${{ + hashFiles( + 'clients/algoliasearch-client-php/lib/Api/PersonalizationApi.php', + 'clients/algoliasearch-client-php/lib/Configuration/PersonalizationConfig.php', + 'templates/php/**', + 'specs/bundled/personalization.yml' + )}} + + - name: Restore built PHP analytics client + if: ${{ inputs.job == 'cts' || inputs.job == 'codegen' }} + uses: actions/cache@v2 + with: + path: clients/algoliasearch-client-php + key: | + ${{ env.CACHE_VERSION }}-${{ + hashFiles( + 'clients/algoliasearch-client-php/lib/Api/AnalyticsApi.php', + 'clients/algoliasearch-client-php/lib/Configuration/AnalyticsConfig.php', + 'templates/php/**', + 'specs/bundled/analytics.yml' + )}} + + - name: Restore built PHP insights client + if: ${{ inputs.job == 'cts' || inputs.job == 'codegen' }} + uses: actions/cache@v2 + with: + path: clients/algoliasearch-client-php + key: | + ${{ env.CACHE_VERSION }}-${{ + hashFiles( + 'clients/algoliasearch-client-php/lib/Api/InsightsApi.php', + 'clients/algoliasearch-client-php/lib/Configuration/InsightsConfig.php', + 'templates/php/**', + 'specs/bundled/insights.yml' + )}} + + - name: Restore built PHP abtesting client + if: ${{ inputs.job == 'cts' || inputs.job == 'codegen' }} + uses: actions/cache@v2 + with: + path: clients/algoliasearch-client-php + key: | + ${{ env.CACHE_VERSION }}-${{ + hashFiles( + 'clients/algoliasearch-client-php/lib/Api/AbTestingApi.php', + 'clients/algoliasearch-client-php/lib/Configuration/AbTestingConfig.php', + 'templates/php/**', + 'specs/bundled/abtesting.yml' + )}} + + - name: Restore built PHP query-suggestions client + if: ${{ inputs.job == 'cts' || inputs.job == 'codegen' }} + uses: actions/cache@v2 + with: + path: clients/algoliasearch-client-php + key: | + ${{ env.CACHE_VERSION }}-${{ + hashFiles( + 'clients/algoliasearch-client-php/lib/Api/QuerySuggestionsApi.php', + 'clients/algoliasearch-client-php/lib/Configuration/QuerySuggestionsConfig.php', + 'templates/php/**', + 'specs/bundled/query-suggestions.yml' + )}} + - name: Install JavaScript dependencies shell: bash run: YARN_ENABLE_IMMUTABLE_INSTALLS=false yarn install diff --git a/.github/actions/setup/action.yml b/.github/actions/setup/action.yml index d1a31fa0ef..7ff41aedd1 100644 --- a/.github/actions/setup/action.yml +++ b/.github/actions/setup/action.yml @@ -78,7 +78,7 @@ runs: run: | base_changed=${{ steps.diff.outputs.GITHUB_ACTIONS_CHANGED > 0 || steps.diff.outputs.SCRIPTS_CHANGED > 0 || steps.diff.outputs.COMMON_SPECS_CHANGED > 0 }} - matrix=$(./scripts/ci/create-spec-matrix.sh $base_changed ${{ steps.diff.outputs.ORIGIN_BRANCH }}) + matrix=$(yarn workspace scripts createSpecMatrix $base_changed ${{ steps.diff.outputs.ORIGIN_BRANCH }}) if [[ $matrix == '{"client":["no-run"]}' ]]; then run="false" @@ -101,7 +101,7 @@ runs: algoliasearch_changed=${{ steps.diff.outputs.JS_ALGOLIASEARCH_CHANGED > 0 }} common_changed=${{ steps.diff.outputs.JS_COMMON_CHANGED > 0 }} - matrix=$(./scripts/ci/create-client-matrix.sh javascript $base_changed ${{ steps.diff.outputs.ORIGIN_BRANCH }}) + matrix=$(yarn workspace scripts createClientMatrix javascript $base_changed ${{ steps.diff.outputs.ORIGIN_BRANCH }}) if [[ $algoliasearch_changed == 'true' || $base_changed == 'true' ]]; then echo "Running algoliasearch: true" @@ -132,7 +132,7 @@ runs: run: | base_changed=${{ steps.diff.outputs.GITHUB_ACTIONS_CHANGED > 0 || steps.diff.outputs.COMMON_SPECS_CHANGED > 0 || steps.diff.outputs.SCRIPTS_CHANGED > 0 || steps.diff.outputs.GENERATORS_CHANGED > 0 || steps.diff.outputs.JAVA_TEMPLATE_CHANGED > 0 }} - matrix=$(./scripts/ci/create-client-matrix.sh java $base_changed ${{ steps.diff.outputs.ORIGIN_BRANCH }}) + matrix=$(yarn workspace scripts createClientMatrix java $base_changed ${{ steps.diff.outputs.ORIGIN_BRANCH }}) if [[ $matrix == '{"client":["no-run"]}' ]]; then run="false" @@ -153,7 +153,7 @@ runs: run: | base_changed=${{ steps.diff.outputs.GITHUB_ACTIONS_CHANGED > 0 || steps.diff.outputs.COMMON_SPECS_CHANGED > 0 || steps.diff.outputs.SCRIPTS_CHANGED > 0 || steps.diff.outputs.GENERATORS_CHANGED > 0 || steps.diff.outputs.PHP_TEMPLATE_CHANGED > 0 }} - matrix=$(./scripts/ci/create-client-matrix.sh php $base_changed ${{ steps.diff.outputs.ORIGIN_BRANCH }}) + matrix=$(yarn workspace scripts createClientMatrix php $base_changed ${{ steps.diff.outputs.ORIGIN_BRANCH }}) if [[ $matrix == '{"client":["no-run"]}' ]]; then run="false" diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index df70ae2ec8..ca3392156c 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -245,7 +245,8 @@ jobs: key: | ${{ env.CACHE_VERSION }}-${{ hashFiles( - format('{0}/**', matrix.client.folder), + format('{0}/{1}/**', matrix.client.folder, matrix.client.name), + format('{0}/model/{1}/**', matrix.client.folder, matrix.client.name), 'templates/java/**', format('specs/bundled/{0}.yml', matrix.client.name) )}} @@ -288,7 +289,9 @@ jobs: key: | ${{ env.CACHE_VERSION }}-${{ hashFiles( - format('{0}/**', matrix.client.folder), + format('{0}/lib/Api/{1}.php', matrix.client.folder, matrix.client.api), + format('{0}/lib/Configuration/{1}.php', matrix.client.folder, matrix.client.config), + 'templates/php/**', format('specs/bundled/{0}.yml', matrix.client.name) )}} diff --git a/scripts/ci/create-client-matrix.sh b/scripts/ci/create-client-matrix.sh deleted file mode 100755 index 67a9319d17..0000000000 --- a/scripts/ci/create-client-matrix.sh +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/bash - -LANGUAGE=$1 -BASE_CHANGED=$2 -BASE_BRANCH=$3 - -CLIENTS=$(cat openapitools.json | jq --arg lang $LANGUAGE -c '."generator-cli".generators - | with_entries( - if (.key | test($lang + "-.*")) then - ({key:.key,value:.value}) - else - empty - end - ) - | to_entries - | map({ - name:.key | sub($lang + "-";""), - folder:.value.output | sub("#{cwd}/";"") - }) - | .[]') - -to_test='{"client": []}' -for pair in $CLIENTS; do - name=$(echo $pair | jq -r '.name') - folder=$(echo $pair | jq -r '.folder') - spec_changed=$(git diff --shortstat $BASE_BRANCH..HEAD -- specs/$name | wc -l | tr -d ' ') - client_changed=$(git diff --stat $BASE_BRANCH..HEAD -- $folder | wc -l | tr -d ' ') - if [[ $BASE_CHANGED == "true" || $spec_changed != "0" || $client_changed != "0" ]]; then - to_test=$(echo $to_test | jq --argjson pair $pair '.client |= .+ [$pair]') - fi -done - -# Convert the array to json for the matrix -if [[ $(echo $to_test | jq '.client | length') == 0 ]]; then - # client cannot be empty or the matrix will fail - matrix='{"client":["no-run"]}' -else - matrix=$(echo $to_test | jq -c) -fi - -echo $matrix diff --git a/scripts/ci/create-spec-matrix.sh b/scripts/ci/create-spec-matrix.sh deleted file mode 100755 index 96e46f1e1e..0000000000 --- a/scripts/ci/create-spec-matrix.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/bash - -BASE_CHANGED=$1 -BASE_BRANCH=$2 - -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 $BASE_BRANCH..HEAD -- specs/$client | wc -l) - SPECS+=($client) - if [[ $BASE_CHANGED == "true" || $changed > 0 ]]; then - to_check=$(echo $to_check | jq --arg client $client '.client |= .+ [$client]') - fi - fi -done - -# Convert the array to json for the matrix -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 $to_check | jq -c) -fi - -echo $matrix diff --git a/scripts/ci/createClientMatrix.ts b/scripts/ci/createClientMatrix.ts new file mode 100644 index 0000000000..488ebe087b --- /dev/null +++ b/scripts/ci/createClientMatrix.ts @@ -0,0 +1,79 @@ +/* eslint-disable no-console */ +import { GENERATORS, run } from '../common'; +import type { Language } from '../types'; + +import type { BaseCreateMatrix, Client, Matrix } from './types'; + +type CreateClientMatrix = BaseCreateMatrix & { + language: Language; +}; + +export async function createClientMatrix({ + language, + baseChanged, + baseBranch, +}: CreateClientMatrix): Promise { + const matrix: Matrix = { client: [] }; + + for (const [generatorKey, generatorOptions] of Object.entries(GENERATORS)) { + if ( + generatorKey.startsWith(`${language}-`) === false || + // `algoliasearch` is an aggregation of clients + generatorOptions.client === 'algoliasearch' + ) { + continue; + } + + const folder = generatorOptions.output.replace('#{cwd}', ''); + const specChanges = await run( + `git diff --shortstat ${baseBranch}..HEAD -- specs/${generatorOptions.client} | wc -l | tr -d ' '` + ); + const clientChanges = await run( + `git diff --shortstat ${baseBranch}..HEAD -- ${folder} | wc -l | tr -d ' '` + ); + + if (clientChanges === '0' && specChanges === '0' && baseChanged === false) { + continue; + } + + const matchedGenerator: Client = { + name: generatorOptions.client, + folder, + }; + + if (language === 'php') { + matchedGenerator.config = + generatorOptions.additionalProperties.configClassname; + matchedGenerator.api = + generatorOptions.additionalProperties.configClassname.replace( + 'Config', + 'Api' + ); + } + + matrix.client.push(matchedGenerator); + } + + // client cannot be empty or the matrix will fail + console.log( + matrix.client.length === 0 + ? '{"client":["no-run"]}' + : JSON.stringify(matrix) + ); +} + +const args = process.argv.slice(2); + +if (require.main === module) { + if (args.length !== 3) { + throw new Error( + 'Incorrect number of parameters. Usage: `yarn workspace scripts createClientMatrix LANGUAGE BASE_CHANGED BASE_BRANCH`' + ); + } + + createClientMatrix({ + language: args[0] as Language, + baseChanged: args[1] === 'true', + baseBranch: args[2], + }); +} diff --git a/scripts/ci/createSpecMatrix.ts b/scripts/ci/createSpecMatrix.ts new file mode 100644 index 0000000000..e785901e69 --- /dev/null +++ b/scripts/ci/createSpecMatrix.ts @@ -0,0 +1,45 @@ +/* eslint-disable no-console */ +import { CLIENTS, run } from '../common'; + +import type { BaseCreateMatrix, Matrix } from './types'; + +export async function createSpecMatrix({ + baseChanged, + baseBranch, +}: BaseCreateMatrix): Promise { + const matrix: Matrix = { client: [] }; + + for (const client of CLIENTS) { + const specChanges = await run( + `git diff --shortstat ${baseBranch}..HEAD -- specs/${client} | wc -l | tr -d ' '` + ); + + if (specChanges === '0' && baseChanged === false) { + continue; + } + + matrix.client.push(client); + } + + // client cannot be empty or the matrix will fail + console.log( + matrix.client.length === 0 + ? '{"client":["no-run"]}' + : JSON.stringify(matrix) + ); +} + +const args = process.argv.slice(2); + +if (require.main === module) { + if (args.length !== 2) { + throw new Error( + 'Incorrect number of parameters. Usage: `yarn workspace scripts createClientMatrix LANGUAGE BASE_CHANGED BASE_BRANCH`' + ); + } + + createSpecMatrix({ + baseChanged: args[0] === 'true', + baseBranch: args[1], + }); +} diff --git a/scripts/ci/types.ts b/scripts/ci/types.ts new file mode 100644 index 0000000000..5ec4af1ff7 --- /dev/null +++ b/scripts/ci/types.ts @@ -0,0 +1,16 @@ +export type BaseCreateMatrix = { + baseChanged: boolean; + baseBranch: string; +}; + +export type Client = { + name: string; + folder: string; + config?: string; + api?: string; + capitalizedApi?: string; +}; + +export type Matrix = { + client: TMatrix[]; +}; diff --git a/scripts/package.json b/scripts/package.json index 37a56637e4..d40f39dc1c 100644 --- a/scripts/package.json +++ b/scripts/package.json @@ -2,6 +2,8 @@ "name": "scripts", "version": "1.0.0", "scripts": { + "createClientMatrix": "ts-node ci/createClientMatrix.ts", + "createSpecMatrix": "ts-node ci/createSpecMatrix.ts", "createReleaseIssue": "ts-node release/create-release-issue.ts", "processRelease": "ts-node release/process-release.ts", "pushGeneratedCode": "ts-node ci/codegen/pushGeneratedCode.ts", From 5aeae9b0d77b30b98ca2d673089488926755649f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Vannicatte?= Date: Thu, 31 Mar 2022 17:11:55 +0200 Subject: [PATCH 2/5] maybe less duplication --- .github/actions/setup/action.yml | 8 +- scripts/ci/createClientMatrix.ts | 79 ------------------- scripts/ci/createMatrix.ts | 129 +++++++++++++++++++++++++++++++ scripts/ci/createSpecMatrix.ts | 45 ----------- scripts/ci/types.ts | 16 ---- scripts/package.json | 3 +- 6 files changed, 134 insertions(+), 146 deletions(-) delete mode 100644 scripts/ci/createClientMatrix.ts create mode 100644 scripts/ci/createMatrix.ts delete mode 100644 scripts/ci/createSpecMatrix.ts delete mode 100644 scripts/ci/types.ts diff --git a/.github/actions/setup/action.yml b/.github/actions/setup/action.yml index 7ff41aedd1..a713702b04 100644 --- a/.github/actions/setup/action.yml +++ b/.github/actions/setup/action.yml @@ -78,7 +78,7 @@ runs: run: | base_changed=${{ steps.diff.outputs.GITHUB_ACTIONS_CHANGED > 0 || steps.diff.outputs.SCRIPTS_CHANGED > 0 || steps.diff.outputs.COMMON_SPECS_CHANGED > 0 }} - matrix=$(yarn workspace scripts createSpecMatrix $base_changed ${{ steps.diff.outputs.ORIGIN_BRANCH }}) + matrix=$(yarn workspace scripts createMatrix spec $base_changed ${{ steps.diff.outputs.ORIGIN_BRANCH }}) if [[ $matrix == '{"client":["no-run"]}' ]]; then run="false" @@ -101,7 +101,7 @@ runs: algoliasearch_changed=${{ steps.diff.outputs.JS_ALGOLIASEARCH_CHANGED > 0 }} common_changed=${{ steps.diff.outputs.JS_COMMON_CHANGED > 0 }} - matrix=$(yarn workspace scripts createClientMatrix javascript $base_changed ${{ steps.diff.outputs.ORIGIN_BRANCH }}) + matrix=$(yarn workspace scripts createMatrix client javascript $base_changed ${{ steps.diff.outputs.ORIGIN_BRANCH }}) if [[ $algoliasearch_changed == 'true' || $base_changed == 'true' ]]; then echo "Running algoliasearch: true" @@ -132,7 +132,7 @@ runs: run: | base_changed=${{ steps.diff.outputs.GITHUB_ACTIONS_CHANGED > 0 || steps.diff.outputs.COMMON_SPECS_CHANGED > 0 || steps.diff.outputs.SCRIPTS_CHANGED > 0 || steps.diff.outputs.GENERATORS_CHANGED > 0 || steps.diff.outputs.JAVA_TEMPLATE_CHANGED > 0 }} - matrix=$(yarn workspace scripts createClientMatrix java $base_changed ${{ steps.diff.outputs.ORIGIN_BRANCH }}) + matrix=$(yarn workspace scripts createMatrix client java $base_changed ${{ steps.diff.outputs.ORIGIN_BRANCH }}) if [[ $matrix == '{"client":["no-run"]}' ]]; then run="false" @@ -153,7 +153,7 @@ runs: run: | base_changed=${{ steps.diff.outputs.GITHUB_ACTIONS_CHANGED > 0 || steps.diff.outputs.COMMON_SPECS_CHANGED > 0 || steps.diff.outputs.SCRIPTS_CHANGED > 0 || steps.diff.outputs.GENERATORS_CHANGED > 0 || steps.diff.outputs.PHP_TEMPLATE_CHANGED > 0 }} - matrix=$(yarn workspace scripts createClientMatrix php $base_changed ${{ steps.diff.outputs.ORIGIN_BRANCH }}) + matrix=$(yarn workspace scripts createMatrix client php $base_changed ${{ steps.diff.outputs.ORIGIN_BRANCH }}) if [[ $matrix == '{"client":["no-run"]}' ]]; then run="false" diff --git a/scripts/ci/createClientMatrix.ts b/scripts/ci/createClientMatrix.ts deleted file mode 100644 index 488ebe087b..0000000000 --- a/scripts/ci/createClientMatrix.ts +++ /dev/null @@ -1,79 +0,0 @@ -/* eslint-disable no-console */ -import { GENERATORS, run } from '../common'; -import type { Language } from '../types'; - -import type { BaseCreateMatrix, Client, Matrix } from './types'; - -type CreateClientMatrix = BaseCreateMatrix & { - language: Language; -}; - -export async function createClientMatrix({ - language, - baseChanged, - baseBranch, -}: CreateClientMatrix): Promise { - const matrix: Matrix = { client: [] }; - - for (const [generatorKey, generatorOptions] of Object.entries(GENERATORS)) { - if ( - generatorKey.startsWith(`${language}-`) === false || - // `algoliasearch` is an aggregation of clients - generatorOptions.client === 'algoliasearch' - ) { - continue; - } - - const folder = generatorOptions.output.replace('#{cwd}', ''); - const specChanges = await run( - `git diff --shortstat ${baseBranch}..HEAD -- specs/${generatorOptions.client} | wc -l | tr -d ' '` - ); - const clientChanges = await run( - `git diff --shortstat ${baseBranch}..HEAD -- ${folder} | wc -l | tr -d ' '` - ); - - if (clientChanges === '0' && specChanges === '0' && baseChanged === false) { - continue; - } - - const matchedGenerator: Client = { - name: generatorOptions.client, - folder, - }; - - if (language === 'php') { - matchedGenerator.config = - generatorOptions.additionalProperties.configClassname; - matchedGenerator.api = - generatorOptions.additionalProperties.configClassname.replace( - 'Config', - 'Api' - ); - } - - matrix.client.push(matchedGenerator); - } - - // client cannot be empty or the matrix will fail - console.log( - matrix.client.length === 0 - ? '{"client":["no-run"]}' - : JSON.stringify(matrix) - ); -} - -const args = process.argv.slice(2); - -if (require.main === module) { - if (args.length !== 3) { - throw new Error( - 'Incorrect number of parameters. Usage: `yarn workspace scripts createClientMatrix LANGUAGE BASE_CHANGED BASE_BRANCH`' - ); - } - - createClientMatrix({ - language: args[0] as Language, - baseChanged: args[1] === 'true', - baseBranch: args[2], - }); -} diff --git a/scripts/ci/createMatrix.ts b/scripts/ci/createMatrix.ts new file mode 100644 index 0000000000..598d9c24a0 --- /dev/null +++ b/scripts/ci/createMatrix.ts @@ -0,0 +1,129 @@ +import { CLIENTS, GENERATORS, run } from '../common'; +import type { Language } from '../types'; + +type CreateMatrix = { + language?: Language; + baseChanged: boolean; + baseBranch: string; +}; + +type Client = { + name: string; + folder: string; + config?: string; + api?: string; +}; + +type Matrix = { + client: TMatrix[]; +}; + +async function getClientMatrix({ + language, + baseBranch, + baseChanged, +}: CreateMatrix): Promise> { + const matrix: Matrix = { client: [] }; + + for (const [generatorKey, generatorOptions] of Object.entries(GENERATORS)) { + if ( + generatorKey.startsWith(`${language}-`) === false || + // `algoliasearch` is an aggregation of clients + generatorOptions.client === 'algoliasearch' + ) { + continue; + } + + const folder = generatorOptions.output.replace('#{cwd}', ''); + const specChanges = await run( + `git diff --shortstat ${baseBranch}..HEAD -- specs/${generatorOptions.client} | wc -l | tr -d ' '` + ); + const clientChanges = await run( + `git diff --shortstat ${baseBranch}..HEAD -- ${folder} | wc -l | tr -d ' '` + ); + + if (clientChanges === '0' && specChanges === '0' && baseChanged === false) { + continue; + } + + const matchedGenerator: Client = { + name: generatorOptions.client, + folder, + }; + + // Extra informations for the PHP matrix in order to properly scope the + // GitHub action cache + if (language === 'php') { + matchedGenerator.config = + generatorOptions.additionalProperties.configClassname; + matchedGenerator.api = + generatorOptions.additionalProperties.configClassname.replace( + 'Config', + 'Api' + ); + } + + matrix.client.push(matchedGenerator); + } + + return matrix; +} + +async function getSpecMatrix({ + baseBranch, + baseChanged, +}: CreateMatrix): Promise> { + const matrix: Matrix = { client: [] }; + + for (const client of CLIENTS) { + const specChanges = await run( + `git diff --shortstat ${baseBranch}..HEAD -- specs/${client} | wc -l | tr -d ' '` + ); + + if (specChanges === '0' && baseChanged === false) { + continue; + } + + matrix.client.push(client); + } + + return matrix; +} + +export async function createMatrix( + job: 'client' | 'spec', + opts: CreateMatrix +): Promise { + const matrix = + job === 'spec' ? await getSpecMatrix(opts) : await getClientMatrix(opts); + + // eslint-disable-next-line no-console + console.log( + // client cannot be empty or the matrix will fail + matrix.client.length === 0 + ? '{"client":["no-run"]}' + : JSON.stringify(matrix) + ); +} + +const [job, ...args] = process.argv.slice(2); + +if (require.main === module) { + switch (job) { + case 'spec': + createMatrix(job, { + baseChanged: args[0] === 'true', + baseBranch: args[1], + }); + break; + case 'client': + createMatrix(job, { + language: args[0] as Language, + baseChanged: args[1] === 'true', + baseBranch: args[2], + }); + break; + default: + throw new Error(`Unknown job: ${job}`); + } +} diff --git a/scripts/ci/createSpecMatrix.ts b/scripts/ci/createSpecMatrix.ts deleted file mode 100644 index e785901e69..0000000000 --- a/scripts/ci/createSpecMatrix.ts +++ /dev/null @@ -1,45 +0,0 @@ -/* eslint-disable no-console */ -import { CLIENTS, run } from '../common'; - -import type { BaseCreateMatrix, Matrix } from './types'; - -export async function createSpecMatrix({ - baseChanged, - baseBranch, -}: BaseCreateMatrix): Promise { - const matrix: Matrix = { client: [] }; - - for (const client of CLIENTS) { - const specChanges = await run( - `git diff --shortstat ${baseBranch}..HEAD -- specs/${client} | wc -l | tr -d ' '` - ); - - if (specChanges === '0' && baseChanged === false) { - continue; - } - - matrix.client.push(client); - } - - // client cannot be empty or the matrix will fail - console.log( - matrix.client.length === 0 - ? '{"client":["no-run"]}' - : JSON.stringify(matrix) - ); -} - -const args = process.argv.slice(2); - -if (require.main === module) { - if (args.length !== 2) { - throw new Error( - 'Incorrect number of parameters. Usage: `yarn workspace scripts createClientMatrix LANGUAGE BASE_CHANGED BASE_BRANCH`' - ); - } - - createSpecMatrix({ - baseChanged: args[0] === 'true', - baseBranch: args[1], - }); -} diff --git a/scripts/ci/types.ts b/scripts/ci/types.ts deleted file mode 100644 index 5ec4af1ff7..0000000000 --- a/scripts/ci/types.ts +++ /dev/null @@ -1,16 +0,0 @@ -export type BaseCreateMatrix = { - baseChanged: boolean; - baseBranch: string; -}; - -export type Client = { - name: string; - folder: string; - config?: string; - api?: string; - capitalizedApi?: string; -}; - -export type Matrix = { - client: TMatrix[]; -}; diff --git a/scripts/package.json b/scripts/package.json index d40f39dc1c..5c9f98f3ba 100644 --- a/scripts/package.json +++ b/scripts/package.json @@ -2,8 +2,7 @@ "name": "scripts", "version": "1.0.0", "scripts": { - "createClientMatrix": "ts-node ci/createClientMatrix.ts", - "createSpecMatrix": "ts-node ci/createSpecMatrix.ts", + "createMatrix": "ts-node ci/createMatrix.ts", "createReleaseIssue": "ts-node release/create-release-issue.ts", "processRelease": "ts-node release/process-release.ts", "pushGeneratedCode": "ts-node ci/codegen/pushGeneratedCode.ts", From f6e794d6891ba62e2c8406d46d30436bada53d62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Vannicatte?= Date: Mon, 4 Apr 2022 10:17:24 +0200 Subject: [PATCH 3/5] apply changes from suggestion --- .github/actions/cache/action.yml | 71 ++++++++++++++++++++-------- .github/workflows/check.yml | 15 ++++-- scripts/ci/createMatrix.ts | 80 ++++++++++++++++++-------------- 3 files changed, 106 insertions(+), 60 deletions(-) diff --git a/.github/actions/cache/action.yml b/.github/actions/cache/action.yml index 1b24bbc610..cfcb03dff0 100644 --- a/.github/actions/cache/action.yml +++ b/.github/actions/cache/action.yml @@ -190,8 +190,7 @@ runs: 'clients/algoliasearch-client-javascript/packages/algoliasearch/**', 'clients/algoliasearch-client-javascript/packages/client-search/**', 'clients/algoliasearch-client-javascript/packages/client-analytics/**', - 'clients/algoliasearch-client-javascript/packages/client-personalization/**', - 'templates/javascript/**' + 'clients/algoliasearch-client-javascript/packages/client-personalization/**' )}} - name: Restore built JavaScript search client @@ -207,7 +206,9 @@ runs: 'clients/algoliasearch-client-javascript/packages/client-search/builds/**', 'clients/algoliasearch-client-javascript/packages/client-search/package.json', 'specs/bundled/search.yml', - 'templates/javascript/**' + 'templates/javascript/**', + 'generators/src/**', + 'scripts/**' )}} - name: Restore built JavaScript recommend client @@ -223,7 +224,9 @@ runs: 'clients/algoliasearch-client-javascript/packages/recommend/builds/**', 'clients/algoliasearch-client-javascript/packages/recommend/package.json', 'specs/bundled/recommend.yml', - 'templates/javascript/**' + 'templates/javascript/**', + 'generators/src/**', + 'scripts/**' )}} - name: Restore built JavaScript query-suggestions client @@ -239,7 +242,9 @@ runs: 'clients/algoliasearch-client-javascript/packages/client-query-suggestions/builds/**', 'clients/algoliasearch-client-javascript/packages/client-query-suggestions/package.json', 'specs/bundled/query-suggestions.yml', - 'templates/javascript/**' + 'templates/javascript/**', + 'generators/src/**', + 'scripts/**' )}} - name: Restore built JavaScript personalization client @@ -255,7 +260,9 @@ runs: 'clients/algoliasearch-client-javascript/packages/client-personalization/builds/**', 'clients/algoliasearch-client-javascript/packages/client-personalization/package.json', 'specs/bundled/personalization.yml', - 'templates/javascript/**' + 'templates/javascript/**', + 'generators/src/**', + 'scripts/**' )}} - name: Restore built JavaScript analytics client @@ -271,7 +278,9 @@ runs: 'clients/algoliasearch-client-javascript/packages/client-analytics/builds/**', 'clients/algoliasearch-client-javascript/packages/client-analytics/package.json', 'specs/bundled/analytics.yml', - 'templates/javascript/**' + 'templates/javascript/**', + 'generators/src/**', + 'scripts/**' )}} - name: Restore built JavaScript abtesting client @@ -287,7 +296,9 @@ runs: 'clients/algoliasearch-client-javascript/packages/client-abtesting/builds/**', 'clients/algoliasearch-client-javascript/packages/client-abtesting/package.json', 'specs/bundled/abtesting.yml', - 'templates/javascript/**' + 'templates/javascript/**', + 'generators/src/**', + 'scripts/**' )}} - name: Restore built JavaScript insights client @@ -303,7 +314,9 @@ runs: 'clients/algoliasearch-client-javascript/packages/client-insights/builds/**', 'clients/algoliasearch-client-javascript/packages/client-insights/package.json', 'specs/bundled/insights.yml', - 'templates/javascript/**' + 'templates/javascript/**', + 'generators/src/**', + 'scripts/**' )}} - name: Restore built JavaScript sources client @@ -319,7 +332,9 @@ runs: 'clients/algoliasearch-client-javascript/packages/client-sources/builds/**', 'clients/algoliasearch-client-javascript/packages/client-sources/package.json', 'specs/bundled/sources.yml', - 'templates/javascript/**' + 'templates/javascript/**', + 'generators/src/**', + 'scripts/**' )}} - name: Restore built JavaScript predict client @@ -335,7 +350,9 @@ runs: 'clients/algoliasearch-client-javascript/packages/client-predict/builds/**', 'clients/algoliasearch-client-javascript/packages/client-predict/package.json', 'specs/bundled/predict.yml', - 'templates/javascript/**' + 'templates/javascript/**', + 'generators/src/**', + 'scripts/**' )}} # Restore Java clients: used during 'cts' or 'codegen' @@ -349,8 +366,10 @@ runs: hashFiles( 'clients/algoliasearch-client-java-2/search/**', 'clients/algoliasearch-client-java-2/model/search/**', + 'specs/bundled/search.yml', 'templates/java/**', - 'specs/bundled/search.yml' + 'generators/src/**', + 'scripts/**' )}} # Restore PHP clients: used during 'cts' or 'codegen' @@ -364,8 +383,10 @@ runs: hashFiles( 'clients/algoliasearch-client-php/lib/Api/SearchApi.php', 'clients/algoliasearch-client-php/lib/Configuration/SearchConfig.php', + 'specs/bundled/search.yml', 'templates/php/**', - 'specs/bundled/search.yml' + 'generators/src/**', + 'scripts/**' )}} - name: Restore built PHP recommend client @@ -378,8 +399,10 @@ runs: hashFiles( 'clients/algoliasearch-client-php/lib/Api/RecommendApi.php', 'clients/algoliasearch-client-php/lib/Configuration/RecommendConfig.php', + 'specs/bundled/recommend.yml', 'templates/php/**', - 'specs/bundled/recommend.yml' + 'generators/src/**', + 'scripts/**' )}} - name: Restore built PHP personalization client @@ -392,8 +415,10 @@ runs: hashFiles( 'clients/algoliasearch-client-php/lib/Api/PersonalizationApi.php', 'clients/algoliasearch-client-php/lib/Configuration/PersonalizationConfig.php', + 'specs/bundled/personalization.yml', 'templates/php/**', - 'specs/bundled/personalization.yml' + 'generators/src/**', + 'scripts/**' )}} - name: Restore built PHP analytics client @@ -406,8 +431,10 @@ runs: hashFiles( 'clients/algoliasearch-client-php/lib/Api/AnalyticsApi.php', 'clients/algoliasearch-client-php/lib/Configuration/AnalyticsConfig.php', + 'specs/bundled/analytics.yml', 'templates/php/**', - 'specs/bundled/analytics.yml' + 'generators/src/**', + 'scripts/**' )}} - name: Restore built PHP insights client @@ -420,8 +447,10 @@ runs: hashFiles( 'clients/algoliasearch-client-php/lib/Api/InsightsApi.php', 'clients/algoliasearch-client-php/lib/Configuration/InsightsConfig.php', + 'specs/bundled/insights.yml', 'templates/php/**', - 'specs/bundled/insights.yml' + 'generators/src/**', + 'scripts/**' )}} - name: Restore built PHP abtesting client @@ -434,8 +463,10 @@ runs: hashFiles( 'clients/algoliasearch-client-php/lib/Api/AbTestingApi.php', 'clients/algoliasearch-client-php/lib/Configuration/AbTestingConfig.php', + 'specs/bundled/abtesting.yml', 'templates/php/**', - 'specs/bundled/abtesting.yml' + 'generators/src/**', + 'scripts/**' )}} - name: Restore built PHP query-suggestions client @@ -448,8 +479,10 @@ runs: hashFiles( 'clients/algoliasearch-client-php/lib/Api/QuerySuggestionsApi.php', 'clients/algoliasearch-client-php/lib/Configuration/QuerySuggestionsConfig.php', + 'specs/bundled/query-suggestions.yml', 'templates/php/**', - 'specs/bundled/query-suggestions.yml' + 'generators/src/**', + 'scripts/**' )}} - name: Install JavaScript dependencies diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index ca3392156c..7aa62be215 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -163,7 +163,9 @@ jobs: format('{0}/builds/**', matrix.client.folder), format('{0}/package.json', matrix.client.folder), format('specs/bundled/{0}.yml', matrix.client.name), - 'templates/javascript/**' + 'templates/javascript/**', + 'generators/src/**', + 'scripts/**' )}} - name: Generate '${{ matrix.client.name }}' client @@ -207,8 +209,7 @@ jobs: 'clients/algoliasearch-client-javascript/packages/algoliasearch/**', 'clients/algoliasearch-client-javascript/packages/client-search/**', 'clients/algoliasearch-client-javascript/packages/client-analytics/**', - 'clients/algoliasearch-client-javascript/packages/client-personalization/**', - 'templates/javascript/**' + 'clients/algoliasearch-client-javascript/packages/client-personalization/**' )}} - name: Build 'algoliasearch' client @@ -247,8 +248,10 @@ jobs: hashFiles( format('{0}/{1}/**', matrix.client.folder, matrix.client.name), format('{0}/model/{1}/**', matrix.client.folder, matrix.client.name), + format('specs/bundled/{0}.yml', matrix.client.name), 'templates/java/**', - format('specs/bundled/{0}.yml', matrix.client.name) + 'generators/src/**', + 'scripts/**' )}} - name: Generate '${{ matrix.client.name }}' client @@ -291,8 +294,10 @@ jobs: hashFiles( format('{0}/lib/Api/{1}.php', matrix.client.folder, matrix.client.api), format('{0}/lib/Configuration/{1}.php', matrix.client.folder, matrix.client.config), + format('specs/bundled/{0}.yml', matrix.client.name), 'templates/php/**', - format('specs/bundled/{0}.yml', matrix.client.name) + 'generators/src/**', + 'scripts/**' )}} - name: Generate '${{ matrix.client.name }}' client diff --git a/scripts/ci/createMatrix.ts b/scripts/ci/createMatrix.ts index 598d9c24a0..d74a7cf711 100644 --- a/scripts/ci/createMatrix.ts +++ b/scripts/ci/createMatrix.ts @@ -7,7 +7,7 @@ type CreateMatrix = { baseBranch: string; }; -type Client = { +type ClientMatrix = { name: string; folder: string; config?: string; @@ -18,49 +18,62 @@ type Matrix = { client: TMatrix[]; }; +// This empty matrix is required by the CI, otherwise it throws +const EMPTY_MATRIX = JSON.stringify({ client: ['no-run'] }); + +/** + * Returns the number of diff between a `branch` and the current HEAD for the given `path`. + */ +async function getNbGitDiff(branch: string, path: string): Promise { + return parseInt( + ( + await run(`git diff --shortstat ${branch}..HEAD -- ${path} | wc -l`) + ).trim(), + 10 + ); +} + async function getClientMatrix({ language, baseBranch, baseChanged, -}: CreateMatrix): Promise> { - const matrix: Matrix = { client: [] }; - - for (const [generatorKey, generatorOptions] of Object.entries(GENERATORS)) { +}: CreateMatrix): Promise> { + const matrix: Matrix = { client: [] }; + + for (const { + client, + output, + additionalProperties, + ...options + } of Object.values(GENERATORS)) { if ( - generatorKey.startsWith(`${language}-`) === false || + options.language !== language || // `algoliasearch` is an aggregation of clients - generatorOptions.client === 'algoliasearch' + client === 'algoliasearch' ) { continue; } - const folder = generatorOptions.output.replace('#{cwd}', ''); - const specChanges = await run( - `git diff --shortstat ${baseBranch}..HEAD -- specs/${generatorOptions.client} | wc -l | tr -d ' '` - ); - const clientChanges = await run( - `git diff --shortstat ${baseBranch}..HEAD -- ${folder} | wc -l | tr -d ' '` - ); + const specChanges = await getNbGitDiff(baseBranch, `specs/${client}`); + const clientChanges = await getNbGitDiff(baseBranch, output); - if (clientChanges === '0' && specChanges === '0' && baseChanged === false) { + if (clientChanges === 0 && specChanges === 0 && !baseChanged) { continue; } - const matchedGenerator: Client = { - name: generatorOptions.client, - folder, + const matchedGenerator: ClientMatrix = { + name: client, + folder: output, }; // Extra informations for the PHP matrix in order to properly scope the // GitHub action cache if (language === 'php') { - matchedGenerator.config = - generatorOptions.additionalProperties.configClassname; - matchedGenerator.api = - generatorOptions.additionalProperties.configClassname.replace( - 'Config', - 'Api' - ); + matchedGenerator.config = additionalProperties.configClassname; + matchedGenerator.api = additionalProperties.configClassname.replace( + 'Config', + 'Api' + ); } matrix.client.push(matchedGenerator); @@ -76,11 +89,9 @@ async function getSpecMatrix({ const matrix: Matrix = { client: [] }; for (const client of CLIENTS) { - const specChanges = await run( - `git diff --shortstat ${baseBranch}..HEAD -- specs/${client} | wc -l | tr -d ' '` - ); + const specChanges = await getNbGitDiff(baseBranch, `specs/${client}`); - if (specChanges === '0' && baseChanged === false) { + if (specChanges === 0 && !baseChanged) { continue; } @@ -90,7 +101,7 @@ async function getSpecMatrix({ return matrix; } -export async function createMatrix( +async function createMatrix( job: 'client' | 'spec', opts: CreateMatrix ): Promise { @@ -99,16 +110,13 @@ export async function createMatrix( // eslint-disable-next-line no-console console.log( - // client cannot be empty or the matrix will fail - matrix.client.length === 0 - ? '{"client":["no-run"]}' - : JSON.stringify(matrix) + matrix.client.length === 0 ? EMPTY_MATRIX : JSON.stringify(matrix) ); } -const [job, ...args] = process.argv.slice(2); - if (require.main === module) { + const [job, ...args] = process.argv.slice(2); + switch (job) { case 'spec': createMatrix(job, { From 7f4728c8a93616ac232f09e9b478a34693cf089a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Vannicatte?= Date: Mon, 4 Apr 2022 10:36:10 +0200 Subject: [PATCH 4/5] remove scripts from cache --- .github/actions/cache/action.yml | 51 +++++++++++--------------------- .github/actions/setup/action.yml | 8 ++--- .github/workflows/check.yml | 9 ++---- scripts/ci/createMatrix.ts | 38 ++++++++---------------- 4 files changed, 36 insertions(+), 70 deletions(-) diff --git a/.github/actions/cache/action.yml b/.github/actions/cache/action.yml index cfcb03dff0..cd444f6df5 100644 --- a/.github/actions/cache/action.yml +++ b/.github/actions/cache/action.yml @@ -207,8 +207,7 @@ runs: 'clients/algoliasearch-client-javascript/packages/client-search/package.json', 'specs/bundled/search.yml', 'templates/javascript/**', - 'generators/src/**', - 'scripts/**' + 'generators/src/**' )}} - name: Restore built JavaScript recommend client @@ -225,8 +224,7 @@ runs: 'clients/algoliasearch-client-javascript/packages/recommend/package.json', 'specs/bundled/recommend.yml', 'templates/javascript/**', - 'generators/src/**', - 'scripts/**' + 'generators/src/**' )}} - name: Restore built JavaScript query-suggestions client @@ -243,8 +241,7 @@ runs: 'clients/algoliasearch-client-javascript/packages/client-query-suggestions/package.json', 'specs/bundled/query-suggestions.yml', 'templates/javascript/**', - 'generators/src/**', - 'scripts/**' + 'generators/src/**' )}} - name: Restore built JavaScript personalization client @@ -261,8 +258,7 @@ runs: 'clients/algoliasearch-client-javascript/packages/client-personalization/package.json', 'specs/bundled/personalization.yml', 'templates/javascript/**', - 'generators/src/**', - 'scripts/**' + 'generators/src/**' )}} - name: Restore built JavaScript analytics client @@ -279,8 +275,7 @@ runs: 'clients/algoliasearch-client-javascript/packages/client-analytics/package.json', 'specs/bundled/analytics.yml', 'templates/javascript/**', - 'generators/src/**', - 'scripts/**' + 'generators/src/**' )}} - name: Restore built JavaScript abtesting client @@ -297,8 +292,7 @@ runs: 'clients/algoliasearch-client-javascript/packages/client-abtesting/package.json', 'specs/bundled/abtesting.yml', 'templates/javascript/**', - 'generators/src/**', - 'scripts/**' + 'generators/src/**' )}} - name: Restore built JavaScript insights client @@ -315,8 +309,7 @@ runs: 'clients/algoliasearch-client-javascript/packages/client-insights/package.json', 'specs/bundled/insights.yml', 'templates/javascript/**', - 'generators/src/**', - 'scripts/**' + 'generators/src/**' )}} - name: Restore built JavaScript sources client @@ -333,8 +326,7 @@ runs: 'clients/algoliasearch-client-javascript/packages/client-sources/package.json', 'specs/bundled/sources.yml', 'templates/javascript/**', - 'generators/src/**', - 'scripts/**' + 'generators/src/**' )}} - name: Restore built JavaScript predict client @@ -351,8 +343,7 @@ runs: 'clients/algoliasearch-client-javascript/packages/client-predict/package.json', 'specs/bundled/predict.yml', 'templates/javascript/**', - 'generators/src/**', - 'scripts/**' + 'generators/src/**' )}} # Restore Java clients: used during 'cts' or 'codegen' @@ -368,8 +359,7 @@ runs: 'clients/algoliasearch-client-java-2/model/search/**', 'specs/bundled/search.yml', 'templates/java/**', - 'generators/src/**', - 'scripts/**' + 'generators/src/**' )}} # Restore PHP clients: used during 'cts' or 'codegen' @@ -385,8 +375,7 @@ runs: 'clients/algoliasearch-client-php/lib/Configuration/SearchConfig.php', 'specs/bundled/search.yml', 'templates/php/**', - 'generators/src/**', - 'scripts/**' + 'generators/src/**' )}} - name: Restore built PHP recommend client @@ -401,8 +390,7 @@ runs: 'clients/algoliasearch-client-php/lib/Configuration/RecommendConfig.php', 'specs/bundled/recommend.yml', 'templates/php/**', - 'generators/src/**', - 'scripts/**' + 'generators/src/**' )}} - name: Restore built PHP personalization client @@ -417,8 +405,7 @@ runs: 'clients/algoliasearch-client-php/lib/Configuration/PersonalizationConfig.php', 'specs/bundled/personalization.yml', 'templates/php/**', - 'generators/src/**', - 'scripts/**' + 'generators/src/**' )}} - name: Restore built PHP analytics client @@ -433,8 +420,7 @@ runs: 'clients/algoliasearch-client-php/lib/Configuration/AnalyticsConfig.php', 'specs/bundled/analytics.yml', 'templates/php/**', - 'generators/src/**', - 'scripts/**' + 'generators/src/**' )}} - name: Restore built PHP insights client @@ -449,8 +435,7 @@ runs: 'clients/algoliasearch-client-php/lib/Configuration/InsightsConfig.php', 'specs/bundled/insights.yml', 'templates/php/**', - 'generators/src/**', - 'scripts/**' + 'generators/src/**' )}} - name: Restore built PHP abtesting client @@ -465,8 +450,7 @@ runs: 'clients/algoliasearch-client-php/lib/Configuration/AbTestingConfig.php', 'specs/bundled/abtesting.yml', 'templates/php/**', - 'generators/src/**', - 'scripts/**' + 'generators/src/**' )}} - name: Restore built PHP query-suggestions client @@ -481,8 +465,7 @@ runs: 'clients/algoliasearch-client-php/lib/Configuration/QuerySuggestionsConfig.php', 'specs/bundled/query-suggestions.yml', 'templates/php/**', - 'generators/src/**', - 'scripts/**' + 'generators/src/**' )}} - name: Install JavaScript dependencies diff --git a/.github/actions/setup/action.yml b/.github/actions/setup/action.yml index a713702b04..ee7e244a8b 100644 --- a/.github/actions/setup/action.yml +++ b/.github/actions/setup/action.yml @@ -78,7 +78,7 @@ runs: run: | base_changed=${{ steps.diff.outputs.GITHUB_ACTIONS_CHANGED > 0 || steps.diff.outputs.SCRIPTS_CHANGED > 0 || steps.diff.outputs.COMMON_SPECS_CHANGED > 0 }} - matrix=$(yarn workspace scripts createMatrix spec $base_changed ${{ steps.diff.outputs.ORIGIN_BRANCH }}) + matrix=$(yarn workspace scripts createMatrix $base_changed ${{ steps.diff.outputs.ORIGIN_BRANCH }}) if [[ $matrix == '{"client":["no-run"]}' ]]; then run="false" @@ -101,7 +101,7 @@ runs: algoliasearch_changed=${{ steps.diff.outputs.JS_ALGOLIASEARCH_CHANGED > 0 }} common_changed=${{ steps.diff.outputs.JS_COMMON_CHANGED > 0 }} - matrix=$(yarn workspace scripts createMatrix client javascript $base_changed ${{ steps.diff.outputs.ORIGIN_BRANCH }}) + matrix=$(yarn workspace scripts createMatrix $base_changed ${{ steps.diff.outputs.ORIGIN_BRANCH }}) javascript if [[ $algoliasearch_changed == 'true' || $base_changed == 'true' ]]; then echo "Running algoliasearch: true" @@ -132,7 +132,7 @@ runs: run: | base_changed=${{ steps.diff.outputs.GITHUB_ACTIONS_CHANGED > 0 || steps.diff.outputs.COMMON_SPECS_CHANGED > 0 || steps.diff.outputs.SCRIPTS_CHANGED > 0 || steps.diff.outputs.GENERATORS_CHANGED > 0 || steps.diff.outputs.JAVA_TEMPLATE_CHANGED > 0 }} - matrix=$(yarn workspace scripts createMatrix client java $base_changed ${{ steps.diff.outputs.ORIGIN_BRANCH }}) + matrix=$(yarn workspace scripts createMatrix $base_changed ${{ steps.diff.outputs.ORIGIN_BRANCH }}) java if [[ $matrix == '{"client":["no-run"]}' ]]; then run="false" @@ -153,7 +153,7 @@ runs: run: | base_changed=${{ steps.diff.outputs.GITHUB_ACTIONS_CHANGED > 0 || steps.diff.outputs.COMMON_SPECS_CHANGED > 0 || steps.diff.outputs.SCRIPTS_CHANGED > 0 || steps.diff.outputs.GENERATORS_CHANGED > 0 || steps.diff.outputs.PHP_TEMPLATE_CHANGED > 0 }} - matrix=$(yarn workspace scripts createMatrix client php $base_changed ${{ steps.diff.outputs.ORIGIN_BRANCH }}) + matrix=$(yarn workspace scripts createMatrix $base_changed ${{ steps.diff.outputs.ORIGIN_BRANCH }}) php if [[ $matrix == '{"client":["no-run"]}' ]]; then run="false" diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 7aa62be215..54936d1bbf 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -164,8 +164,7 @@ jobs: format('{0}/package.json', matrix.client.folder), format('specs/bundled/{0}.yml', matrix.client.name), 'templates/javascript/**', - 'generators/src/**', - 'scripts/**' + 'generators/src/**' )}} - name: Generate '${{ matrix.client.name }}' client @@ -250,8 +249,7 @@ jobs: format('{0}/model/{1}/**', matrix.client.folder, matrix.client.name), format('specs/bundled/{0}.yml', matrix.client.name), 'templates/java/**', - 'generators/src/**', - 'scripts/**' + 'generators/src/**' )}} - name: Generate '${{ matrix.client.name }}' client @@ -296,8 +294,7 @@ jobs: format('{0}/lib/Configuration/{1}.php', matrix.client.folder, matrix.client.config), format('specs/bundled/{0}.yml', matrix.client.name), 'templates/php/**', - 'generators/src/**', - 'scripts/**' + 'generators/src/**' )}} - name: Generate '${{ matrix.client.name }}' client diff --git a/scripts/ci/createMatrix.ts b/scripts/ci/createMatrix.ts index d74a7cf711..6ffe07b9d8 100644 --- a/scripts/ci/createMatrix.ts +++ b/scripts/ci/createMatrix.ts @@ -2,9 +2,9 @@ import { CLIENTS, GENERATORS, run } from '../common'; import type { Language } from '../types'; type CreateMatrix = { - language?: Language; baseChanged: boolean; baseBranch: string; + language?: Language; }; type ClientMatrix = { @@ -101,12 +101,10 @@ async function getSpecMatrix({ return matrix; } -async function createMatrix( - job: 'client' | 'spec', - opts: CreateMatrix -): Promise { - const matrix = - job === 'spec' ? await getSpecMatrix(opts) : await getClientMatrix(opts); +async function createMatrix(opts: CreateMatrix): Promise { + const matrix = opts.language + ? await getClientMatrix(opts) + : await getSpecMatrix(opts); // eslint-disable-next-line no-console console.log( @@ -115,23 +113,11 @@ async function createMatrix( } if (require.main === module) { - const [job, ...args] = process.argv.slice(2); - - switch (job) { - case 'spec': - createMatrix(job, { - baseChanged: args[0] === 'true', - baseBranch: args[1], - }); - break; - case 'client': - createMatrix(job, { - language: args[0] as Language, - baseChanged: args[1] === 'true', - baseBranch: args[2], - }); - break; - default: - throw new Error(`Unknown job: ${job}`); - } + const args = process.argv.slice(2); + + createMatrix({ + baseChanged: args[0] === 'true', + baseBranch: args[1], + language: args[2] as Language, + }); } From 965cdbd3b802f064bfee025adf4f545b48342579 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Vannicatte?= Date: Mon, 4 Apr 2022 10:40:48 +0200 Subject: [PATCH 5/5] oops --- .github/actions/setup/action.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/actions/setup/action.yml b/.github/actions/setup/action.yml index ee7e244a8b..151af1480a 100644 --- a/.github/actions/setup/action.yml +++ b/.github/actions/setup/action.yml @@ -101,7 +101,7 @@ runs: algoliasearch_changed=${{ steps.diff.outputs.JS_ALGOLIASEARCH_CHANGED > 0 }} common_changed=${{ steps.diff.outputs.JS_COMMON_CHANGED > 0 }} - matrix=$(yarn workspace scripts createMatrix $base_changed ${{ steps.diff.outputs.ORIGIN_BRANCH }}) javascript + matrix=$(yarn workspace scripts createMatrix $base_changed ${{ steps.diff.outputs.ORIGIN_BRANCH }} javascript) if [[ $algoliasearch_changed == 'true' || $base_changed == 'true' ]]; then echo "Running algoliasearch: true" @@ -132,7 +132,7 @@ runs: run: | base_changed=${{ steps.diff.outputs.GITHUB_ACTIONS_CHANGED > 0 || steps.diff.outputs.COMMON_SPECS_CHANGED > 0 || steps.diff.outputs.SCRIPTS_CHANGED > 0 || steps.diff.outputs.GENERATORS_CHANGED > 0 || steps.diff.outputs.JAVA_TEMPLATE_CHANGED > 0 }} - matrix=$(yarn workspace scripts createMatrix $base_changed ${{ steps.diff.outputs.ORIGIN_BRANCH }}) java + matrix=$(yarn workspace scripts createMatrix $base_changed ${{ steps.diff.outputs.ORIGIN_BRANCH }} java) if [[ $matrix == '{"client":["no-run"]}' ]]; then run="false" @@ -153,7 +153,7 @@ runs: run: | base_changed=${{ steps.diff.outputs.GITHUB_ACTIONS_CHANGED > 0 || steps.diff.outputs.COMMON_SPECS_CHANGED > 0 || steps.diff.outputs.SCRIPTS_CHANGED > 0 || steps.diff.outputs.GENERATORS_CHANGED > 0 || steps.diff.outputs.PHP_TEMPLATE_CHANGED > 0 }} - matrix=$(yarn workspace scripts createMatrix $base_changed ${{ steps.diff.outputs.ORIGIN_BRANCH }}) php + matrix=$(yarn workspace scripts createMatrix $base_changed ${{ steps.diff.outputs.ORIGIN_BRANCH }} php) if [[ $matrix == '{"client":["no-run"]}' ]]; then run="false"