[FL-3928] CLI rewrite #5566
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: 'Lint sources & check submodule integrity' | |
on: | |
pull_request: | |
env: | |
TARGETS: f7 | |
FBT_TOOLCHAIN_PATH: /runner/_work | |
SET_GH_OUTPUT: 1 | |
jobs: | |
lint_sources_check_submodules: | |
runs-on: [self-hosted, FlipperZeroShell] | |
steps: | |
- name: 'Wipe workspace' | |
run: find ./ -mount -maxdepth 1 -exec rm -rf {} \; | |
- name: 'Checkout code' | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 2 | |
ref: ${{ github.sha }} | |
- name: 'Check protobuf branch' | |
run: | | |
git submodule update --init; | |
SUB_PATH="assets/protobuf"; | |
SUB_BRANCH="dev"; | |
SUB_COMMITS_MIN=40; | |
cd "$SUB_PATH"; | |
SUBMODULE_HASH="$(git rev-parse HEAD)"; | |
BRANCHES=$(git branch -r --contains "$SUBMODULE_HASH"); | |
COMMITS_IN_BRANCH="$(git rev-list --count dev)"; | |
if [ $COMMITS_IN_BRANCH -lt $SUB_COMMITS_MIN ]; then | |
echo "name=fails::error" >> $GITHUB_OUTPUT; | |
echo "::error::Error: Too few commits in $SUB_BRANCH of submodule $SUB_PATH: $COMMITS_IN_BRANCH(expected $SUB_COMMITS_MIN+)"; | |
exit 1; | |
fi | |
if ! grep -q "/$SUB_BRANCH" <<< "$BRANCHES"; then | |
echo "name=fails::error" >> $GITHUB_OUTPUT; | |
echo "::error::Error: Submodule $SUB_PATH is not on branch $SUB_BRANCH"; | |
exit 1; | |
fi | |
- name: 'Check for new TODOs' | |
id: check_todos | |
if: github.event_name == 'pull_request' | |
run: | | |
set +e; | |
git diff --unified=0 --no-color ${{ github.event.pull_request.base.sha }} ${{ github.sha }} | grep -E '^\+' | grep -i -E '(TODO|HACK|FIXME|XXX)[ :]' | grep -v -- '-nofl' > lines.log; | |
MISSING_TICKETS=$( grep -v -E 'FL-[0-9]+' lines.log ); | |
if [ -n "$MISSING_TICKETS" ]; then | |
echo "Error: Missing ticket number in \`TODO\` comment(s)" >> $GITHUB_STEP_SUMMARY; | |
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY; | |
echo "$MISSING_TICKETS" >> $GITHUB_STEP_SUMMARY; | |
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY; | |
echo "Error: Missing issue number in comment(s):"; | |
echo "$MISSING_TICKETS"; | |
exit 1; | |
else | |
echo "No new TODOs without tickets found" >> $GITHUB_STEP_SUMMARY; | |
fi | |
- name: 'Check Python code formatting' | |
id: syntax_check_py | |
if: always() | |
run: | | |
set +e; | |
./fbt -s lint_py 2>&1 | tee lint-py.log; | |
if [ "${PIPESTATUS[0]}" -ne 0 ]; then | |
# Save multiline output | |
echo "errors=1" >> $GITHUB_OUTPUT; | |
printf "Python Lint errors:\n\`\`\`\n" >> $GITHUB_STEP_SUMMARY; | |
echo "$(cat lint-py.log)" >> $GITHUB_STEP_SUMMARY; | |
printf "\n\`\`\`\n" >> $GITHUB_STEP_SUMMARY; | |
exit 1; | |
else | |
echo "Python Lint: all good ✨" >> $GITHUB_STEP_SUMMARY; | |
fi | |
- name: 'Check C++ code formatting' | |
id: syntax_check_cpp | |
if: always() | |
run: | | |
set +e; | |
./fbt -s lint 2>&1 | tee lint-cpp.log; | |
if [ "${PIPESTATUS[0]}" -ne 0 ]; then | |
# Save multiline output | |
echo "errors=1" >> $GITHUB_OUTPUT; | |
printf "C Lint errors:\n\`\`\`\n" >> $GITHUB_STEP_SUMMARY; | |
echo "$(cat lint-cpp.log)" >> $GITHUB_STEP_SUMMARY; | |
printf "\n\`\`\`\n" >> $GITHUB_STEP_SUMMARY; | |
exit 1; | |
else | |
echo "C Lint: all good ✨" >> $GITHUB_STEP_SUMMARY; | |
fi | |
- name: 'Check image assets' | |
if: always() | |
run: | | |
set +e; | |
./fbt -s lint_img 2>&1 | tee lint-assets.log; | |
if [ "${PIPESTATUS[0]}" -ne 0 ]; then | |
# Save multiline output | |
echo "errors=1" >> $GITHUB_OUTPUT; | |
printf "Image Lint errors:\n\`\`\`\n" >> $GITHUB_STEP_SUMMARY; | |
echo "$(cat lint-assets.log)" >> $GITHUB_STEP_SUMMARY; | |
printf "\n\`\`\`\n" >> $GITHUB_STEP_SUMMARY; | |
exit 1; | |
else | |
echo "Image Lint: all good ✨" >> $GITHUB_STEP_SUMMARY; | |
fi | |
- name: Report code formatting errors | |
if: ( steps.syntax_check_py.outputs.errors || steps.syntax_check_cpp.outputs.errors ) && github.event.pull_request | |
run: | | |
echo "Code formatting errors found"; | |
echo "Please run './fbt format' or './fbt format_py' to fix them"; | |
exit 1; |