Build #111
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: Build | |
on: | |
workflow_dispatch: | |
inputs: | |
host-os: | |
required: true | |
type: choice | |
options: | |
- ubuntu-22.04 | |
- ubuntu-20.04 | |
ack: | |
required: true | |
type: choice | |
options: | |
- "0" | |
- "1" | |
arch: | |
required: true | |
type: choice | |
options: | |
- x86_64 | |
- arm64 | |
version: | |
required: true | |
type: string | |
use-cached: | |
required: false | |
type: boolean | |
default: false | |
workflow_call: | |
inputs: | |
host-os: | |
required: false | |
type: string | |
default: ubuntu-22.04 | |
ack: | |
required: true | |
type: string | |
arch: | |
required: true | |
type: string | |
version: | |
required: true | |
type: string | |
use-cached: | |
required: false | |
type: boolean | |
default: false | |
outputs: | |
artifact-dir: | |
value: ${{ jobs.build.outputs.artifact-dir }} | |
kernel-image-name: | |
value: ${{ jobs.build.outputs.kernel-image-name }} | |
suffix: | |
value: ${{ jobs.build.outputs.suffix }} | |
version: | |
value: ${{ jobs.build.outputs.version }} | |
jobs: | |
build: | |
name: Build (ack=${{ inputs.ack }}, ${{ inputs.version }}, ${{ inputs.arch }}, ${{ inputs.host-os }}) | |
runs-on: ${{ inputs.host-os }} | |
timeout-minutes: 100 | |
env: | |
ACK: ${{ inputs.ack }} | |
ARCH: ${{ inputs.arch }} | |
outputs: | |
artifact-dir: ${{ steps.vars.outputs.ARTIFACT_DIR }} | |
kernel-image-name: ${{ steps.vars.outputs.KERNEL_IMAGE_NAME }} | |
suffix: ${{ steps.vars.outputs.SUFFIX }} | |
version: ${{ steps.version.outputs.VERSION }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Get real kernel version | |
id: version | |
shell: bash | |
run: | | |
LINUX_URL=https://cdn.kernel.org/pub/linux/kernel | |
VERSION="${{ inputs.version }}" | |
first_char=${VERSION:0:1} | |
last_char=${VERSION: -1:1} | |
if [ $last_char == y ]; then | |
major_minor=${VERSION: 0:-1} | |
# We do this in multiple steps instead of a chain of pipes to make debugging easier | |
TMP=$(curl -s $LINUX_URL/v${first_char}.x/) | |
TMP=$(echo "$TMP" | sed -e 's/<[^>]*>//g') | |
TMP=$(echo "$TMP" | grep -oP "linux-${major_minor}[0-9]+") | |
TMP=$(echo "$TMP" | sort -r -V) | |
TMP=$(echo "$TMP" | head -n1) | |
TMP=$(echo "$TMP" | cut -d '-' -f2) | |
VERSION=$TMP | |
fi | |
echo "VERSION=$VERSION" >> $GITHUB_OUTPUT | |
- name: Set output variables | |
id: vars | |
shell: bash | |
run: | | |
set -x | |
if [ $ACK -eq 0 ]; then | |
KERNEL_TYPE=linux | |
OUT_DIR=out/linux/${ARCH} | |
else | |
KERNEL_TYPE=ack | |
OUT_DIR=out/ack/common/${ARCH} | |
fi | |
if [ $ARCH == x86_64 ]; then | |
# We need to use the real image in the x86 folder because caching | |
# doesn't work with symlinks | |
KERNEL_IMAGE="arch/x86/boot/bzImage" | |
elif [ $ARCH == arm64 ]; then | |
KERNEL_IMAGE="arch/arm64/boot/Image" | |
fi | |
SUFFIX=${KERNEL_TYPE}-${{ steps.version.outputs.VERSION }}-${{ inputs.arch }} | |
echo "SUFFIX=$SUFFIX" >> $GITHUB_OUTPUT | |
echo "OUT_DIR=$OUT_DIR" >> $GITHUB_OUTPUT | |
echo "KERNEL_TYPE=$KERNEL_TYPE" >> $GITHUB_OUTPUT | |
echo "KERNEL_IMAGE=$KERNEL_IMAGE" >> $GITHUB_OUTPUT | |
echo "KERNEL_IMAGE_NAME=$(basename $KERNEL_IMAGE)" >> $GITHUB_OUTPUT | |
echo "FINAL_KERNEL_IMAGE_PATH=${OUT_DIR}/$(basename ${KERNEL_IMAGE})-${SUFFIX}" >> $GITHUB_OUTPUT | |
echo "FINAL_VMLINUX_PATH=${OUT_DIR}/vmlinux-${SUFFIX}" >> $GITHUB_OUTPUT | |
echo "FINAL_LINUX_HEADERS_PATH=${OUT_DIR}/linux-headers-${SUFFIX}.deb" >> $GITHUB_OUTPUT | |
echo "ARTIFACT_DIR=kernel-artifacts-${SUFFIX}" >> $GITHUB_OUTPUT | |
- name: Cache kernel image | |
if: ${{ inputs.use-cached == true }} | |
id: cache-kernel | |
uses: actions/cache@v4 | |
with: | |
key: ${{ inputs.host-os }}-${{ steps.vars.outputs.SUFFIX }} | |
path: | | |
${{ steps.vars.outputs.FINAL_KERNEL_IMAGE_PATH }} | |
${{ steps.vars.outputs.FINAL_VMLINUX_PATH }} | |
${{ steps.vars.outputs.FINAL_LINUX_HEADERS_PATH }} | |
- run: ls -lR | |
if: ${{ steps.cache-kernel.outputs.cache-hit == 'true' }} | |
- name: Build kernel | |
if: ${{ steps.cache-kernel.outputs.cache-hit != 'true' }} | |
uses: ./.github/actions/build-kernel | |
with: | |
os: ${{ inputs.host-os }} | |
arch: ${{ inputs.arch }} | |
ack: ${{ inputs.ack }} | |
kernel-version: ${{ steps.version.outputs.VERSION }} | |
- name: Rename kernel images | |
if: ${{ steps.cache-kernel.outputs.cache-hit != 'true' }} | |
run: | | |
mv ${{ steps.vars.outputs.OUT_DIR }}/${{ steps.vars.outputs.KERNEL_IMAGE }} ${{ steps.vars.outputs.FINAL_KERNEL_IMAGE_PATH }} | |
mv ${{ steps.vars.outputs.OUT_DIR }}/vmlinux ${{ steps.vars.outputs.FINAL_VMLINUX_PATH }} | |
mv ${{ steps.vars.outputs.OUT_DIR }}/../linux-headers-*.deb ${{ steps.vars.outputs.FINAL_LINUX_HEADERS_PATH }} | |
- name: Upload kernel image artifact | |
if: ${{ inputs.host-os == 'ubuntu-22.04' }} | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ steps.vars.outputs.ARTIFACT_DIR }} | |
path: | | |
${{ steps.vars.outputs.FINAL_KERNEL_IMAGE_PATH }} | |
${{ steps.vars.outputs.FINAL_VMLINUX_PATH }} | |
${{ steps.vars.outputs.FINAL_LINUX_HEADERS_PATH }} |