mirror of
https://github.com/Slava-Shchipunov/awg-openwrt.git
synced 2026-03-14 09:23:10 +00:00
feat: add awg 2.0 (#51)
* feat: update awg tools * feat: update kmod-awg * feat: update luci awg * feat: update build-module.yml * feat: update amneziawg-install.sh * feat: update README.md * fix: fix paths * fix: fix adding packages * fix: fix regexp * fix: fix feeds install * chore: disable run-release.yml * feat: add rus lang package * fix: install python3-pyelftools in build job * feat: add manual start for build * chore: remove build to all snapshots
This commit is contained in:
187
.github/workflows/build-module.yml
vendored
187
.github/workflows/build-module.yml
vendored
@@ -9,6 +9,20 @@ on:
|
||||
tag_name:
|
||||
required: true
|
||||
type: string
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
version:
|
||||
description: 'OpenWRT version (e.g., 24.10.3)'
|
||||
required: true
|
||||
type: string
|
||||
targets:
|
||||
description: 'Targets (comma-separated, e.g., "stm32,ramips")'
|
||||
required: true
|
||||
type: string
|
||||
subtargets:
|
||||
description: 'Subtargets (comma-separated, e.g., "stm32mp1,mt7621")'
|
||||
required: true
|
||||
type: string
|
||||
|
||||
jobs:
|
||||
generate-config:
|
||||
@@ -27,8 +41,12 @@ jobs:
|
||||
- name: Get OpenWRT version from tag
|
||||
id: get_version
|
||||
run: |
|
||||
if [ "${{ github.event_name }}" == "workflow_call" ]; then
|
||||
echo "VERSION=${{ inputs.tag_name }}" >> $GITHUB_ENV
|
||||
if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then
|
||||
echo "VERSION=${{ inputs.version }}" >> $GITHUB_ENV
|
||||
echo "TARGETS=${{ inputs.targets }}" >> $GITHUB_ENV
|
||||
echo "SUBTARGETS=${{ inputs.subtargets }}" >> $GITHUB_ENV
|
||||
elif [ "${{ github.event_name }}" == "workflow_call" ]; then
|
||||
VERSION="${{ inputs.tag_name }}"
|
||||
echo "VERSION=${VERSION#v}" >> $GITHUB_ENV
|
||||
else
|
||||
echo "VERSION=${GITHUB_REF/refs\/tags\/v/}" >> $GITHUB_ENV
|
||||
@@ -39,7 +57,7 @@ jobs:
|
||||
|
||||
- name: Generate Job Config
|
||||
id: generate-config
|
||||
run: node index.js ${{ env.VERSION }}
|
||||
run: node index.js ${{ env.VERSION }} "${{ env.TARGETS }}" "${{ env.SUBTARGETS }}"
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
@@ -53,94 +71,127 @@ jobs:
|
||||
fail-fast: false
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
repository: openwrt/openwrt
|
||||
ref: v${{ matrix.build_env.tag }}
|
||||
fetch-depth: 0
|
||||
- name: Checkout AWG source code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Cache Tools and Kernel
|
||||
id: cache-tools-kernel
|
||||
- name: Install Python dependencies
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y python3-pyelftools
|
||||
|
||||
- name: Cache OpenWrt SDK
|
||||
id: cache-sdk
|
||||
uses: actions/cache@v4
|
||||
env:
|
||||
cache-name: "cache-tools-kernel-${{ matrix.build_env.tag }}-${{ matrix.build_env.pkgarch}}-${{ matrix.build_env.target}}-${{ matrix.build_env.subtarget}}"
|
||||
cache-name: "cache-sdk-${{ matrix.build_env.tag }}-${{ matrix.build_env.target}}-${{ matrix.build_env.subtarget}}"
|
||||
with:
|
||||
path: "**"
|
||||
key: ${{ runner.os }}-build-vm4-${{ env.cache-name }}
|
||||
path: openwrt-sdk-*/
|
||||
key: ${{ runner.os }}-sdk-${{ env.cache-name }}
|
||||
|
||||
- name: Building kernel and tools
|
||||
#if: ${{ steps.cache-tools-kernel.outputs.cache-hit != 'true' }}
|
||||
- name: Download and extract OpenWrt SDK
|
||||
if: steps.cache-sdk.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
echo "pkgarch: ${{ matrix.build_env.pkgarch}}, target:${{ matrix.build_env.target}}, subtarget: ${{ matrix.build_env.subtarget}}"
|
||||
|
||||
# Setup & install feeds
|
||||
wget https://downloads.openwrt.org/releases/${{ matrix.build_env.tag }}/targets/${{ matrix.build_env.target}}/${{ matrix.build_env.subtarget}}/feeds.buildinfo -O feeds.conf
|
||||
echo "src-git awgopenwrt https://github.com/Slava-Shchipunov/awg-openwrt.git" >> ./feeds.conf
|
||||
./scripts/feeds update && ./scripts/feeds install -a
|
||||
# Get the actual SDK filename from the directory listing
|
||||
SDK_FILE=$(curl -s "https://downloads.openwrt.org/releases/${{ matrix.build_env.tag }}/targets/${{ matrix.build_env.target}}/${{ matrix.build_env.subtarget}}/" | grep -o "openwrt-sdk-${{ matrix.build_env.tag }}-${{ matrix.build_env.target}}-${{ matrix.build_env.subtarget}}_gcc-[^\"]*_musl[^\"]*\.Linux-x86_64\.tar\.[xz|zst]*" | head -n1)
|
||||
|
||||
if [ -z "$SDK_FILE" ]; then
|
||||
echo "SDK file not found for ${{ matrix.build_env.tag }} ${{ matrix.build_env.target}} ${{ matrix.build_env.subtarget}}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
SDK_DOWNLOAD_URL="https://downloads.openwrt.org/releases/${{ matrix.build_env.tag }}/targets/${{ matrix.build_env.target}}/${{ matrix.build_env.subtarget}}/${SDK_FILE}"
|
||||
echo "Downloading SDK: $SDK_DOWNLOAD_URL"
|
||||
|
||||
wget "$SDK_DOWNLOAD_URL"
|
||||
|
||||
# Extract based on file extension
|
||||
if [[ "$SDK_FILE" == *.tar.zst ]]; then
|
||||
tar --zstd -xf "$SDK_FILE"
|
||||
elif [[ "$SDK_FILE" == *.tar.xz ]]; then
|
||||
tar -xf "$SDK_FILE"
|
||||
else
|
||||
echo "Unknown archive format: $SDK_FILE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
rm "$SDK_FILE"
|
||||
|
||||
# Setup config with AWG and dependencies
|
||||
wget https://downloads.openwrt.org/releases/${{ matrix.build_env.tag }}/targets/${{ matrix.build_env.target}}/${{ matrix.build_env.subtarget}}/config.buildinfo -O .config
|
||||
echo "CONFIG_PACKAGE_kmod-amneziawg=m" >> .config
|
||||
- name: Setup SDK and feeds
|
||||
run: |
|
||||
# Find SDK directory
|
||||
SDK_DIR=$(find . -maxdepth 1 -name "openwrt-sdk-*" -type d | head -n1)
|
||||
|
||||
if [ -z "$SDK_DIR" ]; then
|
||||
echo "SDK directory not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Get absolute paths
|
||||
WORKSPACE_DIR=$(pwd)
|
||||
|
||||
cd "$SDK_DIR"
|
||||
|
||||
# Update feeds to include LuCI
|
||||
./scripts/feeds update -a
|
||||
./scripts/feeds install -a
|
||||
|
||||
# Copy current repository packages directly to package directory
|
||||
cp -r "$WORKSPACE_DIR/kmod-amneziawg" package/
|
||||
cp -r "$WORKSPACE_DIR/amneziawg-tools" package/
|
||||
cp -r "$WORKSPACE_DIR/luci-proto-amneziawg" package/
|
||||
|
||||
# Configure packages to build
|
||||
echo "CONFIG_PACKAGE_kmod-amneziawg=m" > .config
|
||||
echo "CONFIG_PACKAGE_amneziawg-tools=y" >> .config
|
||||
echo "CONFIG_PACKAGE_luci-app-amneziawg=y" >> .config
|
||||
echo "CONFIG_PACKAGE_kmod-crypto-lib-chacha20=m" >> .config
|
||||
echo "CONFIG_PACKAGE_kmod-crypto-lib-chacha20poly1305=m" >> .config
|
||||
echo "CONFIG_PACKAGE_kmod-crypto-chacha20poly1305=m" >> .config
|
||||
|
||||
echo "CONFIG_PACKAGE_luci-proto-amneziawg=y" >> .config
|
||||
echo "CONFIG_PACKAGE_luci-i18n-amneziawg-ru=y" >> .config
|
||||
|
||||
make defconfig
|
||||
|
||||
echo " > make tools/install"
|
||||
make tools/install -i -j `nproc`
|
||||
|
||||
cat ./build_dir/target-*/linux-*/linux-*/.vermagic || true
|
||||
|
||||
echo " > make toolchain/install"
|
||||
make toolchain/install -i -j `nproc`
|
||||
|
||||
cat ./build_dir/target-*/linux-*/linux-*/.vermagic || true
|
||||
|
||||
# compile kernel module
|
||||
echo " > make target/linux/compile"
|
||||
make target/linux/compile -i -j `nproc` V=s
|
||||
|
||||
VERMAGIC=`cat ./build_dir/target-*/linux-*/linux-*/.vermagic`
|
||||
VERMAGIC_EXPECTED=${{ matrix.build_env.vermagic }}
|
||||
|
||||
if [ "$VERMAGIC" != "$VERMAGIC_EXPECTED" ]; then
|
||||
echo Vermagic mismatch: $VERMAGIC, expected $VERMAGIC_EXPECTED
|
||||
exit 1
|
||||
fi
|
||||
|
||||
- name: Build AmneziaWG
|
||||
- name: Build AmneziaWG packages
|
||||
run: |
|
||||
VERMAGIC=`cat ./build_dir/target-*/linux-*/linux-*/.vermagic`
|
||||
echo "Vermagic: $VERMAGIC"
|
||||
# Find SDK directory
|
||||
SDK_DIR=$(find . -maxdepth 1 -name "openwrt-sdk-*" -type d | head -n1)
|
||||
cd "$SDK_DIR"
|
||||
|
||||
VERMAGIC_EXPECTED=${{ matrix.build_env.vermagic }}
|
||||
echo "Building AmneziaWG packages..."
|
||||
|
||||
if [ "$VERMAGIC" != "$VERMAGIC_EXPECTED" ]; then
|
||||
echo Vermagic mismatch: $VERMAGIC, expected $VERMAGIC_EXPECTED
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Ignore kmod build for some targets, replace with the awg-go
|
||||
make package/kmod-amneziawg/{clean,download,prepare} V=s || true
|
||||
# Build kmod-amneziawg (kernel module)
|
||||
echo "Building kmod-amneziawg..."
|
||||
make package/kmod-amneziawg/{download,prepare} V=s || true
|
||||
make package/kmod-amneziawg/compile V=s || true
|
||||
|
||||
make package/luci-app-amneziawg/{clean,download,prepare}
|
||||
make package/luci-app-amneziawg/compile V=s
|
||||
# Build luci-proto-amneziawg (web interface)
|
||||
echo "Building luci-proto-amneziawg..."
|
||||
make package/luci-proto-amneziawg/{download,prepare} V=s
|
||||
make package/luci-proto-amneziawg/compile V=s
|
||||
|
||||
make V=s package/amneziawg-tools/{clean,download,prepare}
|
||||
make V=s package/amneziawg-tools/compile
|
||||
# Build amneziawg-tools (userspace tools)
|
||||
echo "Building amneziawg-tools..."
|
||||
make package/amneziawg-tools/{download,prepare} V=s
|
||||
make package/amneziawg-tools/compile V=s
|
||||
|
||||
echo "Build completed. Checking for built packages..."
|
||||
find bin/ -name "*.ipk" | grep -E "(amneziawg|luci-proto-amneziawg|luci-i18n-amneziawg)" | head -10
|
||||
|
||||
- name: Prepare artifacts
|
||||
run: |
|
||||
tag_name=${{ github.ref_name }}
|
||||
# Find SDK directory
|
||||
SDK_DIR=$(find . -maxdepth 1 -name "openwrt-sdk-*" -type d | head -n1)
|
||||
|
||||
mkdir -p awgrelease
|
||||
postfix="v${{ matrix.build_env.tag }}_${{ matrix.build_env.pkgarch}}_${{ matrix.build_env.target}}_${{ matrix.build_env.subtarget}}"
|
||||
cp bin/packages/${{ matrix.build_env.pkgarch }}/awgopenwrt/amneziawg-tools_*.ipk awgrelease/amneziawg-tools_${postfix}.ipk
|
||||
cp bin/packages/${{ matrix.build_env.pkgarch }}/awgopenwrt/luci-app-amneziawg_*.ipk awgrelease/luci-app-amneziawg_${postfix}.ipk
|
||||
cp bin/targets/${{ matrix.build_env.target}}/${{ matrix.build_env.subtarget}}/packages/kmod-amneziawg_*.ipk awgrelease/kmod-amneziawg_${postfix}.ipk
|
||||
|
||||
# Copy built packages
|
||||
find "$SDK_DIR/bin/packages" -name "amneziawg-tools_*.ipk" -exec cp {} awgrelease/amneziawg-tools_${postfix}.ipk \; || echo "amneziawg-tools package not found"
|
||||
find "$SDK_DIR/bin/packages" -name "luci-proto-amneziawg_*.ipk" -exec cp {} awgrelease/luci-proto-amneziawg_${postfix}.ipk \; || echo "luci-proto-amneziawg package not found"
|
||||
find "$SDK_DIR/bin/packages" -name "luci-i18n-amneziawg-ru_*.ipk" -exec cp {} awgrelease/luci-i18n-amneziawg-ru_${postfix}.ipk \; || echo "luci-i18n-amneziawg-ru package not found"
|
||||
find "$SDK_DIR/bin/targets" -name "kmod-amneziawg_*.ipk" -exec cp {} awgrelease/kmod-amneziawg_${postfix}.ipk \; || echo "kmod-amneziawg package not found"
|
||||
|
||||
echo "Built packages:"
|
||||
ls -la awgrelease/
|
||||
|
||||
- name: Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
|
||||
Reference in New Issue
Block a user