u-boot-ingenic #636
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: u-boot-ingenic | |
on: | |
schedule: | |
# 00:15 PST / Nightly | |
- cron: '00 7 * * *' | |
workflow_dispatch: | |
inputs: | |
tg_disabled: | |
type: boolean | |
description: 'Disable Telegram notifications' | |
required: false | |
default: false | |
tg_scratch: | |
type: boolean | |
description: 'Use TG scratch channel' | |
required: false | |
default: false | |
t31x_only: | |
type: boolean | |
description: 'Only build T31X profile ' | |
required: false | |
default: false | |
debug_enabled: | |
type: boolean | |
description: 'Debug: Generate dummy image files' | |
required: false | |
default: false | |
env: | |
TAG_NAME: latest | |
TERM: linux | |
TG_TOKEN: ${{secrets.TELEGRAM_TOKEN_BOT_THINGINO}} | |
TG_CHANNEL: ${{secrets.TELEGRAM_CHANNEL_THINGINO_BUILD}} | |
TG_TOPIC: ${{secrets.TELEGRAM_TOPIC_THINGINO_BUILD}} | |
TG_CHANNEL_SCRATCH: ${{secrets.TELEGRAM_CHANNEL_THINGINO_SCRATCH}} | |
TZ: America/Los_Angeles | |
jobs: | |
notify-begin: | |
runs-on: ubuntu-24.04 | |
outputs: | |
start_time: ${{ steps.set_output.outputs.time }} | |
tg_disabled: ${{ steps.set_env.outputs.tg_disabled }} | |
steps: | |
- name: Set timezone | |
run: | | |
sudo timedatectl set-timezone ${{ env.TZ }} | |
- name: Save workflow start time to ENV | |
id: set_output | |
run: echo "time=$(date +%s)" >> $GITHUB_OUTPUT | |
- name: Configure Environment Variables | |
run: | | |
echo "TG_DISABLED=${{ github.event.inputs.tg_disabled || 'false' }}" >> $GITHUB_ENV | |
echo "tg_disabled=${{ github.event.inputs.tg_disabled || 'false' }}" >> $GITHUB_OUTPUT | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
with: | |
ref: "master" | |
fetch-depth: "1" | |
- name: Download TG-Notify script | |
run: | | |
curl -o .github/scripts/tg-notify.sh https://raw.githubusercontent.com/themactep/thingino-firmware/master/.github/scripts/tg-notify.sh | |
chmod +x .github/scripts/tg-notify.sh | |
- name: Send build start notifcation via Telegram | |
if: env.TG_DISABLED == 'false' | |
run: | | |
if [[ "${{ github.event.inputs.tg_scratch }}" == 'true' ]]; then | |
TG_CHANNEL=${{ env.TG_CHANNEL_SCRATCH }} | |
export TG_TOPIC="" | |
fi | |
.github/scripts/tg-notify.sh -s $TG_TOKEN $TG_CHANNEL $TG_TOPIC start ${{ github.workflow }} ${{ github.run_id }} ${{ github.repository }} | |
generate-matrix: | |
runs-on: ubuntu-24.04 | |
outputs: | |
matrix: ${{ steps.set-matrix.outputs.matrix }} | |
steps: | |
- name: Set timezone | |
run: | | |
sudo timedatectl set-timezone ${{ env.TZ }} | |
- name: Configure GH workspace | |
run: git config --global --add safe.directory "$GITHUB_WORKSPACE" | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
with: | |
ref: "master" | |
fetch-depth: "1" | |
- name: Generate device matrix | |
id: set-matrix | |
run: | | |
if [[ "${{ github.event.inputs.t31x_only }}" == 'true' ]]; then | |
CONFIGS=$(cat boards.cfg | grep isvp | awk '{print $1}' | grep isvp_t31_sfcnor_ddr128M) | |
else | |
CONFIGS=$(cat boards.cfg | grep isvp | awk '{print $1}' | grep -v -e nand) | |
fi | |
JSON_MATRIX="{\"u-boot-version\": [" | |
for CONFIG in $CONFIGS; do | |
JSON_MATRIX+="\"${CONFIG}\"," | |
done | |
JSON_MATRIX="${JSON_MATRIX%,}]}" | |
echo "Matrix: $JSON_MATRIX" | |
echo "matrix=$JSON_MATRIX" >> $GITHUB_OUTPUT | |
build: | |
name: ${{ matrix.u-boot-version }} | |
needs: [generate-matrix, notify-begin] | |
runs-on: ubuntu-24.04 | |
container: | |
image: debian:bookworm | |
strategy: | |
fail-fast: false | |
matrix: ${{fromJson(needs.generate-matrix.outputs.matrix)}} | |
steps: | |
- name: Setup cache directories | |
run: | | |
mkdir -p ~/.ccache | |
- name: Setup ccache | |
uses: actions/cache@v4 | |
if: always() | |
with: | |
path: ~/.ccache | |
key: ${{ runner.os }}-ccache-${{ github.sha }} | |
restore-keys: | | |
${{ runner.os }}-ccache-$- | |
- name: Update package manager sources | |
run: | | |
apt-get update | |
- name: Install build dependencies | |
run: | | |
apt-get install -y --no-install-recommends --no-install-suggests 7zip build-essential bc ccache cpio curl ca-certificates file git make gawk lzop procps rsync tzdata u-boot-tools unzip wget | |
git config --global --add safe.directory "$GITHUB_WORKSPACE" | |
- name: Set timezone | |
run: | | |
ln -sf /usr/share/zoneinfo/${{ env.TZ }} /etc/localtime | |
echo ${{ env.TZ }} > /etc/timezone | |
DEBIAN_FRONTEND=noninteractive dpkg-reconfigure -f noninteractive tzdata | |
- name: Setup gh workspace to container | |
run: git config --global --add safe.directory "$GITHUB_WORKSPACE" | |
- name: Checkout repository source | |
uses: actions/checkout@v4 | |
with: | |
ref: "master" | |
fetch-depth: "1" | |
- name: Configure environment variables | |
id: env | |
run: | | |
echo "WEEK_NUMBER=$(date +%U)" >> $GITHUB_ENV | |
echo "CURRENT_YEAR=$(date +%Y)" >> $GITHUB_ENV | |
echo "GIT_HASH=$(git rev-parse --short ${GITHUB_SHA})" >> $GITHUB_ENV | |
echo "GIT_BRANCH=${GITHUB_REF_NAME}" >> $GITHUB_ENV | |
echo "TG_DISABLED=${{ github.event.inputs.tg_disabled || 'false' }}" >> $GITHUB_ENV | |
TAG_NAME="$TAG_NAME-$(date +'%Y-%m-%d')" | |
echo "TAG_NAME=$TAG_NAME" >> $GITHUB_ENV | |
- name: Download TG-Notify script | |
run: | | |
curl -o .github/scripts/tg-notify.sh https://raw.githubusercontent.com/themactep/thingino-firmware/master/.github/scripts/tg-notify.sh | |
chmod +x .github/scripts/tg-notify.sh | |
- name: Download toolchain | |
run: | | |
wget https://github.com/themactep/thingino-firmware/releases/download/toolchain/thingino-toolchain_xburst1_musl_gcc14-linux-mipsel.tar.gz -O ~/thingino-toolchain_xburst1_musl_gcc14-linux-mipsel.tar.gz | |
tar -xf ~/thingino-toolchain_xburst1_musl_gcc14-linux-mipsel.tar.gz -C ~/ | |
- name: u-boot-ingenic Build | |
if: ${{ github.event.inputs.debug_enabled != 'true' }} | |
shell: bash | |
run: | | |
CROSS_COMPILE=~/mipsel-thingino-linux-musl_sdk-buildroot/bin/mipsel-linux- bash build.sh $VERSION | |
TIME=$(date -d @${SECONDS} +%M:%S) | |
echo "TIME=${TIME}" >> ${GITHUB_ENV} | |
- name: Generate debug dummy firmware for workflow testing | |
if: ${{ github.event.inputs.debug_enabled == 'true' }} | |
run: | | |
mkdir -p ./uboot_build | |
echo "debug" > ./uboot_build/u-boot-${{ matrix.u-boot-version }}.bin | |
echo "TIME=7:77" >> ${GITHUB_ENV} | |
- name: Check if compiled u-boot exists | |
run: | | |
FILE=./uboot_build/u-boot-${{ matrix.u-boot-version }}.bin | |
if [ ! -f "$FILE" ]; then | |
echo "File not found exit" | |
exit 1 | |
fi | |
echo "Found file: $FILE" | |
echo "UBOOTFW=$FILE" >> $GITHUB_ENV | |
- name: Generate checksum file | |
run: | | |
sha256sum "${{ env.UBOOTFW }}" | awk -v filename="$(basename "${{ env.UBOOTFW }}")" '{print $1, filename}' > ./uboot_build/u-boot-${{ matrix.u-boot-version }}.bin.sha256sum | |
echo "UBOOTFW_SHA=./uboot_build/u-boot-${{ matrix.u-boot-version }}.bin.sha256sum" >> $GITHUB_ENV | |
- name: Upload firmware as artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: u-boot-${{ matrix.u-boot-version }}.bin | |
path: | | |
${{ env.UBOOTFW }} | |
${{ env.UBOOTFW_SHA }} | |
- name: Upload ${{ matrix.u-boot-version }} to release | |
uses: softprops/action-gh-release@v2.1.0 | |
with: | |
tag_name: ${{ env.TAG_NAME }} | |
files: | | |
${{ env.UBOOTFW }} | |
${{ env.UBOOTFW_SHA }} | |
- name: Package binaries for notify | |
run: | | |
7zz a -t7z -mx=9 -mmt=on /tmp/u-boot-${{ matrix.u-boot-version }}.7z ${{ env.UBOOTFW }} ${{ env.UBOOTFW_SHA }} | |
- name: Send uboot completion notifications with attachment | |
if: ${{ env.TG_DISABLED == 'false' && (env.UBOOTFW) }} | |
run: | | |
if [[ "${{ github.event.inputs.tg_scratch }}" == 'true' ]]; then | |
TG_CHANNEL=${{ env.TG_CHANNEL_SCRATCH }} | |
export TG_TOPIC="" | |
fi | |
if [ -n "${{ env.UBOOTFW }}" ]; then | |
.github/scripts/tg-notify.sh -s $TG_TOKEN $TG_CHANNEL $TG_TOPIC completed $TAG_NAME ${{ github.run_id }} ${{ github.repository }} ${GIT_HASH} ${GIT_BRANCH} ${TAG_NAME} ${TIME} ${{ matrix.u-boot-version }} /tmp/u-boot-${{ matrix.u-boot-version }}.7z | |
fi | |
- name: Send error notification | |
if: ${{ env.TG_DISABLED == 'false' && failure() }} | |
run: | | |
if [[ "${{ github.event.inputs.tg_scratch }}" == 'true' ]]; then | |
TG_CHANNEL=${{ env.TG_CHANNEL_SCRATCH }} | |
export TG_TOPIC="" | |
fi | |
.github/scripts/tg-notify.sh -s $TG_TOKEN $TG_CHANNEL $TG_TOPIC error $TAG_NAME ${{ github.run_id }} ${{ github.repository }} | |
notify-completion: | |
needs: [build, notify-begin] | |
runs-on: ubuntu-24.04 | |
if: always() | |
steps: | |
- name: Set timezone | |
run: | | |
sudo timedatectl set-timezone ${{ env.TZ }} | |
- name: Checkout repository source | |
uses: actions/checkout@v4 | |
with: | |
submodules: 'false' | |
ref: "master" | |
- name: Download TG-Notify script | |
run: | | |
curl -o .github/scripts/tg-notify.sh https://raw.githubusercontent.com/themactep/thingino-firmware/master/.github/scripts/tg-notify.sh | |
chmod +x .github/scripts/tg-notify.sh | |
- name: Configure Environment | |
run: | | |
echo "TG_DISABLED=${{ github.event.inputs.tg_disabled || 'false' }}" >> $GITHUB_ENV | |
echo "GIT_HASH=${{ needs.buildroot.outputs.git_hash }}" >> $GITHUB_ENV | |
echo "TAG_NAME=${{ needs.buildroot.outputs.tag_name }}" >> $GITHUB_ENV | |
- name: Send nofity completion summary | |
if: ${{ env.TG_DISABLED == 'false' }} | |
run: | | |
if [[ "${{ github.event.inputs.tg_scratch }}" == 'true' ]]; then | |
TG_CHANNEL=${{ env.TG_CHANNEL_SCRATCH }} | |
export TG_TOPIC="" | |
fi | |
START_TIME=${{ needs.notify-begin.outputs.start_time }} | |
END_TIME=$(date -u +%s) | |
ELAPSED=$((END_TIME - START_TIME)) | |
ELAPSED_MIN=$((ELAPSED / 60)) | |
ELAPSED_SEC=$((ELAPSED % 60)) | |
.github/scripts/tg-notify.sh -s $TG_TOKEN $TG_CHANNEL $TG_TOPIC finish ${{ github.workflow }} "${ELAPSED_MIN}m ${ELAPSED_SEC}s" ${{ github.run_id }} ${{ github.repository }} |