diff --git a/.github/actions/cache/action.yml b/.github/actions/cache/action.yml index 1d29987842..067dd01431 100644 --- a/.github/actions/cache/action.yml +++ b/.github/actions/cache/action.yml @@ -9,133 +9,214 @@ inputs: language: description: The language to retrieve dependencies. required: false - default: javascript runs: using: composite steps: - # restore clients + # JavaScript setup + - name: Get yarn cache directory path + shell: bash + id: yarn-cache-dir + run: echo "::set-output name=dir::$(yarn config get cacheFolder)" + + - name: Restore Yarn + uses: actions/cache@v2 + with: + path: ${{ steps.yarn-cache-dir.outputs.dir || '.yarn/cache' }} + key: node-cache-${{ env.CACHE_VERSION }}-yarn-${{ hashFiles('yarn.lock') }} + + - name: Install JavaScript dependencies + shell: bash + run: yarn install + + # Java setup: used during 'java' generation or 'cts' + - name: Download Java formatter + 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 + + - name: Download openapi generator jar for java (TODO REMOVE) + if: ${{ inputs.language == 'java' || inputs.job == 'cts' }} + shell: bash + run: curl -L "https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/5.4.0/openapi-generator-cli-5.4.0.jar" > /tmp/openapi-generator-cli.jar + + # Restore JavaScript clients utils: used during 'javascript' generation or 'cts' - name: Restore built JavaScript common client - if: ${{ inputs.job == 'cts' || inputs.job == 'javascript-client' }} + if: ${{ inputs.language == 'javascript' || inputs.job == 'cts' }} uses: actions/cache@v2 with: - path: /home/runner/work/api-clients-automation/api-clients-automation/clients/algoliasearch-client-javascript/packages/client-common/dist - key: ${{ runner.os }}-${{ env.CACHE_VERSION }}-js-client-common-${{ hashFiles('clients/algoliasearch-client-javascript/packages/client-common/**') }} + path: clients/algoliasearch-client-javascript/packages/client-common + key: | + ${{ env.CACHE_VERSION }}-${{ + hashFiles( + 'clients/algoliasearch-client-javascript/packages/client-common/**', + '!clients/algoliasearch-client-javascript/packages/client-common/dist' + )}} - name: Restore built JavaScript node requester - if: ${{ inputs.job == 'cts' || inputs.job == 'javascript-client' }} + if: ${{ inputs.language == 'javascript' || inputs.job == 'cts' }} uses: actions/cache@v2 with: - path: /home/runner/work/api-clients-automation/api-clients-automation/clients/algoliasearch-client-javascript/packages/requester-node-http/dist - key: ${{ runner.os }}-${{ env.CACHE_VERSION }}-js-requester-node-http-${{ hashFiles('clients/algoliasearch-client-javascript/packages/requester-node-http/**') }} + path: clients/algoliasearch-client-javascript/packages/requester-node-http + key: | + ${{ env.CACHE_VERSION }}-${{ + hashFiles( + 'clients/algoliasearch-client-javascript/packages/requester-node-http/**', + '!clients/algoliasearch-client-javascript/packages/requester-node-http/dist' + )}} - name: Restore built JavaScript browser requester - if: ${{ inputs.job == 'cts' || inputs.job == 'javascript-client' }} + if: ${{ inputs.language == 'javascript' || inputs.job == 'cts' }} uses: actions/cache@v2 with: - path: /home/runner/work/api-clients-automation/api-clients-automation/clients/algoliasearch-client-javascript/packages/requester-browser-xhr/dist - key: ${{ runner.os }}-${{ env.CACHE_VERSION }}-js-requester-browser-xhr-${{ hashFiles('clients/algoliasearch-client-javascript/packages/requester-browser-xhr/**') }} - + path: clients/algoliasearch-client-javascript/packages/requester-browser-xhr + key: | + ${{ env.CACHE_VERSION }}-${{ + hashFiles( + 'clients/algoliasearch-client-javascript/packages/requester-browser-xhr/**', + '!clients/algoliasearch-client-javascript/packages/requester-browser-xhr/dist' + )}} + + # Restore JavaScript clients: used during 'cts' - name: Restore built JavaScript algoliasearch client - if: ${{ inputs.job == 'cts' }} + if: ${{ inputs.job == 'cts'}} uses: actions/cache@v2 with: - path: /home/runner/work/api-clients-automation/api-clients-automation/clients/algoliasearch-client-javascript/packages/algoliasearch/dist - key: ${{ runner.os }}-${{ env.CACHE_VERSION }}-js-algoliasearch-${{ hashFiles('clients/algoliasearch-client-javascript/packages/algoliasearch/**') }} + path: clients/algoliasearch-client-javascript/packages/algoliasearch + key: | + ${{ env.CACHE_VERSION }}-${{ + hashFiles( + 'clients/algoliasearch-client-javascript/packages/algoliasearch/**', + '!clients/algoliasearch-client-javascript/packages/algoliasearch/dist' + )}} - name: Restore built JavaScript search client if: ${{ inputs.job == 'cts' }} uses: actions/cache@v2 with: - path: /home/runner/work/api-clients-automation/api-clients-automation/clients/algoliasearch-client-javascript/packages/client-search/dist - key: ${{ runner.os }}-${{ env.CACHE_VERSION }}-js-client-search-${{ hashFiles('clients/algoliasearch-client-javascript/packages/client-search/**') }}-${{ hashFiles('specs/bundled/search.yml') }} + path: clients/algoliasearch-client-javascript/packages/client-search + key: | + ${{ env.CACHE_VERSION }}-${{ + hashFiles( + 'clients/algoliasearch-client-javascript/packages/client-search/**', + '!clients/algoliasearch-client-javascript/packages/client-search/dist', + 'specs/bundled/search.yml' + )}} - name: Restore built JavaScript recommend client if: ${{ inputs.job == 'cts' }} uses: actions/cache@v2 with: - path: /home/runner/work/api-clients-automation/api-clients-automation/clients/algoliasearch-client-javascript/packages/recommend/dist - key: ${{ runner.os }}-${{ env.CACHE_VERSION }}-js-client-recommend-${{ hashFiles('clients/algoliasearch-client-javascript/packages/recommend/**') }}-${{ hashFiles('specs/bundled/recommend.yml') }} + path: clients/algoliasearch-client-javascript/packages/recommend + key: | + ${{ env.CACHE_VERSION }}-${{ + hashFiles( + 'clients/algoliasearch-client-javascript/packages/recommend/**', + '!clients/algoliasearch-client-javascript/packages/recommend/dist', + 'specs/bundled/recommend.yml' + )}} - name: Restore built JavaScript query-suggestions client if: ${{ inputs.job == 'cts' }} uses: actions/cache@v2 with: - path: /home/runner/work/api-clients-automation/api-clients-automation/clients/algoliasearch-client-javascript/packages/client-query-suggestions/dist - key: ${{ runner.os }}-${{ env.CACHE_VERSION }}-js-client-query-suggestions-${{ hashFiles('clients/algoliasearch-client-javascript/packages/client-query-suggestions/**') }}-${{ hashFiles('specs/bundled/query-suggestions.yml') }} + path: clients/algoliasearch-client-javascript/packages/client-query-suggestions + key: | + ${{ env.CACHE_VERSION }}-${{ + hashFiles( + 'clients/algoliasearch-client-javascript/packages/client-query-suggestions/**', + '!clients/algoliasearch-client-javascript/packages/client-query-suggestions/dist', + 'specs/bundled/query-suggestions.yml' + )}} - name: Restore built JavaScript personalization client if: ${{ inputs.job == 'cts' }} uses: actions/cache@v2 with: - path: /home/runner/work/api-clients-automation/api-clients-automation/clients/algoliasearch-client-javascript/packages/client-personalization/dist - key: ${{ runner.os }}-${{ env.CACHE_VERSION }}-js-client-personalization-${{ hashFiles('clients/algoliasearch-client-javascript/packages/client-personalization/**') }}-${{ hashFiles('specs/bundled/personalization.yml') }} + path: clients/algoliasearch-client-javascript/packages/client-personalization + key: | + ${{ env.CACHE_VERSION }}-${{ + hashFiles( + 'clients/algoliasearch-client-javascript/packages/client-personalization/**', + '!clients/algoliasearch-client-javascript/packages/client-personalization/dist', + 'specs/bundled/personalization.yml' + )}} - name: Restore built JavaScript analytics client if: ${{ inputs.job == 'cts' }} uses: actions/cache@v2 with: - path: /home/runner/work/api-clients-automation/api-clients-automation/clients/algoliasearch-client-javascript/packages/client-analytics/dist - key: ${{ runner.os }}-${{ env.CACHE_VERSION }}-js-client-analytics-${{ hashFiles('clients/algoliasearch-client-javascript/packages/client-analytics/**') }}-${{ hashFiles('specs/bundled/analytics.yml') }} + path: clients/algoliasearch-client-javascript/packages/client-analytics + key: | + ${{ env.CACHE_VERSION }}-${{ + hashFiles( + 'clients/algoliasearch-client-javascript/packages/client-analytics/**', + '!clients/algoliasearch-client-javascript/packages/client-analytics/dist', + 'specs/bundled/analytics.yml' + )}} - name: Restore built JavaScript abtesting client if: ${{ inputs.job == 'cts' }} uses: actions/cache@v2 with: - path: /home/runner/work/api-clients-automation/api-clients-automation/clients/algoliasearch-client-javascript/packages/client-abtesting/dist - key: ${{ runner.os }}-${{ env.CACHE_VERSION }}-js-client-abtesting-${{ hashFiles('clients/algoliasearch-client-javascript/packages/client-abtesting/**') }}-${{ hashFiles('specs/bundled/abtesting.yml') }} + path: clients/algoliasearch-client-javascript/packages/client-abtesting + key: | + ${{ env.CACHE_VERSION }}-${{ + hashFiles( + 'clients/algoliasearch-client-javascript/packages/client-abtesting/**', + '!clients/algoliasearch-client-javascript/packages/client-abtesting/dist', + 'specs/bundled/abtesting.yml' + )}} - name: Restore built JavaScript insights client if: ${{ inputs.job == 'cts' }} uses: actions/cache@v2 with: - path: /home/runner/work/api-clients-automation/api-clients-automation/clients/algoliasearch-client-javascript/packages/client-insights/dist - key: ${{ runner.os }}-${{ env.CACHE_VERSION }}-js-client-insights-${{ hashFiles('clients/algoliasearch-client-javascript/packages/client-insights/**') }}-${{ hashFiles('specs/bundled/insights.yml') }} + path: clients/algoliasearch-client-javascript/packages/client-insights + key: | + ${{ env.CACHE_VERSION }}-${{ + hashFiles( + 'clients/algoliasearch-client-javascript/packages/client-insights/**', + '!clients/algoliasearch-client-javascript/packages/client-insights/dist', + 'specs/bundled/insights.yml' + )}} - name: Restore built JavaScript sources client if: ${{ inputs.job == 'cts' }} uses: actions/cache@v2 with: - path: /home/runner/work/api-clients-automation/api-clients-automation/clients/algoliasearch-client-javascript/packages/client-sources/dist - key: ${{ runner.os }}-${{ env.CACHE_VERSION }}-js-client-sources-${{ hashFiles('clients/algoliasearch-client-javascript/packages/client-sources/**') }}-${{ hashFiles('specs/bundled/sources.yml') }} + path: clients/algoliasearch-client-javascript/packages/client-sources + key: | + ${{ env.CACHE_VERSION }}-${{ + hashFiles( + 'clients/algoliasearch-client-javascript/packages/client-sources/**', + '!clients/algoliasearch-client-javascript/packages/client-sources/dist', + 'specs/bundled/sources.yml' + )}} - name: Restore built JavaScript predict client if: ${{ inputs.job == 'cts' }} uses: actions/cache@v2 with: - path: /home/runner/work/api-clients-automation/api-clients-automation/clients/algoliasearch-client-javascript/packages/client-predict/dist - key: ${{ runner.os }}-${{ env.CACHE_VERSION }}-js-client-predict-${{ hashFiles('clients/algoliasearch-client-javascript/packages/client-predict/**') }}-${{ hashFiles('specs/dist/predict.yml') }} - + path: clients/algoliasearch-client-javascript/packages/client-predict + key: | + ${{ env.CACHE_VERSION }}-${{ + hashFiles( + 'clients/algoliasearch-client-javascript/packages/client-predict/**', + '!clients/algoliasearch-client-javascript/packages/client-predict/dist', + 'specs/bundled/predict.yml' + )}} + + # Restore Java clients: used during 'cts' - name: Restore built Java client if: ${{ inputs.job == 'cts' }} uses: actions/cache@v2 with: - path: /home/runner/work/api-clients-automation/api-clients-automation/clients/algoliasearch-client-java-2 - key: ${{ runner.os }}-${{ env.CACHE_VERSION }}-java-client-${{ hashFiles('clients/algoliasearch-client-java-2/**') }}-${{ hashFiles('specs/bundled/search.yml') }} - - # setup yarn - - name: Get yarn cache directory path - shell: bash - id: yarn-cache-dir - run: echo "::set-output name=dir::$(yarn config get cacheFolder)" - - - name: Restore Yarn - uses: actions/cache@v2 - with: - path: ${{ steps.yarn-cache-dir.outputs.dir || '/home/runner/work/api-clients-automation/api-clients-automation/.yarn/cache' }} - key: node-cache-${{ env.CACHE_VERSION }}-${{ runner.os }}-yarn-${{ hashFiles('yarn.lock') }} - - - name: Install JavaScript dependencies - shell: bash - run: yarn install - - # Java setup - - name: Download Java formatter - 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 - - - name: Download openapi generator jar for java (TODO REMOVE) - if: ${{ inputs.language == 'java' || inputs.job == 'cts' }} - shell: bash - run: curl -L "https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/5.4.0/openapi-generator-cli-5.4.0.jar" > /tmp/openapi-generator-cli.jar + path: clients/algoliasearch-client-java-2 + key: | + ${{ env.CACHE_VERSION }}-${{ + hashFiles( + 'clients/algoliasearch-client-java-2/client-predict/**', + '!clients/algoliasearch-client-java-2/client-predict/target', + 'specs/bundled/search.yml' + )}} diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index af1775e250..3705790260 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -8,7 +8,7 @@ on: - main env: - CACHE_VERSION: '7' + CACHE_VERSION: '8' concurrency: group: ${{ github.ref }} @@ -46,11 +46,27 @@ jobs: RUN_CTS: ${{ steps.setup.outputs.RUN_CTS }} + scripts: + runs-on: ubuntu-20.04 + needs: setup + timeout-minutes: 20 + steps: + - uses: actions/checkout@v2 + + - name: Restore cache + uses: ./.github/actions/cache + + - name: Check script linting + run: yarn scripts:lint + + - name: Test scripts + run: yarn scripts:test + specs: runs-on: ubuntu-20.04 timeout-minutes: 10 needs: setup - if: ${{ always() && needs.setup.outputs.RUN_SPECS == 'true' }} + if: ${{ needs.setup.outputs.RUN_SPECS == 'true' }} strategy: matrix: ${{ fromJSON(needs.setup.outputs.SPECS_MATRIX) }} steps: @@ -59,7 +75,15 @@ jobs: - name: Restore cache uses: ./.github/actions/cache - - name: Building ${{ matrix.client }} specs + - name: Cache '${{ matrix.client }}' bundled specs + id: cache + uses: actions/cache@v2 + with: + path: specs/bundled/${{ matrix.client }}.yml + key: ${{ env.CACHE_VERSION }}-${{ hashFiles(format('specs/{0}/**', matrix.client), 'specs/common/**') }} + + - name: Building '${{ matrix.client }}' specs + if: steps.cache.outputs.cache-hit != 'true' run: yarn cli build specs ${{ matrix.client }} - name: Check diff with pushed spec @@ -71,7 +95,7 @@ jobs: timeout-minutes: 10 runs-on: ubuntu-20.04 needs: setup - if: ${{ always() && needs.setup.outputs.RUN_JS_COMMON == 'true' }} + if: ${{ needs.setup.outputs.RUN_JS_COMMON == 'true' }} strategy: matrix: client: @@ -83,17 +107,20 @@ jobs: - name: Restore cache uses: ./.github/actions/cache - with: - job: client - - name: Cache ${{ matrix.client }} client + - name: Cache '${{ matrix.client }}' client id: cache uses: actions/cache@v2 with: - path: '/home/runner/work/api-clients-automation/api-clients-automation/clients/algoliasearch-client-javascript/packages/${{ matrix.client }}/dist' - key: ${{ runner.os }}-${{ env.CACHE_VERSION }}-js-${{ matrix.client }}-${{ hashFiles(format('clients/algoliasearch-client-javascript/packages/{0}/**', matrix.client)) }} - - - name: Build ${{ matrix.client }} client + path: clients/algoliasearch-client-javascript/packages/${{ matrix.client }} + key: | + ${{ env.CACHE_VERSION }}-${{ + hashFiles( + format('clients/algoliasearch-client-javascript/packages/{0}/**', matrix.client), + format('!clients/algoliasearch-client-javascript/packages/{0}/dist', matrix.client) + )}} + + - name: Build '${{ matrix.client }}' client if: steps.cache.outputs.cache-hit != 'true' run: yarn workspace algoliasearch-client-javascript build ${{ matrix.client }} @@ -104,7 +131,7 @@ jobs: - setup - specs - client_javascript_common - if: ${{ always() && needs.setup.outputs.RUN_JS == 'true' }} + if: ${{ needs.setup.outputs.RUN_JS == 'true' }} strategy: matrix: ${{ fromJSON(needs.setup.outputs.JS_MATRIX) }} steps: @@ -113,16 +140,23 @@ jobs: - name: Restore cache uses: ./.github/actions/cache with: - job: javascript-client + job: client + language: javascript - - name: Cache ${{ matrix.client.name }} client + - name: Cache '${{ matrix.client.name }}' client id: cache uses: actions/cache@v2 with: - path: '/home/runner/work/api-clients-automation/api-clients-automation/${{ matrix.client.folder }}/dist' - key: ${{ runner.os }}-${{ env.CACHE_VERSION }}-js-client-${{ matrix.client.name }}-${{ hashFiles(format('{0}/**', matrix.client.folder)) }}-${{ hashFiles(format('specs/bundled/{0}.yml', matrix.client.name)) }} - - - name: Generate ${{ matrix.client.name }} client + path: ${{ matrix.client.folder }} + key: | + ${{ env.CACHE_VERSION }}-${{ + hashFiles( + format('{0}/**', matrix.client.folder), + format('!{0}/dist', matrix.client.folder), + format('specs/bundled/{0}.yml', matrix.client.name) + )}} + + - name: Generate '${{ matrix.client.name }}' client if: steps.cache.outputs.cache-hit != 'true' && matrix.client.name != 'algoliasearch' run: yarn cli generate javascript ${{ matrix.client.name }} @@ -132,7 +166,7 @@ jobs: git status exit $(git status --porcelain ${{ matrix.client.folder }} | wc -l) - - name: Build ${{ matrix.client.name }} client + - name: Build '${{ matrix.client.name }}' client if: steps.cache.outputs.cache-hit != 'true' run: yarn cli build clients javascript ${{ matrix.client.name }} @@ -142,7 +176,7 @@ jobs: needs: - setup - specs - if: ${{ always() && needs.setup.outputs.RUN_JAVA == 'true' }} + if: ${{ needs.setup.outputs.RUN_JAVA == 'true' }} strategy: matrix: ${{ fromJSON(needs.setup.outputs.JAVA_MATRIX) }} steps: @@ -154,14 +188,20 @@ jobs: job: client language: java - - name: Cache ${{ matrix.client.name }} client + - name: Cache '${{ matrix.client.name }}' client id: cache uses: actions/cache@v2 with: - path: '/home/runner/work/api-clients-automation/api-clients-automation/${{ matrix.client.folder }}' - key: ${{ runner.os }}-${{ env.CACHE_VERSION }}-java-client-${{ hashFiles(format('{0}/**', matrix.client.folder)) }}-${{ hashFiles(format('specs/bundled/{0}.yml', matrix.client.name)) }} - - - name: Generate ${{ matrix.client.name }} client + path: ${{ matrix.client.folder }} + key: | + ${{ env.CACHE_VERSION }}-${{ + hashFiles( + format('{0}/**', matrix.client.folder), + format('!{0}/target', matrix.client.folder), + format('specs/bundled/{0}.yml', matrix.client.name) + )}} + + - name: Generate '${{ matrix.client.name }}' client if: steps.cache.outputs.cache-hit != 'true' run: yarn cli generate java ${{ matrix.client.name }} @@ -171,7 +211,7 @@ jobs: git status exit $(git status --porcelain ${{ matrix.client.folder }} | wc -l) - - name: Build ${{ matrix.client.name }} client + - name: Build '${{ matrix.client.name }}' client if: steps.cache.outputs.cache-hit != 'true' run: yarn cli build clients java ${{ matrix.client.name }} @@ -181,7 +221,7 @@ jobs: needs: - setup - specs - if: ${{ always() && needs.setup.outputs.RUN_PHP == 'true' }} + if: ${{ needs.setup.outputs.RUN_PHP == 'true' }} strategy: matrix: ${{ fromJSON(needs.setup.outputs.PHP_MATRIX) }} steps: @@ -193,7 +233,7 @@ jobs: job: client language: php - - name: Generate ${{ matrix.client.name }} client + - name: Generate '${{ matrix.client.name }}' client if: steps.cache.outputs.cache-hit != 'true' run: yarn cli generate php ${{ matrix.client.name }} @@ -203,7 +243,7 @@ jobs: git status exit $(git status --porcelain ${{ matrix.client.folder }} | wc -l) - - name: Build ${{ matrix.client.name }} client + - name: Build '${{ matrix.client.name }}' client if: steps.cache.outputs.cache-hit != 'true' run: yarn cli build clients php ${{ matrix.client.name }} @@ -214,17 +254,16 @@ jobs: - client_javascript - client_java - client_php - if: ${{ always() && needs.setup.outputs.RUN_CTS == 'true' }} + if: ${{ needs.setup.outputs.RUN_CTS == 'true' }} steps: - uses: actions/checkout@v2 - name: Restore cache - id: restore uses: ./.github/actions/cache with: job: cts - - name: Generate CTS + - name: Generate run: yarn cli cts generate - name: Check diff with pushed CTS @@ -232,22 +271,5 @@ jobs: git status exit $(git status --porcelain ./tests/output | wc -l) - - name: Run CTS + - name: Run run: yarn cli cts run - - scripts: - runs-on: ubuntu-20.04 - needs: setup - timeout-minutes: 20 - steps: - - uses: actions/checkout@v2 - - - name: Restore cache - id: restore - uses: ./.github/actions/cache - - - name: Check script linting - run: yarn scripts:lint - - - name: Test scripts - run: yarn scripts:test diff --git a/.github/workflows/process-release.yml b/.github/workflows/process-release.yml index 9cb3364276..389bcbf49a 100644 --- a/.github/workflows/process-release.yml +++ b/.github/workflows/process-release.yml @@ -6,7 +6,7 @@ on: - closed env: - CACHE_VERSION: '7' + CACHE_VERSION: '8' jobs: build: