From 9af85abc84df5e9686c1f2776866c0e8ee45424e Mon Sep 17 00:00:00 2001 From: spvkgn Date: Tue, 13 Aug 2024 12:07:20 +0500 Subject: [PATCH] CI workflow --- .github/workflows/build-alpine.yml | 65 ------- .github/workflows/build-ci.yml | 270 ++++++++++++++++++++++++++++ .github/workflows/build-entware.yml | 99 ---------- .github/workflows/build-openwrt.yml | 80 --------- 4 files changed, 270 insertions(+), 244 deletions(-) delete mode 100644 .github/workflows/build-alpine.yml create mode 100644 .github/workflows/build-ci.yml delete mode 100644 .github/workflows/build-entware.yml delete mode 100644 .github/workflows/build-openwrt.yml diff --git a/.github/workflows/build-alpine.yml b/.github/workflows/build-alpine.yml deleted file mode 100644 index 610474b..0000000 --- a/.github/workflows/build-alpine.yml +++ /dev/null @@ -1,65 +0,0 @@ -name: Alpine - -on: - push: - branches: - - main - -jobs: - build: - name: build ${{ matrix.arch }} - runs-on: ${{ matrix.os }} - strategy: - matrix: - # arch: [x86_64, x86, aarch64, armhf, armv7, ppc64le, s390x] - arch: [x86_64, x86, aarch64, armhf] - os: [ubuntu-latest] - branch: [latest-stable] - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Set up ccache - uses: actions/cache@v4 - with: - path: ${{ github.workspace }}/.ccache - key: ccache-${{ matrix.arch }}-${{ github.run_id }} - restore-keys: ccache-${{ matrix.arch }}- - - - name: Set up Alpine Linux for ${{ matrix.arch }} - uses: jirutka/setup-alpine@v1 - with: - arch: ${{ matrix.arch }} - branch: ${{ matrix.branch }} - packages: > - bash build-base ccache coreutils findutils gawk git grep tar wget xz - autoconf automake libtool pkgconf linux-headers - shell-name: alpine.sh - - - name: Build inside chroot - id: build - env: - ARCH: ${{ matrix.arch }} - CCACHE_DIR: ${{ github.workspace }}/.ccache - PKG_REV: ${{ github.sha }} - shell: alpine.sh {0} - run: | - PKG_REV=$(echo $PKG_REV | cut -c1-7) - case $ARCH in - x86_64) PLATFORM=x64 ;; - x86) PLATFORM=x86 ;; - aarch64) PLATFORM=arm64 ;; - armhf) PLATFORM=arm ;; - *) PLATFORM=$ARCH ;; - esac - make -j$(nproc) CC="ccache gcc -static-libgcc -static" || exit 1 - strip -s build/youtubeUnblock - tar -C build -cJvf "youtubeUnblock-$PKG_REV-$PLATFORM.tar.xz" youtubeUnblock - ccache --show-stats - - - name: Upload artifacts - if: steps.build.outcome == 'success' - uses: actions/upload-artifact@v4 - with: - name: ${{ github.workflow }}-${{ matrix.arch }} - path: ./**/youtubeUnblock*.tar.xz diff --git a/.github/workflows/build-ci.yml b/.github/workflows/build-ci.yml new file mode 100644 index 0000000..a863205 --- /dev/null +++ b/.github/workflows/build-ci.yml @@ -0,0 +1,270 @@ +name: CI + +on: + push: + branches: + - main + paths-ignore: + - '.editorconfig' + - '.gitignore' + - 'LICENSE' + - 'README.md' + pull_request: + branches: + - main + +jobs: + prepare: + runs-on: ubuntu-latest + outputs: + version: ${{ steps.gh.outputs.version }} + sha: ${{ steps.gh.outputs.sha }} + steps: + - name: GH + id: gh + env: + REPO: ${{ github.repository }} + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + shell: bash + run: | + echo "version=$(gh api repos/$REPO/releases/latest --jq '.tag_name' | sed 's/v//')" >> $GITHUB_OUTPUT + if [[ "${{ github.event_name }}" != "pull_request" ]]; then + echo "sha=$(echo ${GITHUB_SHA::7})" >> $GITHUB_OUTPUT + else + echo "sha=$(gh api repos/$REPO/commits/main --jq '.sha[:7]')" >> $GITHUB_OUTPUT + fi + + build-static: + needs: prepare + name: build ${{ matrix.arch }} + runs-on: ubuntu-latest + strategy: + matrix: + # arch: [x86_64, x86, aarch64, armhf, armv7, ppc64le, s390x] + arch: [x86_64, x86, aarch64, armhf] + branch: [latest-stable] + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up ccache + uses: actions/cache@v4 + with: + path: ${{ github.workspace }}/.ccache + key: ccache-${{ matrix.arch }}-${{ github.run_id }} + restore-keys: ccache-${{ matrix.arch }}- + + - name: Set up Alpine Linux for ${{ matrix.arch }} + uses: jirutka/setup-alpine@v1 + with: + arch: ${{ matrix.arch }} + branch: ${{ matrix.branch }} + packages: > + bash build-base ccache coreutils findutils gawk git grep tar wget xz + autoconf automake libtool pkgconf linux-headers + shell-name: alpine.sh + + - name: Build inside chroot + id: build + env: + ARCH: ${{ matrix.arch }} + CCACHE_DIR: ${{ github.workspace }}/.ccache + VERSION: ${{ needs.prepare.outputs.version }} + SHA: ${{ needs.prepare.outputs.sha }} + shell: alpine.sh {0} + run: | + case $ARCH in + x86_64) PLATFORM=x64 ;; + x86) PLATFORM=x86 ;; + aarch64) PLATFORM=arm64 ;; + armhf) PLATFORM=arm ;; + *) PLATFORM=$ARCH ;; + esac + make -j$(nproc) CC="ccache gcc -static-libgcc -static" || exit 1 + strip -s build/youtubeUnblock + tar -C build -cJvf "youtubeUnblock-$VERSION-$SHA-$PLATFORM.tar.xz" youtubeUnblock + ccache --show-stats + + - name: Upload artifacts + if: steps.build.outcome == 'success' + uses: actions/upload-artifact@v4 + with: + name: static-${{ matrix.arch }} + path: ./**/youtubeUnblock*.tar.xz + + build-openwrt: + needs: prepare + runs-on: ubuntu-latest + strategy: + matrix: + branch: + - openwrt-23.05 + arch: + - aarch64_cortex-a53 + - aarch64_cortex-a72 + - aarch64_generic + - arm_arm1176jzf-s_vfp + - arm_arm926ej-s + - arm_cortex-a15_neon-vfpv4 + - arm_cortex-a5_vfpv4 + - arm_cortex-a7 + - arm_cortex-a7_neon-vfpv4 + - arm_cortex-a7_vfpv4 + - arm_cortex-a8_vfpv3 + - arm_cortex-a9 + - arm_cortex-a9_neon + - arm_cortex-a9_vfpv3-d16 + - arm_fa526 + - arm_mpcore + - arm_xscale + - mips64_octeonplus + - mips_24kc + - mips_4kec + - mips_mips32 + - mipsel_24kc + - mipsel_24kc_24kf + - mipsel_74kc + - mipsel_mips32 + - x86_64 + container: + image: openwrt/sdk:${{ matrix.arch }}-${{ matrix.branch }} + options: --user root + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + ref: 'openwrt' + + - name: Prepare build + env: + VERSION: ${{ needs.prepare.outputs.version }} + SHA: ${{ needs.prepare.outputs.sha }} + run: | + sed -i "s/PKG_REV:=.*$/PKG_REV:=$SHA/;s/PKG_VERSION:=.*$/PKG_VERSION:=$VERSION-$SHA/" youtubeUnblock/Makefile + + - name: Build packages + id: build + working-directory: /builder + run: | + echo "src-link youtubeUnblock $GITHUB_WORKSPACE" >> feeds.conf + cat feeds.conf + ./scripts/feeds update youtubeUnblock + ./scripts/feeds install -a -p youtubeUnblock + make defconfig + make package/youtubeUnblock/compile V=s + + - name: Upload packages + if: steps.build.outcome == 'success' + uses: actions/upload-artifact@v4 + with: + name: ${{ matrix.branch }}-${{ matrix.arch }} + path: /builder/**/youtubeUnblock*.ipk + if-no-files-found: error + + build-entware: + needs: prepare + runs-on: ubuntu-latest + strategy: + matrix: + arch: + - aarch64-3.10 + - armv7-3.2 + - mips-3.4 + - mipsel-3.4 + - x64-3.2 + steps: + - name: Set up Entware docker container + run: | + git clone --depth 1 https://github.com/Entware/docker.git + docker build docker --pull --tag builder + docker volume create entware-home + + - name: Restore Entware from cache + id: cache-restore + uses: actions/cache/restore@v4 + with: + path: ~/entware + key: entware-${{ matrix.arch }} + + - name: Load Entware from cache + if: steps.cache-restore.outputs.cache-hit == 'true' + run: | + docker run --rm --mount source=entware-home,target=/backup_vol -v ~/entware:/backup ubuntu tar -xf /backup/entware.tar -C /backup_vol + docker run --rm --mount source=entware-home,target=/home/me -w /home/me ubuntu bash -c 'cp -r ./backup_vol/* ./' + docker run --rm --mount source=entware-home,target=/home/me -w /home/me ubuntu bash -c 'chown -R 1000:1000 ./* ./' + + - name: Build Entware + if: steps.cache-restore.outputs.cache-hit != 'true' + run: | + docker run --rm -i --mount source=entware-home,target=/home/me -w /home/me --name builder builder git clone --depth 1 https://github.com/Entware/Entware.git + docker run --rm -i --mount source=entware-home,target=/home/me -w /home/me/Entware --name builder builder make package/symlinks + docker run --rm -i --mount source=entware-home,target=/home/me -w /home/me/Entware --name builder builder cp -v configs/${{ matrix.arch }}.config .config + docker run --rm -i --mount source=entware-home,target=/home/me -w /home/me/Entware --name builder builder make -j$(nproc) toolchain/install + docker run --rm --mount source=entware-home,target=/backup_vol -v ~/entware:/backup ubuntu tar -cf /backup/entware.tar /backup_vol + + - name: Save Entware to cache + if: steps.cache-restore.outputs.cache-hit != 'true' + id: cache-save + uses: actions/cache/save@v4 + with: + path: ~/entware + key: entware-${{ matrix.arch }} + + - name: Checkout + uses: actions/checkout@v4 + with: + ref: 'openwrt' + + - name: Prepare build + env: + VERSION: ${{ needs.prepare.outputs.version }} + SHA: ${{ needs.prepare.outputs.sha }} + run: | + sed -i "s/PKG_REV:=.*$/PKG_REV:=$SHA/;s/PKG_VERSION:=.*$/PKG_VERSION:=$VERSION-$SHA/" youtubeUnblock/Makefile + + - name: Build packages + id: build + run: | + echo "src-link youtubeUnblock /youtubeUnblock" | docker run --rm -i --mount source=entware-home,target=/home/me -v $GITHUB_WORKSPACE:/youtubeUnblock -w /home/me/Entware --name builder builder tee -a feeds.conf + docker run --rm -i --mount source=entware-home,target=/home/me -v $GITHUB_WORKSPACE:/youtubeUnblock -w /home/me/Entware --name builder builder ./scripts/feeds update youtubeUnblock + docker run --rm -i --mount source=entware-home,target=/home/me -v $GITHUB_WORKSPACE:/youtubeUnblock -w /home/me/Entware --name builder builder ./scripts/feeds install -a -p youtubeUnblock + echo "CONFIG_PACKAGE_youtubeUnblock=m" | docker run --rm -i --mount source=entware-home,target=/home/me -v $GITHUB_WORKSPACE:/youtubeUnblock -w /home/me/Entware --name builder builder tee -a .config + docker run --rm -i --mount source=entware-home,target=/home/me -v $GITHUB_WORKSPACE:/youtubeUnblock -w /home/me/Entware --name builder builder make package/youtubeUnblock/compile V=s + + - name: Extract packages + if: steps.build.outcome == 'success' + shell: bash + run: | + mkdir output + docker run --rm --user root -i --mount source=entware-home,target=/home/me -v $(pwd):/target -w /home/me/Entware --name builder builder find ./bin -type f -name 'youtubeUnblock*.ipk' -exec cp -v {} /target/output \; + tar -C ./output -cvf youtubeUnblock-Entware-${{ matrix.arch }}.tar . + + - name: Upload packages + if: steps.build.outcome == 'success' + uses: actions/upload-artifact@v4 + with: + name: entware-${{ matrix.arch }} + path: ./**/youtubeUnblock-Entware-*.tar + if-no-files-found: error + + pre-release: + if: github.event_name != 'pull_request' && github.ref_name == 'main' + needs: [build-static, build-openwrt, build-entware] + permissions: + contents: write + runs-on: ubuntu-latest + steps: + - name: Download artifacts + uses: actions/download-artifact@v4 + + - name: Upload assets + uses: slord399/action-automatic-releases@v1.0.1 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + automatic_release_tag: 'continuous' + prerelease: true + title: 'Development build' + files: | + ./**/youtubeUnblock*.ipk + ./**/youtubeUnblock*.tar.xz + ./**/youtubeUnblock-Entware-*.tar diff --git a/.github/workflows/build-entware.yml b/.github/workflows/build-entware.yml deleted file mode 100644 index 2d16eaa..0000000 --- a/.github/workflows/build-entware.yml +++ /dev/null @@ -1,99 +0,0 @@ -name: Entware Workflow - -on: - push: - branches: - - main - -jobs: - build: - runs-on: ubuntu-latest - outputs: - version: ${{ steps.build.outputs.version }} - strategy: - matrix: - branch: [entware] - arch: - - aarch64-3.10 - - armv7-3.2 - - mips-3.4 - - mipsel-3.4 - - x64-3.2 - steps: - - name: Entware docker container - run: | - git clone https://github.com/Entware/docker.git - docker build docker --pull --tag builder - docker volume create entware-home - - - name: Get cache dir - id: cache_dir - run: | - mkdir gh_act_cache - echo "cache_dir=$(pwd)/gh_act_cache" >> ${GITHUB_OUTPUT} - - - name: Restore cached build - id: cache-build-restore - uses: actions/cache/restore@v4 - with: - path: ${{ steps.cache_dir.outputs.cache_dir }} - key: ${{ matrix.arch }}-cache - - - name: Load entware from cache - if: steps.cache-build-restore.outputs.cache-hit == 'true' - run: | - docker run --rm --mount source=entware-home,target=/backup_vol -v ${{ steps.cache_dir.outputs.cache_dir }}:/backup ubuntu tar -xf /backup/entware.tar -C /backup_vol - docker run --rm --mount source=entware-home,target=/home/me -w /home/me ubuntu bash -c "cp -r ./backup_vol/* ./" - docker run --rm --mount source=entware-home,target=/home/me -w /home/me ubuntu bash -c "chown -R 1000:1000 ./* ./" - - - name: Build entware - if: steps.cache-build-restore.outputs.cache-hit != 'true' - run: | - docker run --rm -i --mount source=entware-home,target=/home/me -w /home/me --name builder builder git clone https://github.com/Entware/Entware.git - docker run --rm -i --mount source=entware-home,target=/home/me -w /home/me/Entware --name builder builder make package/symlinks - docker run --rm -i --mount source=entware-home,target=/home/me -w /home/me/Entware --name builder builder cp -v configs/${{ matrix.arch }}.config .config - docker run --rm -i --mount source=entware-home,target=/home/me -w /home/me/Entware --name builder builder make -j$(nproc) toolchain/install - docker run --rm --mount source=entware-home,target=/backup_vol -v ${{ steps.cache_dir.outputs.cache_dir }}:/backup ubuntu tar -cf /backup/entware.tar /backup_vol/ - - - name: Save cache build - if: steps.cache-build-restore.outputs.cache-hit != 'true' - id: cache-build-save - uses: actions/cache/save@v4 - with: - path: ${{ steps.cache_dir.outputs.cache_dir }} - key: ${{ matrix.arch }}-cache - - - name: Checkout - uses: actions/checkout@v4 - with: - ref: 'openwrt' - - - name: Prepare workflow - shell: bash - run: | - sed -i 's/PKG_REV:=.*$/PKG_REV:=${{ github.sha }}/;s/PKG_VERSION:=.*$/PKG_VERSION:=$(date %Y%m%d)/' youtubeUnblock/Makefile - - - name: Build packages - id: build - shell: bash - run: | - echo "src-link youtubeUnblock /youtubeUnblock" | docker run --rm -i --mount source=entware-home,target=/home/me -v $GITHUB_WORKSPACE:/youtubeUnblock -w /home/me/Entware --name builder builder tee -a feeds.conf - docker run --rm -i --mount source=entware-home,target=/home/me -v $GITHUB_WORKSPACE:/youtubeUnblock -w /home/me/Entware --name builder builder ./scripts/feeds update youtubeUnblock - docker run --rm -i --mount source=entware-home,target=/home/me -v $GITHUB_WORKSPACE:/youtubeUnblock -w /home/me/Entware --name builder builder ./scripts/feeds install -a -p youtubeUnblock - echo "CONFIG_PACKAGE_youtubeUnblock=m" | docker run --rm -i --mount source=entware-home,target=/home/me -v $GITHUB_WORKSPACE:/youtubeUnblock -w /home/me/Entware --name builder builder tee -a .config - docker run --rm -i --mount source=entware-home,target=/home/me -v $GITHUB_WORKSPACE:/youtubeUnblock -w /home/me/Entware --name builder builder make package/youtubeUnblock/compile V=s - - - name: Extract packages - if: steps.build.outcome == 'success' - run: | - mkdir output - docker run --rm --user root -i --mount source=entware-home,target=/home/me -v $(pwd):/target -w /home/me/Entware --name builder builder cp -r bin /target/output/ - - - name: Upload packages - if: steps.build.outcome == 'success' - uses: actions/upload-artifact@v4 - with: - name: ${{ matrix.arch }}-${{ matrix.branch }} - path: ./output/**/* - if-no-files-found: error - diff --git a/.github/workflows/build-openwrt.yml b/.github/workflows/build-openwrt.yml deleted file mode 100644 index 5b86112..0000000 --- a/.github/workflows/build-openwrt.yml +++ /dev/null @@ -1,80 +0,0 @@ -name: OpenWRT Workflow - -on: - push: - branches: - - main - -jobs: - build: - runs-on: ubuntu-latest - outputs: - version: ${{ steps.build.outputs.version }} - strategy: - matrix: - branch: - - openwrt-23.05 - arch: - - aarch64_cortex-a53 - - aarch64_cortex-a72 - - aarch64_generic - - arm_arm1176jzf-s_vfp - - arm_arm926ej-s - - arm_cortex-a15_neon-vfpv4 - - arm_cortex-a5_vfpv4 - - arm_cortex-a7 - - arm_cortex-a7_neon-vfpv4 - - arm_cortex-a7_vfpv4 - - arm_cortex-a8_vfpv3 - - arm_cortex-a9 - - arm_cortex-a9_neon - - arm_cortex-a9_vfpv3-d16 - - arm_fa526 - - arm_mpcore - - armsr-armv8 - - armsr-armv7 - - ipq807x-generic - - mips64_octeonplus - - mips_24kc - - mips_4kec - - mips_mips32 - - mipsel_24kc - - mipsel_24kc_24kf - - mipsel_74kc - - mipsel_mips32 - - ramips-mt76x8 - - ramips-mt7621 - - x86_64 - container: - image: openwrt/sdk:${{ matrix.arch }}-${{ matrix.branch }} - options: --user root - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - ref: 'openwrt' - - - name: Prepare workflow - shell: bash - run: | - sed -i 's/PKG_REV:=.*$/PKG_REV:=${{ github.sha }}/;s/PKG_VERSION:=.*$/PKG_VERSION:=$(date %Y%m%d)/' youtubeUnblock/Makefile - - - name: Build packages - id: build - working-directory: /builder - shell: bash - run: | - echo "src-link youtubeUnblock $GITHUB_WORKSPACE" >> feeds.conf - su - buildbot -c 'cat feeds.conf' - su - buildbot -c './scripts/feeds update youtubeUnblock' - su - buildbot -c './scripts/feeds install -a -p youtubeUnblock' - su - buildbot -c 'make defconfig' - su - buildbot -c 'make package/youtubeUnblock/compile V=s BUILD_LOG=1' - - - name: Upload packages - if: steps.build.outcome == 'success' - uses: actions/upload-artifact@v4 - with: - name: ${{ matrix.arch }}-${{ matrix.branch }} - path: /builder/**/youtubeUnblock*.ipk - if-no-files-found: error