This file contains hidden or 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
| ################################################################################ | |
| # 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" |