ProxmoxVE/.github/workflows/script-formatting.yaml
Sébastiaan bedd186320 Add code formatting checks
tesT

Fix formatting

Fix formatting of scripts
2025-01-04 17:44:50 +01:00

93 lines
3.0 KiB
YAML

name: Check file formatting
on:
push:
branches:
- main
pull_request:
paths:
- "**/*.sh"
jobs:
shfmt:
name: Shell scripts
runs-on: ubuntu-latest
permissions:
pull-requests: write
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: ${{ github.event_name == 'pull_request' && 2 || 0 }}
- name: Set up Go
uses: actions/setup-go@v5
- name: Install shfmt
run: |
go install mvdan.cc/sh/v3/cmd/shfmt@latest
echo "$GOPATH/bin" >> $GITHUB_PATH
- name: Get changed files
id: changed-files
run: |
if ${{ github.event_name == 'pull_request' }}; then
echo "files=$(git diff --name-only -r HEAD^1 HEAD | grep '\.sh$' | xargs)" >> $GITHUB_OUTPUT
else
echo "files=$(git diff --name-only ${{ github.event.before }} ${{ github.event.after }} | grep '\.sh$' | xargs)" >> $GITHUB_OUTPUT
fi
- name: Run shfmt
id: shfmt
run: |
set +e
shfmt_output=$(shfmt -d ${{ steps.changed-files.outputs.files }})
if [[ $? -eq 0 ]]; then
exit 0
else
echo "diff=\"$(echo -n "$shfmt_output" | base64 -w 0)\"" >> $GITHUB_OUTPUT
echo -e $shfmt_output
exit 1
fi
- name: Post comment with results
if: always() && github.event_name == 'pull_request'
uses: actions/github-script@v6
with:
script: |
const result = '${{ job.status }}' === 'success' ? 'success' : 'failure';
const diff = Buffer.from('${{ steps.shfmt.outputs.diff }}', 'base64').toString();
const issueNumber = context.payload.pull_request ? context.payload.pull_request.number : null;
const commentIdentifier = '<!-- shfmt-comment -->';
let newCommentBody;
if (result === 'failure') {
newCommentBody = `:x: We found issues in the formatting of the following changed files:\n\n\`\`\`diff\n${diff}\n\`\`\`\n${commentIdentifier}`;
} else {
newCommentBody = `:rocket: All changed shell scripts are formatted correctly! \n ${commentIdentifier}`;
}
if (issueNumber) {
const { data: comments } = await github.rest.issues.listComments({
...context.repo,
issue_number: issueNumber
});
const existingComment = comments.find(comment => comment.body.includes(commentIdentifier));
if (existingComment) {
await github.rest.issues.updateComment({
...context.repo,
comment_id: existingComment.id,
body: newCommentBody
});
} else {
await github.rest.issues.createComment({
...context.repo,
issue_number: issueNumber,
body: newCommentBody
});
}
}