Anirud/lc GitHub actions #14
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 Capture Output | |
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 | |
# Process output to group errors under file paths | |
grouped_errors="" | |
current_file="" | |
while IFS= read -r line; do | |
if echo "$line" | grep -q '^\s*\/'; then | |
# Detected a file path line, update the current file | |
current_file="$line" | |
grouped_errors+="$line\n" | |
elif echo "$line" | grep -q 'error'; then | |
# Detected an error line, associate with the current file | |
grouped_errors+=" $line\n" | |
fi | |
done <<< "$clean_output" | |
# Store grouped errors in environment variable | |
if [ -n "$grouped_errors" ]; then | |
echo "Errors found." | |
echo "GROUPED_ERRORS<<EOF" >> $GITHUB_ENV | |
echo -e "$grouped_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 Errors | |
if: env.HAS_ERRORS == 'true' | |
uses: actions/github-script@v7 | |
with: | |
script: | | |
const lintErrors = process.env.GROUPED_ERRORS; | |
const issueNumber = context.payload.pull_request.number; | |
const owner = context.repo.owner; | |
const repo = context.repo.repo; | |
if (lintErrors && issueNumber) { | |
const commentBody = `## Frontend Project: ESLint Errors\n\`\`\`\n${lintErrors}\n\`\`\`\nPlease review and resolve the ESLint errors.`; | |
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 |