From ed1ca9fd1dbf5abe9b16b6103dbdcd3b2cd05a7e Mon Sep 17 00:00:00 2001 From: Igor Pecovnik Date: Tue, 30 Nov 2021 15:06:25 +0100 Subject: [PATCH] Add Rootfs creation action --- actions/build-rootfs-cache.yml | 192 +++++++++++++++++++++++++++++++++ 1 file changed, 192 insertions(+) create mode 100644 actions/build-rootfs-cache.yml diff --git a/actions/build-rootfs-cache.yml b/actions/build-rootfs-cache.yml new file mode 100644 index 00000000..7c8ec538 --- /dev/null +++ b/actions/build-rootfs-cache.yml @@ -0,0 +1,192 @@ +name: Build Rootfs Cache + +on: + workflow_dispatch: + workflow_call: + inputs: + rootfsarch: + required: true + type: string + branch: + required: true + type: string + secrets: + GPG_KEY1: + required: false + GPG_PASSPHRASE1: + required: false + GPG_KEY2: + required: false + GPG_PASSPHRASE2: + required: false + SCRIPTS_ACCESS_TOKEN: + required: false +jobs: + + Prepare: + + name: find targets + runs-on: [self-hosted, Linux, cache] + if: ${{ github.repository_owner == 'armbian' }} + outputs: + matrix: ${{steps.list_dirs.outputs.matrix}} + steps: + + - name: Fix permissions + run: | + # make sure no temporally dirs are mounted from previous runs + while : + do + sudo pkill compile.sh || true + sudo pkill arm-binfmt-P || true + sudo pkill aarch64-binfmt-P || true + sudo pkill pixz || true + sudo mountpoint -q build/output/images && sudo fusermount -u build/output/images || true + [[ "$(df | grep "/.tmp" | wc -l)" -eq 0 ]] && sudo rm -rf build/.tmp && break + echo "Mounted temp directories. Trying to unmount." + df | grep "/.tmp" | awk '{print $6}' | xargs sudo umount 2>/dev/null || true + sleep 10 + done + sudo chown -R $USER:$USER build/.git + - name: Checkout Armbian build script + + uses: actions/checkout@v2 + with: + fetch-depth: 0 + repository: armbian/build + path: build + ref: ${{ inputs.branch }} + clean: false + + - name: Checkout Armbian support scripts + + uses: actions/checkout@v2 + with: + fetch-depth: 0 + repository: armbian/scripts + token: ${{ secrets.SCRIPTS_ACCESS_TOKEN }} + path: scripts + ref: master + clean: true + + - name: Build rootfs cache + + run: | + + ROOTFSARCH="${{ inputs.rootfsarch }}" + echo "BLTPATH=\"$(pwd)/build/\"" | tee scripts/cacherebuild.conf scripts/betarepository.conf >/dev/null + mkdir -p build-rootfs + rm -f build-rootfs/* + cd build + sudo rm -rf output/images/* + sudo mkdir -p userpatches + sudo cp ../scripts/configs/* userpatches/ + [[ ! -f .ignore_changes ]] && sudo touch .ignore_changes + ./compile.sh KERNEL_ONLY="yes" BOARD="bananapi" BRANCH="current" KERNEL_CONFIGURE="no" USE_TORRENT="yes" REPOSITORY_INSTALL="kernel" 'prepare_host' + if [[ $(curl -s http://ifconfig.me) == "93.103.15.56" ]]; then + sudo mkdir -p cache/toolchain cache/rootfs || true + ! sudo mountpoint -q cache/toolchain && sudo mount nas:/tank/armbian/toolchain.armbian.com cache/toolchain -o rsize=32768,wsize=32768,timeo=5,retrans=2,actimeo=60,retry=15 || true + ! sudo mountpoint -q cache/rootfs && sudo mount nas:/tank/armbian/dl.armbian.com/_rootfs cache/rootfs -o rsize=32768,wsize=32768,timeo=5,retrans=2,actimeo=60,retry=15 || true + fi + sudo rm -f cache/rootfs/*.complete + sudo rm -f userpatches/targets.conf + ../scripts/cacherebuild.sh "no" "../build-rootfs/${ROOTFSARCH}.txt" "${ROOTFSARCH}" + PARTS=$(cat ../build-rootfs/${ROOTFSARCH}.txt | wc -l) + split -d --numeric=1 --number=r/${PARTS} --additional-suffix=.conf --suffix-length=3 ../build-rootfs/${ROOTFSARCH}.txt ../build-rootfs/split-${ROOTFSARCH}- + - name: Upload build parts + uses: actions/upload-artifact@v2 + with: + name: build-rootfs + path: build-rootfs/* + - name: Prepare matrix + id: list_dirs + run: | + ROOTFSARCH="${{ inputs.rootfsarch }}" + PARTS=$(cat ${ROOTFSARCH}.txt | wc -l) + echo $PARTS + echo ::set-output name=matrix::$(for x in $(seq -w 1 $PARTS); do echo $x; done|jq -cnR '[inputs | select(length>0)]' | jq) + + Cache: + + needs: [ Prepare ] + runs-on: [self-hosted, Linux, cache] + if: ${{ github.repository_owner == 'armbian' }} + timeout-minutes: 480 + strategy: + fail-fast: false + matrix: + node: ${{fromJson(needs.Prepare.outputs.matrix)}} + + steps: + + - name: Download artefacts + uses: actions/download-artifact@v2 + with: + name: build-rootfs + - name: Fix permissions + run: | + # make sure no temporally dirs are mounted from previous runs + while : + do + sudo pkill compile.sh || true + sudo pkill arm-binfmt-P || true + sudo pkill aarch64-binfmt-P || true + sudo pkill pixz || true + sudo mountpoint -q build/output/images && sudo fusermount -u build/output/images || true + [[ "$(df | grep "/.tmp" | wc -l)" -eq 0 && $(sudo mountpoint -q build/output/images; echo $?) -eq 1 ]] && sudo rm -rf build/.tmp && break + echo "Mounted temp directories. Trying to unmount." + df | grep ".tmp" | awk '{print $6}' | xargs sudo umount 2>/dev/null || true + sleep 10 + done + [[ -d build/.git ]] && sudo chown -R $USER:$USER build/.git || true + [[ -d build/output/images ]] && sudo rm -rf build/output/images/* || true + [[ -d build/cache/sources ]] && sudo rm -rf build/cache/sources/* || true + + - name: Checkout Armbian build script + + uses: actions/checkout@v2 + with: + fetch-depth: 0 + repository: armbian/build + path: build + ref: ${{ inputs.branch }} + clean: false + + - name: Checkout Armbian support scripts + + uses: actions/checkout@v2 + with: + fetch-depth: 0 + repository: armbian/scripts + token: ${{ secrets.SCRIPTS_ACCESS_TOKEN }} + path: scripts + clean: false + + - name: Import GPG key + + uses: crazy-max/ghaction-import-gpg@v3 + with: + gpg-private-key: ${{ secrets.GPG_KEY1 }} + passphrase: ${{ secrets.GPG_PASSPHRASE1 }} + workdir: scripts + git-user-signingkey: true + + - name: Build rootfs cache + env: + GPG_PASS: ${{ secrets.GPG_PASSPHRASE1 }} + + run: | + CHUNK="${{ matrix.node }}" + ROOTFSARCH="${{ inputs.rootfsarch }}" + if [[ $(curl -s http://ifconfig.me) == "93.103.15.56" ]]; then + sudo mkdir -p build/cache/toolchain build/cache/rootfs || true + ! sudo mountpoint -q build/cache/toolchain && sudo mount nas:/tank/armbian/toolchain.armbian.com build/cache/toolchain -o rsize=32768,wsize=32768,timeo=5,retrans=2,actimeo=60,retry=15 || true + ! sudo mountpoint -q build/cache/rootfs && sudo mount nas:/tank/armbian/dl.armbian.com/_rootfs build/cache/rootfs -o rsize=32768,wsize=32768,timeo=5,retrans=2,actimeo=60,retry=15 || true + fi + cd build + # use prepared configs + sudo mkdir -p userpatches + sudo cp ../scripts/configs/* userpatches/ + # prepare host + [[ ! -f .ignore_changes ]] && sudo touch .ignore_changes || true + bash ../split-${ROOTFSARCH}-${CHUNK}.conf