name: Build image on: push: branches: - main tags: - v* workflow_dispatch: jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 # Check cache - name: Cache buildroot id: cache uses: actions/cache@v3 with: path: .buildroot key: ${{ runner.os }}-${{ hashFiles('files/configs/arpl_defconfig') }} # Install dependencies - name: Install dependencies run: | sudo apt-get update sudo apt-get install -y libelf-dev qemu-utils sudo cp -f files/board/arpl/overlayfs/usr/bin/yq /usr/bin/yq # Get latests LKM, addons and modules - name: Get latests LKM, addons and Modules run: | # Get latest LKMs echo "Getting latest LKMs" TAG=`curl -s https://api.github.com/repos/fbelavenuto/redpill-lkm/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}'` STATUS=`curl -w "%{http_code}" -L "https://github.com/fbelavenuto/redpill-lkm/releases/download/${TAG}/rp-lkms.zip" -o /tmp/rp-lkms.zip` echo "Status=${STATUS}" [ ${STATUS} -ne 200 ] && exit 1 # Get latest addons and install its echo "Getting latest Addons" TAG=`curl -s https://api.github.com/repos/fbelavenuto/arpl-addons/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}'` STATUS=`curl -w "%{http_code}" -L "https://github.com/fbelavenuto/arpl-addons/releases/download/${TAG}/addons.zip" -o /tmp/addons.zip` echo "Status=${STATUS}" [ ${STATUS} -ne 200 ] && exit 1 # Get latest modules echo "Getting latest modules" MODULES_DIR="files/board/arpl/p3/modules" TAG=`curl -s https://api.github.com/repos/fbelavenuto/arpl-modules/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}'` while read PLATFORM KVER; do FILE="${PLATFORM}-${KVER}" STATUS=`curl -w "%{http_code}" -L "https://github.com/fbelavenuto/arpl-modules/releases/download/${TAG}/${FILE}.tgz" -o "${MODULES_DIR}/${FILE}.tgz"` echo "Status=${STATUS}" [ ${STATUS} -ne 200 ] && exit 1 done < PLATFORMS STATUS=`curl -w "%{http_code}" -L "https://github.com/fbelavenuto/arpl-modules/releases/download/${TAG}/firmware.tgz" -o "${MODULES_DIR}/firmware.tgz"` echo "Status=${STATUS}" [ ${STATUS} -ne 200 ] && exit 1 echo OK # Prepare buildroot for first make (for cache) - name: Prepare buildroot if: steps.cache.outputs.cache-hit != 'true' run: | git clone --single-branch -b 2022.02 https://github.com/buildroot/buildroot.git .buildroot # Copy files echo "Copying files" cp -Ru files/* .buildroot cd .buildroot echo "Generating default config" make BR2_EXTERNAL=../external arpl_defconfig echo "First make" make BR2_EXTERNAL=../external # Build incremental from cache - name: Build image id: build run: | VERSION=`> $GITHUB_OUTPUT # Remove old files rm -rf .buildroot/output/target/opt/arpl rm -rf .buildroot/board/arpl/overlayfs rm -rf .buildroot/board/arpl/p1 rm -rf .buildroot/board/arpl/p3 # Unzip LKMs rm -rf files/board/arpl/p3/lkms/* unzip /tmp/rp-lkms.zip -d files/board/arpl/p3/lkms # Install Addons mkdir -p /tmp/addons unzip /tmp/addons.zip -d /tmp/addons DEST_PATH="files/board/arpl/p3/addons" echo "Installing addons to ${DEST_PATH}" for PKG in `ls /tmp/addons/*.addon`; do ADDON=`basename ${PKG} | sed 's|.addon||'` mkdir -p "${DEST_PATH}/${ADDON}" echo "Extracting ${PKG} to ${DEST_PATH}/${ADDON}" tar xaf "${PKG}" -C "${DEST_PATH}/${ADDON}" done # Copy files echo "Copying files" sed 's/^ARPL_VERSION=.*/ARPL_VERSION="'${VERSION}'"/' -i files/board/arpl/overlayfs/opt/arpl/include/consts.sh echo "${VERSION}" > files/board/arpl/p1/ARPL-VERSION cp -Ru files/* .buildroot/ cd .buildroot echo "Generating default config" make BR2_EXTERNAL=../external arpl_defconfig echo "Version: ${VERSION}" echo "Building..." make BR2_EXTERNAL=../external cd - qemu-img convert -O vmdk arpl.img arpl-dyn.vmdk qemu-img convert -O vmdk -o adapter_type=lsilogic arpl.img -o subformat=monolithicFlat arpl.vmdk # Zip image and generate checksum - name: Pack shell: bash run: | zip -9 "arpl-${{ steps.build.outputs.VERSION }}.img.zip" arpl.img zip -9 "arpl-${{ steps.build.outputs.VERSION }}.vmdk-dyn.zip" arpl-dyn.vmdk zip -9 "arpl-${{ steps.build.outputs.VERSION }}.vmdk-flat.zip" arpl.vmdk arpl-flat.vmdk sha256sum update-list.yml > sha256sum zip -9j update.zip update-list.yml while read F; do if [ -d "${F}" ]; then FTGZ="`basename "${F}"`.tgz" tar czf "${FTGZ}" -C "${F}" . sha256sum "${FTGZ}" >> sha256sum zip -9j update.zip "${FTGZ}" rm "${FTGZ}" else (cd `dirname ${F}` && sha256sum `basename ${F}`) >> sha256sum zip -9j update.zip "${F}" fi done < <(yq '.replace | explode(.) | to_entries | map([.key])[] | .[]' update-list.yml) zip -9j update.zip sha256sum # Upload artifact - name: Upload uses: actions/upload-artifact@v3 with: name: Images path: | arpl.img arpl*.vmdk retention-days: 5 # Publish a release if is a tag - name: Release uses: softprops/action-gh-release@v1 if: startsWith(github.ref, 'refs/tags/') with: files: | arpl-${{ steps.build.outputs.VERSION }}.img.zip arpl-${{ steps.build.outputs.VERSION }}.vmdk-dyn.zip arpl-${{ steps.build.outputs.VERSION }}.vmdk-flat.zip update.zip