Skip to content

Commit 4f4953b

Browse files
committed
Refactor RPi imager JSON generation to Python script
- Replace complex bash script with maintainable Python script - Fetch data from https://github.armbian.com/armbian-images.json - Filter for rpi4b board only, exclude trunk builds - Download and decompress images to extract actual sizes and SHA256 hashes - Add support for fetching compressed image hashes from .sha files - Update workflow: remove unnecessary repo checkouts, add 3h timeout - Fix data branch checkout to handle non-existing branch Signed-off-by: Igor Pecovnik <igor@armbian.com>
1 parent 1bc5c05 commit 4f4953b

2 files changed

Lines changed: 412 additions & 89 deletions

File tree

.github/workflows/data-update-rpi-imager-json.yml

Lines changed: 6 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ on:
55
workflow_dispatch: # Manually triggered via GitHub Actions UI
66

77
concurrency:
8-
group: redirector
8+
group: rpi-imager-json-update
99
cancel-in-progress: false
1010

1111
jobs:
@@ -20,24 +20,9 @@ jobs:
2020
if: ${{ github.repository_owner == 'Armbian' }}
2121
permissions:
2222
contents: write
23+
timeout-minutes: 180
2324
steps:
2425

25-
- name: Checkout build framework repository
26-
uses: actions/checkout@v6
27-
with:
28-
repository: armbian/build
29-
fetch-depth: 1
30-
clean: false
31-
path: build
32-
33-
- name: Checkout OS repository
34-
uses: actions/checkout@v6
35-
with:
36-
repository: armbian/os
37-
fetch-depth: 1
38-
clean: false
39-
path: os
40-
4126
- name: Checkout armbian.github.io repository
4227
uses: actions/checkout@v6
4328
with:
@@ -46,91 +31,23 @@ jobs:
4631
clean: false
4732
path: armbian.github.io
4833

49-
- name: Install SSH key
50-
uses: shimataro/ssh-key-action@v2
51-
with:
52-
key: ${{ secrets.KEY_UPLOAD }}
53-
known_hosts: ${{ secrets.KNOWN_HOSTS_ARMBIAN_UPLOAD }}
54-
if_key_exists: replace
55-
5634
- name: "Install dependencies"
5735
uses: awalsh128/cache-apt-pkgs-action@latest
5836
with:
59-
packages: gh jc zip
37+
packages: python3-requests xz-utils
6038
version: 1.0
6139

6240

6341
- name: "Build JSON file"
6442
run: |
65-
66-
# prepare feeds
67-
A=$(rsync -e "ssh -p 10023 -o StrictHostKeyChecking=accept-new" -ar upload@k-space.ee.armbian.com:/storage/www/dl/ | awk '{ print ""$2"|https://dl.armbian.com/"$5"|"$3"T"$4"Z" }' | grep rpi4b | grep -v "sha\|torrent\|asc" | grep "archive/" | grep -v ".txt\|homeassistant\|openhab\|kali\|omv")
68-
69-
# debug
70-
echo "$A" > a.txt
71-
72-
# join all in one file and compress
73-
for line in $A; do
74-
75-
BOARD=$(echo $line | cut -d"|" -f2 | grep -Po 'Armbian.*[0-9][0-9].[0-9].*' | grep -Po '[0-9][0-9].[0-9].*' | cut -d"_" -f2)
76-
ARMBIAN_VERSION=$(echo $line | cut -d"|" -f2 | grep -Po 'Armbian.*[0-9][0-9].[0-9].*' | grep -Po '[0-9][0-9].[0-9].*' | cut -d"_" -f1)
77-
IMAGE_SIZE=$(echo $line | cut -d"|" -f1 | sed "s/\.//g" | sed "s/\,//g")
78-
KERNEL_BRANCH=$(echo $line | cut -d"|" -f2 | grep -Po 'Armbian.*[0-9][0-9].[0-9].*' | grep -Po '[0-9][0-9].[0-9].*' | cut -d"_" -f4)
79-
IMAGE_RELEASE=$(echo $line | cut -d"|" -f2 | grep -Po 'Armbian.*[0-9][0-9].[0-9].*' | grep -Po '[0-9][0-9].[0-9].*' | cut -d"_" -f3)
80-
IMAGE_URL=$(echo $line | cut -d"|" -f2)
81-
82-
# Release
83-
if [[ "$IMAGE_RELEASE" =~ ^(jammy|noble|plucky)$ ]]; then
84-
RELEASE="Ubuntu"
85-
else
86-
RELEASE="Debian"
87-
fi
88-
89-
# workarounds
90-
STEP_A=1
91-
STEP_B=2
92-
[[ $IMAGE_URL == *i3-wm* || $IMAGE_URL == *kde-* || $IMAGE_URL == *-rc* ]] && STEP_A=2 && STEP_B=3
93-
IMAGE_TARGET=$(echo $IMAGE_URL | cut -d"|" -f2 | grep "minimal\|desktop" | cut -d"|" -f2 | grep -Po 'Armbian.*[0-9][0-9].[0-9].*' | grep -Po '[0-9][0-9].[0-9].*' | cut -d"_" -f4- | grep -Po '_[a-z].*' | cut -d"." -f1 | sed "s/_//" | sed "s/_desktop//" | sed "s/-kisak//" | sed "s/-backported-mesa//" | cut -d"-" -f1,${STEP_A})
94-
IMAGE_EXTENSION=$(echo $IMAGE_URL | cut -d"|" -f2 | cut -d"|" -f2 | grep -Po 'Armbian.*[0-9][0-9].[0-9].*' | grep -Po '[0-9][0-9].[0-9].*' | sed 's/_sm8250-xiaomi-umi\|_sm8250-xiaomi-elish//g' | sed "s/rc[0-9]//g" | cut -d"_" -f4- | cut -d"-" -f${STEP_B}- | cut -d"_" -f1 | cut -d"." -f1)
95-
[[ $IMAGE_EXTENSION == $KERNEL_BRANCH || $IMAGE_EXTENSION == ${IMAGE_TARGET} || $IMAGE_EXTENSION =~ boot|csot|boe|sms ]] && unset IMAGE_EXTENSION
96-
[[ -z ${IMAGE_TARGET} ]] && IMAGE_TARGET="server"
97-
FILE_EXTENSION=$(echo $IMAGE_URL | cut -d"|" -f2 | cut -d"|" -f2 | grep -Po 'Armbian.*[0-9][0-9].[0-9].*' | grep -Po '[0-9][0-9].[0-9].*' | sed 's/_sm8250-xiaomi-umi\|_sm8250-xiaomi-elish//g' | sed "s/-rc[0-9]//g" | rev | cut -d"_" -f1 | rev | sed 's/.*[^0-9]\([0-9]*\.[0-9]*\.[0-9]*\)//' | sed "s/desktop.\|minimal.//")
98-
#FILE_EXTENSION=$(echo $IMAGE_URL | grep -o "oowow.*\|img.*")
99-
100-
# Clean out application from extension
101-
FILE_EXTENSION=$(echo $FILE_EXTENSION | sed 's/.*-'$IMAGE_EXTENSION'//g' | sed -e 's/^\.//g')
102-
103-
# Extract extensions for weird type of images
104-
WEIRD_EXT=$(echo $FILE_EXTENSION | sed "s/img//g" | sed "s/^\.//g" | sed "s/\..*//g" | sed "s/xz//g" | sed "s/oowow//g")
105-
106-
IMAGE_TYPE=$(echo $IMAGE_URL | cut -d"/" -f5)
107-
IMAGE_CREATED=$(echo $line | cut -d"|" -f3 | sed "s/\//-/g")
108-
EXPOSED=false
109-
# Assemble redirector link
110-
PREFIX=""
111-
[[ "${IMAGE_TYPE}" == "os" ]] && PREFIX="nightly/"
112-
REDI_EXT=$(echo $FILE_EXTENSION | rev | cut -d"." -f1 | rev | sed "s/xz//g")
113-
REDI_URL="https://dl.armbian.com/${PREFIX}${BOARD,,}/${IMAGE_RELEASE^}_${KERNEL_BRANCH}${IMAGE_TARGET:+_$IMAGE_TARGET}${IMAGE_EXTENSION:+-$IMAGE_EXTENSION}${WEIRD_EXT:+-$WEIRD_EXT}${REDI_EXT:+.$REDI_EXT}"
114-
115-
# Download, unpack, make sha
116-
wget $IMAGE_URL
117-
FILENAME=$(echo $IMAGE_URL | rev | cut -d"/" -f1 | rev)
118-
FILENAME_FINAL=${FILENAME/.xz/}
119-
xz -d $FILENAME
120-
extract_size=$(stat -c%s $FILENAME_FINAL)
121-
extract_sha256=$(sha256sum $FILENAME_FINAL | cut -d" " -f1)
122-
rm $FILENAME_FINAL
123-
124-
image_download_sha256=$(wget -qO- "${REDI_URL}.sha" | cut -d" " -f1)
125-
echo "Armbian OS $IMAGE_RELEASE $IMAGE_TARGET $ARMBIAN_VERSION|Ultralight custom $RELEASE OS for single board computers|$IMAGE_URL|https://www.armbian.com/armbian-logo-40x40.png|https://www.armbian.com|${IMAGE_CREATED:0:10}|$extract_size|$extract_sha256|$IMAGE_SIZE|$image_download_sha256||systemd"
126-
127-
done | sed '1s/^/"name"|"description"|"url"|"icon"|"website"|"release_date"|"extract_size"|"extract_sha256"|"image_download_size"|"image_download_sha256"|"devices"|"init_format"\n/' | jc --csv | jq '{"os_list": ([.[] | .devices = ["pi5-64bit", "pi4-64bit", "pi3-64bit"]])}' | jq '.os_list.[].image_download_size |= tonumber' | jq '.os_list.[].extract_size |= tonumber' > rpi-imager.json
43+
python3 ${{ github.workspace }}/armbian.github.io/scripts/generate-rpi-imager-json.py \
44+
--output "${{ github.workspace }}/rpi-imager.json"
12845
12946
- name: Commit changes if any
13047
run: |
13148
13249
cd armbian.github.io
133-
git checkout data
50+
git checkout data || git checkout -b data
13451
mkdir -p data/
13552
13653
cp ${{ github.workspace }}/rpi-imager.json data/

0 commit comments

Comments
 (0)