1
+ name : Update Rpi imager download JSON index
2
+ on :
3
+ # repository_dispatch:
4
+ # types: ["Webindex update"]
5
+ workflow_dispatch : # Manually triggered via GitHub Actions UI
6
+
7
+ concurrency :
8
+ group : redirector
9
+ cancel-in-progress : false
10
+
11
+ jobs :
12
+
13
+ Webindex :
14
+
15
+ env :
16
+ GH_TOKEN : ${{ secrets.GITHUB_TOKEN }}
17
+
18
+ name : " Generate JSON Index"
19
+ runs-on : " ubuntu-24.04"
20
+ steps :
21
+
22
+ - name : Checkout build framework repository
23
+ uses : actions/checkout@v4
24
+ with :
25
+ repository : armbian/build
26
+ fetch-depth : 1
27
+ clean : false
28
+ path : build
29
+
30
+ - name : Checkout OS repository
31
+ uses : actions/checkout@v4
32
+ with :
33
+ repository : armbian/os
34
+ fetch-depth : 1
35
+ clean : false
36
+ path : os
37
+
38
+ - name : Checkout armbian.github.io repository
39
+ uses : actions/checkout@v4
40
+ with :
41
+ repository : armbian/armbian.github.io
42
+ fetch-depth : 0
43
+ clean : false
44
+ path : armbian.github.io
45
+
46
+ - name : Install SSH key
47
+ uses : shimataro/ssh-key-action@v2
48
+ with :
49
+ key : ${{ secrets.KEY_UPLOAD }}
50
+ known_hosts : ${{ secrets.KNOWN_HOSTS_ARMBIAN_UPLOAD }}
51
+ if_key_exists : replace
52
+
53
+ - name : " Install dependencies"
54
+ uses : awalsh128/cache-apt-pkgs-action@latest
55
+ with :
56
+ packages : gh jc zip
57
+ version : 1.0
58
+
59
+
60
+ - name : " Build JSON file"
61
+ run : |
62
+
63
+ # prepare feeds
64
+ A=$(rsync -e "ssh -p 10023 -o StrictHostKeyChecking=accept-new" -ar [email protected] :/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")
65
+
66
+ # debug
67
+ echo "$A" > a.txt
68
+
69
+ # join all in one file and compress
70
+ for line in $A; do
71
+
72
+ 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)
73
+ 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)
74
+ IMAGE_SIZE=$(echo $line | cut -d"|" -f1 | sed "s/\.//g" | sed "s/\,//g")
75
+ 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)
76
+ 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)
77
+ IMAGE_URL=$(echo $line | cut -d"|" -f2)
78
+
79
+ # Release
80
+ if [[ "$IMAGE_RELEASE" =~ ^(jammy|noble|plucky)$ ]]; then
81
+ RELEASE="Ubuntu"
82
+ else
83
+ RELEASE="Debian"
84
+ fi
85
+
86
+ # workarounds
87
+ STEP_A=1
88
+ STEP_B=2
89
+ [[ $IMAGE_URL == *i3-wm* || $IMAGE_URL == *kde-* || $IMAGE_URL == *-rc* ]] && STEP_A=2 && STEP_B=3
90
+ 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})
91
+ 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)
92
+ [[ $IMAGE_EXTENSION == $KERNEL_BRANCH || $IMAGE_EXTENSION == ${IMAGE_TARGET} || $IMAGE_EXTENSION =~ boot|csot|boe|sms ]] && unset IMAGE_EXTENSION
93
+ [[ -z ${IMAGE_TARGET} ]] && IMAGE_TARGET="server"
94
+ 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.//")
95
+ #FILE_EXTENSION=$(echo $IMAGE_URL | grep -o "oowow.*\|img.*")
96
+
97
+ # Clean out application from extension
98
+ FILE_EXTENSION=$(echo $FILE_EXTENSION | sed 's/.*-'$IMAGE_EXTENSION'//g' | sed -e 's/^\.//g')
99
+
100
+ # Extract extensions for weird type of images
101
+ WEIRD_EXT=$(echo $FILE_EXTENSION | sed "s/img//g" | sed "s/^\.//g" | sed "s/\..*//g" | sed "s/xz//g" | sed "s/oowow//g")
102
+
103
+ IMAGE_TYPE=$(echo $IMAGE_URL | cut -d"/" -f5)
104
+ IMAGE_CREATED=$(echo $line | cut -d"|" -f3 | sed "s/\//-/g")
105
+ EXPOSED=false
106
+ # Assemble redirector link
107
+ PREFIX=""
108
+ [[ "${IMAGE_TYPE}" == "os" ]] && PREFIX="nightly/"
109
+ REDI_EXT=$(echo $FILE_EXTENSION | rev | cut -d"." -f1 | rev | sed "s/xz//g")
110
+ 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}"
111
+
112
+ # Download, unpack, make sha
113
+ wget $IMAGE_URL
114
+ FILENAME=$(echo $IMAGE_URL | rev | cut -d"/" -f1 | rev)
115
+ FILENAME_FINAL=${FILENAME/.xz/}
116
+ xz -d $FILENAME
117
+ extract_size=$(stat -c%s $FILENAME_FINAL)
118
+ extract_sha256=$(sha256sum $FILENAME_FINAL | cut -d" " -f1)
119
+ rm $FILENAME_FINAL
120
+
121
+ image_download_sha256=$(wget -qO- "${REDI_URL}.sha" | cut -d" " -f1)
122
+ 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"
123
+
124
+ 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"]])}' > rpi-imager.json
125
+
126
+ - name : Commit changes if any
127
+ run : |
128
+
129
+ cd armbian.github.io
130
+ git checkout data
131
+ mkdir -p data/
132
+
133
+ cp ${{ github.workspace }}/rpi-imager.json data/
134
+
135
+ git config --global user.name "github-actions"
136
+ git config --global user.email "[email protected] "
137
+ git add data/.
138
+ git diff --cached --quiet || git commit -m "Update WEB indes files"
139
+ git push
0 commit comments