Skip to content

add github actions workflows #17

add github actions workflows

add github actions workflows #17

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