name: "Check formatting of Rust code with rustfmt" description: | Run `cargo fmt` and check Rust code. Highlights places which are not correctly formatted. branding: icon: "check-square" color: "yellow" inputs: manifest-path: description: "Specify the --manifest-path argument to rustfmt" required: false default: "./Cargo.toml" runs: using: composite steps: - name: Rustfmt Job Summary shell: bash env: MANIFEST_PATH: ${{ inputs.manifest-path }} run: | # Run cargo and store the original output CARGO_STATUS=0 CARGO_OUTPUT=$(cargo fmt --all --manifest-path="$MANIFEST_PATH" -- --color=always --check 2>/dev/null) || CARGO_STATUS=$? if [ ${CARGO_STATUS} -eq 0 ]; then cat <> $GITHUB_STEP_SUMMARY # Rustfmt Results The code is formatted perfectly! MARKDOWN_INTRO else cat <> $GITHUB_STEP_SUMMARY # Rustfmt Results \`cargo fmt\` reported formatting errors in the following locations. You can fix them by executing the following command and committing the changes. \`\`\`bash cargo fmt --all \`\`\` MARKDOWN_INTRO echo "${CARGO_OUTPUT}" | # Strip color codes sed 's/\x1B\[[0-9;]*[A-Za-z]\x0f\?//g' | # Strip (some) cursor movements sed 's/\x1B.[A-G]//g' | tr "\n" "\r" | # Wrap each location into a HTML details sed -E 's#Diff in ([^\r]*?)( at line |:)([[:digit:]]+):\r((:?[ +-][^\r]*\r)+)#
\n\1:\3\n\n```diff\n\4```\n\n
\n\n#g' | tr "\r" "\n" >> $GITHUB_STEP_SUMMARY fi # Print the original cargo message echo "${CARGO_OUTPUT}" # Exit with the same status as cargo exit "${CARGO_STATUS}"