-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
2 changed files
with
217 additions
and
0 deletions.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,102 @@ | ||
|
||
# | ||
|
||
name: Check SPDX Licenses | ||
|
||
on: | ||
workflow_dispatch: | ||
workflow_call: | ||
pull_request: | ||
branches: | ||
- "main" | ||
- "staging" | ||
types: | ||
- opened | ||
- reopened | ||
- synchronize | ||
- assigned | ||
- review_requested | ||
|
||
jobs: | ||
check-spdx-licenses: | ||
runs-on: ubuntu-20.04 | ||
steps: | ||
- uses: actions/checkout@v4 | ||
- uses: actions/[email protected] | ||
with: | ||
cache: "pip" | ||
python-version: "3.8" | ||
- name: Install copyright check tool | ||
run: pip install git+https://github.com/espressif/check-copyright.git@master | ||
- name: Check SPDX licenses | ||
id: check_spdx_licenses | ||
run: | | ||
set +e | ||
output=$(python -m check_copyright --verbose --dry-run --config ./check_copyright_config.yaml . 2>&1) | ||
exit_code=$? | ||
clean_output=$(echo "$output" | sed 's/\x1b\[[0-9;]*m//g') | ||
echo "CLEAN_OUTPUT<<EOF" >> $GITHUB_ENV | ||
echo "$clean_output" >> $GITHUB_ENV | ||
echo "EOF" >> $GITHUB_ENV | ||
echo "EXIT_CODE=$exit_code" >> $GITHUB_ENV | ||
exit 0 | ||
- name: Debug Extracted Files | ||
run: | | ||
echo "Extracted Files:" | ||
echo "$CLEAN_OUTPUT" | ||
- name: Extract Files | ||
id: extract_files | ||
run: | | ||
set +e | ||
files=$(echo "$CLEAN_OUTPUT" | awk ' | ||
/Files which failed the copyright check:/, /Additional information about this hook and copyright headers may be found here:/ { | ||
if ($0 !~ /Files which failed the copyright check:/ && $0 !~ /Additional information about this hook and copyright headers may be found here:/) print | ||
} | ||
/Some files are without a copyright note and a license header needs to be added:/, /Additional information about this hook and copyright headers may be found here:/ { | ||
if ($0 !~ /Some files are without a copyright note and a license header needs to be added:/ && $0 !~ /Additional information about this hook and copyright headers may be found here:/) print | ||
}' | sed 's/^ *//' | sed '/^$/d' | grep '^.') | ||
echo "FILES<<EOF" >> $GITHUB_ENV | ||
echo "$files" >> $GITHUB_ENV | ||
echo "EOF" >> $GITHUB_ENV | ||
echo "Extracted Files: $files" | ||
exit 0 | ||
- name: Debug Extracted Files | ||
run: | | ||
echo "Extracted Files:" | ||
echo "$FILES" | ||
- name: Extract File Paths | ||
if: env.FILES != '' | ||
run: | | ||
# Extract lines starting with './' but ignore any paths following "Modified files:" until a stop marker | ||
files_clean=$(echo "$FILES" | awk '/^Modified files:/ {ignore = 1} /^Above is a list of files/ {ignore = 0} !ignore && /^\.\// {print}' | sort | uniq) | ||
# Save the cleaned files into a new environment variable 'FILES_CLEAN' | ||
echo "FILES_CLEAN<<EOF" >> $GITHUB_ENV | ||
echo "$files_clean" >> $GITHUB_ENV | ||
echo "EOF" >> $GITHUB_ENV | ||
echo "Extracted Paths: $files_clean" | ||
- name: Debug Extracted Paths | ||
run: | | ||
echo "Extracted Paths:" | ||
echo "$FILES_CLEAN" | ||
echo "---------------------------------" | ||
- name: Comment on PR or Issue | ||
if: env.FILES_CLEAN != '' | ||
uses: actions/github-script@v7 | ||
with: | ||
script: | | ||
const formattedOutput = process.env.FILES_CLEAN; | ||
const issueNumber = context.issue.number || context.payload.pull_request.number; | ||
const owner = context.repo.owner; | ||
const repo = context.repo.repo; | ||
if (formattedOutput) { | ||
const commentBody = `Our automated SPDX license verification process has discovered that the following files are missing a license header:\n\`\`\`\n${formattedOutput}\n\`\`\`\nPlease ensure each indicated file includes a valid SPDX license identifier. This is essential for maintaining licensing compliance. Your attention and cooperation in updating these files are greatly appreciated. Thank you.`; | ||
await github.rest.issues.createComment({ | ||
issue_number: issueNumber, | ||
owner: owner, | ||
repo: repo, | ||
body: commentBody | ||
}); | ||
core.setFailed("SPDX license issues found."); | ||
} else { | ||
console.log("No SPDX license issues found."); | ||
} |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,115 @@ | ||
# | ||
|
||
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 with separators | ||
grouped_errors="" | ||
current_file="" | ||
errors_for_file="" | ||
has_errors=false | ||
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="$line" | ||
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 | ||
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 | ||
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 |