Skip to content

test

test #46

################################################################################
# OpenHD
#
# Licensed under the GNU General Public License (GPL) Version 3.
#
# This software is provided "as-is," without warranty of any kind, express or
# implied, including but not limited to the warranties of merchantability,
# fitness for a particular purpose, and non-infringement. For details, see the
# full license in the LICENSE file provided with this source code.
#
# Non-Military Use Only:
# This software and its associated components are explicitly intended for
# civilian and non-military purposes. Use in any military or defense
# applications is strictly prohibited unless explicitly and individually
# licensed otherwise by the OpenHD Team.
#
# Contributors:
# A full list of contributors can be found at the OpenHD GitHub repository:
# https://github.com/OpenHD
#
# © OpenHD, All Rights Reserved.
################################################################################
name: build_glide_platform_packages
on:
workflow_dispatch:
push:
branches:
- "main"
- "dev-release"
- "release"
- "openhd-3.0"
jobs:
build:
runs-on: ubuntu-22.04
strategy:
fail-fast: false
matrix:
include:
- image_type: radxa-zero3w
package_suffix: radxa-zero3w
package_arch: arm64
cloudsmith_distro: debian
release: bookworm
extra_debian_depends: "gstreamer1.0-tools, gstreamer1.0-plugins-good, gstreamer1.0-plugins-bad, gstreamer1.0-plugins-ugly, gstreamer1.0-libav, gstreamer1.0-rockchip1, librockchip-mpp1, librga2"
env:
CLOUDSMITH_API_KEY: ${{ secrets.CLOUDSMITH_API_KEY }}
API_KEY: ${{ secrets.CLOUDSMITH_API_KEY }}
steps:
- name: Maximize build space
uses: easimon/maximize-build-space@master
with:
root-reserve-mb: 512
swap-size-mb: 1024
remove-dotnet: "true"
remove-android: "true"
remove-haskell: "true"
overprovision-lvm: "true"
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Build OpenHD-Glide in CHROOT
run: |
git clone https://github.com/OpenHD/OpenHD-ChrootCompiler /opt/OpenHD-ChrootCompiler
mkdir -p /opt/OpenHD-ChrootCompiler/additionalFiles
cp -a "$GITHUB_WORKSPACE/." /opt/OpenHD-ChrootCompiler/additionalFiles/
printf '%s\n' "$CLOUDSMITH_API_KEY" > /opt/OpenHD-ChrootCompiler/additionalFiles/cloudsmith_api_key.txt
echo "standard" > /opt/OpenHD-ChrootCompiler/additionalFiles/custom.txt
echo "${{ matrix.package_arch }}" > /opt/OpenHD-ChrootCompiler/additionalFiles/arch.txt
echo "${{ matrix.cloudsmith_distro }}" > /opt/OpenHD-ChrootCompiler/additionalFiles/distro.txt
echo "${{ matrix.release }}" > /opt/OpenHD-ChrootCompiler/additionalFiles/flavor.txt
echo "${{ github.ref_name }}" > /opt/OpenHD-ChrootCompiler/additionalFiles/repo.txt
cat << 'EOF' > /opt/OpenHD-ChrootCompiler/additionalFiles/build_chroot.sh
#!/bin/bash
set -euo pipefail
chmod 1777 /tmp || true
export DEBIAN_FRONTEND=noninteractive
if [ -d /etc/apt/sources.list.d ]; then
sudo sed -i 's/^#deb /deb /' /etc/apt/sources.list.d/*.list 2>/dev/null || true
fi
target_release="$(cat flavor.txt 2>/dev/null || true)"
if [ "${target_release}" = "bookworm" ]; then
for source_file in /etc/apt/sources.list /etc/apt/sources.list.d/*.list; do
[ -f "${source_file}" ] && sudo sed -i '\|radxa-repo.github.io/bullseye|d' "${source_file}"
done
for source_file in /etc/apt/sources.list.d/*.sources; do
[ -f "${source_file}" ] && grep -q 'radxa-repo.github.io/bullseye' "${source_file}" && sudo rm -f "${source_file}"
done
fi
apt-get update --fix-missing
graphics_dev_packages=(
libdrm-dev
libgbm-dev
libgles2-mesa-dev
libegl1-mesa-dev
)
graphics_runtime_packages=(
libdrm2
libdrm-radeon1
libdrm-nouveau2
libdrm-amdgpu1
libgbm1
libegl-mesa0
libglapi-mesa
)
if apt-cache policy libdrm2 libgbm1 | awk '/Installed:|Candidate:/ && /~bpo/ { found = 1 } END { exit(found ? 0 : 1) }'; then
apt-get install -y -t bookworm-backports "${graphics_runtime_packages[@]}"
apt-get install -y -t bookworm-backports "${graphics_dev_packages[@]}"
else
apt-get install -y "${graphics_dev_packages[@]}"
fi
apt-get remove -y gstreamer1.0-plugins-rtp || true
apt-get install -y \
build-essential \
ca-certificates \
git \
python3-pip \
pkg-config \
zlib1g-dev \
libfreetype-dev \
libgstreamer1.0-dev \
libgstreamer-plugins-base1.0-dev \
gstreamer1.0-tools \
gstreamer1.0-plugins-good \
gstreamer1.0-plugins-bad \
gstreamer1.0-plugins-ugly \
gstreamer1.0-libav
apt-get install -y librockchip-mpp-dev librga-dev gstreamer1.0-rockchip1
apt-get install -y cmake || true
cmake_ge_320() {
if ! command -v cmake >/dev/null 2>&1; then
return 1
fi
version="$(cmake --version | awk 'NR==1{print $3}')"
dpkg --compare-versions "$version" ge "3.20"
}
if ! cmake_ge_320; then
pip3 install --upgrade cmake || pip3 install --upgrade cmake --break-system-packages
fi
cmake --version
package_suffix="$(cat package_suffix.txt)"
package_version="$(cat package_version.txt)"
package_arch="$(cat package_arch.txt)"
extra_debian_depends="$(cat extra_debian_depends.txt)"
cmake \
-S . \
-B build-package \
-DCMAKE_BUILD_TYPE=Release \
-DOPENHD_GLIDE_DEVICE_KMS=ON \
-DOPENHD_GLIDE_REQUIRE_KMS_GBM=ON \
-DOPENHD_GLIDE_REQUIRE_GSTREAMER=ON \
-DOPENHD_GLIDE_REQUIRE_RKMPP=ON \
-DOPENHD_GLIDE_PACKAGE_SUFFIX="-${package_suffix}" \
-DOPENHD_GLIDE_PACKAGE_VERSION="${package_version}" \
-DOPENHD_GLIDE_PACKAGE_ARCHITECTURE="${package_arch}" \
-DOPENHD_GLIDE_EXTRA_DEBIAN_DEPENDS="${extra_debian_depends}"
cmake --build build-package -j"$(nproc)"
cmake --build build-package --target package
package_file="$(find build-package -maxdepth 1 -name '*.deb' -print -quit)"
dpkg-deb -f "${package_file}" Depends
for required in \
gstreamer1.0-tools \
gstreamer1.0-plugins-good \
gstreamer1.0-plugins-bad \
gstreamer1.0-plugins-ugly \
gstreamer1.0-libav \
gstreamer1.0-rockchip1 \
librockchip-mpp1 \
librga2; do
dpkg-deb -f "${package_file}" Depends | grep -q "${required}"
done
cp build-package/*.deb /out/
EOF
chmod +x /opt/OpenHD-ChrootCompiler/additionalFiles/build_chroot.sh
echo "${{ matrix.package_suffix }}" > /opt/OpenHD-ChrootCompiler/additionalFiles/package_suffix.txt
echo "${{ matrix.package_arch }}" > /opt/OpenHD-ChrootCompiler/additionalFiles/package_arch.txt
echo "${{ matrix.extra_debian_depends }}" > /opt/OpenHD-ChrootCompiler/additionalFiles/extra_debian_depends.txt
echo "0.1.0.${{ github.run_number }}" > /opt/OpenHD-ChrootCompiler/additionalFiles/package_version.txt
cd /opt/OpenHD-ChrootCompiler/
sudo apt update
sudo bash install_dep.sh
python3 - <<'PY'
from pathlib import Path
packages_stage = Path("/opt/OpenHD-ChrootCompiler/stages/02-Packages/00-run-chroot.sh")
packages_text = packages_stage.read_text()
packages_marker = "remove_legacy_radxa_bullseye_sources"
packages_needle = 'echo "_______________________Starting build____________________________"\n'
packages_patch = (
packages_needle
+ "\n"
+ f"{packages_marker}() {{\n"
+ " if [[ \"${DISTRO}\" != \"bookworm\" ]]; then\n"
+ " return 0\n"
+ " fi\n"
+ " echo \"[apt-preflight] Removing legacy Radxa Bullseye sources from Bookworm image...\"\n"
+ " for source_file in /etc/apt/sources.list /etc/apt/sources.list.d/*.list; do\n"
+ " [[ -f \"${source_file}\" ]] && sudo sed -i '\\|radxa-repo.github.io/bullseye|d' \"${source_file}\"\n"
+ " done\n"
+ " for source_file in /etc/apt/sources.list.d/*.sources; do\n"
+ " [[ -f \"${source_file}\" ]] && grep -q 'radxa-repo.github.io/bullseye' \"${source_file}\" && sudo rm -f \"${source_file}\"\n"
+ " done\n"
+ "}\n"
+ f"{packages_marker}\n"
)
if packages_marker not in packages_text:
if packages_needle not in packages_text:
raise SystemExit("Could not find package-stage build marker in ChrootCompiler")
packages_stage.write_text(packages_text.replace(packages_needle, packages_patch, 1))
build_sh = Path("/opt/OpenHD-ChrootCompiler/build.sh")
text = build_sh.read_text()
original = text
imagebuilder_clone_old = "git clone https://github.com/OpenHD/OpenHD-ImageBuilder\n"
imagebuilder_clone_new = "git clone --branch dev-release --single-branch https://github.com/OpenHD/OpenHD-ImageBuilder\n"
if imagebuilder_clone_new not in text:
if imagebuilder_clone_old not in text:
raise SystemExit("Could not find ImageBuilder clone in build.sh")
text = text.replace(imagebuilder_clone_old, imagebuilder_clone_new, 1)
image_needle = "mv OpenHD-ImageBuilder/images .\n"
image_patch = (
image_needle
+ "for board in radxa-zero3w; do\n"
+ " if [ ! -f \"images/${board}\" ] && [ -f \"images/${board}_base\" ]; then\n"
+ " cp \"images/${board}_base\" \"images/${board}\"\n"
+ " fi\n"
+ "done\n"
)
if "images/${board}_base" not in text:
if image_needle not in text:
raise SystemExit("Could not find ImageBuilder image import in build.sh")
text = text.replace(image_needle, image_patch, 1)
if "export BASE_IMAGE_SHA512" not in text:
text = text.replace(
"export BASE_IMAGE_SHA256\n",
"export BASE_IMAGE_SHA256\nexport BASE_IMAGE_SHA512\n",
1,
)
needle = "mv OpenHD-ImageBuilder/stages/01-Baseimage stages/\n"
patch = (
needle
+ "sed -i 's/WANTEDSIZE=\"6800000000\"/WANTEDSIZE=\"15000000000\"/' stages/01-Baseimage/01-run.sh\n"
)
if "WANTEDSIZE=\"15000000000\"" not in text:
if needle not in text:
raise SystemExit("Could not find ImageBuilder stage import in build.sh")
text = text.replace(needle, patch, 1)
if text != original:
build_sh.write_text(text)
PY
sudo bash build.sh "${{ matrix.image_type }}" "$API_KEY" debian "${{ matrix.release }}"
- name: Collect artifacts
run: |
cp -r /opt/OpenHD-ChrootCompiler/out/* .
- name: Upload to Github
uses: "actions/upload-artifact@v4"
with:
name: "OpenHD-Glide-${{ matrix.package_suffix }}-${{ matrix.release }}-${{ matrix.package_arch }}"
path: |
*.deb
- name: Push
if: github.ref_name == 'release' || github.ref_name == 'dev-release' || github.ref_name == 'main'
uses: cloudsmith-io/action@master
with:
api-key: ${{ secrets.CLOUDSMITH_API_KEY }}
command: "push"
format: "deb"
owner: "openhd"
repo: ${{ github.ref_name == 'main' && 'dev-release' || github.ref_name }}
distro: "${{ matrix.cloudsmith_distro }}"
release: "${{ matrix.release }}"
republish: "true"
file: "*.deb"