Build #109
This file contains 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 }} |