Skip to content

Commit

Permalink
Factor out tar-artifacts action
Browse files Browse the repository at this point in the history
  • Loading branch information
theihor committed Oct 21, 2024
1 parent eb86fb2 commit c9ad352
Show file tree
Hide file tree
Showing 4 changed files with 119 additions and 112 deletions.
107 changes: 0 additions & 107 deletions .github/scripts/tar-artifact.sh

This file was deleted.

17 changes: 12 additions & 5 deletions .github/workflows/kernel-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@ jobs:
runs-on: ${{ fromJSON(inputs.runs_on) }}
timeout-minutes: 100
env:
ARCHIVE_MAKE_HELPERS: ${{ github.repository != 'kernel-patches/bpf' && 'true' || '' }}
KERNEL: ${{ inputs.kernel }}
REPO_ROOT: ${{ github.workspace }}
REPO_PATH: ""
Expand Down Expand Up @@ -140,9 +139,17 @@ jobs:
max-make-jobs: 32
llvm-version: ${{ inputs.llvm-version }}
- name: Tar artifacts
working-directory: ${{ env.REPO_ROOT }}
run: |
bash .github/scripts/tar-artifact.sh ${{ inputs.arch }} ${{ inputs.toolchain_full }}
id: tar-artifacts
uses: ./tar-artifacts
env:
ARCHIVE_BPF_SELFTESTS: 'true'
ARCHIVE_MAKE_HELPERS: ${{ github.repository != 'kernel-patches/bpf' && 'true' || '' }}
ARCHIVE_SCHED_EXT_SELFTESTS: ${{ env.BUILD_SCHED_EXT_SELFTESTS }}
with:
kbuild-output: ${{ env.KBUILD_OUTPUT }}
repo-root: ${{ env.REPO_ROOT }}
arch: ${{ inputs.arch }}
toolchain: ${{ inputs.toolchain }}
- if: ${{ github.event_name != 'push' }}
name: Remove KBUILD_OUTPUT content
shell: bash
Expand All @@ -155,4 +162,4 @@ jobs:
with:
name: vmlinux-${{ inputs.arch }}-${{ inputs.toolchain_full }}${{ inputs.release && '-release' || '' }}
if-no-files-found: error
path: vmlinux-${{ inputs.arch }}-${{ inputs.toolchain_full }}.tar.zst
path: ${{ steps.tar-artifacts.outputs.archive-name }}
28 changes: 28 additions & 0 deletions tar-artifacts/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
name: 'Tar build artifacts'
inputs:
kbuild-output:
description: 'Path to the kernel build output'
required: true
repo-root:
description: "Path to the root of the kernel repository"
required: true
arch:
required: true
toolchain:
required: true
outputs:
archive-name:
description: 'Artifacts tarball name'
value: ${{ steps.run-script.outputs.archive-name }}

runs:
using: "composite"
steps:
- name: Run tar-artifacts.sh
id: run-script
env:
KBUILD_OUTPUT: ${{ inputs.kbuild-output }}
REPO_ROOT: ${{ inputs.repo-root }}
shell: bash
run:
${GITHUB_ACTION_PATH}/tar-artifacts.sh "${{ inputs.arch }}" "${{ inputs.toolchain }}"
79 changes: 79 additions & 0 deletions tar-artifacts/tar-artifacts.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
#!/bin/bash

set -eux -o pipefail

if [ ! -d "${REPO_ROOT:-}" ]; then
echo "REPO_ROOT must be a directory: ${REPO_ROOT}"
exit 1
fi

if [ ! -d "${KBUILD_OUTPUT:-}" ]; then
echo "KBUILD_OUTPUT must be a directory: ${KBUILD_OUTPUT}"
exit 1
fi

ARCHIVE_BPF_SELFTESTS="${ARCHIVE_BPF_SELFTESTS:-true}"
ARCHIVE_MAKE_HELPERS="${ARCHIVE_MAKE_HELPERS:-}"
ARCHIVE_SCHED_EXT_SELFTESTS="${ARCHIVE_SCHED_EXT_SELFTESTS:-}"

arch="${1}"
toolchain="${2}"

tarball="vmlinux-${arch}-${toolchain}.tar"

source "${GITHUB_ACTION_PATH}/../helpers.sh"

# Strip debug information, which is excessively large (consuming
# bandwidth) while not actually being used (the kernel does not use
# DWARF to symbolize stacktraces).
"${arch}"-linux-gnu-strip --strip-debug "${KBUILD_OUTPUT}"/vmlinux

image_name=$(make ARCH="$(platform_to_kernel_arch "${arch}")" -s image_name)
kbuild_output_file_list=(
".config"
"${image_name}"
"include/config/auto.conf"
"include/generated/autoconf.h"
"vmlinux"
)

tar -rf "${tarball}" -C "${KBUILD_OUTPUT}" \
--transform "s,^,kbuild-output/," \
"${kbuild_output_file_list[@]}"

# In case artifacts are restored not to the kernel repo root,
# package up a bunch of additional infrastructure to support running
# 'make kernelrelease' and bpf tool checks later on.
if [[ -n "${ARCHIVE_MAKE_HELPERS}" ]]; then
find "${REPO_ROOT}" -iname Makefile -printf '%P\n' \
| tar -rf "${tarball}" -C "${REPO_ROOT}" -T -
tar -rf "${tarball}" -C "${REPO_ROOT}" \
--exclude '*.o' \
--exclude '*.d' \
"scripts/" \
"tools/testing/selftests/bpf/" \
"tools/include/" \
"tools/bpf/bpftool/"
fi

if [[ -n "${ARCHIVE_BPF_SELFTESTS}" ]]; then
# add .bpf.o files
find "${REPO_ROOT}/tools/testing/selftests/bpf" -name "*.bpf.o" -printf 'selftests/bpf/%P\n' \
| tar -rf "${tarball}" -C "${REPO_ROOT}/tools/testing" -T -
# add other relevant files
tar -rf "${tarball}" -C "${REPO_ROOT}/tools/testing" \
--exclude '*.cmd' \
--exclude '*.d' \
--exclude '*.h' \
--exclude '*.o' \
--exclude '*.output' \
selftests/bpf/
fi

if [[ -n "${ARCHIVE_SCHED_EXT_SELFTESTS}" ]]; then
tar -rf "${tarball}" -C "${REPO_ROOT}/tools/testing" selftests/sched_ext/
fi

zst_tarball="vmlinux-${arch}-${toolchain}.tar.zst"
zstd -T0 -19 -i "${tarball}" -o "${zst_tarball}"
echo "archive-name=$(realpath "${zst_tarball}")" >> $GITHUB_OUTPUT

0 comments on commit c9ad352

Please sign in to comment.