Skip to content

buildroot-dl-cache

buildroot-dl-cache #46

name: buildroot-dl-cache
on:
schedule:
# 23:00 PST / Saturday
- cron: '00 06 * * 0'
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
env:
BR2_DL_DIR: ~/dl
FORCE_UNSAFE_CONFIGURE: 1
TAG_NAME: update_cache
TERM: linux
TG_TOKEN: ${{secrets.TELEGRAM_TOKEN_BOT_THINGINO}}
TG_CHANNEL: ${{secrets.TELEGRAM_CHANNEL_THINGINO_MULTI}}
TG_TOPIC: ${{secrets.TELEGRAM_CHANNEL_THINGINO_MULTI_TOPIC_FIRMWARE}}
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: 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 }}
build-caches:
name: ${{ matrix.caches-version }}
needs: notify-begin
runs-on: ubuntu-24.04
defaults:
run:
shell: bash
container:
image: debian:bookworm
strategy:
fail-fast: false
matrix:
caches-version:
- build_cache
steps:
- name: Update package manager sources
run: |
apt-get update
- name: Install build dependencies
run: |
apt-get install -y --no-install-recommends --no-install-suggests build-essential bc ccache cmake cpio curl ca-certificates file git make gawk procps rsync u-boot-tools unzip wget
- 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:
submodules: 'true'
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
echo "GIT_HASH=$(git rev-parse --short ${GITHUB_SHA})" >> $GITHUB_OUTPUT
echo "TAG_NAME=${TAG_NAME}" >> $GITHUB_OUTPUT
- name: Setup cache directories
run: |
mkdir -p ~/.ccache
mkdir -p ~/dl
- name: Download buildroot sources
run: |
BOARD=${{ matrix.caches-version }} make source
TIME=$(date -d @${SECONDS} +%M:%S)
echo "TIME=${TIME}" >> ${GITHUB_ENV}
- name: Prune Buildroot DL cache
run: |
find ~/dl/ -type d -name git -exec rm -rf {} +
- name: Save Buildroot DL cache
uses: actions/cache/save@v4
with:
path: ~/dl
key: ${{ runner.os }}-dl-shared-v1-${{ env.CURRENT_YEAR }}-week-${{ env.WEEK_NUMBER }}
- 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 }} buildroot-dl-cache ${{ github.repository }}
notify-completion:
needs: [build-caches, notify-begin]
runs-on: ubuntu-24.04
if: always()
steps:
- name: Set timezone
run: |
sudo timedatectl set-timezone ${{ env.TZ }}
- name: Configure Environment
run: |
echo "TG_DISABLED=${{ github.event.inputs.tg_disabled || 'false' }}" >> $GITHUB_ENV
echo "GIT_HASH=${{ needs.build-caches.outputs.git_hash }}" >> $GITHUB_ENV
echo "TAG_NAME=${{ needs.build-caches.outputs.tag_name }}" >> $GITHUB_ENV
- name: Checkout repository source
uses: actions/checkout@v4
with:
submodules: 'false'
ref: "master"
- name: Send notify 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 }}