Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
63 commits
Select commit Hold shift + click to select a range
55a4d2f
switch to arm runner
samfreund Nov 3, 2025
3026c3b
refactor to use custom mount script
samfreund Nov 3, 2025
a959edd
paths
samfreund Nov 3, 2025
2176b4c
bigger expansion
samfreund Nov 3, 2025
f7eae97
fix image size
samfreund Nov 3, 2025
346c82e
back to 2 GB
samfreund Nov 3, 2025
a8c283a
more resizing fixes
samfreund Nov 3, 2025
edceb7b
cleanup resizing
samfreund Nov 3, 2025
e3d9e95
sudo sandwhich
samfreund Nov 3, 2025
1f5e7df
remove arch arg
samfreund Nov 3, 2025
924a1ec
fix compression
samfreund Nov 3, 2025
408e7d6
Test
Gold856 Nov 3, 2025
af200fe
idk
Gold856 Nov 3, 2025
a54f419
reduce expansion for non-rubik images
samfreund Nov 3, 2025
09acff7
fix rubik artifact upload
samfreund Nov 3, 2025
055d9d4
run release on push to main
samfreund Nov 3, 2025
aa396bb
fix install_common not running
samfreund Nov 3, 2025
d2460d5
cleanup
samfreund Nov 4, 2025
adb53c1
create simple test script
crschardt Nov 8, 2025
9302a0d
additional_mb isn't set yet
crschardt Nov 8, 2025
398a47d
not needed - base image is up to date
crschardt Nov 8, 2025
a1d8625
no options
crschardt Nov 8, 2025
c9eaf6b
duh
crschardt Nov 8, 2025
faf404a
export image name to environment?
crschardt Nov 8, 2025
a707f63
make sure it has the environment
crschardt Nov 8, 2025
b4db96a
increase image size
crschardt Nov 9, 2025
2cf9551
resizing
crschardt Nov 9, 2025
18cd9c7
fix missing ]
crschardt Nov 9, 2025
77d4ced
stop confusing url for image
crschardt Nov 9, 2025
3ca731e
need to specify rootpartiion
crschardt Nov 9, 2025
14c74ac
resize the right file
crschardt Nov 9, 2025
989c668
mount, unmount and resize the image
crschardt Nov 9, 2025
b2abd3d
${
crschardt Nov 9, 2025
90fa62f
don't unmount boot if not mounted
crschardt Nov 9, 2025
9dcb065
don't specify shell?
crschardt Nov 9, 2025
7ef3af3
no quotes?
crschardt Nov 9, 2025
3ca4244
typo
crschardt Nov 9, 2025
dd498e7
better test?
crschardt Nov 9, 2025
1193b62
define image
crschardt Nov 9, 2025
0a4cc0c
check image size before doing anything
crschardt Nov 9, 2025
8902237
not needed
crschardt Nov 9, 2025
34726b8
more verbose
crschardt Nov 9, 2025
f9df266
switch to opi image
crschardt Nov 9, 2025
f20be99
specify boot partition
crschardt Nov 9, 2025
0a212a7
Add additional_mb for OPi
crschardt Nov 9, 2025
367a32b
Mounting CIDATA as boot was wrong all along
crschardt Nov 9, 2025
16de9eb
don't forget to unmount it
crschardt Nov 9, 2025
a1c2ce8
First pass at running install scripts in chroot
crschardt Nov 15, 2025
63fdb0e
pwd not cwd
crschardt Nov 15, 2025
d8ad6a7
silly mistake
crschardt Nov 15, 2025
24294da
debugging main script
crschardt Nov 15, 2025
fcb7026
make sure it's executable
crschardt Nov 15, 2025
c216731
use /tmp/build not /tmp/scripts
crschardt Nov 15, 2025
3951703
no need to remove
crschardt Nov 15, 2025
6a9fb80
try not zero filling
crschardt Nov 15, 2025
770dace
recursive unmount?
crschardt Nov 15, 2025
dee2b44
checking on environment variables in chroot
crschardt Nov 15, 2025
9b599d1
pass in the image version
crschardt Nov 15, 2025
5a14a58
spelling
crschardt Nov 15, 2025
fd15bfa
maybe extra quotes
crschardt Nov 15, 2025
87c7218
better?
crschardt Nov 15, 2025
f16fe11
enable rpi, try smaller expansion, and write zeros
crschardt Nov 15, 2025
bcf87cd
remove extra ./ from install_opi5
crschardt Nov 15, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
160 changes: 70 additions & 90 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,87 +12,59 @@ concurrency:
cancel-in-progress: true

jobs:
rubik:
env:
script: "./tmp/build/install_rubikpi3.sh"
base_image: "https://people.canonical.com/~platform/images/qualcomm-iot/rubikpi3/ubuntu-server-24.04/x00/ubuntu-24.04-preinstalled-server-arm64+rubikpi3-20250912-127.yaml"

runs-on: ubuntu-24.04

name: "Build for RubikPi3"

steps:
- uses: actions/[email protected]
with:
fetch-depth: 0
- name: Fetch tags
run: git fetch --tags --force

- name: Build rubikpi3 with mounting
run: |
chmod +x ./mount_rubikpi3.sh
./mount_rubikpi3.sh ${{ env.base_image }} ${{ env.script }} ${{ github.ref_name }}

- name: Compress built image
run: |
tar -I 'xz -T0' -cf photonvision_rubikpi3.tar.xz photonvision_rubikpi3 --checkpoint=10000 --checkpoint-action=echo='%T'

- uses: actions/[email protected]
with:
name: photonvision_rubikpi3.tar.xz
path: photonvision_rubikpi3.tar.xz
if-no-files-found: error
retention-days: 1

build:
runs-on: ubuntu-24.04

runs-on: ubuntu-24.04-arm
strategy:
fail-fast: false
matrix:
include:
- name: limelight
script: ./install_limelight.sh
base_image: https://downloads.raspberrypi.com/raspios_lite_arm64/images/raspios_lite_arm64-2024-07-04/2024-07-04-raspios-bookworm-arm64-lite.img.xz
- name: limelight3
script: ./install_limelight3.sh
base_image: https://downloads.raspberrypi.com/raspios_lite_arm64/images/raspios_lite_arm64-2024-07-04/2024-07-04-raspios-bookworm-arm64-lite.img.xz
- name: limelight3g
script: ./install_limelight3g.sh
base_image: https://downloads.raspberrypi.com/raspios_lite_arm64/images/raspios_lite_arm64-2024-07-04/2024-07-04-raspios-bookworm-arm64-lite.img.xz
- name: limelight4
script: ./install_limelight4.sh
base_image: https://downloads.raspberrypi.com/raspios_lite_arm64/images/raspios_lite_arm64-2024-07-04/2024-07-04-raspios-bookworm-arm64-lite.img.xz
# - name: limelight
# script: install_limelight.sh
# base_image: https://downloads.raspberrypi.com/raspios_lite_arm64/images/raspios_lite_arm64-2024-07-04/2024-07-04-raspios-bookworm-arm64-lite.img.xz
# - name: limelight3
# script: install_limelight3.sh
# base_image: https://downloads.raspberrypi.com/raspios_lite_arm64/images/raspios_lite_arm64-2024-07-04/2024-07-04-raspios-bookworm-arm64-lite.img.xz
# - name: limelight3g
# script: install_limelight3g.sh
# base_image: https://downloads.raspberrypi.com/raspios_lite_arm64/images/raspios_lite_arm64-2024-07-04/2024-07-04-raspios-bookworm-arm64-lite.img.xz
# - name: limelight4
# script: install_limelight4.sh
# base_image: https://downloads.raspberrypi.com/raspios_lite_arm64/images/raspios_lite_arm64-2024-07-04/2024-07-04-raspios-bookworm-arm64-lite.img.xz
- name: raspi
script: ./install_pi.sh
base_image: https://downloads.raspberrypi.com/raspios_lite_arm64/images/raspios_lite_arm64-2024-07-04/2024-07-04-raspios-bookworm-arm64-lite.img.xz
- name: raspi_dev
script: ./install_dev_pi.sh
base_image: https://downloads.raspberrypi.com/raspios_lite_arm64/images/raspios_lite_arm64-2024-07-04/2024-07-04-raspios-bookworm-arm64-lite.img.xz
- name: snakeyes
script: ./install_snakeyes.sh
base_image: https://downloads.raspberrypi.com/raspios_lite_arm64/images/raspios_lite_arm64-2024-07-04/2024-07-04-raspios-bookworm-arm64-lite.img.xz
- name: luma_p1
script: ./install_luma_p1.sh
additional_mb: 500
script: install_pi.sh
base_image: https://downloads.raspberrypi.com/raspios_lite_arm64/images/raspios_lite_arm64-2024-07-04/2024-07-04-raspios-bookworm-arm64-lite.img.xz
# - name: raspi_dev
# script: install_dev_pi.sh
# base_image: https://downloads.raspberrypi.com/raspios_lite_arm64/images/raspios_lite_arm64-2024-07-04/2024-07-04-raspios-bookworm-arm64-lite.img.xz
# - name: snakeyes
# script: install_snakeyes.sh
# base_image: https://downloads.raspberrypi.com/raspios_lite_arm64/images/raspios_lite_arm64-2024-07-04/2024-07-04-raspios-bookworm-arm64-lite.img.xz
# - name: luma_p1
# script: install_luma_p1.sh
# base_image: https://downloads.raspberrypi.com/raspios_lite_arm64/images/raspios_lite_arm64-2024-07-04/2024-07-04-raspios-bookworm-arm64-lite.img.xz
- name: opi5
script: ./install_opi5.sh
additional_mb: 500
script: install_opi5.sh
base_image: https://github.com/Joshua-Riek/ubuntu-rockchip/releases/download/v2.4.0/ubuntu-24.04-preinstalled-server-arm64-orangepi-5.img.xz
- name: opi5b
script: ./install_opi5.sh
base_image: https://github.com/Joshua-Riek/ubuntu-rockchip/releases/download/v2.4.0/ubuntu-24.04-preinstalled-server-arm64-orangepi-5b.img.xz
- name: opi5plus
script: ./install_opi5.sh
base_image: https://github.com/Joshua-Riek/ubuntu-rockchip/releases/download/v2.4.0/ubuntu-24.04-preinstalled-server-arm64-orangepi-5-plus.img.xz
- name: opi5pro
script: ./install_opi5.sh
base_image: https://github.com/Joshua-Riek/ubuntu-rockchip/releases/download/v2.4.0/ubuntu-24.04-preinstalled-server-arm64-orangepi-5-pro.img.xz
- name: opi5max
script: ./install_opi5.sh
base_image: https://github.com/Joshua-Riek/ubuntu-rockchip/releases/download/v2.4.0/ubuntu-24.04-preinstalled-server-arm64-orangepi-5-max.img.xz
- name: rock5c
script: ./install_opi5.sh
base_image: https://github.com/Joshua-Riek/ubuntu-rockchip/releases/download/v2.4.0/ubuntu-24.04-preinstalled-server-arm64-rock-5c.img.xz
# - name: opi5b
# script: install_opi5.sh
# base_image: https://github.com/Joshua-Riek/ubuntu-rockchip/releases/download/v2.4.0/ubuntu-24.04-preinstalled-server-arm64-orangepi-5b.img.xz
# - name: opi5plus
# script: install_opi5.sh
# base_image: https://github.com/Joshua-Riek/ubuntu-rockchip/releases/download/v2.4.0/ubuntu-24.04-preinstalled-server-arm64-orangepi-5-plus.img.xz
# - name: opi5pro
# script: install_opi5.sh
# base_image: https://github.com/Joshua-Riek/ubuntu-rockchip/releases/download/v2.4.0/ubuntu-24.04-preinstalled-server-arm64-orangepi-5-pro.img.xz
# - name: opi5max
# script: install_opi5.sh
# base_image: https://github.com/Joshua-Riek/ubuntu-rockchip/releases/download/v2.4.0/ubuntu-24.04-preinstalled-server-arm64-orangepi-5-max.img.xz
# - name: rock5c
# script: install_opi5.sh
# base_image: https://github.com/Joshua-Riek/ubuntu-rockchip/releases/download/v2.4.0/ubuntu-24.04-preinstalled-server-arm64-rock-5c.img.xz
# - name: rubikpi3
# script: install_rubikpi3.sh
# base_image: "https://people.canonical.com/~platform/images/qualcomm-iot/rubikpi3/ubuntu-server-24.04/x00/ubuntu-24.04-preinstalled-server-arm64+rubikpi3-20250912-127.yaml"

name: "Build for ${{ matrix.name }}"

Expand All @@ -103,34 +75,43 @@ jobs:
- name: Fetch tags
run: git fetch --tags --force

- uses: pguyot/arm-runner-action@HEAD
- name: Install dependencies and build image
id: install_deps
with:
image_additional_mb: 1500
bind_mount_repository: true
base_image: ${{ matrix.base_image }}
commands: |
chmod +x ${{matrix.script}}
${{ matrix.script }}
chmod +x ./install_common.sh
./install_common.sh
mkdir -p /opt/photonvision/
echo "${{ github.ref_name }};${{ matrix.name }}" > /opt/photonvision/image-version
run: |
sudo chmod +x ./test_install.sh
sudo -E ./test_install.sh ${{ matrix.base_image }} ${{ matrix.script }} "${{ github.ref_name }};${{ matrix.name }}" ${{ matrix.additional_mb }} 2

- name: Compress built image
run: |
mv ${{ steps.install_deps.outputs.image }} photonvision_${{ matrix.name }}.img
sudo xz -T 0 -v photonvision_${{ matrix.name }}.img
NAME=photonvision_${{ matrix.name }}
if [[ "${{ matrix.name }}" == rubik* ]]; then
TARGET="$NAME"
tar -I 'xz -T0' -cf photonvision_rubikpi3.tar.xz photonvision_rubikpi3 --checkpoint=10000 --checkpoint-action=echo='%T'
else
TARGET="${NAME}.img"
mv "${{ steps.install_deps.outputs.image }}" "$TARGET"
sudo xz -T 0 -v "$TARGET"
fi

- uses: actions/[email protected]
if: ${{ matrix.name == 'rubikpi3' }}
with:
name: "photonvision_${{ matrix.name }}.tar.xz"
path: photonvision_${{ matrix.name }}.*.xz
if-no-files-found: error
retention-days: 1

- uses: actions/[email protected]
if: ${{ matrix.name != 'rubikpi3' }}
with:
name: photonvision_${{ matrix.name }}.img.xz
path: photonvision_${{ matrix.name }}.img.xz
name: "photonvision_${{ matrix.name }}.img.xz"
path: photonvision_${{ matrix.name }}.*.xz
if-no-files-found: error
retention-days: 1

release:
needs: [build, rubik]
needs: [build]
if: github.event_name == 'push'
runs-on: ubuntu-24.04
steps:
# Download literally every single artifact
Expand All @@ -145,4 +126,3 @@ jobs:
rm: true
files: |
**/*.xz
if: github.event_name == 'push'
3 changes: 2 additions & 1 deletion install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -214,9 +214,10 @@ fi
DOWNLOAD_URL=$(curl -sk "$RELEASE_URL" |
grep "browser_download_url.*$ARCH_NAME.jar" |
cut -d : -f 2,3 |
tr -d '"'
tr -d '"'browser_download_url
)

echo $(curl -sk "$RELEASE_URL" | grep ".*$ARCH_NAME.jar")
if [[ -z $DOWNLOAD_URL ]] ; then
die "PhotonVision '$VERSION' is not available for $ARCH_NAME!" \
"See ./install --list-versions for a list of available versions."
Expand Down
8 changes: 7 additions & 1 deletion install_common.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
# Verbose and exit on errors
set -ex

IMAGE_VERSION="$1"

# Do additional tasks that are common across all images,
# but not suitable for inclusion in install.sh
echo "Running install_common.sh"
Expand All @@ -26,6 +28,10 @@ echo "photon:vision" | chpasswd

# Add a helpful message to the logon screen
# ASCII Art generated by: https://www.asciiart.eu/image-to-ascii
cp -f ./files/issue.txt /etc/issue
cp -f /tmp/build/files/issue.txt /etc/issue
cp -f /etc/issue /etc/issue.net
sed -i 's/#Banner none/Banner \/etc\/issue.net/g' /etc/ssh/sshd_config

# Add photon version file
mkdir -p /opt/photonvision/
echo "${IMAGE_VERSION}" > /opt/photonvision/image-version
5 changes: 4 additions & 1 deletion install_dev_pi.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,11 @@
# Verbose and exit on errors
set -ex
# Run normal photon installer

cd /tmp/build

chmod +x ./install.sh
./install.sh --install-nm=yes --arch=aarch64
./install.sh --install-nm=yes

# and edit boot partition
install -m 644 config.txt /boot/
Expand Down
4 changes: 3 additions & 1 deletion install_limelight.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,11 @@
# Verbose and exit on errors
set -ex

cd /tmp/build

# Run normal photon installer
chmod +x ./install.sh
./install.sh --install-nm=yes --arch=aarch64
./install.sh --install-nm=yes

# edit boot partition
install -m 644 limelight/config.txt /boot/
Expand Down
2 changes: 2 additions & 0 deletions install_limelight3.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
# Verbose and exit on errors
set -ex

cd /tmp/build

# Run the pi install script
chmod +x ./install_pi.sh
./install_pi.sh
Expand Down
2 changes: 2 additions & 0 deletions install_limelight3g.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
# Verbose and exit on errors
set -ex

cd /tmp/build

# Run the pi install script
chmod +x ./install_pi.sh
./install_pi.sh
Expand Down
2 changes: 2 additions & 0 deletions install_limelight4.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
# Verbose and exit on errors
set -ex

cd /tmp/build

# Run the pi install script
chmod +x ./install_pi.sh
./install_pi.sh
Expand Down
2 changes: 2 additions & 0 deletions install_luma_p1.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
# Verbose and exit on errors
set -ex

cd /tmp/build

# Run the pi install script
chmod +x ./install_pi.sh
./install_pi.sh
Expand Down
13 changes: 9 additions & 4 deletions install_opi5.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
# Verbose and exit on errors
set -ex

cd /tmp/build

# Create pi/raspberry login
if id "$1" >/dev/null 2>&1; then
echo 'user found'
Expand Down Expand Up @@ -46,19 +48,22 @@ echo "Freed up $freed KiB"

# run Photonvision install script
chmod +x ./install.sh
./install.sh --install-nm=yes --arch=aarch64
./install.sh --install-nm=yes

echo "Installing additional things"
apt-get install --yes --quiet libc6 libstdc++6

# let netplan create the config during cloud-init
rm -f /etc/netplan/00-default-nm-renderer.yaml

# mount CIDATA partition
mkdir --parents /mnt/CIDATA
mount /dev/loop0p1 /mnt/CIDATA
# set NetworkManager as the renderer in cloud-init
cp -f ./OPi5_CIDATA/network-config /boot/network-config

cp -f ./OPi5_CIDATA/network-config /mnt/CIDATA/network-config
# add customized user-data file for cloud-init
cp -f ./OPi5_CIDATA/user-data /boot/user-data
cp -f ./OPi5_CIDATA/user-data /mnt/CIDATA/user-data
umount /mnt/CIDATA

# modify photonvision.service to enable big cores
sed -i 's/# AllowedCPUs=4-7/AllowedCPUs=4-7/g' /lib/systemd/system/photonvision.service
Expand Down
4 changes: 3 additions & 1 deletion install_pi.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,11 @@
# Verbose and exit on errors
set -ex

cd /tmp/build

# Run normal photon installer
chmod +x ./install.sh
./install.sh --install-nm=yes --arch=aarch64
./install.sh --install-nm=yes

# and edit boot partition
install -m 644 config.txt /boot/
Expand Down
10 changes: 1 addition & 9 deletions install_rubikpi3.sh
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ wget -qO - https://thundercomm.s3.dualstack.ap-northeast-1.amazonaws.com/uploads

# Run normal photon installer
chmod +x ./install.sh
./install.sh --install-nm=yes --arch=aarch64
./install.sh --install-nm=yes

# Install packages from the RUBIK Pi PPA, we skip calling apt-get update here because install.sh already does that
apt-get -y install libqnn1 libsnpe1 qcom-adreno1 device-tree-compiler
Expand All @@ -56,11 +56,3 @@ apt-get clean

rm -rf /usr/share/doc
rm -rf /usr/share/locale/

echo '=== Running install_common.sh ==='
chmod +x ./install_common.sh
./install_common.sh
echo '=== Creating version file ==='
mkdir -p /opt/photonvision/
echo '{$1};rubikpi3' > /opt/photonvision/image-version
echo '=== Installation complete ==='
2 changes: 2 additions & 0 deletions install_snakeyes.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
# Verbose and exit on errors
set -ex

cd /tmp/build

# Run the pi install script
chmod +x ./install_pi.sh
./install_pi.sh
Expand Down
Loading