Update LLM provider SDK npm packages #23302
This file contains hidden or 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: Lint | |
on: | |
pull_request: | |
push: | |
branches: | |
- main | |
merge_group: | |
env: | |
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} | |
TURBO_TEAM: hashintel | |
TURBO_CACHE: remote:rw | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} | |
cancel-in-progress: true | |
jobs: | |
setup: | |
runs-on: ubuntu-24.04 | |
outputs: | |
packages: ${{ steps.packages.outputs.packages }} | |
steps: | |
- name: Checkout source code | |
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 | |
with: | |
fetch-depth: 2 | |
- name: Install tools | |
uses: ./.github/actions/install-tools | |
with: | |
token: ${{ secrets.GITHUB_TOKEN }} | |
rust: false | |
- name: Determine changed packages | |
id: packages | |
run: | | |
PACKAGES_QUERY='query { affectedPackages(base: "HEAD^") { items { name path } } }' | |
PACKAGES=$(turbo query "$PACKAGES_QUERY" \ | |
| jq --compact-output '.data.affectedPackages.items | [(.[] | select(.name != "//"))] | { name: [.[].name], include: . }') | |
echo "packages=$PACKAGES" | tee -a $GITHUB_OUTPUT | |
package: | |
name: Package | |
permissions: | |
contents: read | |
security-events: write | |
needs: [setup] | |
strategy: | |
matrix: ${{ fromJSON(needs.setup.outputs.packages) }} | |
fail-fast: false | |
if: needs.setup.outputs.packages != '{"name":[],"include":[]}' | |
runs-on: ubuntu-24.04 | |
steps: | |
- name: Checkout | |
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 | |
with: | |
fetch-depth: 2 | |
- name: Clean up disk | |
uses: ./.github/actions/clean-up-disk | |
- name: Install tools | |
uses: ./.github/actions/install-tools | |
with: | |
token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Prune repository | |
uses: ./.github/actions/prune-repository | |
with: | |
scope: ${{ matrix.name }} | |
- name: Find lint steps to run | |
id: lints | |
run: | | |
set -x | |
ESLINT=$(turbo run lint:eslint --filter '${{ matrix.name }}' --dry-run=json \ | |
| jq '[.tasks[] | select(.task == "lint:eslint" and .command != "<NONEXISTENT>")] != []' || echo 'false') | |
echo "eslint=$ESLINT" | tee -a $GITHUB_OUTPUT | |
TSC=$(turbo run lint:tsc --filter '${{ matrix.name }}' --dry-run=json \ | |
| jq '[.tasks[] | select(.task == "lint:tsc" and .command != "<NONEXISTENT>")] != []' || echo 'false') | |
echo "tsc=$TSC" | tee -a $GITHUB_OUTPUT | |
CODEGEN=$(turbo run codegen --filter '${{ matrix.name }}' --dry-run=json \ | |
| jq '[.tasks[] | select(.task == "codegen" and .command != "<NONEXISTENT>")] != []' || echo 'false') | |
echo "codegen=$CODEGEN" | tee -a $GITHUB_OUTPUT | |
CLIPPY=$(turbo run lint:clippy --filter '${{ matrix.name }}' --dry-run=json \ | |
| jq '[.tasks[] | select(.task == "lint:clippy" and .command != "<NONEXISTENT>")] != []' || echo 'false') | |
echo "clippy=$CLIPPY" | tee -a $GITHUB_OUTPUT | |
HAS_RUST=$([[ -f "${{ matrix.path }}/Cargo.toml" || ${{ matrix.path }} = "apps/hash-graph" ]] && echo 'true' || echo 'false') | |
echo "has-rust=$HAS_RUST" | tee -a $GITHUB_OUTPUT | |
- name: Warm up repository | |
uses: ./.github/actions/warm-up-repo | |
- name: Show disk usage | |
run: df -h | |
- name: Run codegen | |
if: always() && steps.lints.outputs.codegen == 'true' | |
run: | | |
set -o pipefail | |
turbo run codegen --force --filter "${{ matrix.name }}" | |
while IFS= read -r line; do | |
if [[ -n "$line" ]]; then | |
echo "Checking diff of ${{ matrix.path }}/$line" | |
git --no-pager diff --exit-code --color -- "${{ matrix.path }}/$line" | |
fi | |
done <<< "$(cat ${{ matrix.path }}/turbo.json | grep -v '^ *//' | jq -r '.pipeline.codegen.outputs | if . == null then "." else .[] end')" | |
- name: Show disk usage | |
run: df -h | |
- name: Run ESLint | |
if: always() && steps.lints.outputs.eslint == 'true' | |
run: turbo run lint:eslint --filter "${{ matrix.name }}" | |
- name: Run TSC | |
if: always() && steps.lints.outputs.tsc == 'true' | |
run: turbo run lint:tsc --filter "${{ matrix.name }}" | |
- name: Run rustfmt | |
if: always() && steps.lints.outputs.has-rust == 'true' | |
working-directory: ${{ matrix.path }} | |
run: just format --check | |
- name: Run clippy | |
if: always() && steps.lints.outputs.clippy == 'true' | |
run: | | |
pushd ${{ matrix.path }} | |
turbo run lint:clippy --filter "${{ matrix.name }}" -- --message-format=json \ | |
| clippy-sarif \ | |
| jq --arg path "${{ matrix.path }}" '.runs[].results |= map(select(.locations[].physicalLocation.artifactLocation.uri | startswith($path)))' \ | |
| jq '.runs[].results |= unique' \ | |
> clippy.sarif | |
popd | |
cat ${{ matrix.path }}/clippy.sarif | sarif-fmt | |
jq -e '.runs[].results == []' ${{ matrix.path }}/clippy.sarif> /dev/null | |
- name: Print clippy errors to summary | |
if: failure() && steps.lints.outputs.clippy == 'true' | |
run: | | |
echo '```' >> $GITHUB_STEP_SUMMARY | |
cat ${{ matrix.path }}/clippy.sarif | sarif-fmt >> $GITHUB_STEP_SUMMARY | |
echo '```' >> $GITHUB_STEP_SUMMARY | |
- name: Upload SARIF file | |
uses: github/codeql-action/upload-sarif@a8d1ac45b9a34d11fe398d5503176af0d06b303e # v3.30.7 | |
if: always() && steps.lints.outputs.clippy == 'true' | |
with: | |
sarif_file: ${{ matrix.path }}/clippy.sarif | |
category: ${{ matrix.name }} | |
- name: Check public documentation | |
if: always() && steps.lints.outputs.has-rust == 'true' | |
working-directory: ${{ matrix.path }} | |
env: | |
RUSTDOCFLAGS: "--check -Z unstable-options -D warnings" | |
run: cargo doc --all-features --no-deps -Zrustdoc-scrape-examples | |
- name: Check private documentation | |
if: always() && steps.lints.outputs.has-rust == 'true' | |
working-directory: ${{ matrix.path }} | |
env: | |
RUSTDOCFLAGS: "--check -Z unstable-options -D warnings" | |
run: cargo doc --all-features --no-deps -Zrustdoc-scrape-examples --document-private-items | |
- name: Show disk usage | |
run: df -h | |
global: | |
name: Global | |
runs-on: ubuntu-24.04 | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 | |
- name: Clean up disk | |
uses: ./.github/actions/clean-up-disk | |
- name: Install tools | |
uses: ./.github/actions/install-tools | |
with: | |
token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Warm up repository | |
uses: ./.github/actions/warm-up-repo | |
- name: Validate package.json generated from Cargo.toml | |
if: ${{ success() || failure() }} | |
run: | | |
cargo -Zscript run --manifest-path ".github/scripts/rust/sync-turborepo.rs" . | xargs yarn fix:package-json | |
git --no-pager diff --exit-code --color '**/package.json' | |
- name: Validate Dependency Diagrams | |
if: ${{ success() || failure() }} | |
run: | | |
mise run doc:dependency-diagram | |
git --no-pager diff --exit-code --color '**/docs/dependency-diagram.mmd' | |
- name: Run yarn lint:constraints | |
if: ${{ success() || failure() }} | |
run: | | |
if ! yarn lint:constraints; then | |
echo '' | |
echo '' | |
echo 'ℹ️ ℹ️ ℹ️' | |
echo 'Try running `yarn fix:constraints` locally to apply autofixes.' | |
echo 'ℹ️ ℹ️ ℹ️' | |
exit 1 | |
fi | |
- name: Run yarn lint:license-in-workspaces | |
if: ${{ success() || failure() }} | |
env: | |
FORCE_COLOR: "1" ## https://www.npmjs.com/package/chalk#supportsColor | |
run: | | |
if ! yarn lint:license-in-workspaces; then | |
echo '' | |
echo '' | |
echo 'ℹ️ ℹ️ ℹ️' | |
echo 'Please fix the above errors locally for the check to pass.' | |
echo 'If you don’t see them, try merging target branch into yours.' | |
echo 'ℹ️ ℹ️ ℹ️' | |
exit 1 | |
fi | |
- name: Run yarn lint:markdownlint | |
if: ${{ success() || failure() }} | |
run: | | |
if ! yarn lint:markdownlint; then | |
echo '' | |
echo '' | |
echo 'ℹ️ ℹ️ ℹ️' | |
echo 'Try running `yarn fix:markdownlint` locally to apply autofixes.' | |
echo 'ℹ️ ℹ️ ℹ️' | |
exit 1 | |
fi | |
- name: Run yarn lint:format | |
if: ${{ success() || failure() }} | |
run: | | |
if ! yarn lint:format; then | |
echo '' | |
echo '' | |
echo 'ℹ️ ℹ️ ℹ️' | |
echo 'Try running `yarn fix:format` locally to apply autofixes.' | |
echo 'ℹ️ ℹ️ ℹ️' | |
exit 1 | |
fi | |
- name: Run yarn lint:package-json | |
if: ${{ success() || failure() }} | |
run: | | |
if ! yarn lint:package-json; then | |
echo '' | |
echo '' | |
echo 'ℹ️ ℹ️ ℹ️' | |
echo 'Try running `yarn fix:package-json` locally to apply autofixes.' | |
echo 'ℹ️ ℹ️ ℹ️' | |
exit 1 | |
fi | |
- name: Run yarn lint:taplo | |
if: ${{ success() || failure() }} | |
run: | | |
if ! yarn lint:taplo; then | |
echo '' | |
echo '' | |
echo 'ℹ️ ℹ️ ℹ️' | |
echo 'Try running `yarn fix:taplo` locally to apply autofixes.' | |
echo 'ℹ️ ℹ️ ℹ️' | |
exit 1 | |
fi | |
- name: Run yarn lint:yarn-deduplicate | |
if: ${{ success() || failure() }} | |
run: | | |
if ! yarn lint:yarn-deduplicate; then | |
echo '' | |
echo '' | |
echo 'ℹ️ ℹ️ ℹ️' | |
echo 'Some dependencies can be deduplicated, which will make node_modules' | |
echo 'lighter and potentially save us from unexplainable bugs.' | |
echo 'Please run `yarn fix:yarn-deduplicate` locally and commit yarn.lock.' | |
echo 'You may need to run the command 2-3 times in some rare cases.' | |
echo 'ℹ️ ℹ️ ℹ️' | |
exit 1 | |
fi | |
## yarn --frozen-lockfile does not work for monorepos, so using a workaround: | |
## https://github.com/yarnpkg/yarn/issues/5840#issuecomment-467516207 | |
## TODO: Use `yarn install --immutable` after upgrading to Yarn v3+ | |
- name: Check yarn.lock stability | |
if: ${{ success() || failure() }} | |
run: | | |
git diff yarn.lock | |
if ! git diff --exit-code yarn.lock; then | |
echo '' | |
echo '' | |
echo 'ℹ️ ℹ️ ℹ️' | |
echo 'Changes were detected in yarn.lock file after running `yarn install`.' | |
echo 'This makes runtime less stable, so should be avoided.' | |
echo 'Please run `yarn install` locally and commit yarn.lock.' | |
echo 'You may also want to run `yarn fix:yarn-deduplicate` just in case.' | |
echo 'ℹ️ ℹ️ ℹ️' | |
exit 1; | |
fi | |
- name: Check Cargo.lock stability | |
if: ${{ success() || failure() }} | |
run: | | |
if ! cargo update --workspace --locked; then | |
echo '' | |
echo '' | |
echo 'ℹ️ ℹ️ ℹ️' | |
echo 'Changes were detected in Cargo.lock file after running `cargo update --workspace`.' | |
echo 'This makes runtime less stable, so should be avoided.' | |
echo 'Please run `cargo update --workspace` locally and commit Cargo.lock.' | |
echo 'ℹ️ ℹ️ ℹ️' | |
exit 1; | |
fi | |
- name: Validate renovate config | |
if: ${{ success() || failure() }} | |
run: | | |
if ! renovate-config-validator; then | |
echo '' | |
echo '' | |
echo 'ℹ️ ℹ️ ℹ️' | |
echo 'Please fix the above errors locally for the check to pass.' | |
echo 'If you don’t see them, try merging target branch into yours.' | |
echo 'ℹ️ ℹ️ ℹ️' | |
exit 1 | |
fi | |
- name: Run SQL formatter and linter | |
if: ${{ success() || failure() }} | |
run: | | |
if ! sqlfluff lint --warn-unused-ignores; then | |
echo '' | |
echo '' | |
echo 'ℹ️ ℹ️ ℹ️' | |
echo 'Try running `sqlfluff fix` locally to apply autofixes.' | |
echo 'Note, that SQLFluff does not come with `yarn install` and you may need to install it yourself.' | |
echo 'ℹ️ ℹ️ ℹ️' | |
exit 1 | |
fi | |
- name: Create SQLFluff annotations | |
if: failure() && github.event.pull_request.head.repo.full_name == github.repository | |
run: sqlfluff lint --warn-unused-ignores --format github-annotation --write-output annotations.json --annotation-level failure --nofail | |
- name: Annotate | |
uses: yuzutech/annotations-action@0e061a6e3ac848299310b6429b60d67cafd4e7f8 # v0.5.0 | |
if: failure() && github.event.pull_request.head.repo.full_name == github.repository | |
with: | |
repo-token: "${{ secrets.GITHUB_TOKEN }}" | |
title: "SQLFluff Lint" | |
input: "annotations.json" | |
passed: | |
name: Linting passed | |
needs: [setup, package, global] | |
if: always() | |
runs-on: ubuntu-latest | |
steps: | |
- name: Check setup script | |
run: | | |
[[ ${{ needs.setup.result }} = success ]] | |
- name: Check package results | |
run: | | |
[[ ${{ needs.package.result }} =~ success|skipped ]] | |
- name: Check global results | |
run: | | |
[[ ${{ needs.global.result }} =~ success|skipped ]] | |
- name: Notify Slack on failure | |
uses: rtCamp/action-slack-notify@07cbdbfd6c6190970778d8f98f11d073b2932aae | |
if: ${{ failure() && github.event_name == 'merge_group' }} | |
env: | |
SLACK_LINK_NAMES: true | |
SLACK_MESSAGE: "At least one linting job failed for a Pull Request in the Merge Queue failed <!subteam^S09KH99698T>" # Notifies @devops | |
SLACK_TITLE: Linting failed | |
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }} | |
SLACK_USERNAME: GitHub | |
VAULT_ADDR: "" | |
VAULT_TOKEN: "" |