Skip to content

Build arpl

Build arpl #116

Workflow file for this run

#
# Copyright (C) 2022 Ing <https://github.com/wjz304>
#
# This is free software, licensed under the MIT License.
# See /LICENSE for more information.
#
name: Build arpl
on:
push:
# branches:
# - main
tags:
- v*
release:
types: [published]
workflow_dispatch:
inputs:
version:
description: 'format %y.%-m.$i or auto'
required: false
type: string
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@main
# Install dependencies
- name: Install dependencies
run: |
git config --global user.email "github-actions[bot]@users.noreply.github.com"
git config --global user.name "github-actions[bot]"
sudo apt update
sudo apt install -y jq gettext libelf-dev qemu-utils
sudo snap install yq
# calculates the version number and push
- name: Calculate version
run: |
# Calculate version
VERSION=""
if [[ "${{ github.event_name }}" =~ ^(push|release)$ && "${{ github.ref_type }}" == 'tag' ]]; then
VERSION="${{ github.ref_name }}"
elif [ -n "${{ inputs.version }}" ]; then
if [ "`echo ${{ inputs.version }} | cut -d '.' -f 1,2`" = "`date +'%y.%-m'`" ]; then
VERSION="${{ inputs.version }}"
else
LATEST_TAG="`curl -skL "https://api.github.com/repos/${{ github.repository }}/releases/latest" | jq -r ".tag_name" 2>/dev/null`"
if [ -n "${LATEST_TAG}" -a "`echo ${LATEST_TAG} | cut -d '.' -f 1,2`" = "`date +'%y.%-m'`" ]; then # format %y.%-m.$i
VERSION="`echo ${LATEST_TAG} | awk -F '.' '{$3=$3+1}1' OFS='.'`"
else
VERSION="`date +'%y.%-m'`.0"
fi
fi
else
VERSION=""
fi
echo "VERSION: ${VERSION}"
echo "VERSION=${VERSION}" >> $GITHUB_ENV
if [ -n "${VERSION}" ]; then
# Modify Source File
echo "${VERSION}" > VERSION
echo "${VERSION}" > files/board/arpl/p1/ARPL-VERSION
sed 's/^ARPL_VERSION=.*/ARPL_VERSION="'${VERSION}'"/' -i files/board/arpl/overlayfs/opt/arpl/include/consts.sh
git checkout main
git pull
status=$(git status -s | awk '{printf " %s", $2}')
if [ -n "${status}" ]; then
echo 'git add'
git add ${status}
echo "git commit"
git commit -m "update $(date +%Y-%m-%d" "%H:%M:%S)"
echo "git push"
git push -f
fi
fi
# Check dl cache
- name: Cache downloads
id: dl-cache
uses: actions/cache@v3
with:
path: ~/dl
key: ${{ runner.os }}-dl
# Check buildroot cache
- name: Cache buildroot
id: br-cache
uses: actions/cache@v3
with:
path: .buildroot
key: ${{ runner.os }}-${{ hashFiles('files/configs/arpl_defconfig') }}
# Clone buildroot repository (if not cached)
- name: Clone buildroot
if: steps.br-cache.outputs.cache-hit != 'true'
run: |
git clone --single-branch -b 2023.02.x 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
# Download sources if not cached
- name: Download buildroot packages source
if: steps.dl-cache.outputs.cache-hit != 'true'
run: |
cd .buildroot
make BR2_EXTERNAL=../external source
# Prepare buildroot for first make
- name: Prepare buildroot
if: steps.br-cache.outputs.cache-hit != 'true'
run: |
echo "First make"
cd .buildroot
make BR2_EXTERNAL=../external
# Convert po2mo, Get extractor, LKM, addons and Modules
- name: Convert po2mo, Get extractor, LKM, addons and Modules
run: |
. scripts/func.sh "$GITHUB_REPOSITORY_OWNER"
convertpo2mo "files/board/arpl/overlayfs/opt/arpl/lang"
# getExtractor "files/board/arpl/p3/extractor" no proprietary binariesno proprietary binaries
getLKMs "files/board/arpl/p3/lkms"
getAddons "files/board/arpl/p3/addons"
getModules "files/board/arpl/p3/modules"
echo "OK"
# Build incremental from caches
- name: Build image
run: |
# 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
# Copy files
echo "Copying files"
cp -Ru files/* .buildroot/
cd .buildroot
echo "Generating default config"
make BR2_EXTERNAL=../external arpl_defconfig
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
run: |
if [ -n "${{ env.VERSION }}" ]; then
zip -9 "arpl-${{ env.VERSION }}.img.zip" arpl.img
zip -9 "arpl-${{ env.VERSION }}.vmdk-dyn.zip" arpl-dyn.vmdk
zip -9 "arpl-${{ env.VERSION }}.vmdk-flat.zip" arpl.vmdk arpl-flat.vmdk
else
zip -9 "arpl-img.zip" arpl.img
fi
sha256sum update-list.yml update-check.sh > sha256sum
zip -9j update.zip update-list.yml update-check.sh
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.zip
update.zip
retention-days: 5
# Publish a release if is a tag
- name: Release
uses: softprops/action-gh-release@v1
if: env.VERSION != ''
with:
tag_name: ${{ env.VERSION }}
files: |
arpl-${{ env.VERSION }}.img.zip
arpl-${{ env.VERSION }}.vmdk-dyn.zip
arpl-${{ env.VERSION }}.vmdk-flat.zip
update.zip