Skip to content

Build and Release OpenClash Lite IPK #26

Build and Release OpenClash Lite IPK

Build and Release OpenClash Lite IPK #26

Workflow file for this run

name: Build and Release OpenClash Lite IPK
on:
push:
paths:
- 'Openclash dev/luci-app-openclash/Makefile'
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup OpenWrt SDK
run: |
sudo apt update
sudo apt install build-essential clang flex bison g++ gawk gcc-multilib g++-multilib gettext git libncurses-dev libssl-dev python3-distutils rsync unzip zlib1g-dev file wget tar -y
wget https://downloads.openwrt.org/releases/23.05.5/targets/x86/64/openwrt-sdk-23.05.5-x86-64_gcc-12.3.0_musl.Linux-x86_64.tar.xz
tar xJf openwrt-sdk-23.05.5-x86-64_gcc-12.3.0_musl.Linux-x86_64.tar.xz
mv openwrt-sdk-23.05.5-x86-64_gcc-12.3.0_musl.Linux-x86_64 openwrt-sdk
- name: Update and install feeds
run: |
cd openwrt-sdk
./scripts/feeds update -a
./scripts/feeds install -a
- name: Get Dev Version
id: get_dev_version
run: |
cd Openclash\ dev/luci-app-openclash
echo "dev_version=$(grep 'PKG_VERSION:=' Makefile | awk -F '=' '{print $2}' | tr -d ' ')" >> $GITHUB_OUTPUT
- name: Prepare Dev OpenClash
run: |
cd openwrt-sdk
mkdir -p package/luci-app-openclash
cp -R ../Openclash\ dev/luci-app-openclash/* package/luci-app-openclash/
- name: Compile po2lmo
run: |
cd openwrt-sdk/package/luci-app-openclash/tools/po2lmo
make && sudo make install
- name: Build Dev OpenClash
id: build_dev
run: |
cd openwrt-sdk && make defconfig
sed -i 's/CONFIG_LUCI_SRCDIET=y/# CONFIG_LUCI_SRCDIET is not set/' .config
sed -i 's/CONFIG_LUCI_JSMIN=y/# CONFIG_LUCI_JSMIN is not set/' .config
sed -i 's/CONFIG_LUCI_CSSTIDY=y/# CONFIG_LUCI_CSSTIDY is not set/' .config
sed -i 's/# CONFIG_NO_STRIP is not set/CONFIG_NO_STRIP=y/' .config
sed -i 's/CONFIG_USE_STRIP=y/# CONFIG_USE_STRIP is not set/' .config
sed -i 's/CONFIG_USE_SSTRIP=y/# CONFIG_USE_SSTRIP is not set/' .config
make package/luci-app-openclash/compile V=s -j$(nproc) || echo "BUILD_FAILED=true" >> $GITHUB_ENV
if [ "${{ env.BUILD_FAILED }}" != "true" ]; then
mv bin/packages/x86_64/base/luci-app-openclash*.ipk ../openclash-lite-beta-dev-${{ steps.get_dev_version.outputs.dev_version }}_all.ipk
fi
- name: Get Stable Version
id: get_stable_version
run: |
cd Openclash\ stable/luci-app-openclash
echo "stable_version=$(grep 'PKG_VERSION:=' Makefile | awk -F '=' '{print $2}' | tr -d ' ')" >> $GITHUB_OUTPUT
- name: Prepare Stable OpenClash
run: |
cd openwrt-sdk
make package/luci-app-openclash/clean V=s -j$(nproc)
rm -rf package/luci-app-openclash
mkdir -p package/luci-app-openclash
cp -R ../Openclash\ stable/luci-app-openclash/* package/luci-app-openclash/
- name: Build Stable OpenClash
id: build_stable
run: |
cd openwrt-sdk
make package/luci-app-openclash/compile V=s -j$(nproc) || echo "BUILD_FAILED=true" >> $GITHUB_ENV
if [ "${{ env.BUILD_FAILED }}" != "true" ]; then
mv bin/packages/x86_64/base/luci-app-openclash*.ipk ../openclash-lite-beta-stable-${{ steps.get_stable_version.outputs.stable_version }}_all.ipk
fi
- name: Check Existing Release
id: check_release
run: |
if [ -n "${{ steps.get_dev_version.outputs.dev_version }}" ]; then
dev_exists=$(curl -s -o /dev/null -w "%{http_code}" https://github.com/${{ github.repository }}/releases/download/${{ steps.get_dev_version.outputs.dev_version }}/openclash-lite-beta-dev-${{ steps.get_dev_version.outputs.dev_version }}_all.ipk)
echo "dev_exists=${dev_exists}" >> $GITHUB_OUTPUT
else
echo "dev_exists=404" >> $GITHUB_OUTPUT
fi
if [ -n "${{ steps.get_stable_version.outputs.stable_version }}" ]; then
stable_exists=$(curl -s -o /dev/null -w "%{http_code}" https://github.com/${{ github.repository }}/releases/download/${{ steps.get_dev_version.outputs.dev_version }}/openclash-lite-beta-stable-${{ steps.get_stable_version.outputs.stable_version }}_all.ipk)
echo "stable_exists=${stable_exists}" >> $GITHUB_OUTPUT
else
echo "stable_exists=404" >> $GITHUB_OUTPUT
fi
- name: Create Release
if: env.BUILD_FAILED != 'true'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
release_date=$(date +'%y%m%d')
release_name="Openclash-Lite-${release_date}"
release_tag="${{ steps.get_dev_version.outputs.dev_version }}"
release_body="# πŸš€ Openclash Lite for OpenWRT
## πŸ“¦ Release Versions
- πŸ”₯ Dev: \`${{ steps.get_dev_version.outputs.dev_version }}\`
- πŸ›‘οΈ Stable: \`${{ steps.get_stable_version.outputs.stable_version }}\`
## πŸ“₯ Downloads
- [πŸ’» Openclash Core](https://github.com/bobbyunknown/OpenClash-lite/tree/main/Openclash%20core)
- [πŸ“¦ Official Openclash IPK](https://github.com/bobbyunknown/OpenClash-lite/tree/main/Openclash%20official%20package)
---
> πŸ”” Always ensure you're using the latest version for the best performance!
_Thank you for using Openclash Lite! πŸ™_"
gh release create "$release_tag" \
--title "$release_name" \
--notes "$release_body" \
--generate-notes=false
- name: Upload Dev IPK
if: env.BUILD_FAILED != 'true' && steps.check_release.outputs.dev_exists != '200'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gh release upload ${{ steps.get_dev_version.outputs.dev_version }} \
./openclash-lite-beta-dev-${{ steps.get_dev_version.outputs.dev_version }}_all.ipk
- name: Upload Stable IPK
if: env.BUILD_FAILED != 'true' && steps.check_release.outputs.stable_exists != '200'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gh release upload ${{ steps.get_dev_version.outputs.dev_version }} \
./openclash-lite-beta-stable-${{ steps.get_stable_version.outputs.stable_version }}_all.ipk