Kernel CI #3006
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: Kernel CI | |
on: | |
push: | |
branches: [ main ] | |
pull_request: | |
branches: [ main ] | |
workflow_dispatch: | |
# manual trigger | |
schedule: | |
- cron: '0 6,14,22 * * *' | |
env: | |
MIMALLOC_ALLOW_LARGE_OS_PAGES: 1 | |
jobs: | |
build: | |
runs-on: ubuntu-latest | |
container: cachyos/cachyos-v3:latest | |
outputs: | |
current_version: ${{ steps.out.outputs.current_version }} | |
release_version: ${{ steps.out.outputs.release_version }} | |
clang_version: ${{ steps.out.outputs.clang_version }} | |
rebuild_flag: ${{ steps.out.outputs.rebuild_flag }} | |
strategy: | |
matrix: | |
include: | |
- arch: GENERIC_CPU2 | |
image-name: bzImage-x64v2 | |
- arch: GENERIC_CPU3 | |
image-name: bzImage-x64v3 | |
- arch: MSKYLAKE | |
image-name: bzImage-skylake | |
steps: | |
- uses: actions/checkout@main | |
- name: Install dependencies | |
id: dep | |
run: | | |
pacman -Syu --noconfirm pahole xmlto inetutils bc cpio jq ccache git python go mimalloc | |
GOBIN=/usr/bin go install go.chromium.org/luci/cipd/client/cmd/...@latest | |
cipd install fuchsia/third_party/clang/linux-amd64 latest -root /usr/local/fuchsia-clang | |
echo "PATH=/usr/local/fuchsia-clang/bin:$PATH" >> $GITHUB_ENV | |
echo "/usr/lib/libmimalloc.so" > /etc/ld.so.preload | |
- name: Trust this directory | |
run: git config --global --add safe.directory '*' # v2.35.3 or later | |
- name: Setup kernel source | |
shell: bash | |
run: | | |
./setup.sh --arch ${{ matrix.arch }} --branch MAIN | |
cd linux | |
# Load version info into env | |
echo "CLANG_VERSION=$(clang --version | head -n1)" | tee -a $GITHUB_ENV | |
export CURRENT_VERSION=$(make kernelrelease) | |
# must query with a token, or will fail with api rate limit on public runners | |
export RELEASED_TAG=$(curl -sL -H 'Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}'\ | |
https://api.github.com/repos/Locietta/xanmod-kernel-WSL2/tags\?per_page\=60 | jq -r '.[].name' | grep -v 'lts' | head -n 1) | |
export RELEASED_VERSION=$(echo $RELEASED_TAG | sed "s#\(.*-locietta-WSL2-xanmod[0-9][0-9]*\).*#\1#" ) | |
export RELEASED_MINOR=$(echo $RELEASED_TAG | sed "s#\(.*-locietta-WSL2-xanmod[0-9][0-9]*\).*\([0-9][0-9]*\).*#\2#" ) | |
echo "CURRENT_VERSION=$CURRENT_VERSION" | tee -a $GITHUB_ENV | |
echo "RELEASED_VERSION=$RELEASED_VERSION" | tee -a $GITHUB_ENV | |
if [[ $CURRENT_VERSION != $RELEASED_VERSION || \ | |
($CURRENT_VERSION = $RELEASED_VERSION && 1 -gt "$RELEASED_MINOR") || \ | |
"${{ github.event_name }}" = 'pull_request' ]]; then | |
echo "REBUILD_FLAG=1" | tee -a $GITHUB_ENV | |
else | |
echo "REBUILD_FLAG=" | tee -a $GITHUB_ENV | |
fi | |
- name: Initialize ccache | |
uses: Chocobo1/setup-ccache-action@master | |
if: ${{ env.REBUILD_FLAG }} | |
with: | |
prepend_symlinks_to_path: false | |
update_packager_index: false | |
install_ccache: false | |
override_cache_key: ${{ github.job }}-${{ matrix.arch }} | |
ccache_options: | | |
max_size=2G | |
compiler_check=none | |
compression=false | |
sloppiness=locale,time_macros,pch_defines | |
- name: Build kernel | |
if: ${{ env.REBUILD_FLAG }} | |
run: | | |
cd linux && ../build.sh --branch MAIN | |
mv arch/x86/boot/bzImage ../${{ matrix.image-name }} | |
cp .config ../.config-${{ matrix.image-name }} | |
cd .. && sha256sum ${{ matrix.image-name }} > ${{ matrix.image-name }}.sha256 | |
- name: Upload bzImage | |
uses: actions/upload-artifact@main | |
if: ${{ env.REBUILD_FLAG }} | |
with: | |
name: ${{ matrix.image-name }} | |
path: | | |
${{ matrix.image-name }} | |
${{ matrix.image-name }}.sha256 | |
.config-${{ matrix.image-name }} | |
- id: out | |
run: | | |
echo "current_version=${{ env.CURRENT_VERSION }}" >> $GITHUB_OUTPUT | |
echo "release_version=${{ env.RELEASED_VERSION }}" >> $GITHUB_OUTPUT | |
echo "clang_version=${{ env.CLANG_VERSION }}" >> $GITHUB_OUTPUT | |
echo "rebuild_flag=${{ env.REBUILD_FLAG }}" >> $GITHUB_OUTPUT | |
release: | |
runs-on: ubuntu-latest | |
needs: build | |
permissions: | |
contents: write | |
steps: | |
- uses: actions/checkout@main | |
- uses: actions/download-artifact@main | |
with: | |
path: release_images/ | |
merge-multiple: true | |
- id: fetch_commit_sha | |
run: | | |
if [ ${{ github.event_name }} = 'pull_request' ]; then | |
echo "sha=${{ github.event.pull_request.head.sha }}" >> $GITHUB_OUTPUT | |
echo "RELEASE_TAG=${{ needs.build.outputs.current_version }}.1-PR" | tee -a $GITHUB_ENV | |
else | |
echo "sha=${{ github.sha }}" >> $GITHUB_OUTPUT | |
echo "RELEASE_TAG=${{ needs.build.outputs.current_version }}.1" | tee -a $GITHUB_ENV | |
fi | |
- name: Remove misc files | |
run: | | |
rm -rf release_images/.config* | |
# We don't release .config files, they are in the artifact only for debugging | |
- name: Release | |
uses: softprops/[email protected] | |
if: ${{ needs.build.outputs.rebuild_flag }} | |
with: | |
name: ${{ env.RELEASE_TAG }} | |
tag_name: ${{ env.RELEASE_TAG }} | |
draft: ${{ github.event_name == 'pull_request' }} | |
target_commitish: ${{ steps.fetch_commit_sha.outputs.sha }} | |
body: | | |
Latest XanMod MAIN kernel for WSL2, built with ${{ needs.build.outputs.clang_version }}. | |
Provide builds on different archs with matrix build utility of GitHub Action. | |
* `bzImage-x64v{2,3}` for generic-x86_64-v{2,3} | |
* `bzImage-skylake` for intel skylake | |
To check supported x86_64 level on your machine, see [how to check supported x86_64 level of the hardware](https://unix.stackexchange.com/questions/631217/how-do-i-check-if-my-cpu-supports-x86-64-v2?msclkid=42ca61e9aa7111ecbcab7bb1a4204357). | |
And if you happen to use intel skylake chips (just like me), you can choose `bzImage-skylake` for best tuning. | |
**NOTE for Win11**: the minimum requirement of Win11 ensures generic-x86_64-v3 support, so feel free to use `bzImage-x64v3`. | |
files: | | |
release_images/* | |
token: ${{ secrets.GITHUB_TOKEN }} | |
# generate_release_notes: true | |
fail_on_unmatched_files: true |