fujr 5dc6b7cdad workflow: Split the original workflow and separate the support list update.
No longer check the support list in the main workflow.
Enable automatic updates to the support list only for the main branch.
Check the support list information in PRs:
Automatically close the PR if there are errors.
If there are no errors, comment on the changes made.
2025-06-15 16:14:11 +08:00

202 lines
6.7 KiB
YAML

name: "Auto compile with OpenWrt SDK"
on:
workflow_dispatch:
push:
branches:
- '*'
tags:
- 'v*'
paths-ignore:
- "docs/**"
- "README.md"
- "README.en.md"
- ".github/workflows/**"
- ".github/**"
pull_request:
branches:
- main
paths-ignore:
- "docs/**"
- "README.md"
- "README.en.md"
- ".github/workflows/**"
- ".github/**"
env:
TZ: Asia/Shanghai
jobs:
job_prepare:
runs-on: ubuntu-latest
outputs:
branch_name: ${{ env.branch_name }}
tag_name: ${{ env.tag_name }}
push_type: ${{ env.push_type }}
is_pr: ${{ env.is_pr }}
steps:
- name: Determine push type
run: |
if [[ "${{ github.ref }}" == refs/tags/* ]]; then
echo "This is a tag push."
echo "tag_name=${{ github.ref_name }}" >> $GITHUB_ENV
echo "push_type=tag" >> $GITHUB_ENV
else
echo "This is a branch push."
echo "branch_name=${{ github.ref_name }}" >> $GITHUB_ENV
echo "push_type=branch" >> $GITHUB_ENV
fi
is_pr=$([[ "${{ github.event_name }}" == "pull_request" ]] && echo 1 || echo 0)
echo "is_pr=${is_pr}" >> $GITHUB_ENV
- name: Checkout
if:
uses: actions/checkout@v2
with:
path: 'qmodem'
- name: Generate Release Note
id: update_modem_support_list
run: |
cd qmodem
python3 ./scripts/update_support_list.py temp_support_list ./luci/luci-app-qmodem/root/usr/share/qmodem/modem_support.json
mv temp_support_list_release_notes.md ./release_note.md
- name: Upload Release Note
id: upload_release_note
uses: actions/upload-artifact@v4
with:
name: Release Note
path: ./qmodem/release_note.md
job_build_qmodem:
name: Build QModem
needs: job_prepare
continue-on-error: true
strategy:
matrix:
build_arch: ['arm64_ipk',"arm64_apk","x64_apk","x64_ipk" ]
runs-on: ubuntu-latest
steps:
- name: Install packages
run: |
sudo -E apt-get -qq update
sudo -E apt-get -qq install zstd build-essential clang flex bison g++ gawk gcc-multilib g++-multilib gettext git libncurses5-dev libssl-dev python3-venv rsync unzip zlib1g-dev file wget
sudo -E apt-get -qq autoremove --purge
sudo -E apt-get -qq clean
- name: Checkout
uses: actions/checkout@v2
with:
path: 'qmodem'
- name: Import Env
run: cat qmodem/.github/workflows/${{ matrix.build_arch }}.env >> "$GITHUB_ENV"
- name: Cache openwrt SDK
id: cache-sdk
uses: actions/cache@v3
with:
path: sdk
key: openwrt-sdk-${{ matrix.build_arch }}
- name: Initialization environment
if: steps.cache-sdk.outputs.cache-hit != 'true'
env:
url_sdk: ${{ env.SDK_URL }}${{ env.SDK_NAME}}.${{ env.SDK_EXT }}
run: |
wget ${{ env.url_sdk }}
file_name=${{ env.SDK_NAME}}.${{ env.SDK_EXT }}
if [ "${{ env.SDK_EXT }}" == "tar.zst" ]; then
mkdir sdk && tar --zstd -xvf $file_name -C ./sdk --strip-components=1
elif [ "${{ env.SDK_EXT }}" == "tar.xz" ]; then
mkdir sdk && tar -xvf $file_name -C ./sdk --strip-components=1
fi
cd sdk
echo "src-git base https://github.com/openwrt/openwrt.git;main" > feeds.conf
echo "src-git packages https://github.com/openwrt/packages.git;master" >> feeds.conf
echo "src-git luci https://github.com/openwrt/luci.git;master" >> feeds.conf
echo "src-git routing https://git.openwrt.org/feed/routing.git;master" >> feeds.conf
./scripts/feeds update -a
./scripts/feeds install -a
cd ..
echo "src-link qmodem `pwd`/qmodem" >> sdk/feeds.conf
cd sdk
./scripts/feeds update qmodem
./scripts/feeds install -a -p qmodem
echo "CONFIG_ALL_NONSHARED=n" > .config
echo "CONFIG_ALL_KMODS=n" >> .config
echo "CONFIG_ALL=n" >> .config
echo "CONFIG_AUTOREMOVE=n" >> .config
echo "CONFIG_LUCI_LANG_zh_Hans=y" >> .config
cat ../qmodem/.github/workflows/openwrt_package.config >> .config
make defconfig
make download -j$(nproc) || true
- name: Compile QModem
id: compile
run: |
cd sdk
./scripts/feeds update qmodem
./scripts/feeds install -a -p qmodem
generic_package=$(cat ../qmodem/.github/workflows/qmodem_package_generic)
arch_package=$(cat ../qmodem/.github/workflows/qmodem_package_arch)
for package in $generic_package; do
make package/$package/compile -j$(nproc) || true
done
for package in $arch_package; do
make package/$package/compile -j$(nproc) || true
done
ls bin/packages/${{ env.SDK_ARCH }}/qmodem/
echo "status=success" >> $GITHUB_OUTPUT
echo "FIRMWARE=$(pwd)/bin/packages/${{ env.SDK_ARCH }}/qmodem/" >> $GITHUB_ENV
- name: Upload QModem
if: ${{ steps.compile.outputs.status == 'success' }}
uses: actions/upload-artifact@v4
with:
name: QModem-${{ matrix.build_arch }}
path: ${{ env.FIRMWARE }}*
retention-days: 7
job_release_artifacts:
name: Release Artifacts
needs: [job_build_qmodem, job_prepare]
runs-on: ubuntu-latest
if: ${{ needs.job_prepare.outputs.push_type == 'tag' }}
steps:
- name: Download all artifacts
uses: actions/download-artifact@v4
with:
path: artifacts
- name: Download Release Note
uses: actions/download-artifact@v4
with:
name: Release Note
path: release_note
- name: Create releases directory
run: mkdir -p releases
- name: Package artifacts into tar.gz
run: |
for dir in artifacts/*; do
if [ -d "$dir" ]; then
base_name=$(basename "$dir")
tar -czf "releases/${base_name}.tar.gz" -C "$dir" .
fi
done
- name: Create GitHub Release
uses: softprops/action-gh-release@v2.2.2
if: ${{ needs.job_prepare.outputs.push_type == 'tag' }}
with:
body_path: release_note/release_note.md
generate_release_notes: true
tag_name: ${{ needs.job_prepare.outputs.tag_name }}
prerelease: ${{ contains(needs.job_prepare.outputs.tag_name, '-beta') || contains(needs.job_prepare.outputs.tag_name, '-rc') }}
files: releases/*