From 6380c85064879e3b922cf9c7170ffcf06ff7abd1 Mon Sep 17 00:00:00 2001 From: Slava-Shchipunov Date: Wed, 18 Sep 2024 12:16:14 +0700 Subject: [PATCH] feat: add action to build SNAPSHOT packages --- .../build-to-all-latest-snapshots.yml | 134 ++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 .github/workflows/build-to-all-latest-snapshots.yml diff --git a/.github/workflows/build-to-all-latest-snapshots.yml b/.github/workflows/build-to-all-latest-snapshots.yml new file mode 100644 index 00000000..1b1130cf --- /dev/null +++ b/.github/workflows/build-to-all-latest-snapshots.yml @@ -0,0 +1,134 @@ +name: Build AmneziaWG for snapshot OpenWRT +on: + push: + tags: + - "SNAPSHOT" + # schedule: + # - cron: '0 */4 * * *' + +jobs: + generate-config: + runs-on: ubuntu-latest + outputs: + job-config: ${{ steps.generate-config.outputs.job-config }} + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: '20.16.0' + + - name: Install dependencies + run: npm install + + - name: Generate Job Config + id: generate-config + run: node index.js SNAPSHOT + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + build: + name: "v${{ matrix.build_env.tag }} - ${{ matrix.build_env.pkgarch}} :: ${{ matrix.build_env.target}}/${{ matrix.build_env.subtarget}} build" + runs-on: ubuntu-latest + needs: generate-config + strategy: + matrix: + build_env: ${{ fromJson(needs.generate-config.outputs.job-config) }} + + steps: + - name: Get snapshot commit SHA and device ARCH + run: | + PROFILE_URL="https://downloads.openwrt.org/snapshots/targets/${{ matrix.build_env.target}}/${{ matrix.build_env.subtarget}}/profiles.json" + SNAPSHOT_COMMIT_SHA=$(wget -q $PROFILE_URL -O- | tr ',' '\n' | grep "version_code"| awk -F: '{print $2}' | tr -d '"' | awk -F- '{print $2}') + echo "Snapshot commit sha: $SNAPSHOT_COMMIT_SHA" + echo "SNAPSHOT_COMMIT_SHA=$SNAPSHOT_COMMIT_SHA" >> $GITHUB_ENV + + DEVICE_ARCH=$(wget -q $PROFILE_URL -O- | tr ',' '\n' | grep "arch_packages"| awk -F: '{print $2}' | tr -d '"') + echo "Device ARCH: $DEVICE_ARCH" + echo "DEVICE_ARCH=$DEVICE_ARCH" >> $GITHUB_ENV + + - uses: actions/checkout@v4 + with: + repository: openwrt/openwrt + ref: ${{ SNAPSHOT_COMMIT_SHA }} + fetch-depth: 0 + + - name: Building kernel and tools + 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/snapshots/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 + + # Setup config with AWG and dependencies + wget https://downloads.openwrt.org/snapshots/targets/${{ matrix.build_env.target}}/${{ matrix.build_env.subtarget}}/config.buildinfo -O .config + 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 + + 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 + run: | + VERMAGIC=`cat ./build_dir/target-*/linux-*/linux-*/.vermagic` + echo "Vermagic: $VERMAGIC" + + VERMAGIC_EXPECTED=${{ matrix.build_env.vermagic }} + + 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 + make package/kmod-amneziawg/compile V=s || true + + make package/luci-app-amneziawg/{clean,download,prepare} + make package/luci-app-amneziawg/compile V=s + + make V=s package/amneziawg-tools/{clean,download,prepare} + make V=s package/amneziawg-tools/compile + + - name: Prepare artifacts + run: | + tag_name=${{ github.ref_name }} + mkdir -p awgrelease + postfix="${{ matrix.build_env.tag }}_${{ matrix.build_env.vermagic }}_${{ 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 + + - name: Release + uses: softprops/action-gh-release@v1 + with: + files: awgrelease/*.ipk