Separate runner dir from persistent build dir; guard against self-sync
Build RPi image / build (push) Failing after 4m34s
Build RPi image / build (push) Failing after 4m34s
This commit is contained in:
1 parent
4a645bab2d
commit
31264c17c9
2 files changed
+30
-15
No files matched your search
+25
-15
@@ -2,11 +2,13 @@ name: Build RPi image
|
|||||||
|
|
||||||
# Yocto (kas) build of rpilinux-image for raspberrypi4-64.
|
# Yocto (kas) build of rpilinux-image for raspberrypi4-64.
|
||||||
#
|
#
|
||||||
# Runs on the dedicated host runner (label "yocto:host", Ryzen 9 box).
|
# Runs on the dedicated host runner (label "yocto:host", Ryzen 9 box "ada").
|
||||||
# Everything persists in $YOCTO_HOME: extern/ (layer clones) + build/ (sstate)
|
# Everything persists in $YOCTO_HOME: extern/ (layer clones) + build/ (sstate)
|
||||||
# survive between runs -> incremental builds after the first.
|
# survive between runs -> incremental builds after the first.
|
||||||
# $YOCTO_HOME defaults to $HOME/yocto-ci; override it via runner.envs
|
# $YOCTO_HOME comes from the runner config (runner.envs.YOCTO_HOME =
|
||||||
# (runner.envs.YOCTO_HOME=/data/yocto-ci) to put it on the big disk.
|
# /home/bl/yocto-build, on the 1.8T disk); falls back to $HOME/yocto-build.
|
||||||
|
#
|
||||||
|
# First build takes hours (poky fetch + full image) -> runner.timeout >= 8h.
|
||||||
#
|
#
|
||||||
# First build takes hours (poky fetch + full image) -> runner.timeout >= 8h.
|
# First build takes hours (poky fetch + full image) -> runner.timeout >= 8h.
|
||||||
|
|
||||||
@@ -35,7 +37,7 @@ jobs:
|
|||||||
echo "=== runner environment ==="
|
echo "=== runner environment ==="
|
||||||
uname -a
|
uname -a
|
||||||
[ -r /etc/os-release ] && . /etc/os-release && echo "$PRETTY_NAME"
|
[ -r /etc/os-release ] && . /etc/os-release && echo "$PRETTY_NAME"
|
||||||
echo "HOME=$HOME nproc=$(nproc)"
|
echo "HOME=$HOME workspace=$GITEA_WORKSPACE nproc=$(nproc)"
|
||||||
df -h "$HOME" | tail -1
|
df -h "$HOME" | tail -1
|
||||||
free -h 2>/dev/null | sed -n 2p || true
|
free -h 2>/dev/null | sed -n 2p || true
|
||||||
command -v docker >/dev/null && docker info --format 'docker: {{.ServerVersion}}' 2>/dev/null || echo "no docker daemon"
|
command -v docker >/dev/null && docker info --format 'docker: {{.ServerVersion}}' 2>/dev/null || echo "no docker daemon"
|
||||||
@@ -58,29 +60,37 @@ jobs:
|
|||||||
- name: Set up kas (persistent venv)
|
- name: Set up kas (persistent venv)
|
||||||
run: |
|
run: |
|
||||||
set -e
|
set -e
|
||||||
export YOCTO_HOME="${YOCTO_HOME:-$HOME/yocto-ci}"
|
export YOCTO_HOME="${YOCTO_HOME:-$HOME/yocto-build}"
|
||||||
mkdir -p "$YOCTO_HOME"
|
mkdir -p "$YOCTO_HOME"
|
||||||
[ -d "$YOCTO_HOME/venv" ] || python3 -m venv "$YOCTO_HOME/venv"
|
[ -d "$YOCTO_HOME/venv" ] || python3 -m venv "$YOCTO_HOME/venv"
|
||||||
"$YOCTO_HOME/venv/bin/pip" -q install -U kas
|
"$YOCTO_HOME/venv/bin/pip" -q install -U kas
|
||||||
"$YOCTO_HOME/venv/bin/kas" --version
|
"$YOCTO_HOME/venv/bin/kas" --version
|
||||||
|
|
||||||
- name: Sync to persistent project dir and build
|
- name: Sync to persistent build dir and build
|
||||||
run: |
|
run: |
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
export YOCTO_HOME="${YOCTO_HOME:-$HOME/yocto-ci}"
|
export YOCTO_HOME="${YOCTO_HOME:-$HOME/yocto-build}"
|
||||||
# Persistent project dir: keeps extern/ (layer clones) and build/
|
SRC="$(pwd)"
|
||||||
# (sstate + tmp) between runs -> incremental builds after the first.
|
DST="$YOCTO_HOME/yocto_rpi"
|
||||||
rsync -a --delete \
|
# Safety: builtin:checkout cleans ignored files (build/, extern/),
|
||||||
--exclude .git --exclude extern --exclude build \
|
# so the build tree must NOT be the ephemeral workspace.
|
||||||
./ "$YOCTO_HOME/yocto_rpi/"
|
if [ "$SRC" = "$DST" ]; then
|
||||||
cd "$YOCTO_HOME/yocto_rpi"
|
echo "::error::workspace == persistent dir ($SRC); keep the runner WorkingDirectory outside YOCTO_HOME"
|
||||||
git config --global --add safe.directory "$YOCTO_HOME/yocto_rpi" || true
|
exit 1
|
||||||
|
fi
|
||||||
|
echo "syncing $SRC -> $DST"
|
||||||
|
mkdir -p "$DST"
|
||||||
|
# .git is copied (kas expects a git repo); extern/ and build/ exist
|
||||||
|
# only in DST and are excluded, so --delete cannot touch them.
|
||||||
|
rsync -a --delete --exclude /build/ --exclude /extern/ ./ "$DST/"
|
||||||
|
cd "$DST"
|
||||||
|
git config --global --add safe.directory "$DST" || true
|
||||||
"$YOCTO_HOME/venv/bin/kas" build
|
"$YOCTO_HOME/venv/bin/kas" build
|
||||||
|
|
||||||
- name: Collect images
|
- name: Collect images
|
||||||
run: |
|
run: |
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
export YOCTO_HOME="${YOCTO_HOME:-$HOME/yocto-ci}"
|
export YOCTO_HOME="${YOCTO_HOME:-$HOME/yocto-build}"
|
||||||
cd "$YOCTO_HOME/yocto_rpi"
|
cd "$YOCTO_HOME/yocto_rpi"
|
||||||
IMG_DIR="build/*/tmp/deploy/images/raspberrypi4-64"
|
IMG_DIR="build/*/tmp/deploy/images/raspberrypi4-64"
|
||||||
ls -lh $IMG_DIR
|
ls -lh $IMG_DIR
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
// Folder-specific settings
|
||||||
|
//
|
||||||
|
// For a full list of overridable settings, and general information on folder-specific settings,
|
||||||
|
// see the documentation: https://zed.dev/docs/configuring-zed#settings-files
|
||||||
|
{}
|
||||||
Reference in new issue
Block a user