feat(specs): add composition API #21419
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Checks | |
on: | |
pull_request: | |
types: [opened, synchronize] | |
push: | |
branches: | |
- main | |
merge_group: | |
types: [checks_requested] | |
concurrency: | |
group: ${{ github.ref }} | |
cancel-in-progress: ${{ !contains(github.event.head_commit.message, 'prepare release')}} | |
# Uncomment the line below to enable artifacts debugging | |
# env: | |
# ACTIONS_RUNNER_DEBUG: true | |
jobs: | |
notification: | |
runs-on: ubuntu-22.04 | |
timeout-minutes: 1 | |
if: ${{ !github.event.pull_request.head.repo.fork && github.event.number }} | |
permissions: | |
pull-requests: write | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: marocchino/sticky-pull-request-comment@v2 | |
with: | |
GITHUB_TOKEN: ${{ secrets.ALGOLIA_BOT_TOKEN }} | |
message: | | |
### 🪓 The generated code will be pushed at the end of the CI. | |
Action triggered by commit [`${{ github.sha }}`](${{ github.event.pull_request.base.repo.html_url }}/commit/${{ github.sha }}). | |
_Please do not push any generated code to this pull request._ | |
setup: | |
runs-on: ubuntu-22.04 | |
timeout-minutes: 10 | |
env: | |
CACHE_VERSION: 1.10 # bump this to run all clients on the CI. | |
steps: | |
- name: debugging - dump GitHub context | |
env: | |
GITHUB_CONTEXT: ${{ toJSON(github) }} | |
run: echo "$GITHUB_CONTEXT" | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Setup | |
id: setup | |
uses: ./.github/actions/setup | |
# Computing jobs that should run | |
- name: Setting diff outputs variables | |
id: diff | |
shell: bash | |
run: | | |
previousCommit=${{ github.event.before }} | |
baseRef=${{ github.base_ref }} | |
origin=$( [[ -z $baseRef ]] && echo $previousCommit || echo "origin/$baseRef" ) | |
yarn workspace scripts setRunVariables "$origin" | |
- name: Compute specs matrix | |
id: spec-matrix | |
shell: bash | |
run: yarn workspace scripts createMatrix ${{ steps.diff.outputs.ORIGIN_BRANCH }} | |
- name: Compute the client codegen matrix | |
id: gen-matrix | |
shell: bash | |
run: yarn workspace scripts createMatrix ${{ steps.diff.outputs.ORIGIN_BRANCH }} clients | |
- name: check that custom actions are built | |
run: | | |
yarn workspace scripts build:actions | |
diff=$(git status --porcelain ./scripts/ci/actions | wc -l) | |
if [[ $diff > 0 ]]; then | |
echo "Build the custom github actions by running \`yarn workspace scripts build:actions\`" | |
git status --porcelain ./scripts/ci/actions | |
fi | |
exit $diff | |
- name: Lint GitHub actions | |
run: yarn github-actions:lint | |
- name: Lint generators | |
run: | | |
yarn cli format java generators | |
diff=$(git status --porcelain ./generators | wc -l) | |
if [[ $diff > 0 ]]; then | |
echo "Format the generators folder by running 'apic format java generators'" | |
fi | |
exit $diff | |
- name: Lint json files | |
run: | | |
yarn eslint --ext=json . | |
echo 'Use yarn fix:json to fix issues' | |
outputs: | |
RUN_SCRIPTS: ${{ steps.diff.outputs.GITHUB_ACTIONS_CHANGED > 0 || steps.diff.outputs.SCRIPTS_CHANGED > 0 }} | |
RUN_WEBSITE: ${{ steps.diff.outputs.WEBSITE_CHANGED > 0 }} | |
SPECS_MATRIX: ${{ steps.spec-matrix.outputs.MATRIX }} | |
RUN_GEN: ${{ steps.gen-matrix.outputs.RUN_GEN }} | |
GEN_MATRIX: ${{ steps.gen-matrix.outputs.GEN_MATRIX }} | |
JAVASCRIPT_DATA: ${{ steps.gen-matrix.outputs.JAVASCRIPT_DATA }} | |
RUN_GEN_JAVASCRIPT: ${{ steps.gen-matrix.outputs.RUN_GEN_JAVASCRIPT }} | |
SWIFT_DATA: ${{ steps.gen-matrix.outputs.SWIFT_DATA }} | |
RUN_MACOS_SWIFT_CTS: ${{ steps.gen-matrix.outputs.RUN_MACOS_SWIFT_CTS }} | |
KOTLIN_DATA: ${{ steps.gen-matrix.outputs.KOTLIN_DATA }} | |
RUN_MACOS_KOTLIN_BUILD: ${{ steps.gen-matrix.outputs.RUN_MACOS_KOTLIN_BUILD }} | |
scripts: | |
runs-on: ubuntu-22.04 | |
timeout-minutes: 10 | |
needs: setup | |
if: ${{ needs.setup.outputs.RUN_SCRIPTS == 'true' }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup | |
uses: ./.github/actions/setup | |
with: | |
type: minimal | |
- name: Check script linting | |
run: yarn scripts:lint | |
- name: Test scripts | |
run: yarn scripts:test | |
- name: Lint custom eslint plugin | |
run: yarn cli format javascript eslint | |
- name: Test custom eslint plugin | |
run: yarn workspace eslint-plugin-automation-custom test | |
specs: | |
runs-on: ubuntu-22.04 | |
timeout-minutes: 10 | |
needs: setup | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup | |
uses: ./.github/actions/setup | |
with: | |
type: minimal | |
- name: Building specs | |
run: yarn cli build specs ${{ fromJSON(needs.setup.outputs.SPECS_MATRIX).toRun }} | |
- name: Store bundled specs | |
uses: actions/upload-artifact@v4 | |
with: | |
if-no-files-found: error | |
name: specs | |
path: ${{ fromJSON(needs.setup.outputs.SPECS_MATRIX).bundledPath }} | |
client_gen_javascript: | |
timeout-minutes: 15 | |
runs-on: ubuntu-22.04 | |
needs: | |
- setup | |
- specs | |
- scripts | |
if: | | |
always() && | |
needs.setup.outputs.RUN_GEN_JAVASCRIPT == 'true' && | |
!contains(needs.*.result, 'cancelled') && | |
!contains(needs.*.result, 'failure') | |
env: | |
ALGOLIA_APPLICATION_ID: ${{ secrets.ALGOLIA_APPLICATION_ID }} | |
ALGOLIA_ADMIN_KEY: ${{ secrets.ALGOLIA_ADMIN_KEY }} | |
MONITORING_API_KEY: ${{ secrets.MONITORING_API_KEY }} | |
name: client javascript${{ needs.setup.outputs.RUN_GEN_JAVASCRIPT == 'true' && format('@{0}', fromJSON(needs.setup.outputs.JAVASCRIPT_DATA).version) || '' }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Download specs artifacts | |
uses: ./scripts/ci/actions/restore-artifacts | |
with: | |
type: specs | |
- name: Remove generated clients | |
if: ${{ startsWith(github.head_ref, 'chore/prepare-release-') }} | |
run: | | |
cd clients/algoliasearch-client-javascript/packages | |
find . -mindepth 1 -maxdepth 1 ! -name 'requester-*' ! -name 'logger-*' ! -name 'client-common' -type d -exec rm -rf {}/src {}/model {}/dist {}/builds \; | |
- name: Setup | |
uses: ./.github/actions/setup | |
with: | |
language: javascript | |
version: ${{ fromJSON(needs.setup.outputs.JAVASCRIPT_DATA).version }} | |
- name: Generate clients | |
run: yarn cli generate javascript ${{ fromJSON(needs.setup.outputs.JAVASCRIPT_DATA).toRun }} | |
- name: Update `yarn.lock` for JavaScript | |
run: cd clients/algoliasearch-client-javascript && YARN_ENABLE_HARDENED_MODE=0 YARN_ENABLE_IMMUTABLE_INSTALLS=false yarn install | |
- name: Build clients | |
run: ${{ fromJSON(needs.setup.outputs.JAVASCRIPT_DATA).buildCommand }} | |
- name: Build the playground | |
run: yarn cli build playground javascript ${{ fromJSON(needs.setup.outputs.JAVASCRIPT_DATA).toRun }} | |
- name: Run common and requester tests | |
run: cd clients/algoliasearch-client-javascript && yarn test ${{ !contains(fromJSON(needs.setup.outputs.JAVASCRIPT_DATA).toRun, 'algoliasearch') && '--ignore algoliasearch' || '' }} | |
- name: Test JavaScript bundle size | |
if: ${{ startsWith(github.head_ref, 'chore/prepare-release-') }} | |
run: cd clients/algoliasearch-client-javascript && yarn test:size | |
- name: Test JavaScript bundle and types | |
if: ${{ startsWith(github.head_ref, 'chore/prepare-release-') }} | |
run: cd clients/algoliasearch-client-javascript && yarn test:bundle | |
- name: Remove previous CTS output | |
run: rm -rf ${{ fromJSON(needs.setup.outputs.JAVASCRIPT_DATA).testsToDelete }} | |
- name: Generate CTS | |
run: yarn cli cts generate javascript ${{ fromJSON(needs.setup.outputs.JAVASCRIPT_DATA).toRun }} | |
# JavaScript test deps (needs to be cached because they are huge and inefficient) | |
- name: Get yarn js test cache directory path | |
shell: bash | |
id: yarn-cache-dir-tests | |
run: echo "dir=$(cd tests/output/javascript && yarn config get cacheFolder)" >> $GITHUB_OUTPUT | |
- name: Restore Yarn js tests | |
uses: actions/cache@v4 | |
with: | |
path: ${{ steps.yarn-cache-dir-tests.outputs.dir || 'tests/output/javascript/.yarn/cache' }} | |
key: yarn-cache-tests-${{ hashFiles('tests/output/javascript/yarn.lock') }} | |
- name: Cache js tests node modules | |
uses: actions/cache@v4 | |
with: | |
path: tests/output/javascript/node_modules | |
key: node-modules-tests-${{ hashFiles('tests/output/javascript/yarn.lock') }} | |
- name: Run unit CTS | |
run: yarn cli cts run javascript ${{ fromJSON(needs.setup.outputs.JAVASCRIPT_DATA).toRun }} --no-e2e | |
- name: Run e2e CTS | |
id: cts-e2e | |
continue-on-error: true | |
if: ${{ !github.event.pull_request.head.repo.fork && !contains(format('{0} {1}', github.event.pull_request.title, github.event.head_commit.message), '[skip-e2e]') }} | |
run: yarn cli cts run javascript ${{ fromJSON(needs.setup.outputs.JAVASCRIPT_DATA).toRun }} --no-client --no-requests | |
- name: Retry e2e CTS | |
if: ${{ steps.cts-e2e.outcome == 'failure' }} | |
run: yarn cli cts run javascript ${{ fromJSON(needs.setup.outputs.JAVASCRIPT_DATA).toRun }} --no-client --no-requests | |
- name: Run benchmarks | |
run: yarn cli cts run javascript ${{ fromJSON(needs.setup.outputs.JAVASCRIPT_DATA).toRun }} --benchmark --no-client --no-requests --no-e2e | |
- name: Generate code snippets | |
run: yarn cli snippets javascript ${{ fromJSON(needs.setup.outputs.JAVASCRIPT_DATA).toRun }} | |
- name: Build the snippets to check validity | |
run: yarn cli build snippets javascript ${{ fromJSON(needs.setup.outputs.JAVASCRIPT_DATA).toRun }} | |
- name: Generate code guides | |
run: yarn cli guides javascript ${{ fromJSON(needs.setup.outputs.JAVASCRIPT_DATA).toRun }} | |
- name: Build the guides to check validity | |
run: yarn cli build guides javascript ${{ fromJSON(needs.setup.outputs.JAVASCRIPT_DATA).toRun }} | |
- name: Zip artifact before storing | |
run: zip -r -y clients-javascript.zip clients/algoliasearch-client-javascript ${{ fromJSON(needs.setup.outputs.JAVASCRIPT_DATA).testsToStore }} ${{ fromJSON(needs.setup.outputs.JAVASCRIPT_DATA).guidesToStore }} -x "**/node_modules**" "**/.yarn/cache/**" "**/.yarn/install-state.gz" "**/build/**" "**/dist/**" "**/.gradle/**" "**/bin/**" "**/.nx/**" | |
- name: Store javascript clients | |
uses: actions/upload-artifact@v4 | |
with: | |
if-no-files-found: error | |
name: clients-javascript | |
path: clients-javascript.zip | |
client_gen: | |
timeout-minutes: 15 | |
runs-on: ubuntu-22.04 | |
needs: | |
- setup | |
- specs | |
- scripts | |
if: | | |
always() && | |
needs.setup.outputs.RUN_GEN == 'true' && | |
!contains(needs.*.result, 'cancelled') && | |
!contains(needs.*.result, 'failure') | |
strategy: | |
fail-fast: false | |
matrix: ${{ fromJSON(needs.setup.outputs.GEN_MATRIX) }} | |
env: | |
ALGOLIA_APPLICATION_ID: ${{ secrets.ALGOLIA_APPLICATION_ID }} | |
ALGOLIA_ADMIN_KEY: ${{ secrets.ALGOLIA_ADMIN_KEY }} | |
MONITORING_API_KEY: ${{ secrets.MONITORING_API_KEY }} | |
name: client ${{ matrix.client.language }}@${{ matrix.client.version }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Download specs artifacts | |
uses: ./scripts/ci/actions/restore-artifacts | |
with: | |
type: specs | |
- name: Setup | |
uses: ./.github/actions/setup | |
with: | |
language: ${{ matrix.client.language }} | |
version: ${{ matrix.client.version }} | |
- name: Generate clients | |
run: yarn cli generate ${{ matrix.client.language }} ${{ matrix.client.toRun }} | |
- name: Update composer.lock | |
if: ${{ matrix.client.language == 'php' && startsWith(github.head_ref, 'chore/renovateBaseBranch') && matrix.client.isMainVersion }} | |
run: cd ${{ matrix.client.path }} && composer update | |
- name: Check for file duplicates in Swift | |
if: ${{ matrix.client.language == 'swift' && matrix.client.isMainVersion }} | |
run: | | |
set -eo pipefail | |
cd clients/algoliasearch-client-swift | |
find Sources -type f | rev | cut -d '/' -f1 | rev | sort | uniq -d | |
[ $(find Sources -type f | rev | cut -d '/' -f1 | rev | sort | uniq -d | wc -l) -gt 0 ] && echo "Duplicates found" && exit 1 || echo "No duplicate found" | |
- name: Build clients | |
run: ${{ matrix.client.buildCommand }} | |
- name: Build the playground | |
run: yarn cli build playground ${{ matrix.client.language }} | |
- name: Run Java 'algoliasearch' public API validation | |
if: ${{ github.base_ref == 'main' && matrix.client.language == 'java' && matrix.client.isMainVersion && !contains(format('{0} {1}', github.event.pull_request.title, github.event.head_commit.message), '[skip-bc]') }} | |
run: | | |
cd ${{ matrix.client.path }} | |
exit_code=0 | |
./gradlew :api:japicmp || exit_code=$? | |
FILE=./api/build/reports/japi.txt | |
if [[ -f "$FILE" ]]; then | |
cat $FILE | |
fi | |
exit $exit_code | |
- name: Remove previous CTS output | |
run: rm -rf ${{ matrix.client.testsToDelete }} || true | |
- name: Generate CTS | |
run: yarn cli cts generate ${{ matrix.client.language }} ${{ matrix.client.toRun }} --language-version ${{ matrix.client.version }} | |
- name: Run unit CTS | |
run: yarn cli cts run ${{ matrix.client.language }} ${{ matrix.client.toRun }} --no-e2e | |
- name: Run e2e CTS | |
id: cts-e2e | |
continue-on-error: true | |
if: ${{ !github.event.pull_request.head.repo.fork && !contains(format('{0} {1}', github.event.pull_request.title, github.event.head_commit.message), '[skip-e2e]') }} | |
run: yarn cli cts run ${{ matrix.client.language }} ${{ matrix.client.toRun }} --no-client --no-requests | |
- name: Retry e2e CTS | |
if: ${{ steps.cts-e2e.outcome == 'failure' }} | |
run: yarn cli cts run ${{ matrix.client.language }} ${{ matrix.client.toRun }} --no-client --no-requests | |
- name: Run benchmarks | |
if: ${{ matrix.client.isMainVersion }} | |
run: yarn cli cts run ${{ matrix.client.language }} ${{ matrix.client.toRun }} --benchmark --no-client --no-requests --no-e2e | |
- name: Generate code snippets | |
run: yarn cli snippets ${{ matrix.client.language }} ${{ matrix.client.toRun }} | |
- name: Build the snippets to check validity | |
run: yarn cli build snippets ${{ matrix.client.language }} | |
- name: Generate code guides | |
run: yarn cli guides ${{ matrix.client.language }} ${{ matrix.client.toRun }} | |
- name: Build the guides to check validity | |
run: yarn cli build guides ${{ matrix.client.language }} | |
- name: Zip artifact before storing | |
if: ${{ matrix.client.isMainVersion }} | |
run: zip -r -y clients-${{ matrix.client.language }}.zip ${{ matrix.client.path }} ${{ matrix.client.testsToStore }} ${{ matrix.client.guidesToStore }} -x "**/node_modules**" "**/__pycache__/**" "**/.yarn/cache/**" "**/build/**" "**/.build/**" "**/dist/**" "**/.gradle/**" "**/bin/**" "**/vendor/**" "**/target/**" "**/.dart_tool/**" | |
- name: Store ${{ matrix.client.language }} clients | |
if: ${{ matrix.client.isMainVersion }} | |
uses: actions/upload-artifact@v4 | |
with: | |
if-no-files-found: error | |
name: clients-${{matrix.client.language }} | |
path: clients-${{matrix.client.language }}.zip | |
kotlin_build_macos: | |
timeout-minutes: 15 | |
runs-on: macos-latest | |
needs: | |
- setup | |
- client_gen | |
if: | | |
always() && | |
needs.setup.outputs.RUN_GEN == 'true' && | |
needs.setup.outputs.RUN_MACOS_KOTLIN_BUILD == 'true' && | |
!contains(needs.*.result, 'cancelled') && | |
!contains(needs.*.result, 'failure') | |
outputs: | |
success: ${{ steps.setoutput.outputs.success }} | |
name: client kotlin${{ needs.setup.outputs.RUN_MACOS_KOTLIN_BUILD == 'true' && format('@{0}', fromJSON(needs.setup.outputs.KOTLIN_DATA).version) || '' }} macos | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Download artifacts | |
uses: ./scripts/ci/actions/restore-artifacts | |
with: | |
type: languages | |
languages: | | |
kotlin | |
- name: Setup | |
uses: ./.github/actions/setup | |
with: | |
type: minimal | |
language: kotlin | |
- name: Build clients for macOS | |
id: build | |
continue-on-error: true | |
run: yarn cli build clients kotlin | |
- name: Retry build | |
if: ${{ steps.build.outcome == 'failure' }} | |
run: yarn cli build clients kotlin | |
- name: Set output | |
id: setoutput | |
run: echo "success=true" >> "$GITHUB_OUTPUT" | |
swift_cts_macos: | |
timeout-minutes: 20 | |
runs-on: macos-latest | |
needs: | |
- setup | |
- client_gen | |
if: | | |
always() && | |
needs.setup.outputs.RUN_GEN == 'true' && | |
needs.setup.outputs.RUN_MACOS_SWIFT_CTS == 'true' && | |
!contains(needs.*.result, 'cancelled') && | |
!contains(needs.*.result, 'failure') | |
env: | |
ALGOLIA_APPLICATION_ID: ${{ secrets.ALGOLIA_APPLICATION_ID }} | |
ALGOLIA_ADMIN_KEY: ${{ secrets.ALGOLIA_ADMIN_KEY }} | |
MONITORING_API_KEY: ${{ secrets.MONITORING_API_KEY }} | |
outputs: | |
success: ${{ steps.setoutput.outputs.success }} | |
name: client swift${{ needs.setup.outputs.RUN_MACOS_SWIFT_CTS == 'true' && format('@{0}', fromJSON(needs.setup.outputs.SWIFT_DATA).version) || '' }} macos | |
steps: | |
- uses: actions/checkout@v4 | |
if: ${{ env.ALGOLIA_APPLICATION_ID != '' }} | |
- name: Download artifacts | |
uses: ./scripts/ci/actions/restore-artifacts | |
if: ${{ env.ALGOLIA_APPLICATION_ID != '' }} | |
with: | |
type: languages | |
languages: | | |
swift | |
- name: Setup | |
uses: ./.github/actions/setup | |
if: ${{ env.ALGOLIA_APPLICATION_ID != '' }} | |
with: | |
type: minimal | |
language: swift | |
version: ${{ fromJSON(needs.setup.outputs.SWIFT_DATA).version }} | |
- name: Run tests on macOS | |
id: run-test | |
if: ${{ env.ALGOLIA_APPLICATION_ID != '' }} | |
continue-on-error: true | |
run: yarn cli cts run swift ${{ fromJSON(needs.setup.outputs.SWIFT_DATA).toRun }} -v ${{ !contains(format('{0} {1}', github.event.pull_request.title, github.event.head_commit.message), '[skip-e2e]') && '--no-e2e' || '' }} | |
- name: Retry tests | |
if: ${{ steps.run-test.outcome == 'failure' }} | |
run: yarn cli cts run swift ${{ fromJSON(needs.setup.outputs.SWIFT_DATA).toRun }} -v ${{ !contains(format('{0} {1}', github.event.pull_request.title, github.event.head_commit.message), '[skip-e2e]') && '--no-e2e' || '' }} | |
- name: Set output | |
id: setoutput | |
run: echo "success=true" >> "$GITHUB_OUTPUT" | |
codegen: | |
runs-on: ubuntu-22.04 | |
timeout-minutes: 15 | |
needs: | |
- setup | |
- client_gen | |
- client_gen_javascript | |
if: | | |
always() && | |
!contains(needs.*.result, 'cancelled') && | |
!contains(needs.*.result, 'failure') | |
permissions: | |
pull-requests: write | |
outputs: | |
success: ${{ steps.setoutput.outputs.success }} | |
generatedCommit: ${{ steps.pushGeneratedCode.outputs.GENERATED_COMMIT || github.event.pull_request.head.ref }} | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
ref: ${{ github.event.pull_request.head.ref }} | |
token: ${{ secrets.ALGOLIA_BOT_TOKEN != '' && secrets.ALGOLIA_BOT_TOKEN || secrets.GITHUB_TOKEN }} | |
repository: ${{ github.event.pull_request.head.repo.full_name }} | |
- name: Download all artifacts | |
uses: ./scripts/ci/actions/restore-artifacts | |
with: | |
type: all | |
- name: Setup | |
uses: ./.github/actions/setup | |
with: | |
type: minimal | |
- name: Generate documentation specs with code snippets | |
run: yarn cli build specs ${{ fromJSON(needs.setup.outputs.SPECS_MATRIX).toRun }} --docs | |
- name: Read benchmark results | |
id: benchmark | |
run: | | |
if [[ $(find tests/output -name benchmarkResult.json | wc -l) -eq 0 ]]; then | |
echo "No benchmark results found" | |
exit 0 | |
fi | |
# merge all benchmark results into a single json, and remove the files | |
results=$(jq -s 'add' -c tests/output/**/benchmarkResult.json) | |
{ | |
echo 'BENCHMARK_SECTION<<EOF' | |
echo "<details>" | |
echo "<summary>📊 Benchmark results</summary>" | |
echo "" # empty line is required to make the table work | |
echo "Benchmarks performed on the `search` method using a mock server, the results might not reflect the real-world performance." | |
# format the json to a markdown table with column "Language" and "rate" | |
echo "| Language | Req/s |" | |
echo "| :------- | ----: |" | |
echo "$results" | jq -r 'to_entries | map([.key, .value.rate]) | sort_by(.[1]) | reverse | .[] | @tsv' | awk -F'\t' '{printf "| %-10s | %10d |\n", $1, $2}' | |
echo "</details>" | |
echo 'EOF' | |
} >> "$GITHUB_OUTPUT" | |
rm -rf tests/output/**/benchmarkResult.json | |
- name: Push generated code | |
id: pushGeneratedCode | |
run: yarn workspace scripts pushGeneratedCode | |
env: | |
GITHUB_TOKEN: ${{ secrets.ALGOLIA_BOT_TOKEN != '' && secrets.ALGOLIA_BOT_TOKEN || secrets.GITHUB_TOKEN }} | |
PR_NUMBER: ${{ github.event.number }} | |
- name: update generation comment | |
uses: marocchino/sticky-pull-request-comment@v2 | |
if: ${{ steps.pushGeneratedCode.outputs.GENERATED_COMMIT == '' }} | |
with: | |
GITHUB_TOKEN: ${{ secrets.ALGOLIA_BOT_TOKEN != '' && secrets.ALGOLIA_BOT_TOKEN || secrets.GITHUB_TOKEN }} | |
message: | | |
### No code generated | |
_If you believe code should've been generated, please, [report the issue](https://github.com/algolia/api-clients-automation/issues/new?assignees=&labels=bug%2Ctriage&projects=&template=Bug_report.yml&title=%5Bbug%5D%3A+)._ | |
${{ steps.benchmark.outputs.BENCHMARK_SECTION }} | |
- name: update generation comment | |
uses: marocchino/sticky-pull-request-comment@v2 | |
if: ${{ steps.pushGeneratedCode.outputs.GENERATED_COMMIT != '' }} | |
with: | |
GITHUB_TOKEN: ${{ secrets.ALGOLIA_BOT_TOKEN != '' && secrets.ALGOLIA_BOT_TOKEN || secrets.GITHUB_TOKEN }} | |
message: | | |
### ✔️ Code generated! | |
| Name | Link | | |
|---------------------------------|------------------------| | |
| 🪓 Triggered by | [`${{ github.sha }}`](${{ github.event.pull_request.base.repo.html_url }}/commit/${{ github.sha }}) | | |
| 🍃 Generated commit | [`${{ steps.pushGeneratedCode.outputs.GENERATED_COMMIT }}`](${{ github.event.pull_request.base.repo.html_url }}/commit/${{ steps.pushGeneratedCode.outputs.GENERATED_COMMIT }}) | | |
| 🌲 Generated branch | [`generated/${{ github.head_ref }}`](${{ github.event.pull_request.base.repo.html_url }}/tree/generated/${{ github.head_ref }}) | | |
${{ steps.benchmark.outputs.BENCHMARK_SECTION }} | |
- name: Build website | |
if: ${{ github.ref == 'refs/heads/main' || github.base_ref == 'main' && needs.setup.outputs.RUN_WEBSITE == 'true' }} | |
run: yarn website:build | |
- name: Deploy documentation | |
if: ${{ github.ref == 'refs/heads/main' || github.base_ref == 'main' && needs.setup.outputs.RUN_WEBSITE == 'true' }} | |
uses: nwtgck/[email protected] | |
with: | |
publish-dir: 'website/build' | |
production-branch: main | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
deploy-message: 'Deploy from GitHub Actions' | |
enable-pull-request-comment: true | |
enable-commit-comment: true | |
overwrites-pull-request-comment: true | |
netlify-config-path: ./netlify.toml | |
env: | |
NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }} | |
NETLIFY_SITE_ID: ${{ secrets.NETLIFY_SITE_ID }} | |
timeout-minutes: 5 | |
- name: Set output | |
id: setoutput | |
run: echo "success=true" >> "$GITHUB_OUTPUT" | |
check_green: | |
runs-on: ubuntu-22.04 | |
timeout-minutes: 10 | |
needs: | |
- codegen | |
- swift_cts_macos | |
- kotlin_build_macos | |
if: always() | |
steps: | |
- run: | | |
if [[ ("${{ needs.codegen.outputs.success }}" != "true") || ("${{ needs.swift_cts_macos.result }}" != "skipped" && "${{ needs.swift_cts_macos.outputs.success }}" != "true") || ("${{ needs.kotlin_build_macos.result }}" != "skipped" && "${{ needs.kotlin_build_macos.outputs.success }}" != "true")]]; then | |
echo "a needed step failed" | |
exit 1 | |
fi | |
push_and_release: | |
runs-on: ubuntu-22.04 | |
timeout-minutes: 30 | |
needs: | |
- codegen | |
- check_green | |
if: | | |
always() && | |
!contains(needs.*.result, 'cancelled') && | |
!contains(needs.*.result, 'failure') && | |
github.ref == 'refs/heads/main' | |
permissions: | |
pull-requests: write | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
ref: ${{ needs.codegen.outputs.generatedCommit }} | |
token: ${{ secrets.ALGOLIA_BOT_TOKEN }} | |
repository: ${{ github.event.pull_request.head.repo.full_name }} | |
- name: Setup | |
uses: ./.github/actions/setup | |
with: | |
type: minimal | |
- name: Spread generation to each repository | |
id: spreadGeneration | |
run: yarn workspace scripts spreadGeneration | |
env: | |
GITHUB_TOKEN: ${{ secrets.ALGOLIA_BOT_TOKEN }} | |
- name: Wait for all release CI | |
run: yarn workspace scripts waitForAllReleases ${{ steps.spreadGeneration.outputs.PUSHED_LANGUAGES }} | |
env: | |
GITHUB_TOKEN: ${{ secrets.ALGOLIA_BOT_TOKEN }} | |
- name: Create GitHub release | |
run: yarn workspace scripts createGitHubReleases ${{ steps.spreadGeneration.outputs.PUSHED_LANGUAGES }} | |
env: | |
GITHUB_TOKEN: ${{ secrets.ALGOLIA_BOT_TOKEN }} | |
- name: Push specs and snippets to algolia/doc | |
run: yarn workspace scripts pushToAlgoliaDoc | |
env: | |
GITHUB_TOKEN: ${{ secrets.ALGOLIA_BOT_TOKEN }} | |
- name: Push guides to algolia/AlgoliaWeb | |
run: yarn workspace scripts pushToAlgoliaWeb | |
env: | |
GITHUB_TOKEN: ${{ secrets.ALGOLIA_BOT_TOKEN }} |