Skip to content

[FIX] Hadoop-Spark-OCI-sample: Fixed issues with uses cases #112

[FIX] Hadoop-Spark-OCI-sample: Fixed issues with uses cases

[FIX] Hadoop-Spark-OCI-sample: Fixed issues with uses cases #112

# Copyright (c) 2024, 2026, Oracle and/or its affiliates. All rights reserved.
# The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/
name: PR File Header Check
on:
pull_request:
types: [opened, synchronize, reopened]
jobs:
check-file-headers:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Check UPL license headers
run: |
CURRENT_YEAR=$(date +%Y)
LICENSE_TEXT_COPYRIGHT="Copyright (c) 2024, ${CURRENT_YEAR}, Oracle and/or its affiliates. All rights reserved."
LICENSE_TEXT_UPL="The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/"
# Get list of changed files in the PR
CHANGED_FILES=$(git diff --name-only --diff-filter=d origin/${{ github.base_ref }}...HEAD)
if [ -z "$CHANGED_FILES" ]; then
echo "No changed files found."
exit 0
fi
FAILED=0
for FILE in $CHANGED_FILES; do
# Skip markdown, json, csv and svg files
if [[ "$FILE" == *.md ]] || [[ "$FILE" == *.json ]] || [[ "$FILE" == *.csv ]] || [[ "$FILE" == *.svg ]]; then
echo "Skipping: $FILE"
continue
fi
# Skip binary files or non-existent files
if [ ! -f "$FILE" ] || ! file "$FILE" | grep -q text; then
echo "Skipping (binary/missing): $FILE"
continue
fi
# Determine comment prefix based on file extension
case "$FILE" in
*.go|*.java)
PREFIX="//"
;;
*.html)
PREFIX="HTML"
;;
*.js|*.css|*.ts|*.tsx|*.mjs)
PREFIX="BLOCK"
;;
*.sql)
PREFIX="--"
;;
*)
PREFIX="#"
;;
esac
if [[ "$PREFIX" == "HTML" ]]; then
LINE1="<!-- ${LICENSE_TEXT_COPYRIGHT} -->"
LINE2="<!-- ${LICENSE_TEXT_UPL} -->"
elif [[ "$PREFIX" == "BLOCK" ]]; then
LINE1="/* ${LICENSE_TEXT_COPYRIGHT} */"
LINE2="/* ${LICENSE_TEXT_UPL} */"
else
LINE1="${PREFIX} ${LICENSE_TEXT_COPYRIGHT}"
LINE2="${PREFIX} ${LICENSE_TEXT_UPL}"
fi
EXPECTED_LINES="1-2"
if [[ "$FILE" == *.sh || "$FILE" == *.sh.tftpl ]]; then
SHEBANG=$(sed -n '1p' "$FILE")
if [[ "$SHEBANG" != \#!* ]]; then
echo "BAD - $FILE — missing shebang on line 1"
FAILED=1
continue
fi
ACTUAL_LINE1=$(sed -n '3p' "$FILE" | tr -d '\r')
ACTUAL_LINE2=$(sed -n '4p' "$FILE" | tr -d '\r')
EXPECTED_LINES="3-4"
elif [[ "$FILE" == *.cloud-init.tftpl || "$FILE" == *.ps1-cloud-init.tftpl ]]; then
if [[ "$FILE" == *.ps1-cloud-init.tftpl ]]; then
EXPECTED_FIRST_LINE="#ps1_sysnative"
else
EXPECTED_FIRST_LINE="#cloud-config"
fi
FIRST_LINE=$(sed -n '1p' "$FILE" | tr -d '\r')
if [[ "$FIRST_LINE" != "$EXPECTED_FIRST_LINE" ]]; then
echo "BAD - $FILE — missing '${EXPECTED_FIRST_LINE}' on line 1"
FAILED=1
continue
fi
ACTUAL_LINE1=$(sed -n '3p' "$FILE" | tr -d '\r')
ACTUAL_LINE2=$(sed -n '4p' "$FILE" | tr -d '\r')
EXPECTED_LINES="3-4"
elif [[ "$FILE" == *.py ]]; then
FIRST_LINE=$(sed -n '1p' "$FILE")
if [[ "$FIRST_LINE" == \#!* ]]; then
ACTUAL_LINE1=$(sed -n '3p' "$FILE" | tr -d '\r')
ACTUAL_LINE2=$(sed -n '4p' "$FILE" | tr -d '\r')
EXPECTED_LINES="3-4"
else
ACTUAL_LINE1=$(sed -n '1p' "$FILE" | tr -d '\r')
ACTUAL_LINE2=$(sed -n '2p' "$FILE" | tr -d '\r')
fi
else
ACTUAL_LINE1=$(sed -n '1p' "$FILE" | tr -d '\r')
ACTUAL_LINE2=$(sed -n '2p' "$FILE" | tr -d '\r')
fi
if [ "$ACTUAL_LINE1" = "$LINE1" ] && [ "$ACTUAL_LINE2" = "$LINE2" ]; then
echo "GOOD - $FILE"
else
if [[ "$FILE" == *.sh || "$FILE" == *.py || "$FILE" == *.sh.tftpl || "$FILE" == *.cloud-init.tftpl || "$FILE" == *.ps1-cloud-init.tftpl ]]; then
echo "BAD - $FILE — missing or incorrect UPL license header (expected on lines ${EXPECTED_LINES})"
else
echo "BAD - $FILE — missing or incorrect UPL license header"
fi
if [ "$ACTUAL_LINE1" != "$LINE1" ]; then
echo " Expected: $LINE1"
echo " Got: $ACTUAL_LINE1"
fi
if [ "$ACTUAL_LINE2" != "$LINE2" ]; then
echo " Expected: $LINE2"
echo " Got: $ACTUAL_LINE2"
fi
FAILED=1
fi
done
if [ "$FAILED" -eq 1 ]; then
echo ""
echo "::error::Some files are missing the required Oracle UPL license header."
exit 1
fi
echo ""
echo "All changed files contain the required UPL license header."