Repository navigation
Created build script for numba & llvmlite. #4501
Workflow file for this run
This file contains hidden or 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: PR build | |
| on: | |
| pull_request: | |
| branches: | |
| - master | |
| - replica-master | |
| workflow_dispatch: | |
| inputs: | |
| large-runner: | |
| description: "New runner to use for failing build" | |
| required: true | |
| default: "ubuntu-24.04-ppc64le-2xlarge-p10" | |
| type: choice | |
| options: | |
| - ubuntu-24.04-ppc64le-2xlarge-p10 | |
| - ubuntu-24.04-ppc64le-4xlarge-p10 | |
| pr_number: | |
| description: "PR number of failing build" | |
| required: true | |
| type: string | |
| run-name: > | |
| ${{ github.event_name == 'workflow_dispatch' | |
| && format('Retriggered build on {0} for PR {1}', inputs.large-runner, inputs.pr_number) | |
| || github.event.pull_request.title }} | |
| 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 }} | |
| # Per-UBI-major named outputs - each is a {script,tested_on} JSON object or "" | |
| script_ubi8: ${{ steps.emit.outputs.script_ubi8 }} | |
| script_ubi9: ${{ steps.emit.outputs.script_ubi9 }} | |
| script_ubi10: ${{ steps.emit.outputs.script_ubi10 }} | |
| 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 }} | |
| - name: Checkout code (Workflow Dispatch) | |
| if: github.event_name == 'workflow_dispatch' | |
| uses: actions/checkout@v6 | |
| with: | |
| ref: refs/pull/${{ inputs.pr_number }}/head | |
| - name: Debug - Check user and workspace ownership | |
| run: | | |
| echo "Current user: $USER" | |
| echo "Current user ID: $(id -u)" | |
| echo "Current group ID: $(id -g)" | |
| echo "Workspace directory: $(pwd)" | |
| echo "Workspace ownership:" | |
| ls -la . | head -20 | |
| echo "gha-script directory ownership:" | |
| ls -la ./gha-script | head -10 | |
| - name: Fix workspace permissions | |
| run: sudo chown -R $USER:$USER . | |
| - name: Install required packages | |
| run: | | |
| sudo apt update -y | |
| sudo apt-get install -y file jq | |
| - name: Install Python dependencies | |
| run: | | |
| pip3 install --force-reinstall -v "requests==2.31.0" | |
| pip3 install --upgrade docker | |
| - name: Set PR number | |
| run: echo "PR_NUMBER=${{ github.event.pull_request.number || inputs.pr_number }}" >> $GITHUB_ENV | |
| - name: Run validate_builds.py script with live logs | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: | | |
| python3 -u gha-script/validate_builds.py ${PR_NUMBER:-false} 2>&1 | tee build_log | |
| my_pid_status=${PIPESTATUS[0]} | |
| if [ "$my_pid_status" -ne 0 ]; then | |
| echo "Script failed for PR #${PR_NUMBER}" | |
| echo "::group::Validation Logs" | |
| tail -200 build_log | |
| echo "::endgroup::" | |
| exit 1 | |
| else | |
| echo "Script completed successfully for PR #${PR_NUMBER}" | |
| fi | |
| - name: Locate and parse build_info.json | |
| run: | | |
| # Reuse changed files from check_changes job | |
| CHANGED_FILES="${{ needs.check_changes.outputs.changed_files }}" | |
| # If workflow_dispatch, check_changes did not compute changed_files - fetch them now | |
| 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) | |
| if [ -z "$BUILD_INFO_FILE" ]; then | |
| echo "No build_info.json modified, trying to detect from changed files..." | |
| PACKAGE_DIR=$(echo "$CHANGED_FILES" \ | |
| | grep -vE '^(gha-script|process_bom|script|templates|travis-currency-ymls|travis-ymls)/' \ | |
| | head -n 1 \ | |
| | cut -d'/' -f1-2) | |
| BUILD_INFO_FILE="$PACKAGE_DIR/build_info.json" | |
| if [ ! -f "$BUILD_INFO_FILE" ]; then | |
| echo "Could not locate build_info.json!" | |
| exit 1 | |
| fi | |
| echo "Using fallback build_info: $BUILD_INFO_FILE" | |
| fi | |
| PACKAGE_NAME=$(jq -r '.package_name // ""' $BUILD_INFO_FILE) | |
| VERSION=$(jq -r '.version // ""' $BUILD_INFO_FILE) | |
| # Preserve the raw .version field from build_info.json as the real package | |
| # version (e.g. "v2.11.0"). VERSION may be overwritten below by the matched | |
| # version block key (e.g. "v2.10.*"), which is only a pattern for resolution. | |
| PACKAGE_VERSION="$VERSION" | |
| # Pick the version block whose build_script list has the MOST overlap | |
| # with the changed .sh files. This correctly handles the case where a | |
| # script also appears in older single-script blocks (e.g. scikit-learn_ubi_8.10.sh | |
| # is in both 1.5.0 and 1.9.0) - the new block wins because it matches more | |
| # changed files. The wildcard "*" key is always skipped - it is a catch-all | |
| # fallback, not a real version. | |
| # NOTE: if no .sh files changed (build_info.json only), this block is skipped | |
| # entirely and VERSION stays as the default from the .version field. | |
| CHANGED_SH=$(echo "$CHANGED_FILES" | grep '\.sh$' || true) | |
| if [ -n "$CHANGED_SH" ]; then | |
| SCALAR_KEYS='package_name|version|package_dir|wheel_build|docker_build|validate_build_script|base_docker_image|base_docker_variant|use_non_root_user|auditwheel_exclude' | |
| VERSION_KEYS=$(jq -r 'keys[] | select(test("^('"$SCALAR_KEYS"')$") | not) | select(. != "*")' "$BUILD_INFO_FILE" 2>/dev/null || true) | |
| best_ver="" | |
| best_count=0 | |
| for ver_key in $VERSION_KEYS; do | |
| bs=$(jq -c --arg k "$ver_key" '.[$k].build_script // empty' "$BUILD_INFO_FILE" 2>/dev/null || true) | |
| [ -z "$bs" ] && continue | |
| if echo "$bs" | jq -e 'type == "array"' >/dev/null 2>&1; then | |
| scripts=$(echo "$bs" | jq -r '.[]') | |
| else | |
| scripts=$(echo "$bs" | tr -d '"') | |
| fi | |
| match_count=0 | |
| for s in $scripts; do | |
| if echo "$CHANGED_SH" | grep -qF "$s"; then | |
| match_count=$((match_count + 1)) | |
| fi | |
| done | |
| if [ "$match_count" -gt "$best_count" ]; then | |
| best_count=$match_count | |
| best_ver="$ver_key" | |
| fi | |
| done | |
| if [ -n "$best_ver" ] && [ "$best_count" -gt 0 ]; then | |
| echo "Version block '$best_ver' matched $best_count changed script(s) - using that version instead of default '$VERSION'" | |
| VERSION="$best_ver" | |
| fi | |
| fi | |
| # Validate that the resolved version block key matches the 'version' field | |
| # value exactly. A mismatch (e.g. key "1.5.4" vs field "v1.5.4") means | |
| # currency-build, which uses the 'version' field as user input, will fail | |
| # to find the block and fall back to "*", silently skipping UBI variants. | |
| # Skip this check when: | |
| # - VERSION equals PACKAGE_VERSION (no override happened, or they already match) | |
| # - VERSION contains "*" (wildcard/glob key - intentionally different from field) | |
| if [ "$VERSION" != "$PACKAGE_VERSION" ] && [[ "$VERSION" != *"*"* ]]; then | |
| echo "ERROR: version block key '$VERSION' does not match the 'version' field value '$PACKAGE_VERSION' in build_info.json." | |
| echo " Currency-build receives VERSION='$PACKAGE_VERSION' as user input and would" | |
| echo " fail to find key '$VERSION', falling back to '*' and skipping UBI variants." | |
| echo " Fix: rename the version block key from '$VERSION' to '$PACKAGE_VERSION'." | |
| exit 1 | |
| fi | |
| echo "BUILD_INFO_FILE=$BUILD_INFO_FILE" >> $GITHUB_ENV | |
| echo "PACKAGE_NAME=$PACKAGE_NAME" >> $GITHUB_ENV | |
| echo "VERSION=$VERSION" >> $GITHUB_ENV | |
| echo "PACKAGE_VERSION=$PACKAGE_VERSION" >> $GITHUB_ENV | |
| echo "CHANGED_FILES<<EOF" >> $GITHUB_ENV | |
| echo "$CHANGED_FILES" >> $GITHUB_ENV | |
| echo "EOF" >> $GITHUB_ENV | |
| - name: Read build_info.json | |
| run: | | |
| sudo chown -R $USER:$USER . | |
| chmod +x ./gha-script/read_buildinfo.sh | |
| bash ./gha-script/read_buildinfo.sh | |
| - name: Emit per-UBI outputs | |
| id: emit | |
| run: | | |
| source variable.sh | |
| # Validation: for every changed .sh file enforce two hard rules: | |
| # 1. The script MUST have a '# Tested on' header - it is mandatory. | |
| # 2. The UBI slot for that script MUST already be populated by | |
| # read_buildinfo.sh via the version block in build_info.json. | |
| # An empty slot means the version block key does not match VERSION | |
| # (e.g. "1.5.4" vs "v1.5.4") and Currency-build would silently skip it. | |
| # Both conditions cause a hard stop - the PR must not be merged until fixed. | |
| # If no .sh files changed (build_info.json only), this loop does nothing. | |
| validation_failed=false | |
| while read -r changed_script; do | |
| [[ "$changed_script" != *.sh ]] && continue | |
| [ ! -f "$changed_script" ] && continue | |
| script_name=$(basename "$changed_script") | |
| raw_tested_on=$(grep "^# Tested on" "$changed_script" | head -1 \ | |
| | cut -d ':' -f2- \ | |
| | sed 's/^[[:space:]]*//' \ | |
| | tr '[:lower:]' '[:upper:]' \ | |
| | sed 's/[[:space:]]*:[[:space:]]*/:/g; s/UBI[[:space:]]*/UBI/g') | |
| # Rule 1: '# Tested on' is mandatory in every build script. | |
| if [ -z "$raw_tested_on" ]; then | |
| echo "ERROR: '$script_name' is missing the mandatory '# Tested on' header." | |
| echo " Every build script must declare the UBI version it targets, e.g.:" | |
| echo " # Tested on : UBI:10.2" | |
| validation_failed=true | |
| continue | |
| fi | |
| major=$(echo "$raw_tested_on" | sed 's/.*UBI[: ]*\([0-9][0-9]*\).*/\1/') | |
| case "$major" in ''|*[!0-9]*) | |
| echo "ERROR: '$script_name' has an unrecognised '# Tested on' value: '$raw_tested_on'." | |
| echo " Expected format: UBI:<major>.<minor> e.g. UBI:10.2" | |
| validation_failed=true | |
| continue | |
| esac | |
| # Rule 2: the UBI slot must already be filled by read_buildinfo.sh. | |
| case "$major" in | |
| 8) | |
| if [ -z "$SCRIPT_UBI8" ]; then | |
| echo "ERROR: '$script_name' targets UBI8 (# Tested on: $raw_tested_on) but SCRIPT_UBI8 is empty." | |
| echo " The version block key in build_info.json does not match VERSION='$VERSION'." | |
| echo " Fix the version block key so it exactly matches the 'version' field value." | |
| validation_failed=true | |
| fi ;; | |
| 9) | |
| if [ -z "$SCRIPT_UBI9" ]; then | |
| echo "ERROR: '$script_name' targets UBI9 (# Tested on: $raw_tested_on) but SCRIPT_UBI9 is empty." | |
| echo " The version block key in build_info.json does not match VERSION='$VERSION'." | |
| echo " Fix the version block key so it exactly matches the 'version' field value." | |
| validation_failed=true | |
| fi ;; | |
| 10) | |
| if [ -z "$SCRIPT_UBI10" ]; then | |
| echo "ERROR: '$script_name' targets UBI10 (# Tested on: $raw_tested_on) but SCRIPT_UBI10 is empty." | |
| echo " The version block key in build_info.json does not match VERSION='$VERSION'." | |
| echo " Fix the version block key so it exactly matches the 'version' field value." | |
| validation_failed=true | |
| fi ;; | |
| esac | |
| done <<< "$CHANGED_FILES" | |
| if [ "$validation_failed" = "true" ]; then | |
| echo "" | |
| echo "PR blocked: fix the errors above in build_info.json or the build script(s) before merging." | |
| echo "Currency-build has no safety net and would silently produce an incomplete build." | |
| exit 1 | |
| fi | |
| echo "SCRIPT_UBI8=$SCRIPT_UBI8" | |
| echo "SCRIPT_UBI9=$SCRIPT_UBI9" | |
| echo "SCRIPT_UBI10=$SCRIPT_UBI10" | |
| # Use multiline delimiter syntax so JSON double-quotes are not truncated | |
| { | |
| echo "script_ubi8<<__EOF__" | |
| echo "$SCRIPT_UBI8" | |
| echo "__EOF__" | |
| echo "script_ubi9<<__EOF__" | |
| echo "$SCRIPT_UBI9" | |
| echo "__EOF__" | |
| echo "script_ubi10<<__EOF__" | |
| echo "$SCRIPT_UBI10" | |
| echo "__EOF__" | |
| } >> $GITHUB_OUTPUT | |
| - name: Set job control flags | |
| id: set_flags | |
| run: | | |
| if [ -z "$BUILD_INFO_FILE" ]; then | |
| echo "ERROR: BUILD_INFO_FILE is not set - cannot determine job control flags" | |
| exit 1 | |
| fi | |
| if [ ! -f "$BUILD_INFO_FILE" ]; then | |
| echo "ERROR: BUILD_INFO_FILE does not exist: $BUILD_INFO_FILE" | |
| exit 1 | |
| fi | |
| PACKAGE_DIR=$(jq -r '.package_dir // ""' $BUILD_INFO_FILE) | |
| # Strip trailing slash if present - prevents double-slash in regex (e.g. "m/multidict/" -> "m/multidict") | |
| PACKAGE_DIR="${PACKAGE_DIR%/}" | |
| 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 | |
| PACKAGE_DIR=$(jq -r '.package_dir // ""' $BUILD_INFO_FILE) | |
| # Strip trailing slash to prevent double-slash in the per-job grep: | |
| # grep -E "^$PACKAGE_DIR/.*\.sh$" | |
| # Without this, "n/nbconvert/" becomes "n/nbconvert//.*\.sh$" and never matches. | |
| PACKAGE_DIR="${PACKAGE_DIR%/}" | |
| 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 | |
| # Write scanner-env.sh without leading indentation spaces. | |
| # CHANGED_FILES is written via a separate heredoc so its newlines are preserved. | |
| { | |
| echo "export PACKAGE_NAME=$PACKAGE_NAME" | |
| echo "export VERSION=$PACKAGE_VERSION" | |
| echo "export PACKAGE_DIR=$PACKAGE_DIR" | |
| echo "export WHEEL_BUILD=$WHEEL_BUILD" | |
| echo "export BUILD_DOCKER=$DOCKER_BUILD" | |
| printf 'export CHANGED_FILES=%q\n' "$CHANGED_FILES" | |
| } > package-cache/scanner-env.sh | |
| mv variable.sh package-cache/ | |
| - name: Archive package cache | |
| run: tar -czf package-cache.tar.gz package-cache/ | |
| - name: Upload package cache | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: package-cache | |
| path: package-cache.tar.gz | |
| # --------------------------------------------------------------------------- | |
| # BUILD JOBS - one per UBI major version. | |
| # Runs execute_changed_scripts.py inside the correct UBI container. | |
| # Each job only runs when a script exists for that UBI version. | |
| # All three are parallel (no inter-dependency). | |
| # --------------------------------------------------------------------------- | |
| build_ubi8: | |
| needs: build_info | |
| if: ${{ needs.build_info.outputs.build_package_enabled == 'true' && needs.build_info.outputs.script_ubi8 != '' }} | |
| runs-on: ${{ github.event_name == 'workflow_dispatch' && inputs.large-runner || 'ubuntu-24.04-ppc64le-p10' }} | |
| env: | |
| BUILD_SCRIPT: ${{ fromJson(needs.build_info.outputs.script_ubi8).script }} | |
| TESTED_ON: ${{ fromJson(needs.build_info.outputs.script_ubi8).tested_on }} | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| ref: ${{ github.event.pull_request.head.sha }} | |
| - name: Download package-cache | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: package-cache | |
| - name: Extract package cache | |
| run: tar -xzf package-cache.tar.gz | |
| - name: Build Package (UBI8) | |
| run: | | |
| # Capture the GHA job-level BUILD_SCRIPT before sourcing variable.sh, | |
| # which overwrites BUILD_SCRIPT with the first/backward-compat script. | |
| THIS_SCRIPT="$BUILD_SCRIPT" | |
| sudo chown -R $USER:$USER . | |
| source package-cache/variable.sh | |
| source package-cache/scanner-env.sh | |
| echo "--- Executing changed scripts for UBI8 (script: $THIS_SCRIPT) ---" | |
| # Filter CHANGED_FILES to only the script assigned to this UBI job. | |
| export CHANGED_FILES=$(echo "$CHANGED_FILES" | grep -F "$THIS_SCRIPT" || true) | |
| export BUILD_SCRIPT="$THIS_SCRIPT" | |
| chmod +x ./gha-script/execute_changed_scripts.py | |
| python3 -u ./gha-script/execute_changed_scripts.py | |
| build_ubi9: | |
| needs: build_info | |
| if: ${{ needs.build_info.outputs.build_package_enabled == 'true' && needs.build_info.outputs.script_ubi9 != '' }} | |
| runs-on: ${{ github.event_name == 'workflow_dispatch' && inputs.large-runner || 'ubuntu-24.04-ppc64le-p10' }} | |
| env: | |
| BUILD_SCRIPT: ${{ fromJson(needs.build_info.outputs.script_ubi9).script }} | |
| TESTED_ON: ${{ fromJson(needs.build_info.outputs.script_ubi9).tested_on }} | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| ref: ${{ github.event.pull_request.head.sha }} | |
| - name: Download package-cache | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: package-cache | |
| - name: Extract package cache | |
| run: tar -xzf package-cache.tar.gz | |
| - name: Build Package (UBI9) | |
| run: | | |
| THIS_SCRIPT="$BUILD_SCRIPT" | |
| sudo chown -R $USER:$USER . | |
| source package-cache/variable.sh | |
| source package-cache/scanner-env.sh | |
| echo "--- Executing changed scripts for UBI9 (script: $THIS_SCRIPT) ---" | |
| export CHANGED_FILES=$(echo "$CHANGED_FILES" | grep -F "$THIS_SCRIPT" || true) | |
| export BUILD_SCRIPT="$THIS_SCRIPT" | |
| chmod +x ./gha-script/execute_changed_scripts.py | |
| python3 -u ./gha-script/execute_changed_scripts.py | |
| build_ubi10: | |
| needs: build_info | |
| if: ${{ needs.build_info.outputs.build_package_enabled == 'true' && needs.build_info.outputs.script_ubi10 != '' }} | |
| runs-on: ${{ github.event_name == 'workflow_dispatch' && inputs.large-runner || 'ubuntu-24.04-ppc64le-p10' }} | |
| env: | |
| BUILD_SCRIPT: ${{ fromJson(needs.build_info.outputs.script_ubi10).script }} | |
| TESTED_ON: ${{ fromJson(needs.build_info.outputs.script_ubi10).tested_on }} | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| ref: ${{ github.event.pull_request.head.sha }} | |
| - name: Download package-cache | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: package-cache | |
| - name: Extract package cache | |
| run: tar -xzf package-cache.tar.gz | |
| - name: Build Package (UBI10) | |
| run: | | |
| THIS_SCRIPT="$BUILD_SCRIPT" | |
| sudo chown -R $USER:$USER . | |
| source package-cache/variable.sh | |
| source package-cache/scanner-env.sh | |
| echo "--- Executing changed scripts for UBI10 (script: $THIS_SCRIPT) ---" | |
| export CHANGED_FILES=$(echo "$CHANGED_FILES" | grep -F "$THIS_SCRIPT" || true) | |
| export BUILD_SCRIPT="$THIS_SCRIPT" | |
| chmod +x ./gha-script/execute_changed_scripts.py | |
| python3 -u ./gha-script/execute_changed_scripts.py | |
| # --------------------------------------------------------------------------- | |
| # WHEEL BUILD JOBS - one job per UBI version per Python version. | |
| # All parallel. UBI10 supports py312-py314 only (py310/py311 not supported). | |
| # PR builds do not run scan steps. | |
| # --------------------------------------------------------------------------- | |
| wheel_build_ubi8_py311: | |
| needs: build_info | |
| if: ${{ needs.build_info.outputs.wheel_build_enabled == 'true' && needs.build_info.outputs.script_ubi8 != '' }} | |
| runs-on: ${{ github.event_name == 'workflow_dispatch' && inputs.large-runner || 'ubuntu-24.04-ppc64le-p10' }} | |
| env: | |
| PYTHON_VERSION: "3.11" | |
| BUILD_SCRIPT: ${{ fromJson(needs.build_info.outputs.script_ubi8).script }} | |
| TESTED_ON: ${{ fromJson(needs.build_info.outputs.script_ubi8).tested_on }} | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| fetch-depth: 0 | |
| ref: ${{ github.event.pull_request.head.sha }} | |
| - name: Install system dependencies | |
| run: sudo apt update -y | |
| - name: Download package-cache | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: package-cache | |
| - name: Extract package cache | |
| run: tar -xzf package-cache.tar.gz | |
| - name: Run build_wheels.sh | |
| run: | | |
| THIS_SCRIPT="$BUILD_SCRIPT" | |
| THIS_TESTED_ON="$TESTED_ON" | |
| source package-cache/variable.sh; source package-cache/scanner-env.sh | |
| export BUILD_SCRIPT="$THIS_SCRIPT" | |
| export TESTED_ON="$THIS_TESTED_ON" | |
| if [ "$WHEEL_BUILD" != "true" ]; then echo "Skipping - WHEEL_BUILD=false"; exit 0; fi | |
| BUILD_SCRIPT_CHANGED=$(echo "$CHANGED_FILES" | grep -E "^$PACKAGE_DIR/.*\.sh$" || true) | |
| [ -z "$BUILD_SCRIPT_CHANGED" ] && echo "Skipping - no .sh changes" && exit 0 | |
| sudo chown -R $USER:$USER . | |
| export ENABLE_CVE_SCAN=false | |
| chmod +x ./gha-script/build_wheels.sh; bash ./gha-script/build_wheels.sh | |
| - name: Verify wheel was produced | |
| run: | | |
| if ls *.whl 1>/dev/null 2>&1; then | |
| echo "Wheel built successfully: $(ls *.whl)" | |
| else | |
| echo "No wheel produced." | |
| exit 1 | |
| fi | |
| wheel_build_ubi8_py312: | |
| needs: build_info | |
| if: ${{ needs.build_info.outputs.wheel_build_enabled == 'true' && needs.build_info.outputs.script_ubi8 != '' }} | |
| runs-on: ${{ github.event_name == 'workflow_dispatch' && inputs.large-runner || 'ubuntu-24.04-ppc64le-p10' }} | |
| env: | |
| PYTHON_VERSION: "3.12" | |
| BUILD_SCRIPT: ${{ fromJson(needs.build_info.outputs.script_ubi8).script }} | |
| TESTED_ON: ${{ fromJson(needs.build_info.outputs.script_ubi8).tested_on }} | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| fetch-depth: 0 | |
| ref: ${{ github.event.pull_request.head.sha }} | |
| - name: Install system dependencies | |
| run: sudo apt update -y | |
| - name: Download package-cache | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: package-cache | |
| - name: Extract package cache | |
| run: tar -xzf package-cache.tar.gz | |
| - name: Run build_wheels.sh | |
| run: | | |
| THIS_SCRIPT="$BUILD_SCRIPT" | |
| THIS_TESTED_ON="$TESTED_ON" | |
| source package-cache/variable.sh; source package-cache/scanner-env.sh | |
| export BUILD_SCRIPT="$THIS_SCRIPT" | |
| export TESTED_ON="$THIS_TESTED_ON" | |
| if [ "$WHEEL_BUILD" != "true" ]; then echo "Skipping - WHEEL_BUILD=false"; exit 0; fi | |
| BUILD_SCRIPT_CHANGED=$(echo "$CHANGED_FILES" | grep -E "^$PACKAGE_DIR/.*\.sh$" || true) | |
| [ -z "$BUILD_SCRIPT_CHANGED" ] && echo "Skipping - no .sh changes" && exit 0 | |
| sudo chown -R $USER:$USER . | |
| export ENABLE_CVE_SCAN=false | |
| chmod +x ./gha-script/build_wheels.sh; bash ./gha-script/build_wheels.sh | |
| - name: Verify wheel was produced | |
| run: | | |
| if ls *.whl 1>/dev/null 2>&1; then | |
| echo "Wheel built successfully: $(ls *.whl)" | |
| else | |
| echo "No wheel produced." | |
| exit 1 | |
| fi | |
| # UBI9 wheel jobs ----------------------------------------------------------- | |
| wheel_build_ubi9_py310: | |
| needs: build_info | |
| if: ${{ needs.build_info.outputs.wheel_build_enabled == 'true' && needs.build_info.outputs.script_ubi9 != '' }} | |
| runs-on: ${{ github.event_name == 'workflow_dispatch' && inputs.large-runner || 'ubuntu-24.04-ppc64le-p10' }} | |
| env: | |
| PYTHON_VERSION: "3.10" | |
| BUILD_SCRIPT: ${{ fromJson(needs.build_info.outputs.script_ubi9).script }} | |
| TESTED_ON: ${{ fromJson(needs.build_info.outputs.script_ubi9).tested_on }} | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| fetch-depth: 0 | |
| ref: ${{ github.event.pull_request.head.sha }} | |
| - name: Install system dependencies | |
| run: sudo apt update -y | |
| - name: Download package-cache | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: package-cache | |
| - name: Extract package cache | |
| run: tar -xzf package-cache.tar.gz | |
| - name: Run build_wheels.sh | |
| run: | | |
| THIS_SCRIPT="$BUILD_SCRIPT" | |
| THIS_TESTED_ON="$TESTED_ON" | |
| source package-cache/variable.sh; source package-cache/scanner-env.sh | |
| export BUILD_SCRIPT="$THIS_SCRIPT" | |
| export TESTED_ON="$THIS_TESTED_ON" | |
| if [ "$WHEEL_BUILD" != "true" ]; then echo "Skipping - WHEEL_BUILD=false"; exit 0; fi | |
| BUILD_SCRIPT_CHANGED=$(echo "$CHANGED_FILES" | grep -E "^$PACKAGE_DIR/.*\.sh$" || true) | |
| [ -z "$BUILD_SCRIPT_CHANGED" ] && echo "Skipping - no .sh changes" && exit 0 | |
| sudo chown -R $USER:$USER . | |
| export ENABLE_CVE_SCAN=false | |
| chmod +x ./gha-script/build_wheels.sh; bash ./gha-script/build_wheels.sh | |
| - name: Verify wheel was produced | |
| run: | | |
| if ls *.whl 1>/dev/null 2>&1; then | |
| echo "Wheel built successfully: $(ls *.whl)" | |
| else | |
| echo "No wheel produced." | |
| exit 1 | |
| fi | |
| wheel_build_ubi9_py311: | |
| needs: build_info | |
| if: ${{ needs.build_info.outputs.wheel_build_enabled == 'true' && needs.build_info.outputs.script_ubi9 != '' }} | |
| runs-on: ${{ github.event_name == 'workflow_dispatch' && inputs.large-runner || 'ubuntu-24.04-ppc64le-p10' }} | |
| env: | |
| PYTHON_VERSION: "3.11" | |
| BUILD_SCRIPT: ${{ fromJson(needs.build_info.outputs.script_ubi9).script }} | |
| TESTED_ON: ${{ fromJson(needs.build_info.outputs.script_ubi9).tested_on }} | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| fetch-depth: 0 | |
| ref: ${{ github.event.pull_request.head.sha }} | |
| - name: Install system dependencies | |
| run: sudo apt update -y | |
| - name: Download package-cache | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: package-cache | |
| - name: Extract package cache | |
| run: tar -xzf package-cache.tar.gz | |
| - name: Run build_wheels.sh | |
| run: | | |
| THIS_SCRIPT="$BUILD_SCRIPT" | |
| THIS_TESTED_ON="$TESTED_ON" | |
| source package-cache/variable.sh; source package-cache/scanner-env.sh | |
| export BUILD_SCRIPT="$THIS_SCRIPT" | |
| export TESTED_ON="$THIS_TESTED_ON" | |
| if [ "$WHEEL_BUILD" != "true" ]; then echo "Skipping - WHEEL_BUILD=false"; exit 0; fi | |
| BUILD_SCRIPT_CHANGED=$(echo "$CHANGED_FILES" | grep -E "^$PACKAGE_DIR/.*\.sh$" || true) | |
| [ -z "$BUILD_SCRIPT_CHANGED" ] && echo "Skipping - no .sh changes" && exit 0 | |
| sudo chown -R $USER:$USER . | |
| export ENABLE_CVE_SCAN=false | |
| chmod +x ./gha-script/build_wheels.sh; bash ./gha-script/build_wheels.sh | |
| - name: Verify wheel was produced | |
| run: | | |
| if ls *.whl 1>/dev/null 2>&1; then | |
| echo "Wheel built successfully: $(ls *.whl)" | |
| else | |
| echo "No wheel produced." | |
| exit 1 | |
| fi | |
| wheel_build_ubi9_py312: | |
| needs: build_info | |
| if: ${{ needs.build_info.outputs.wheel_build_enabled == 'true' && needs.build_info.outputs.script_ubi9 != '' }} | |
| runs-on: ${{ github.event_name == 'workflow_dispatch' && inputs.large-runner || 'ubuntu-24.04-ppc64le-p10' }} | |
| env: | |
| PYTHON_VERSION: "3.12" | |
| BUILD_SCRIPT: ${{ fromJson(needs.build_info.outputs.script_ubi9).script }} | |
| TESTED_ON: ${{ fromJson(needs.build_info.outputs.script_ubi9).tested_on }} | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| fetch-depth: 0 | |
| ref: ${{ github.event.pull_request.head.sha }} | |
| - name: Install system dependencies | |
| run: sudo apt update -y | |
| - name: Download package-cache | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: package-cache | |
| - name: Extract package cache | |
| run: tar -xzf package-cache.tar.gz | |
| - name: Run build_wheels.sh | |
| run: | | |
| THIS_SCRIPT="$BUILD_SCRIPT" | |
| THIS_TESTED_ON="$TESTED_ON" | |
| source package-cache/variable.sh; source package-cache/scanner-env.sh | |
| export BUILD_SCRIPT="$THIS_SCRIPT" | |
| export TESTED_ON="$THIS_TESTED_ON" | |
| if [ "$WHEEL_BUILD" != "true" ]; then echo "Skipping - WHEEL_BUILD=false"; exit 0; fi | |
| BUILD_SCRIPT_CHANGED=$(echo "$CHANGED_FILES" | grep -E "^$PACKAGE_DIR/.*\.sh$" || true) | |
| [ -z "$BUILD_SCRIPT_CHANGED" ] && echo "Skipping - no .sh changes" && exit 0 | |
| sudo chown -R $USER:$USER . | |
| export ENABLE_CVE_SCAN=false | |
| chmod +x ./gha-script/build_wheels.sh; bash ./gha-script/build_wheels.sh | |
| - name: Verify wheel was produced | |
| run: | | |
| if ls *.whl 1>/dev/null 2>&1; then | |
| echo "Wheel built successfully: $(ls *.whl)" | |
| else | |
| echo "No wheel produced." | |
| exit 1 | |
| fi | |
| wheel_build_ubi9_py313: | |
| needs: build_info | |
| if: ${{ needs.build_info.outputs.wheel_build_enabled == 'true' && needs.build_info.outputs.script_ubi9 != '' }} | |
| runs-on: ${{ github.event_name == 'workflow_dispatch' && inputs.large-runner || 'ubuntu-24.04-ppc64le-p10' }} | |
| continue-on-error: true | |
| env: | |
| PYTHON_VERSION: "3.13" | |
| BUILD_SCRIPT: ${{ fromJson(needs.build_info.outputs.script_ubi9).script }} | |
| TESTED_ON: ${{ fromJson(needs.build_info.outputs.script_ubi9).tested_on }} | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| fetch-depth: 0 | |
| ref: ${{ github.event.pull_request.head.sha }} | |
| - name: Install system dependencies | |
| run: sudo apt update -y | |
| - name: Download package-cache | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: package-cache | |
| - name: Extract package cache | |
| run: tar -xzf package-cache.tar.gz | |
| - name: Run build_wheels.sh | |
| run: | | |
| THIS_SCRIPT="$BUILD_SCRIPT" | |
| THIS_TESTED_ON="$TESTED_ON" | |
| source package-cache/variable.sh; source package-cache/scanner-env.sh | |
| export BUILD_SCRIPT="$THIS_SCRIPT" | |
| export TESTED_ON="$THIS_TESTED_ON" | |
| if [ "$WHEEL_BUILD" != "true" ]; then echo "Skipping - WHEEL_BUILD=false"; exit 0; fi | |
| BUILD_SCRIPT_CHANGED=$(echo "$CHANGED_FILES" | grep -E "^$PACKAGE_DIR/.*\.sh$" || true) | |
| [ -z "$BUILD_SCRIPT_CHANGED" ] && echo "Skipping - no .sh changes" && exit 0 | |
| sudo chown -R $USER:$USER . | |
| export ENABLE_CVE_SCAN=false | |
| chmod +x ./gha-script/build_wheels.sh; bash ./gha-script/build_wheels.sh | |
| - name: Verify wheel was produced | |
| run: | | |
| if ls *.whl 1>/dev/null 2>&1; then | |
| echo "Wheel built successfully: $(ls *.whl)" | |
| else | |
| echo "No wheel produced." | |
| exit 1 | |
| fi | |
| wheel_build_ubi9_py314: | |
| needs: build_info | |
| if: ${{ needs.build_info.outputs.wheel_build_enabled == 'true' && needs.build_info.outputs.script_ubi9 != '' }} | |
| runs-on: ${{ github.event_name == 'workflow_dispatch' && inputs.large-runner || 'ubuntu-24.04-ppc64le-p10' }} | |
| continue-on-error: true | |
| env: | |
| PYTHON_VERSION: "3.14" | |
| BUILD_SCRIPT: ${{ fromJson(needs.build_info.outputs.script_ubi9).script }} | |
| TESTED_ON: ${{ fromJson(needs.build_info.outputs.script_ubi9).tested_on }} | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| fetch-depth: 0 | |
| ref: ${{ github.event.pull_request.head.sha }} | |
| - name: Install system dependencies | |
| run: sudo apt update -y | |
| - name: Download package-cache | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: package-cache | |
| - name: Extract package cache | |
| run: tar -xzf package-cache.tar.gz | |
| - name: Run build_wheels.sh | |
| run: | | |
| THIS_SCRIPT="$BUILD_SCRIPT" | |
| THIS_TESTED_ON="$TESTED_ON" | |
| source package-cache/variable.sh; source package-cache/scanner-env.sh | |
| export BUILD_SCRIPT="$THIS_SCRIPT" | |
| export TESTED_ON="$THIS_TESTED_ON" | |
| if [ "$WHEEL_BUILD" != "true" ]; then echo "Skipping - WHEEL_BUILD=false"; exit 0; fi | |
| BUILD_SCRIPT_CHANGED=$(echo "$CHANGED_FILES" | grep -E "^$PACKAGE_DIR/.*\.sh$" || true) | |
| [ -z "$BUILD_SCRIPT_CHANGED" ] && echo "Skipping - no .sh changes" && exit 0 | |
| sudo chown -R $USER:$USER . | |
| export ENABLE_CVE_SCAN=false | |
| chmod +x ./gha-script/build_wheels.sh; bash ./gha-script/build_wheels.sh | |
| - name: Verify wheel was produced | |
| run: | | |
| if ls *.whl 1>/dev/null 2>&1; then | |
| echo "Wheel built successfully: $(ls *.whl)" | |
| else | |
| echo "No wheel produced." | |
| exit 1 | |
| fi | |
| # UBI10 wheel jobs (py312-py314 only - py310/py311 not supported on UBI10) ---- | |
| wheel_build_ubi10_py312: | |
| needs: build_info | |
| if: ${{ needs.build_info.outputs.wheel_build_enabled == 'true' && needs.build_info.outputs.script_ubi10 != '' }} | |
| runs-on: ${{ github.event_name == 'workflow_dispatch' && inputs.large-runner || 'ubuntu-24.04-ppc64le-p10' }} | |
| env: | |
| PYTHON_VERSION: "3.12" | |
| BUILD_SCRIPT: ${{ fromJson(needs.build_info.outputs.script_ubi10).script }} | |
| TESTED_ON: ${{ fromJson(needs.build_info.outputs.script_ubi10).tested_on }} | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| fetch-depth: 0 | |
| ref: ${{ github.event.pull_request.head.sha }} | |
| - name: Install system dependencies | |
| run: sudo apt update -y | |
| - name: Download package-cache | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: package-cache | |
| - name: Extract package cache | |
| run: tar -xzf package-cache.tar.gz | |
| - name: Run build_wheels.sh | |
| run: | | |
| THIS_SCRIPT="$BUILD_SCRIPT" | |
| THIS_TESTED_ON="$TESTED_ON" | |
| source package-cache/variable.sh; source package-cache/scanner-env.sh | |
| export BUILD_SCRIPT="$THIS_SCRIPT" | |
| export TESTED_ON="$THIS_TESTED_ON" | |
| if [ "$WHEEL_BUILD" != "true" ]; then echo "Skipping - WHEEL_BUILD=false"; exit 0; fi | |
| BUILD_SCRIPT_CHANGED=$(echo "$CHANGED_FILES" | grep -E "^$PACKAGE_DIR/.*\.sh$" || true) | |
| [ -z "$BUILD_SCRIPT_CHANGED" ] && echo "Skipping - no .sh changes" && exit 0 | |
| sudo chown -R $USER:$USER . | |
| export ENABLE_CVE_SCAN=false | |
| chmod +x ./gha-script/build_wheels.sh; bash ./gha-script/build_wheels.sh | |
| - name: Verify wheel was produced | |
| run: | | |
| if ls *.whl 1>/dev/null 2>&1; then | |
| echo "Wheel built successfully: $(ls *.whl)" | |
| else | |
| echo "No wheel produced." | |
| exit 1 | |
| fi | |
| wheel_build_ubi10_py313: | |
| needs: build_info | |
| if: ${{ needs.build_info.outputs.wheel_build_enabled == 'true' && needs.build_info.outputs.script_ubi10 != '' }} | |
| runs-on: ${{ github.event_name == 'workflow_dispatch' && inputs.large-runner || 'ubuntu-24.04-ppc64le-p10' }} | |
| continue-on-error: true | |
| env: | |
| PYTHON_VERSION: "3.13" | |
| BUILD_SCRIPT: ${{ fromJson(needs.build_info.outputs.script_ubi10).script }} | |
| TESTED_ON: ${{ fromJson(needs.build_info.outputs.script_ubi10).tested_on }} | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| fetch-depth: 0 | |
| ref: ${{ github.event.pull_request.head.sha }} | |
| - name: Install system dependencies | |
| run: sudo apt update -y | |
| - name: Download package-cache | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: package-cache | |
| - name: Extract package cache | |
| run: tar -xzf package-cache.tar.gz | |
| - name: Run build_wheels.sh | |
| run: | | |
| THIS_SCRIPT="$BUILD_SCRIPT" | |
| THIS_TESTED_ON="$TESTED_ON" | |
| source package-cache/variable.sh; source package-cache/scanner-env.sh | |
| export BUILD_SCRIPT="$THIS_SCRIPT" | |
| export TESTED_ON="$THIS_TESTED_ON" | |
| if [ "$WHEEL_BUILD" != "true" ]; then echo "Skipping - WHEEL_BUILD=false"; exit 0; fi | |
| BUILD_SCRIPT_CHANGED=$(echo "$CHANGED_FILES" | grep -E "^$PACKAGE_DIR/.*\.sh$" || true) | |
| [ -z "$BUILD_SCRIPT_CHANGED" ] && echo "Skipping - no .sh changes" && exit 0 | |
| sudo chown -R $USER:$USER . | |
| export ENABLE_CVE_SCAN=false | |
| chmod +x ./gha-script/build_wheels.sh; bash ./gha-script/build_wheels.sh | |
| - name: Verify wheel was produced | |
| run: | | |
| if ls *.whl 1>/dev/null 2>&1; then | |
| echo "Wheel built successfully: $(ls *.whl)" | |
| else | |
| echo "No wheel produced." | |
| exit 1 | |
| fi | |
| wheel_build_ubi10_py314: | |
| needs: build_info | |
| if: ${{ needs.build_info.outputs.wheel_build_enabled == 'true' && needs.build_info.outputs.script_ubi10 != '' }} | |
| runs-on: ${{ github.event_name == 'workflow_dispatch' && inputs.large-runner || 'ubuntu-24.04-ppc64le-p10' }} | |
| continue-on-error: true | |
| env: | |
| PYTHON_VERSION: "3.14" | |
| BUILD_SCRIPT: ${{ fromJson(needs.build_info.outputs.script_ubi10).script }} | |
| TESTED_ON: ${{ fromJson(needs.build_info.outputs.script_ubi10).tested_on }} | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| fetch-depth: 0 | |
| ref: ${{ github.event.pull_request.head.sha }} | |
| - name: Install system dependencies | |
| run: sudo apt update -y | |
| - name: Download package-cache | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: package-cache | |
| - name: Extract package cache | |
| run: tar -xzf package-cache.tar.gz | |
| - name: Run build_wheels.sh | |
| run: | | |
| THIS_SCRIPT="$BUILD_SCRIPT" | |
| THIS_TESTED_ON="$TESTED_ON" | |
| source package-cache/variable.sh; source package-cache/scanner-env.sh | |
| export BUILD_SCRIPT="$THIS_SCRIPT" | |
| export TESTED_ON="$THIS_TESTED_ON" | |
| if [ "$WHEEL_BUILD" != "true" ]; then echo "Skipping - WHEEL_BUILD=false"; exit 0; fi | |
| BUILD_SCRIPT_CHANGED=$(echo "$CHANGED_FILES" | grep -E "^$PACKAGE_DIR/.*\.sh$" || true) | |
| [ -z "$BUILD_SCRIPT_CHANGED" ] && echo "Skipping - no .sh changes" && exit 0 | |
| sudo chown -R $USER:$USER . | |
| export ENABLE_CVE_SCAN=false | |
| chmod +x ./gha-script/build_wheels.sh; bash ./gha-script/build_wheels.sh | |
| - name: Verify wheel was produced | |
| run: | | |
| if ls *.whl 1>/dev/null 2>&1; then | |
| echo "Wheel built successfully: $(ls *.whl)" | |
| else | |
| echo "No wheel produced." | |
| exit 1 | |
| fi | |
| # --------------------------------------------------------------------------- | |
| # build_docker - only when Dockerfile changed and docker_build=true in build_info | |
| # --------------------------------------------------------------------------- | |
| build_docker: | |
| needs: build_info | |
| 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: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| with: | |
| ref: ${{ github.event.pull_request.head.sha }} | |
| - name: Download package-cache | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: package-cache | |
| - name: Extract package cache | |
| run: tar -xzf package-cache.tar.gz | |
| - name: Build Docker Image | |
| run: | | |
| ls package-cache | |
| chmod +x package-cache/variable.sh | |
| chmod +x package-cache/scanner-env.sh | |
| source package-cache/variable.sh | |
| source package-cache/scanner-env.sh | |
| BUILD_DOCKER=$(echo "$BUILD_DOCKER" | tr -d '[:space:]' | tr '[:upper:]' '[:lower:]') | |
| DOCKERFILE_CHANGED=$(echo "$CHANGED_FILES" | grep -i 'Dockerfile' || true) | |
| if [[ "$BUILD_DOCKER" != "true" ]]; then | |
| echo "Skipping Docker build as BUILD_DOCKER=$BUILD_DOCKER"; exit 0 | |
| fi | |
| if [[ -z "$DOCKERFILE_CHANGED" ]]; then | |
| echo "Skipping Docker build as no Dockerfile changes detected in PR"; exit 0 | |
| fi | |
| echo "Dockerfile change detected, proceeding with build..." | |
| sudo chown -R $USER:$USER . | |
| chmod +x ./gha-script/build_docker.sh | |
| bash ./gha-script/build_docker.sh | |
| docker images | |
| docker save -o package-cache/image.tar "$IMAGE_NAME" | |
| ls -lh package-cache/image.tar |