Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 0 additions & 32 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,29 +22,6 @@ on:
type: boolean
required: true

outputs:
kernel_version:
description: "Kernel version"
value: ${{ jobs.build.outputs.kernel_version }}
susfs_version:
description: "SUSFS version"
value: ${{ jobs.build.outputs.susfs_version }}
toolchain:
description: "Toolchain"
value: ${{ jobs.build.outputs.toolchain }}
build_date:
description: "Build timestamp"
value: ${{ jobs.build.outputs.build_date }}
release_repo:
description: "Release repo"
value: ${{ jobs.build.outputs.release_repo }}
release_branch:
description: "Release branch"
value: ${{ jobs.build.outputs.release_branch }}
kernel_name:
description: "Kernel name"
value: ${{ jobs.build.outputs.kernel_name }}

workflow_dispatch:
inputs:
KSU:
Expand Down Expand Up @@ -89,15 +66,6 @@ jobs:
TG_BOT_TOKEN: ${{ secrets.TG_BOT_TOKEN }}
GH_TOKEN: ${{ secrets.GH_TOKEN }}

outputs:
kernel_version: ${{ steps.build.outputs.kernel_version }}
susfs_version: ${{ steps.build.outputs.susfs_version }}
toolchain: ${{ steps.build.outputs.toolchain }}
build_date: ${{ steps.build.outputs.build_date }}
release_repo: ${{ steps.build.outputs.release_repo }}
release_branch: ${{ steps.build.outputs.release_branch }}
kernel_name: ${{ steps.build.outputs.kernel_name }}

steps:
- name: Fail SUSFS requirement check
if: ${{ inputs.SUSFS == true && inputs.KSU == 'NONE' }}
Expand Down
79 changes: 15 additions & 64 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,7 @@ jobs:
- { name: "Non-KSU", KSU: "NONE", SUSFS: false, LXC: false }
- { name: "Non-KSU-LXC", KSU: "NONE", SUSFS: false, LXC: true }
- { name: "RKSU", KSU: "RKSU", SUSFS: false, LXC: false }
- { name: "RKSU-SUSFS", KSU: "RKSU", SUSFS: true, LXC: false }
- { name: "RKSU-LXC", KSU: "RKSU", SUSFS: false, LXC: true }
- { name: "RKSU-SUSFS-LXC", KSU: "RKSU", SUSFS: true, LXC: true }
- { name: "KSUN", KSU: "NEXT", SUSFS: false, LXC: false }
- { name: "KSUN-SUSFS", KSU: "NEXT", SUSFS: true, LXC: false }
- { name: "KSUN-LXC", KSU: "NEXT", SUSFS: false, LXC: true }
Expand All @@ -46,14 +44,6 @@ jobs:
needs: build
if: ${{ github.event.inputs.create_release }}
runs-on: ubuntu-latest
env:
KERNEL_VER: ${{ needs.build.outputs.kernel_version }}
SUSFS_VER: ${{ needs.build.outputs.susfs_version }}
TOOLCHAIN: ${{ needs.build.outputs.toolchain }}
BUILD_DATE: ${{ needs.build.outputs.build_date }}
RELEASE_REPO: ${{ needs.build.outputs.release_repo }}
RELEASE_BRANCH: ${{ needs.build.outputs.release_branch }}
KERNEL_NAME: ${{ needs.build.outputs.kernel_name }}

steps:
- name: Checkout current repo
Expand All @@ -66,34 +56,23 @@ jobs:
with:
path: release_files

- name: Import build configs
run: |
source "$GITHUB_WORKSPACE/config.sh"
{
echo "KERNEL_NAME=$KERNEL_NAME"
echo "RELEASE_REPO=$RELEASE_REPO"
echo "RELEASE_BRANCH=$RELEASE_BRANCH"
} >> "$GITHUB_ENV"

- name: Generate new tag
env:
GH_TOKEN: ${{ secrets.GH_TOKEN }}
RELEASE_REPO: ${{ env.RELEASE_REPO }}
run: |
LATEST_TAG=$(gh release list --repo "$RELEASE_REPO" --limit 100 --json tagName --jq '.[].tagName' | sort -V | tail -n1)

LATEST=${LATEST_TAG#v}

if [[ -z "$LATEST" ]]; then
RELEASE_TAG="v1.0"
else
MAJOR=${LATEST%.*}
MINOR=${LATEST#*.}
TAG_PY="$GITHUB_WORKSPACE/py/tag.py"

# Force them to be numbers
MAJOR=$((MAJOR + 0))
MINOR=$((MINOR + 0))

if [ "$MINOR" -ge 9 ]; then
MAJOR=$((MAJOR + 1))
MINOR=0
else
MINOR=$((MINOR + 1))
fi

RELEASE_TAG="v${MAJOR}.${MINOR}"
fi
RELEASE_TAG=$(python3 "$TAG_PY" "$RELEASE_REPO")

echo "New tag: $RELEASE_TAG"
echo "RELEASE_TAG=$RELEASE_TAG" >> "$GITHUB_ENV"
Expand All @@ -112,16 +91,6 @@ jobs:

---

### Build Information

| Component | Information |
|-----------|---------|
| **Kernel Version** | `${{ env.KERNEL_VER }}` |
| **Toolchain** | `${{ env.TOOLCHAIN }}` |
| **Build Date** | `${{ env.BUILD_DATE }}` |

---

### Variants Suffixes

| Suffix | Description |
Expand All @@ -145,6 +114,8 @@ jobs:
TG_BOT_TOKEN: ${{ secrets.TG_BOT_TOKEN }}
TG_CHAT_ID: ${{ secrets.TG_CHAT_ID }}
run: |
TG_PY="$GITHUB_WORKSPACE/py/tg.py"

escape_md_v2() {
python3 - "$*" <<'PY'
import sys, re
Expand All @@ -154,32 +125,12 @@ jobs:
PY
}

telegram_send_msg() {
local resp err

resp=$(curl -sX POST https://api.telegram.org/bot"${TG_BOT_TOKEN}"/sendMessage \
-d chat_id="${TG_CHAT_ID}" \
-d parse_mode="MarkdownV2" \
-d disable_web_page_preview=true \
-d text="$1")

if ! echo "$resp" | jq -e '.ok == true' > /dev/null; then
err=$(echo "$resp" | jq -r '.description')
echo "::error::telegram_send_msg(): ${err:-Unknown error} $*" >&2
exit 1
fi
}

message=$(
cat<<EOF
cat <<EOF
*$(escape_md_v2 "$KERNEL_NAME Release Build Completed!")*

*Kernel Version*: $(escape_md_v2 "${{ env.KERNEL_VER }}")
*Toolchain*: $(escape_md_v2 "${{ env.TOOLCHAIN }}")
*Build date*: $(escape_md_v2 "${{ env.BUILD_DATE }}")

[GitHub Release]($(escape_md_v2 "https://github.com/${{ env.RELEASE_REPO }}/releases/${{ env.RELEASE_TAG }}"))
EOF
)

telegram_send_msg "$message"
printf '%s' "$message" | python3 "$TG_PY" msg
29 changes: 8 additions & 21 deletions build.sh
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,18 @@
#
# Personal ESK Kernel build script
#

set -Ee

# Workspace path
WORKSPACE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"

# shellcheck disable=SC1091
source "$WORKSPACE/config.sh"

################################################################################
# Generic helpers
################################################################################

# Workspace path
WORKSPACE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"

# ANSI colors
RED='\033[0;31m'
GREEN='\033[0;32m'
Expand Down Expand Up @@ -135,16 +137,6 @@ trap 'error "Build failed at line $LINENO: $BASH_COMMAND"' ERR
################################################################################
# Build configuration
################################################################################

# General
KERNEL_NAME="ESK"
KERNEL_DEFCONFIG="gki_defconfig"
KBUILD_BUILD_USER="builder"
KBUILD_BUILD_HOST="esk"
TIMEZONE="Asia/Ho_Chi_Minh"
RELEASE_REPO="ESK-Project/esk-releases"
RELEASE_BRANCH="main"

# --- Kernel flavour
# KernelSU variant: NONE | RKSU | NEXT | SUKI
KSU="${KSU:-NONE}"
Expand All @@ -155,12 +147,6 @@ LXC="$(norm_bool "${LXC:-false}")"
# Include BBG?
BBG="$(norm_bool "${BBG:-false}")"

# --- Compiler
# Clang LTO mode: thin | full
CLANG_LTO="thin"
# Parallel build jobs
JOBS="$(nproc --all)"

# --- Paths
KERNEL_PATCHES="$WORKSPACE/kernel_patches"
CLANG="$WORKSPACE/clang"
Expand Down Expand Up @@ -376,6 +362,7 @@ apply_susfs() {

cd "$KERNEL"
config --enable CONFIG_KSU_SUSFS
config --disable CONFIG_KSU_SUSFS_SPOOF_UNAME

success "SuSFS applied!"
}
Expand Down Expand Up @@ -419,7 +406,7 @@ prebuild_kernel() {

# BBG
if is_true "$BBG"; then
info "Setup Baseband Guard (BBG) LSM for KernelSU variants"
info "Setup Baseband Guard (BBG) LSM"
wget -qO- https://github.com/vc-teahouse/Baseband-guard/raw/main/setup.sh | bash > /dev/null 2>&1
sed -i '/^config LSM$/,/^help$/{ /^[[:space:]]*default/ { /baseband_guard/! s/bpf/bpf,baseband_guard/ } }' security/Kconfig
config --enable CONFIG_BBG
Expand Down
31 changes: 31 additions & 0 deletions config.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# shellcheck shell=bash
# shellcheck disable=SC2034
#
# ESK Kernel builder configuration
#

################################################################################
# Project Identity
################################################################################
KERNEL_NAME="ESK"
KERNEL_DEFCONFIG="gki_defconfig"

# Kbuild identity
KBUILD_BUILD_USER="builder"
KBUILD_BUILD_HOST="esk"

# Used for timestamps in logs/messages
TIMEZONE="Asia/Ho_Chi_Minh"

# Where release artifacts are published
RELEASE_REPO="ESK-Project/esk-releases"
RELEASE_BRANCH="main"

################################################################################
# Build knobs
################################################################################
# Clang LTO mode: thin | full
CLANG_LTO="thin"

# Parallel build jobs (override: JOBS=16 ./build.sh)
JOBS="${JOBS:-$(nproc --all)}"
65 changes: 65 additions & 0 deletions py/tag.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
#!/usr/bin/env python3
from typing import Any, NoReturn
import json
import subprocess
import sys


def die(reason: str) -> NoReturn:
print(f"[ERROR] {reason}", file=sys.stderr)
sys.exit(1)


def usage() -> None:
die("Usage: tag.py <owner/repo>")


def parse(tag: str) -> tuple[int, int]:
tag = tag.strip()
if tag[:1] in ("v", "V"):
tag = tag[1:]
major, minor = tag.split(".")
return int(major), int(minor)


def main() -> None:
if len(sys.argv) != 2:
usage()

repo: str = sys.argv[1].strip()
if not repo:
usage()

try:
raw: str = subprocess.check_output(
["gh", "release", "list", "--repo", repo, "--limit", "100", "--json", "tagName"],
text=True, stderr=subprocess.STDOUT
)
except subprocess.CalledProcessError as e:
die(f"gh failed: {e.output.strip()}")

data: list[dict[str, Any]] = json.loads(raw)
tags: list[str] = [x["tagName"] for x in data if x.get("tagName")]

next_tag: str

if not tags:
next_tag = "v1.0"
sys.stdout.write(next_tag)
return

latest: str = max(tags, key=parse)
major, minor = parse(latest)

if minor >= 9:
major += 1
minor = 0
else:
minor += 1

next_tag = f"v{major}.{minor}"
sys.stdout.write(next_tag)


if __name__ == "__main__":
main()
Loading