Archived
Public Access
Skip kernel build when releases already exist
This commit is contained in:
+60
-13
@@ -8,6 +8,8 @@ on:
|
|||||||
|
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
GH_REPO: ${{ github.repository }}
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
@@ -18,7 +20,59 @@ concurrency:
|
|||||||
cancel-in-progress: true
|
cancel-in-progress: true
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
preflight:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
kernel_version: ${{ steps.plan.outputs.kernel_version }}
|
||||||
|
raw_kernel_version: ${{ steps.plan.outputs.raw_kernel_version }}
|
||||||
|
build_needed: ${{ steps.plan.outputs.build_needed }}
|
||||||
|
steps:
|
||||||
|
- name: 检查最新内核和已发布版本
|
||||||
|
id: plan
|
||||||
|
run: |
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
raw_version=$(curl -fsSL https://www.kernel.org/finger_banner \
|
||||||
|
| awk -F: '/latest stable version/ {gsub(/^[ \t]+|[ \t]+$/, "", $2); print $2; exit}')
|
||||||
|
if [ -z "$raw_version" ]; then
|
||||||
|
echo "Failed to read latest stable kernel version from kernel.org." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
version="$raw_version"
|
||||||
|
if [[ "$version" =~ ^[0-9]+\.[0-9]+$ ]]; then
|
||||||
|
version="${version}.0"
|
||||||
|
fi
|
||||||
|
if ! [[ "$version" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
||||||
|
echo "Unexpected stable kernel version: $raw_version" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "raw_kernel_version=$raw_version" >> "$GITHUB_OUTPUT"
|
||||||
|
echo "kernel_version=$version" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
|
missing=0
|
||||||
|
for arch in x86_64 arm64; do
|
||||||
|
tag="$arch-$version"
|
||||||
|
if gh release view "$tag" >/dev/null 2>&1; then
|
||||||
|
echo "$tag already exists."
|
||||||
|
else
|
||||||
|
echo "$tag is missing."
|
||||||
|
missing=1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ "$missing" -eq 0 ]; then
|
||||||
|
echo "build_needed=false" >> "$GITHUB_OUTPUT"
|
||||||
|
echo "All releases for $version already exist; ending workflow before build."
|
||||||
|
else
|
||||||
|
echo "build_needed=true" >> "$GITHUB_OUTPUT"
|
||||||
|
echo "At least one release for $version is missing; build will continue."
|
||||||
|
fi
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
|
needs: preflight
|
||||||
|
if: needs.preflight.outputs.build_needed == 'true'
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: 删除旧的工作流运行记录
|
- name: 删除旧的工作流运行记录
|
||||||
@@ -28,7 +82,8 @@ jobs:
|
|||||||
keep_minimum_runs: 0
|
keep_minimum_runs: 0
|
||||||
|
|
||||||
build:
|
build:
|
||||||
needs: cleanup
|
needs: [preflight, cleanup]
|
||||||
|
if: ${{ always() && needs.preflight.outputs.build_needed == 'true' && needs.cleanup.result == 'success' }}
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
@@ -40,20 +95,12 @@ jobs:
|
|||||||
runs-on: ${{ matrix.runs_on }}
|
runs-on: ${{ matrix.runs_on }}
|
||||||
env:
|
env:
|
||||||
ARCH: ${{ matrix.arch }}
|
ARCH: ${{ matrix.arch }}
|
||||||
KERNEL_VERSION: ""
|
KERNEL_VERSION: ${{ needs.preflight.outputs.kernel_version }}
|
||||||
steps:
|
steps:
|
||||||
- name: 获取内核版本
|
|
||||||
id: get_kernel_version
|
|
||||||
run: |
|
|
||||||
version=$(curl -s https://www.kernel.org \
|
|
||||||
| grep -A1 -m1 "stable:" \
|
|
||||||
| grep -oP '\d+\.\d+\.\d+')
|
|
||||||
echo "KERNEL_VERSION=$version" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
- name: 检查是否已发布
|
- name: 检查是否已发布
|
||||||
id: check_release
|
id: check_release
|
||||||
run: |
|
run: |
|
||||||
tag="${{ matrix.arch }}-${KERNEL_VERSION}"
|
tag="${{ matrix.arch }}-${{ env.KERNEL_VERSION }}"
|
||||||
if gh release view "$tag" >/dev/null 2>&1; then
|
if gh release view "$tag" >/dev/null 2>&1; then
|
||||||
echo "BUILD_NEEDED=false" >> "$GITHUB_ENV"
|
echo "BUILD_NEEDED=false" >> "$GITHUB_ENV"
|
||||||
echo "$tag already exists; skipping build."
|
echo "$tag already exists; skipping build."
|
||||||
@@ -189,8 +236,8 @@ jobs:
|
|||||||
body: "带有 BBRv3 的最新内核,适用于 ${{ matrix.arch }} 架构。Compiled & Optimized by Joey."
|
body: "带有 BBRv3 的最新内核,适用于 ${{ matrix.arch }} 架构。Compiled & Optimized by Joey."
|
||||||
|
|
||||||
update-config-baseline:
|
update-config-baseline:
|
||||||
needs: build
|
needs: [preflight, build]
|
||||||
if: ${{ needs.build.result == 'success' }}
|
if: ${{ always() && needs.preflight.outputs.build_needed == 'true' && needs.build.result == 'success' }}
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: 检出代码
|
- name: 检出代码
|
||||||
|
|||||||
Reference in New Issue
Block a user