#14690: Reorganize gtests under tests/tt_metal/tt_metal
#32022
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: "[post-commit] all - Static checks, linters etc." | |
on: | |
workflow_dispatch: | |
workflow_call: | |
pull_request: | |
branches: | |
- "main" | |
jobs: | |
pre-commit: | |
name: Run Pre-commit Hooks | |
runs-on: ubuntu-latest | |
permissions: | |
contents: write | |
pull-requests: write | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 # Fetch all history so 'origin/main' is available | |
fetch-refs: true # Ensure all refs are fetched | |
- name: Set up Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: 3.11 | |
- name: Run Pre-commit | |
uses: pre-commit/action@v3.0.1 | |
with: | |
extra_args: | | |
--from-ref ${{ github.event_name == 'pull_request' && format('refs/remotes/origin/{0}', github.event.pull_request.base.ref) || 'HEAD^' }} \ | |
--to-ref HEAD | |
continue-on-error: false | |
check-black: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Do Nothing | |
run: echo "Black is covered by pre-commit. This is a placeholder to be removed after updating branch restrictions." | |
check-spdx-licenses: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-python@v5.0.0 | |
with: | |
cache: 'pip' | |
cache-dependency-path: infra/requirements-infra.txt | |
python-version: '3.10' | |
- name: Install infra deps | |
run: python -m pip install -r infra/requirements-infra.txt | |
- name: Check SPDX licenses | |
run: python -m check_copyright --verbose --dry-run --config ./check_copyright_config.yaml . | |
check-metal-kernel-count: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Check kernel count in base metal is less than maximum | |
run: if (( $(find tt_metal/kernels/ -type f | wc -l) > 7 )); then exit 1; fi | |
check-doc: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install ASPELL | |
run: sudo apt-get install -y aspell | |
- name: Run checks on docs | |
run: TT_METAL_HOME=$(pwd) docs/spellcheck.sh | |
check-forbidden-imports: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Check ttnn is not used in tt_metal tests | |
run: if (( $(grep -Rnw 'tests/tt_metal' -e 'ttnn' | wc -l ) > 11 )); then exit 1; fi | |
- name: Check tt_eager constructs is not used in tt_metal tests | |
run: | | |
if (( $(grep -Rnw 'tests/tt_metal' -e 'tt_lib' | wc -l ) > 0 )); then exit 1; fi | |
if (( $(grep -Rnw 'tests/tt_metal' -e 'tt_eager' | wc -l ) > 10 )); then exit 1; fi | |
check-sweeps-workflow: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-python@v5.0.0 | |
with: | |
python-version: '3.10' | |
- name: Check sweeps workflow option count against sweep file count | |
run: | | |
pip install pyyaml | |
python tests/sweep_framework/framework/sweeps_workflow_verification.py | |
cmake-version: | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Check for changed CMake files | |
id: changed-cmake-files | |
uses: tj-actions/changed-files@c3a1bb2c992d77180ae65be6ae6c166cf40f857c | |
with: | |
files: | | |
**/*.cmake | |
**/CMakeLists.txt | |
- uses: lukka/get-cmake@b516803a3c5fac40e2e922349d15cdebdba01e60 | |
if: steps.changed-cmake-files.outputs.any_changed == 'true' | |
with: | |
cmakeVersion: "~3.16.0" | |
- name: Check CMake version | |
if: steps.changed-cmake-files.outputs.any_changed == 'true' | |
run: cmake --version | |
- name: Install LLVM and Clang | |
if: steps.changed-cmake-files.outputs.any_changed == 'true' | |
run: | | |
wget https://apt.llvm.org/llvm.sh | |
chmod u+x llvm.sh | |
sudo ./llvm.sh 17 | |
- name: Install deps | |
if: steps.changed-cmake-files.outputs.any_changed == 'true' | |
env: | |
DEBIAN_FRONTEND: noninteractive | |
run: | | |
sudo apt update | |
sudo xargs -a scripts/docker/requirements-22.04.txt apt install -y --no-install-recommends | |
- name: Check CMake compatibility | |
if: steps.changed-cmake-files.outputs.any_changed == 'true' | |
env: | |
ARCH_NAME: wormhole_b0 | |
CMAKE_GENERATOR: Ninja | |
# TODO: Use a lukka/run-cmake with a preset after upgrading to a more modern CMake | |
run: | | |
echo "Checking compatibility with $(cmake --version)" | |
cmake -B build . | |
clang-tidy: | |
runs-on: ubuntu-latest | |
container: ghcr.io/tenstorrent/tt-metal/tt-metalium/ubuntu-22.04-amd64:latest | |
permissions: | |
pull-requests: write | |
# OPTIONAL: auto-closing conversations requires the `contents` permission | |
contents: write | |
if: github.event_name == 'pull_request' # Only run this job on pull request events | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
ref: ${{ github.event.pull_request.head.sha }} | |
fetch-depth: 0 | |
submodules: "recursive" | |
- name: Set safe directory for Git | |
run: git config --global --add safe.directory $GITHUB_WORKSPACE | |
- name: Fetch base branch | |
run: | | |
git remote add upstream "https://github.com/${{ github.event.pull_request.base.repo.full_name }}" | |
git fetch --no-tags upstream "${{ github.event.pull_request.base.ref }}" | |
- name: Install clang-tidy | |
run: | | |
sudo apt-get update | |
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y clang-tidy-17 python3.11 python3.11-venv python3.11-dev | |
sudo ln -s $(which clang-tidy-17) /usr/local/bin/clang-tidy | |
- name: Prepare compile_commands.json | |
run: | | |
ARCH_NAME=grayskull cmake -B build -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_DISABLE_PRECOMPILE_HEADERS=ON -DTT_METAL_BUILD_TESTS=ON -DTTNN_BUILD_TESTS=ON -DTT_UMD_BUILD_TESTS=ON -DTT_UNITY_BUILDS=OFF | |
- name: 'Install jq' | |
uses: dcarbone/install-jq-action@v2 | |
- name: Create results directory | |
run: | | |
mkdir clang-tidy-result | |
- name: Analyze | |
shell: bash | |
run: | | |
set -euo pipefail | |
# Find all touched files present in compile_commands.json | |
# This is not as simple as filtering non-code files, as some code (eg: Kernels) are C++ code that | |
# is not built at this level, and thus clang-tidy will be unable to process them. | |
PREFIX=$(pwd) | |
jq --arg prefix "$PREFIX/" -r '.[].file | sub("^" + $prefix; "")' build/compile_commands.json > relative_files_in_build.txt | |
git diff --name-only "$(git merge-base HEAD "upstream/${{ github.event.pull_request.base.ref }}")..." > changed_files.txt | |
grep -F -f relative_files_in_build.txt changed_files.txt > common_files.txt || true | |
# Exit if there are no modified files known to CMake | |
[[ -s common_files.txt ]] || { | |
echo "No files to analyze" | |
exit 0 | |
} | |
# Analyze the relevant diffs of the relevant files | |
git diff "$(git merge-base HEAD "upstream/${{ github.event.pull_request.base.ref }}")" -- $(cat common_files.txt) > filtered_changes.diff | |
clang-tidy-diff-17.py -p1 -path build -export-fixes clang-tidy-result/fixes.yml -j$(nproc) < filtered_changes.diff | |
timeout-minutes: 5 | |
continue-on-error: true | |
- name: Run clang-tidy-pr-comments action | |
uses: platisd/clang-tidy-pr-comments@1b7395ce6f5a4186acabbba24cdd1e846f001aa8 | |
with: | |
# The GitHub token (or a personal access token) | |
github_token: ${{ secrets.GITHUB_TOKEN }} | |
# The path to the clang-tidy fixes generated above | |
clang_tidy_fixes: clang-tidy-result/fixes.yml | |
# Optionally set to true if you want the Action to request | |
# changes in case warnings are found | |
request_changes: false | |
# Optionally set the number of comments per review | |
# to avoid GitHub API timeouts for heavily loaded | |
# pull requests | |
suggestions_per_comment: 10 | |
continue-on-error: true | |
- name: Final step to signal success | |
run: echo "The job passes even if 3rd party action fails." |