Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
159 changes: 146 additions & 13 deletions .github/workflows/pr-build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -28,16 +28,69 @@ run-name: >

jobs:

check_changes:
runs-on: ubuntu-latest
outputs:
should_build: ${{ steps.filter.outputs.should_build }}
changed_files: ${{ steps.filter.outputs.changed_files }}
steps:
- name: Checkout code
uses: actions/checkout@v6
with:
fetch-depth: 0
ref: ${{ github.event.pull_request.head.sha }}

- name: Check for relevant file changes
id: filter
run: |
if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then
echo "should_build=true" >> $GITHUB_OUTPUT
echo "Workflow dispatch - proceeding with build"
exit 0
fi

# Fetch base branch with full history
git fetch origin ${{ github.base_ref }}
CHANGED_FILES=$(git diff --name-only origin/${{ github.base_ref }}...HEAD)

echo "Changed files:"
echo "$CHANGED_FILES"

# Store changed files for reuse in later jobs
echo "changed_files<<EOF" >> $GITHUB_OUTPUT
echo "$CHANGED_FILES" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT

# Check for build_info.json, .sh scripts (excluding specific directories), or Dockerfile
RELEVANT_CHANGES=$(echo "$CHANGED_FILES" | grep -E '(build_info\.json|\.sh$|Dockerfile)' | grep -vE '^(gha-script|process_bom|script|templates|travis-currency-ymls|travis-ymls)/' || true)

if [ -n "$RELEVANT_CHANGES" ]; then
echo "should_build=true" >> $GITHUB_OUTPUT
echo "✅ Found relevant changes:"
echo "$RELEVANT_CHANGES"
else
echo "should_build=false" >> $GITHUB_OUTPUT
echo "⏭️ Skipping PR build CI check - no changes related to build_info.json, build scripts (.sh), or Dockerfile"
fi

build_info:
needs: check_changes
if: needs.check_changes.outputs.should_build == 'true'
runs-on: ${{ github.event_name == 'pull_request' && 'ubuntu-24.04-ppc64le-p10' || inputs.large-runner }}
outputs:
wheel_build_enabled: ${{ steps.set_flags.outputs.wheel_build_enabled }}
has_sh_changes: ${{ steps.set_flags.outputs.has_sh_changes }}
has_dockerfile_changes: ${{ steps.set_flags.outputs.has_dockerfile_changes }}
docker_build_enabled: ${{ steps.set_flags.outputs.docker_build_enabled }}
build_package_enabled: ${{ steps.set_flags.outputs.build_package_enabled }}

steps:
- name: Checkout code (Pull Request)
if: github.event_name == 'pull_request'
uses: actions/checkout@v6
with:
fetch-depth: 0
ref: ${{ github.event.pull_request.head.sha }}
fetch-depth: 0
ref: ${{ github.event.pull_request.head.sha }}

- name: Checkout code (Workflow Dispatch)
if: github.event_name == 'workflow_dispatch'
Expand Down Expand Up @@ -77,8 +130,14 @@ jobs:

- name: Locate and parse build_info.json
run: |

CHANGED_FILES=$(git diff --name-only origin/${{ github.base_ref }}...HEAD)
# Reuse changed files from check_changes job
CHANGED_FILES="${{ needs.check_changes.outputs.changed_files }}"

# If workflow_dispatch, fetch and compute changed files
if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then
git fetch origin ${{ github.base_ref }} --depth=1
CHANGED_FILES=$(git diff --name-only origin/${{ github.base_ref }}...HEAD)
fi

BUILD_INFO_FILE=$(echo "$CHANGED_FILES" | grep 'build_info.json' | head -n 1)

Expand Down Expand Up @@ -113,6 +172,66 @@ jobs:
chmod +x ./gha-script/read_buildinfo.sh
bash ./gha-script/read_buildinfo.sh

- name: Set job control flags
id: set_flags
run: |
PACKAGE_DIR=$(jq -r '.package_dir // ""' $BUILD_INFO_FILE)
WHEEL_BUILD=$(jq -r '.wheel_build // "false"' $BUILD_INFO_FILE)

# Robust docker_build extraction
if jq -e '.docker_build == true or .docker_build == "true"' "$BUILD_INFO_FILE" > /dev/null; then
DOCKER_BUILD="true"
else
DOCKER_BUILD="false"
fi

# Check if .sh scripts changed in this package
SH_SCRIPT_CHANGED=$(echo "$CHANGED_FILES" | grep -E "^$PACKAGE_DIR/.*\.sh$" || true)

# Check if Dockerfile changed
DOCKERFILE_CHANGED=$(echo "$CHANGED_FILES" | grep -i 'Dockerfile' || true)

# Set outputs for wheel builds
if [ "$WHEEL_BUILD" == "true" ] && [ -n "$SH_SCRIPT_CHANGED" ]; then
echo "wheel_build_enabled=true" >> $GITHUB_OUTPUT
echo "✅ Wheel builds will run (WHEEL_BUILD=true and .sh scripts changed)"
else
echo "wheel_build_enabled=false" >> $GITHUB_OUTPUT
echo "⏭️ Wheel builds will be skipped (WHEEL_BUILD=$WHEEL_BUILD, .sh changes: ${SH_SCRIPT_CHANGED:-none})"
fi

# Set output for sh changes
if [ -n "$SH_SCRIPT_CHANGED" ]; then
echo "has_sh_changes=true" >> $GITHUB_OUTPUT
else
echo "has_sh_changes=false" >> $GITHUB_OUTPUT
fi

# Set outputs for docker build
if [ "$DOCKER_BUILD" == "true" ] && [ -n "$DOCKERFILE_CHANGED" ]; then
echo "docker_build_enabled=true" >> $GITHUB_OUTPUT
echo "has_dockerfile_changes=true" >> $GITHUB_OUTPUT
echo "✅ Docker build will run (BUILD_DOCKER=true and Dockerfile changed)"
else
echo "docker_build_enabled=false" >> $GITHUB_OUTPUT
if [ -n "$DOCKERFILE_CHANGED" ]; then
echo "has_dockerfile_changes=true" >> $GITHUB_OUTPUT
else
echo "has_dockerfile_changes=false" >> $GITHUB_OUTPUT
fi
echo "⏭️ Docker build will be skipped (BUILD_DOCKER=$DOCKER_BUILD, Dockerfile changes: ${DOCKERFILE_CHANGED:-none})"
fi

# Set output for build job (runs when build_info.json or .sh scripts change)
BUILD_INFO_CHANGED=$(echo "$CHANGED_FILES" | grep 'build_info\.json' || true)
if [ -n "$BUILD_INFO_CHANGED" ] || [ -n "$SH_SCRIPT_CHANGED" ]; then
echo "build_package_enabled=true" >> $GITHUB_OUTPUT
echo "✅ Build package job will run (build_info.json or .sh scripts changed)"
else
echo "build_package_enabled=false" >> $GITHUB_OUTPUT
echo "⏭️ Build package job will be skipped (no build_info.json or .sh script changes)"
fi

- name: Create scanner-env.sh
run: |
mkdir -p package-cache
Expand Down Expand Up @@ -149,6 +268,7 @@ jobs:

build:
needs: build_info
if: needs.build_info.outputs.build_package_enabled == 'true'
runs-on: ${{ github.event_name == 'pull_request' && 'ubuntu-24.04-ppc64le-p10' || inputs.large-runner }}

steps:
Expand All @@ -174,15 +294,16 @@ jobs:
echo "------------------- scanner-env.sh -----------------------------"
cat package-cache/scanner-env.sh

chmod +x ./gha-script/build_package.sh
bash ./gha-script/build_package.sh
echo "------------------- Executing changed scripts -----------------------------"
chmod +x ./gha-script/execute_changed_scripts.py
python3 ./gha-script/execute_changed_scripts.py

# ===================== WHEEL JOBS =====================


wheel_build_py39:
needs: build_info
if: ${{ success() }}
if: needs.build_info.outputs.wheel_build_enabled == 'true'
runs-on: ${{ github.event_name == 'pull_request' && 'ubuntu-24.04-ppc64le-p10' || inputs.large-runner }}
continue-on-error: true
env:
Expand Down Expand Up @@ -245,7 +366,7 @@ jobs:

wheel_build_py310:
needs: build_info
if: ${{ success() }}
if: needs.build_info.outputs.wheel_build_enabled == 'true'
runs-on: ${{ github.event_name == 'pull_request' && 'ubuntu-24.04-ppc64le-p10' || inputs.large-runner }}
continue-on-error: false
env:
Expand Down Expand Up @@ -308,7 +429,7 @@ jobs:

wheel_build_py311:
needs: build_info
if: ${{ success() }}
if: needs.build_info.outputs.wheel_build_enabled == 'true'
runs-on: ${{ github.event_name == 'pull_request' && 'ubuntu-24.04-ppc64le-p10' || inputs.large-runner }}
continue-on-error: false
env:
Expand Down Expand Up @@ -372,7 +493,7 @@ jobs:

wheel_build_py312:
needs: build_info
if: ${{ success() }}
if: needs.build_info.outputs.wheel_build_enabled == 'true'
runs-on: ${{ github.event_name == 'pull_request' && 'ubuntu-24.04-ppc64le-p10' || inputs.large-runner }}
continue-on-error: false
env:
Expand Down Expand Up @@ -434,7 +555,7 @@ jobs:

wheel_build_py313:
needs: build_info
if: ${{ success() }}
if: needs.build_info.outputs.wheel_build_enabled == 'true'
runs-on: ${{ github.event_name == 'pull_request' && 'ubuntu-24.04-ppc64le-p10' || inputs.large-runner }}
continue-on-error: true
env:
Expand Down Expand Up @@ -497,7 +618,7 @@ jobs:

wheel_build_py314:
needs: build_info
if: ${{ success() }}
if: needs.build_info.outputs.wheel_build_enabled == 'true'
runs-on: ${{ github.event_name == 'pull_request' && 'ubuntu-24.04-ppc64le-p10' || inputs.large-runner }}
continue-on-error: true
env:
Expand Down Expand Up @@ -561,7 +682,7 @@ jobs:

build_docker:
needs: build_info
if: ${{ success() }}
if: needs.build_info.outputs.docker_build_enabled == 'true'
runs-on: ${{ github.event_name == 'pull_request' && 'ubuntu-24.04-ppc64le-p10' || inputs.large-runner }}

steps:
Expand Down Expand Up @@ -614,3 +735,15 @@ jobs:
docker save -o package-cache/image.tar "$IMAGE_NAME"

ls -lh package-cache/image.tar












Loading