# @file BuildPlatform.yml # # A reusable workflow that builds an EDKII platform and uploads it's artifacts. # ## # Copyright (c) Microsoft Corporation. # SPDX-License-Identifier: BSD-2-Clause-Patent ## name: Build Platform on: workflow_call: inputs: python-version: required: true description: 'The version of Python to use for the job' type: string default: '3.12' runs-on: required: true description: 'The runner type to use for the job' type: string default: 'ubuntu-latest' build-file: required: true description: 'The path to the stuart build script' type: string tool-chain: required: true description: 'The tool chain to use for the build' type: string target: required: true description: 'The target to build' type: string extra-build-args: required: false description: 'Extra arguments to pass to the build script' type: string default: '' extra-pip-requirements: required: false description: 'Extra pip requirements to install' type: string default: '' extra-setup-cmd: required: false description: 'Extra setup commands to run' type: string default: '' extra-artifact-path: required: false description: 'Extra artifact paths to upload' type: string default: '' jobs: build: name: Build Platform runs-on: ${{ inputs.runs-on }} container: image: ${{ startswith(inputs.runs-on, 'ubuntu') && 'ghcr.io/tianocore/containers/fedora-43-dev:latest' || '' }} steps: - name: Checkout uses: actions/checkout@v7 - run: | git config --global --add safe.directory '*' name: 'Set Safe Directory' if: ${{ startsWith(inputs.runs-on, 'ubuntu') }} - name: Set up Python ${{ inputs.python-version }} uses: actions/setup-python@v7 with: python-version: ${{ inputs.python-version }} if: ${{ !startsWith(inputs.runs-on, 'ubuntu') }} - run: | pip install --upgrade ${{ inputs.extra-pip-requirements }} -r pip-requirements.txt name: 'Install/Upgrade pip modules' - run: ${{ inputs.extra-setup-cmd }} name: 'Extra Setup Commands' if: ${{ inputs.extra-setup-cmd != '' }} - run: | stuart_setup -c ${{ inputs.build-file }} name: 'Clone Submodules' - run: | stuart_update -c ${{ inputs.build-file }} name: 'Download External Dependencies' - run: | python BaseTools/Edk2ToolsBuild.py -t ${{ inputs.tool-chain }} name: 'Build BaseTools' - run: | stuart_build -c ${{ inputs.build-file }} TARGET=${{ inputs.target}} TOOL_CHAIN_TAG=${{ inputs.tool-chain }} ${{ inputs.extra-build-args }} name: 'Build Platform' - name: Upload Platform Build Logs uses: actions/upload-artifact@v7 with: name: Platform Build Logs ${{ inputs.tool-chain }} ${{ inputs.target }} ${{ inputs.extra-build-args }} path: | Build/*.txt BaseTools/BaseToolsBuild/* ${{ inputs.extra-artifact-path }} if: always()