UI LLVM Linux Kernel #1
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: UI LLVM Linux Kernel | |
on: | |
push: | |
branches: | |
- main | |
pull_request: | |
branches: | |
- main | |
workflow_dispatch: | |
jobs: | |
build: | |
name: Build Kernel | |
runs-on: ubuntu-latest | |
steps: | |
- name: Notify Start of Build | |
uses: xinthink/[email protected] | |
with: | |
botToken: ${{ secrets.TELEGRAM_BOT_TOKEN }} | |
chatId: ${{ secrets.TELEGRAM_CHAT_ID }} | |
jobStatus: "Build Kernel job has started." | |
skipSuccess: false | |
- name: Checkout code | |
uses: actions/checkout@v2 | |
- name: Set up dependencies | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y clang llvm lld build-essential libncurses-dev bison flex libssl-dev libelf-dev cpio | |
sudo apt-get install -y xorg openbox lightdm | |
- name: Build Kernel with LLVM | |
run: | | |
export CC=clang | |
export LD=ld.lld | |
export AR=llvm-ar | |
export NM=llvm-nm | |
export OBJCOPY=llvm-objcopy | |
export OBJDUMP=llvm-objdump | |
export STRIP=llvm-strip | |
make defconfig | |
make -j$(nproc) CC=clang LD=ld.lld | |
- name: Archive the Kernel Artifact | |
run: | | |
tar -czvf kernel-build.tar.gz arch/x86/boot/bzImage | |
- name: Build Root Filesystem | |
run: | | |
mkdir -p rootfs/{bin,sbin,etc,proc,sys,usr/{bin,sbin},home} | |
sudo apt-get install -y busybox-static neofetch htop | |
cp /bin/busybox rootfs/bin/ | |
cp /bin/neofetch rootfs/bin/ | |
cp /bin/htop rootfs/bin/ | |
# Create init script to launch GUI | |
cat << 'EOF' > rootfs/init | |
#!/bin/sh | |
mount -t proc none /proc | |
mount -t sysfs none /sys | |
clear | |
echo "Welcome to FOS!" | |
# Start X with Openbox | |
startx | |
EOF | |
chmod +x rootfs/init | |
# Link all busybox commands to /bin | |
for cmd in $(rootfs/bin/busybox --list); do | |
[ ! -e rootfs/bin/$cmd ] && ln -s /bin/busybox rootfs/bin/$cmd | |
done | |
cd rootfs | |
find . | cpio -H newc -ov --owner root:root | gzip > ../initramfs.img | |
- name: Archive the RootFS Artifact | |
run: | | |
tar -czvf rootfs-build.tar.gz initramfs.img | |
- name: Upload Kernel Artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: kernel-build | |
path: kernel-build.tar.gz | |
- name: Upload RootFS Artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: rootfs-build | |
path: rootfs-build.tar.gz | |
- name: Notify Build Completion | |
if: always() | |
uses: xinthink/[email protected] | |
with: | |
botToken: ${{ secrets.TELEGRAM_BOT_TOKEN }} | |
chatId: ${{ secrets.TELEGRAM_CHAT_ID }} | |
jobStatus: "Build Kernel job completed with status ${{ job.status }}." | |
skipSuccess: false | |
release: | |
name: Release Kernel & RootFS | |
needs: build | |
runs-on: ubuntu-latest | |
steps: | |
- name: Notify Start of Release | |
uses: xinthink/[email protected] | |
with: | |
botToken: ${{ secrets.TELEGRAM_BOT_TOKEN }} | |
chatId: ${{ secrets.TELEGRAM_CHAT_ID }} | |
jobStatus: "Release job has started." | |
skipSuccess: false | |
- name: Download Kernel Artifact | |
uses: actions/download-artifact@v3 | |
with: | |
name: kernel-build | |
- name: Download RootFS Artifact | |
uses: actions/download-artifact@v3 | |
with: | |
name: rootfs-build | |
- name: Create GitHub Release | |
id: create_release | |
uses: actions/create-release@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
tag_name: UI.V.${{ github.run_number }} | |
release_name: UI LLVM Build v${{ github.run_number }} | |
draft: false | |
prerelease: false | |
- name: Upload Kernel to Release | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ steps.create_release.outputs.upload_url }} | |
asset_path: kernel-build.tar.gz | |
asset_name: kernel-build.tar.gz | |
asset_content_type: application/gzip | |
- name: Upload RootFS to Release | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ steps.create_release.outputs.upload_url }} | |
asset_path: rootfs-build.tar.gz | |
asset_name: rootfs-build.tar.gz | |
asset_content_type: application/gzip | |
- name: Notify Release Completion | |
if: always() | |
uses: xinthink/[email protected] | |
with: | |
botToken: ${{ secrets.TELEGRAM_BOT_TOKEN }} | |
chatId: ${{ secrets.TELEGRAM_CHAT_ID }} | |
jobStatus: "Release job completed with status ${{ job.status }}." | |
skipSuccess: false |