update #15
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: | |
IS_LTS: NO | |
jobs: | |
build: | |
runs-on: ubuntu-latest | |
container: locietta/loia-dev-base: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: riscv | |
image-name: bzImage-riscv-64 | |
steps: | |
- uses: actions/checkout@main | |
- name: Install dependencies | |
id: dep | |
run: | | |
pacman -Syu --noconfirm pahole xmlto inetutils bc cpio jq llvm llvm-libs clang lld ccache | |
- name: Trust this directory | |
run: git config --global --add safe.directory '*' # v2.35.3 or later | |
- name: Initialize ccache | |
uses: hendrikmuhs/[email protected] | |
with: | |
max-size: 2048M | |
key: ${{ github.job }}-${{ matrix.arch }} | |
- name: Prepare source code | |
shell: bash | |
run: | | |
export VERSION_BRANCH=v6.11 | |
git clone https://github.com/torvalds/linux -b $VERSION_BRANCH --depth 1 linux | |
cd linux && ../config.sh | |
scripts/config -d riscv # avoid override warning for duplicate arch flags | |
scripts/config -e ${{ matrix.arch }} | |
# Load version info into env | |
echo "CLANG_VERSION=$(pacman -Qs clang | grep local/clang | sed "s#.*local/clang \(.*\) (\(.*\))#\1#")" | 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/ZLangJIT/riscv-kernel/tags\?per_page\=60 | jq -r '.[].name' | grep -v 'lts' | head -n 1) | |
export RELEASED_VERSION=$(echo $RELEASED_TAG | sed "s#\(riscv-kernel-[0-9][0-9]*\).*#\1#" ) | |
export RELEASED_MINOR=$(echo $RELEASED_TAG | sed "s#\(riscv-kernel-[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: Build kernel | |
if: ${{ env.REBUILD_FLAG }} | |
run: | | |
cd linux && ../build.sh | |
mv arch/riscv/boot/bzImage ../${{ 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 | |
- 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 | |
steps: | |
- uses: actions/checkout@main | |
- uses: actions/download-artifact@main | |
with: | |
path: release_images/ | |
- 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: Release | |
uses: softprops/action-gh-release@master | |
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: | | |
RISC-V linux kernel, built with Clang ${{ needs.build.outputs.clang_version }} | |
* `bzImage-x64` for riscv | |
files: | | |
release_images/*/* | |
token: ${{ secrets.CUSTOM_GITHUB_TOKEN }} | |
# generate_release_notes: true | |
fail_on_unmatched_files: true |