Anirud/lc GitHub actions #9
Workflow file for this run
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 and License Check | |
on: | |
push: | |
branches: | |
- main | |
pull_request: | |
branches: | |
- "main" | |
- "staging" | |
types: | |
- opened | |
- reopened | |
- synchronize | |
- assigned | |
- review_requested | |
jobs: | |
lint: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Set up Node.js | |
uses: actions/setup-node@v3 | |
with: | |
node-version: '16' | |
- name: Install dependencies | |
working-directory: app/frontend # Adjust path according to your repo structure | |
run: npm install | |
- name: Run ESLint and Filter Errors | |
working-directory: app/frontend | |
id: run_eslint | |
run: | | |
set +e | |
output=$(npm run lint --silent 2>&1) | |
exit_code=$? | |
echo "$output" | |
clean_output=$(echo "$output" | sed 's/\x1b\[[0-9;]*m//g') # Remove ANSI escape codes | |
echo "CLEAN_OUTPUT<<EOF" >> $GITHUB_ENV | |
echo "$clean_output" >> $GITHUB_ENV | |
echo "EOF" >> $GITHUB_ENV | |
# Extract and format file names with 'missing header' and other ESLint errors | |
header_errors=$(echo "$clean_output" | grep 'missing header') | |
lint_errors=$(echo "$clean_output" | grep 'error' | grep -v 'missing header') | |
# Format the output to highlight file names | |
format_output() { | |
echo "$1" | while read -r line; do | |
file=$(echo "$line" | awk '{print $1}') | |
error_msg=$(echo "$line" | cut -d' ' -f3-) | |
# Generate markdown link to the file | |
file_link="[**$file**](https://github.com/${GITHUB_REPOSITORY}/blob/${GITHUB_SHA}/${file})" | |
echo "$file_link $error_msg" | |
done | |
} | |
formatted_header_errors=$(format_output "$header_errors") | |
formatted_lint_errors=$(format_output "$lint_errors") | |
# Combine formatted outputs | |
combined_errors="$formatted_header_errors\n$formatted_lint_errors" | |
# Check if there are any header or lint errors | |
if [ -n "$combined_errors" ]; then | |
echo "Errors found." | |
echo "COMBINED_ERRORS<<EOF" >> $GITHUB_ENV | |
echo -e "$combined_errors" >> $GITHUB_ENV | |
echo "EOF" >> $GITHUB_ENV | |
echo "HAS_ERRORS=true" >> $GITHUB_ENV | |
else | |
echo "No relevant errors found." | |
echo "HAS_ERRORS=false" >> $GITHUB_ENV | |
fi | |
exit 0 # Always exit with 0 to avoid failing the step | |
- name: Comment on PR with ESLint and Header Errors | |
if: env.HAS_ERRORS == 'true' | |
uses: actions/github-script@v7 | |
with: | |
script: | | |
const lintOutput = process.env.COMBINED_ERRORS; | |
const issueNumber = context.issue.number || context.payload.pull_request.number; | |
const owner = context.repo.owner; | |
const repo = context.repo.repo; | |
if (lintOutput && issueNumber) { | |
const commentBody = `## Frontend Project: ESLint and License Header Issues\n\`\`\`\n${lintOutput}\n\`\`\`\nPlease review and resolve the ESLint errors and missing license headers.`; | |
await github.rest.issues.createComment({ | |
issue_number: issueNumber, | |
owner: owner, | |
repo: repo, | |
body: commentBody | |
}); | |
} else { | |
console.log("No relevant errors to report."); | |
- name: Fail if Errors Exist | |
if: env.HAS_ERRORS == 'true' | |
run: exit 1 # Fail the workflow if errors exist |