add github actions workflows #17
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: Front-End Linter SPDX Licenses Checker | |
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 | |
with: | |
token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Set up Node.js | |
uses: actions/setup-node@v3 | |
with: | |
node-version: '16' | |
- name: Install dependencies | |
working-directory: app/frontend | |
run: npm install | |
- name: Run ESLint with Auto-fix | |
working-directory: app/frontend | |
run: npm run lint | |
- name: Check for Changes and Commit Fixes | |
working-directory: app/frontend | |
run: | | |
git config --global user.email "github-actions[bot]@users.noreply.github.com" | |
git config --global user.name "GitHub Actions Bot" | |
if [[ `git status --porcelain` ]]; then | |
echo "Changes detected after ESLint auto-fix. Committing changes." | |
git add . | |
git commit -m "chore: auto-fix ESLint issues" | |
git push origin ${{ github.ref_name }} # Push changes back to the branch | |
else | |
echo "No changes detected." | |
fi | |
- 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 with separators | |
grouped_errors="" | |
current_file="" | |
errors_for_file="" | |
has_errors=false | |
missing_lc_headers=false # Flag for missing LC headers | |
lc_flagged_files="" # To store flagged files for license headers | |
while IFS= read -r line; do | |
if echo "$line" | grep -q '^\s*\/'; then | |
# Detected a file path line, add to grouped_errors if it contains errors | |
if [ "$has_errors" = true ]; then | |
grouped_errors+="$current_file\n$errors_for_file\n------------------------------------------------------------------------------------------------------------------------------------------\n" | |
errors_for_file="" # Reset error collection for next file | |
has_errors=false # Reset error flag for the next file | |
fi | |
current_file=$(echo "$line" | sed 's/\n//g') # Clean any \n characters from the file path | |
elif echo "$line" | grep -q 'error'; then | |
# Detected an error line, associate with the current file | |
errors_for_file+=" $line\n" | |
has_errors=true # Mark that this file has errors | |
# Check if the error is related to missing LC headers | |
if echo "$line" | grep -q 'missing header'; then | |
missing_lc_headers=true | |
errors_for_file+="!Flagged: LC header missing\n" | |
lc_flagged_files+="${current_file}\n" # Add this file to LC header flagged list | |
fi | |
fi | |
done <<< "$clean_output" | |
# Add any remaining errors after the loop | |
if [ "$has_errors" = true ]; then | |
grouped_errors+="$current_file\n$errors_for_file\n" | |
fi | |
# 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 | |
# Store flagged LC header files in environment variable | |
if [ "$missing_lc_headers" = true ]; then | |
echo "LC headers missing in one or more files." | |
echo "MISSING_LC_HEADERS=true" >> $GITHUB_ENV | |
# Trim excess \n and store cleaned file paths in env variable | |
echo "LC_FLAGGED_FILES<<EOF" >> $GITHUB_ENV | |
echo -e "$(echo -e "$lc_flagged_files" | sed '/^\s*$/d')" >> $GITHUB_ENV # Remove empty lines and ensure clean file paths | |
echo "EOF" >> $GITHUB_ENV | |
else | |
echo "MISSING_LC_HEADERS=false" >> $GITHUB_ENV | |
fi | |
exit 0 # Always exit with 0 to avoid failing the step | |
- name: Comment on PR with ESLint Errors and LC Headers | |
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; | |
// Initialize the comment body | |
let commentBody = ""; | |
// Check for missing license headers and prioritize them in the comment | |
if (process.env.MISSING_LC_HEADERS === 'true') { | |
const flaggedFiles = process.env.LC_FLAGGED_FILES.trim(); | |
commentBody += `## 🚨 SPDX-License Header Errors\n\nThe following files are missing the required license headers:\n\n\`\`\`\n${flaggedFiles}\n\`\`\`\nPlease ensure each of these files includes a valid SPDX license identifier. This is essential for maintaining licensing compliance. Your prompt attention and cooperation in updating these files are greatly appreciated. Thank you!\n\n---\n`; | |
} | |
// Add ESLint errors after license header issues | |
if (lintErrors) { | |
commentBody += `## Frontend Project: ESLint Errors\n\`\`\`\n${lintErrors}\n\`\`\`\nPlease review and resolve the ESLint errors.`; | |
} | |
// Post the comment if errors are present | |
if (commentBody.trim() && issueNumber) { | |
await github.rest.issues.createComment({ | |
issue_number: issueNumber, | |
owner: owner, | |
repo: repo, | |
body: commentBody | |
}); | |
} else { | |
console.log("No relevant errors to report."); | |
} | |
- name: Fail the Workflow if LC Headers Are Missing | |
if: env.MISSING_LC_HEADERS == 'true' | |
run: | | |
echo "Failing the workflow because LC headers are missing." | |
exit 1 |