Skip to content

Update axum monorepo #22765

Update axum monorepo

Update axum monorepo #22765

Workflow file for this run

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: 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: Cache Rust dependencies
if: always() && steps.lints.outputs.has-rust == 'true'
uses: Swatinem/rust-cache@98c8021b550208e191a6a3145459bfc9fb29c4c0 # v2.8.0
with:
workspaces: ${{ matrix.path }}
save-if: ${{ !startsWith(github.ref, 'refs/heads/gh-readonly-queue') }}
- 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@192325c86100d080feab897ff886c34abd4c83a3 # v3.30.3
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: Install tools
uses: ./.github/actions/install-tools
with:
token: ${{ secrets.GITHUB_TOKEN }}
- name: Warm up repository
uses: ./.github/actions/warm-up-repo
- name: Cache Rust dependencies
uses: Swatinem/rust-cache@98c8021b550208e191a6a3145459bfc9fb29c4c0 # v2.8.0
with:
save-if: ${{ !startsWith(github.ref, 'refs/heads/gh-readonly-queue') }}
- 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 <@U0143NL4GMP> <@U02NLJY0FGX>" # Notifies C & T
SLACK_TITLE: Linting failed
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
SLACK_USERNAME: GitHub
VAULT_ADDR: ""
VAULT_TOKEN: ""