name: Lint on: pull_request: branches-ignore: - nightly push: branches: - main - release/* workflow_dispatch: concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }}-${{ github.event_name == 'workflow_dispatch' }}-${{ github.event_name == 'schedule' }} cancel-in-progress: true jobs: lintrunner: uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main permissions: id-token: write contents: read with: runner: linux.2xlarge docker-image: executorch-ubuntu-22.04-linter submodules: 'recursive' fetch-depth: 0 ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} timeout: 90 script: | # The generic Linux job chooses to use base env, not the one setup by the image CONDA_ENV=$(conda env list --json | jq -r ".envs | .[-1]") conda activate "${CONDA_ENV}" # For mypy linting, we need to first install executorch first so that # it builds the python package information. BUILD_TOOL="cmake" PYTHON_EXECUTABLE=python bash .ci/scripts/setup-linux.sh --build-tool "${BUILD_TOOL}" CACHE_DIRECTORY="/tmp/.lintbin" # Try to recover the cached binaries if [[ -d "${CACHE_DIRECTORY}" ]]; then # It's ok to fail this as lintrunner init would download these binaries # again if they do not exist cp -r "${CACHE_DIRECTORY}" . || true fi # This has already been cached in the docker image lintrunner init 2> /dev/null RC=0 # Run lintrunner on all files if ! lintrunner --force-color --all-files --tee-json=lint.json 2> /dev/null; then echo "" echo -e "\e[1m\e[36mYou can reproduce these results locally by using \`lintrunner\`. (If you don't get the same results, run \'lintrunner init\' to update your local linter)\e[0m" echo -e "\e[1m\e[36mSee https://github.com/pytorch/pytorch/wiki/lintrunner for setup instructions.\e[0m" RC=1 fi # Use jq to massage the JSON lint output into GitHub Actions workflow commands. jq --raw-output \ '"::\(if .severity == "advice" or .severity == "disabled" then "warning" else .severity end) file=\(.path),line=\(.line),col=\(.char),title=\(.code) \(.name)::" + (.description | gsub("\\n"; "%0A"))' \ lint.json || true exit $RC link-check: uses: ./.github/workflows/_link_check.yml with: ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} android-java-format: uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main permissions: id-token: write contents: read with: runner: linux.2xlarge docker-image: executorch-ubuntu-22.04-linter fetch-depth: 0 ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} timeout: 90 script: | FILES_NEEDS_FORMAT=$(/opt/google-java-format -n \ extension/android/executorch_android/src/main/java/org/pytorch/executorch/*.java \ examples/demo-apps/android/LlamaDemo/app/src/main/java/com/example/executorchllamademo/*.java \ extension/benchmark/android/benchmark/app/src/main/java/org/pytorch/minibench/*.java) if [ -n "$FILES_NEEDS_FORMAT" ]; then echo "Warning: The following files need formatting. Please use google-java-format." echo "Use a binary from https://github.com/google/google-java-format/releases/" echo "For example:" echo "wget https://github.com/google/google-java-format/releases/download/v1.23.0/google-java-format_linux-x86-64" echo "chmod +x google-java-format_linux-x86-64" echo "./google-java-format_linux-x86-64 -i $FILES_NEEDS_FORMAT" exit 1 fi