edk2 Check #368
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: edk2 Check | |
| on: | |
| # Set schedule to run every hours | |
| schedule: | |
| - cron: '0 */12 * * *' | |
| # Allow to trigger action manually | |
| workflow_dispatch: | |
| jobs: | |
| check_version: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v3 | |
| with: | |
| fetch-depth: 1 | |
| - name: Install dependencies | |
| run: sudo apt-get -y install uuid-dev nasm iasl | |
| - name: Check versions | |
| run: | | |
| # Grab latest edk2 release from official repostiory and latest compiled release version from this repostiory | |
| LATEST_EDK2="$(curl -u ${{ github.actor }}:${{ secrets.GITHUB_TOKEN }} -s https://api.github.com/repos/tianocore/edk2/releases/latest | jq -r '.tag_name' | sed 's/^v//')" | |
| CURRENT_EDK2="$(curl -u ${{ github.actor }}:${{ secrets.GITHUB_TOKEN }} -s https://api.github.com/repos/unraid/unraid-edk2/releases/latest | jq -r '.tag_name' | sed 's/^v//')" | |
| # Check if one of the versions is empty | |
| if [[ -z "${LATEST_EDK2}" || -z "${CURRENT_EDK2}" ]]; then | |
| echo "Can't get versions" | |
| exit 1 | |
| fi | |
| # Check versions | |
| if [ "${LATEST_EDK2}" != "${CURRENT_EDK2}" ]; then | |
| echo "CREATE_RELEASE=true" >> $GITHUB_ENV | |
| echo "EDK2_VERSION=${LATEST_EDK2##*-}" >> $GITHUB_ENV | |
| else | |
| echo "${CURRENT_EDK2} up to date!" | |
| echo "CREATE_RELEASE=false" >> $GITHUB_ENV | |
| exit 0 | |
| fi | |
| # Create directories | |
| mkdir -p ${LATEST_EDK2##*-}/install | |
| mkdir -p ${LATEST_EDK2##*-}/usr/share/qemu/ovmf-x64 | |
| mkdir -p ${LATEST_EDK2} | |
| # Clone edk2, echkout branch and init repo | |
| git clone https://github.com/tianocore/edk2.git | |
| cd ./edk2 | |
| git checkout ${LATEST_EDK2} | |
| git submodule update --init | |
| # Copy Unraid logo | |
| cp ${GITHUB_WORKSPACE}/Logo.bmp ${GITHUB_WORKSPACE}/edk2/MdeModulePkg/Logo/Logo.bmp | |
| apply_patch_if_needed() { | |
| local patch_name="$1" | |
| shift | |
| if patch --dry-run --silent --forward --batch "$@" > /dev/null 2>&1; then | |
| echo "Applying ${patch_name}" | |
| patch --forward --batch "$@" | |
| return 0 | |
| fi | |
| if patch --dry-run --silent --reverse --batch "$@" > /dev/null 2>&1; then | |
| echo "Skipping ${patch_name}: already applied upstream" | |
| return 0 | |
| fi | |
| echo "Failed to apply ${patch_name}" | |
| return 1 | |
| } | |
| # Apply patch | |
| apply_patch_if_needed "hide message patch" ${GITHUB_WORKSPACE}/edk2/OvmfPkg/Library/PlatformBmPrintScLib/StatusCodeHandler.c < ${GITHUB_WORKSPACE}/hidemessage.patch | |
| # Workaround for distributions using newer GRUB2 version which prevents boot. | |
| apply_patch_if_needed "EFI memory attribute compatibility patch" -p1 < ${GITHUB_WORKSPACE}/patches/disable_efi_mem_attr_proto_minimal.patch | |
| # Prepare for build | |
| make -C BaseTools -j$(nproc --all) | |
| # Build OVMF with TPM enabled | |
| OvmfPkg/build.sh -b RELEASE -a X64 -t GCC -n $(nproc --all) -D TPM1_ENABLE -D TPM2_ENABLE -D TPM_CONFIG_ENABLE -D SECURE_BOOT_ENABLE -D NETWORK_TLS_ENABLE || exit 1 | |
| # Move TPM build to temporary directory | |
| mv Build/OvmfX64 Build/OvmfX64_TPM | |
| # Build OVMF without TPM enabled | |
| OvmfPkg/build.sh -b RELEASE -a X64 -t GCC -n $(nproc --all) -D FD_SIZE_2MB || exit 1 | |
| # Copy TPM build to temporary directory | |
| cp Build/OvmfX64_TPM/RELEASE_GCC/FV/OVMF_CODE.fd ${GITHUB_WORKSPACE}/${LATEST_EDK2##*-}/usr/share/qemu/ovmf-x64/OVMF_CODE-pure-efi-tpm.fd | |
| cp Build/OvmfX64_TPM/RELEASE_GCC/FV/OVMF_VARS.fd ${GITHUB_WORKSPACE}/${LATEST_EDK2##*-}/usr/share/qemu/ovmf-x64/OVMF_VARS-pure-efi-tpm.fd | |
| # Copy build without TPM to temporary directory | |
| cp Build/OvmfX64/RELEASE_GCC/FV/OVMF_CODE.fd ${GITHUB_WORKSPACE}/${LATEST_EDK2##*-}/usr/share/qemu/ovmf-x64/OVMF_CODE-pure-efi.fd | |
| cp Build/OvmfX64/RELEASE_GCC/FV/OVMF_VARS.fd ${GITHUB_WORKSPACE}/${LATEST_EDK2##*-}/usr/share/qemu/ovmf-x64/OVMF_VARS-pure-efi.fd | |
| # Copy slack-description into temporary directory, create package and md5sum | |
| cd ${GITHUB_WORKSPACE}/${LATEST_EDK2##*-} | |
| cp ${GITHUB_WORKSPACE}/slack-desc ${GITHUB_WORKSPACE}/${LATEST_EDK2##*-}/install/slack-desc | |
| bash ${GITHUB_WORKSPACE}/makepkg -l y -c y ${GITHUB_WORKSPACE}/${LATEST_EDK2}/ovmf-${LATEST_EDK2##*-}-x86_64-1.txz | |
| md5sum ${GITHUB_WORKSPACE}/${LATEST_EDK2}/ovmf-${LATEST_EDK2##*-}-x86_64-1.txz | awk '{print $1}' > ${GITHUB_WORKSPACE}/${LATEST_EDK2}/ovmf-${LATEST_EDK2##*-}-x86_64-1.txz.md5 | |
| - name: Create Release | |
| if: env.CREATE_RELEASE == 'true' && success() | |
| id: create_release | |
| uses: actions/create-release@v1 | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| with: | |
| tag_name: edk2-${{ env.EDK2_VERSION }} | |
| release_name: "edk2-${{ env.EDK2_VERSION }}" | |
| body: | | |
| OVMF for QEMU - edk2-${{ env.EDK2_VERSION }}, custom package for Unraid/Slackware | |
| draft: false | |
| prerelease: false | |
| - name: Upload txz to Release | |
| if: env.CREATE_RELEASE == 'true' && success() | |
| uses: actions/upload-release-asset@v1 | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| with: | |
| upload_url: ${{ steps.create_release.outputs.upload_url }} | |
| asset_path: ./edk2-${{ env.EDK2_VERSION }}/ovmf-${{ env.EDK2_VERSION }}-x86_64-1.txz | |
| asset_name: ovmf-${{ env.EDK2_VERSION }}-x86_64-1.txz | |
| asset_content_type: application/x-xz | |
| - name: Upload md5 to Release | |
| if: env.CREATE_RELEASE == 'true' && success() | |
| uses: actions/upload-release-asset@v1 | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| with: | |
| upload_url: ${{ steps.create_release.outputs.upload_url }} | |
| asset_path: ./edk2-${{ env.EDK2_VERSION }}/ovmf-${{ env.EDK2_VERSION }}-x86_64-1.txz.md5 | |
| asset_name: ovmf-${{ env.EDK2_VERSION }}-x86_64-1.txz.md5 | |
| asset_content_type: text/plain |