1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
|
name: Build and Release RaveOS ISO
on:
push:
branches: ["main"]
workflow_dispatch:
jobs:
build-iso:
runs-on: iso-builder
env:
TMPDIR: ${{ github.workspace }}/.tmp
GIT_TMPDIR: ${{ github.workspace }}/.tmp
steps:
- name: Checkout build repository
uses: actions/checkout@v4
- name: Prepare temp directories (NO /tmp usage)
run: |
set -euo pipefail
mkdir -p "${GITHUB_WORKSPACE}/.tmp"
df -h
- name: Fix raveos-core-repo pacman repo (overwrite clean)
run: |
set -euo pipefail
sudo sed -i '/^\[raveos-core-repo\]/,/^$/d' /etc/pacman.conf
cat <<'EOF' | sudo tee -a /etc/pacman.conf
[raveos-core-repo]
SigLevel = Never TrustAll
Server = https://page.rp1.hu/x86_64/
EOF
- name: Sync and update runner
run: |
set -euo pipefail
sudo pacman -Sy --noconfirm
if pacman -Qu 2>/dev/null | grep -q .; then
echo "Elavult csomagok talalhatok, auto-frissites indul..."
sudo pacman -Su --noconfirm
echo "Runner auto-frissites: OK"
else
echo "Runner konzisztencia ellenorzes: OK"
fi
- name: Verify archiso
run: pacman -Q archiso
- name: Setup Chaotic-AUR
run: |
set -euo pipefail
if [ ! -f /etc/pacman.d/chaotic-mirrorlist ]; then
sudo mkdir -p /etc/pacman.d
echo 'Server = https://cdn-mirror.chaotic.cx/$repo/$arch' | sudo tee /etc/pacman.d/chaotic-mirrorlist
sudo pacman-key --recv-key 3056513887B78AEB --keyserver keyserver.ubuntu.com || true
sudo pacman-key --lsign-key 3056513887B78AEB || true
sudo pacman -U --noconfirm \
https://cdn-mirror.chaotic.cx/chaotic-aur/chaotic-keyring.pkg.tar.zst \
https://cdn-mirror.chaotic.cx/chaotic-aur/chaotic-mirrorlist.pkg.tar.zst || true
fi
- name: Setup RaveOS signing key
run: |
set -euo pipefail
cat <<'RAVEOSKEY' | sudo pacman-key --add -
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
ibVZLr5g97pSMBQUv/dO6I+jfPtqITpDupTdDgg=
=WGkj
-----END PGP PUBLIC KEY BLOCK-----
RAVEOSKEY
sudo pacman-key --lsign-key 25C7668F1235F5664F037671BDB2A9CE6EBFF113
- name: Build ISO
run: |
set -euo pipefail
chmod +x ./build.sh
sudo ./build.sh
- name: Check build output
run: |
set -euo pipefail
ls -lh output/*.iso
- name: Check ISO for broken library links
run: |
set -euo pipefail
sudo modprobe loop || true
ISO_FILE=$(ls output/*.iso | head -1)
MOUNT_DIR=$(mktemp -d)
if ! sudo mount -o loop,ro "$ISO_FILE" "$MOUNT_DIR" 2>/dev/null; then
echo "FIGYELMEZETES: ISO mountolas sikertelen (loop eszkoz nem elerheto), ldd ellenorzes kihagyva"
rmdir "$MOUNT_DIR"
exit 0
fi
BROKEN=0
while IFS= read -r bin; do
result=$(sudo chroot "$MOUNT_DIR" ldd "${bin#$MOUNT_DIR}" 2>/dev/null | grep "not found" || true)
if [ -n "$result" ]; then
echo "TOROTT: $bin"
echo "$result"
BROKEN=1
fi
done < <(find "$MOUNT_DIR" -type f \( -name "*.so*" -o -perm /111 \) 2>/dev/null | xargs -r file 2>/dev/null | grep ELF | cut -d: -f1)
sudo umount "$MOUNT_DIR"
rmdir "$MOUNT_DIR"
if [ "$BROKEN" -eq 1 ]; then
echo "HIBA: Torott library linkek az ISO-ban. Build leallitva."
exit 1
fi
echo "ISO library ellenorzes: OK"
- name: Upload ISO to release server
run: |
set -euo pipefail
ISO_FILE=$(ls output/*.iso | head -1)
ISO_NAME=$(basename "$ISO_FILE")
mkdir -p ~/.ssh
echo "${{ secrets.VPS_RELEASE_KEY }}" > ~/.ssh/vps_release_key
chmod 600 ~/.ssh/vps_release_key
# Új ISO feltöltése
scp -i ~/.ssh/vps_release_key -P ${{ secrets.VPS_PORT }} -o StrictHostKeyChecking=no \
"$ISO_FILE" "${{ secrets.VPS_USER }}@${{ secrets.VPS_HOST }}:${{ secrets.VPS_RELEASES_PATH }}/${ISO_NAME}"
# 3-nál régebbi ISO-k törlése a VPS-ről
ssh -i ~/.ssh/vps_release_key -p ${{ secrets.VPS_PORT }} -o StrictHostKeyChecking=no \
${{ secrets.VPS_USER }}@${{ secrets.VPS_HOST }} "ls -t ${{ secrets.VPS_RELEASES_PATH }}/*.iso 2>/dev/null | tail -n +4 | xargs -r rm -f"
echo "ISO feltoltve: https://release.rp1.hu/${ISO_NAME}"
echo "ISO_NAME=${ISO_NAME}" >> "$GITHUB_ENV"
- name: Create Forgejo Release with external link
run: |
set -euo pipefail
ISO_FILE=$(ls output/*.iso | head -1)
ISO_NAME=$(basename "$ISO_FILE")
ISO_SIZE=$(du -h "$ISO_FILE" | cut -f1)
ISO_SHA256=$(sha256sum "$ISO_FILE" | cut -d' ' -f1)
BUILD_DATE=$(date '+%Y-%m-%d %H:%M:%S')
COMMIT_SHORT=${GITHUB_SHA::7}
TAG="v$(date '+%Y.%m.%d')-${COMMIT_SHORT}"
RELEASE_BODY="Build Date: ${BUILD_DATE}
Filename: ${ISO_NAME}
Size: ${ISO_SIZE}
SHA256: ${ISO_SHA256}
Source Commit: ${COMMIT_SHORT}
Verification:
echo \"${ISO_SHA256} ${ISO_NAME}\" | sha256sum -c"
RELEASE=$(curl -f -s --retry 3 --retry-delay 5 \
-X POST "https://git.rp1.hu/api/v1/repos/RaveOS/RaveOS-Releases/releases" \
-H "Authorization: token ${{ secrets.RELEASE_TOKEN }}" \
-H "Content-Type: application/json" \
-d "{\"tag_name\":\"${TAG}\",\"name\":\"RaveOS ${TAG}\",\"body\":$(echo "$RELEASE_BODY" | python3 -c 'import sys,json; print(json.dumps(sys.stdin.read()))'),\"draft\":false,\"prerelease\":false}")
RELEASE_ID=$(echo "$RELEASE" | python3 -c "import sys,json; print(json.load(sys.stdin)['id'])")
[[ "$RELEASE_ID" =~ ^[0-9]+$ ]] || { echo "HIBA: Ervenytelen RELEASE_ID: $RELEASE_ID"; exit 1; }
echo "Release ID: $RELEASE_ID"
# External link hozzáadása attachment helyett
curl -f -s --retry 3 \
-X POST "https://git.rp1.hu/api/v1/repos/RaveOS/RaveOS-Releases/releases/${RELEASE_ID}/assets?external_url=https://release.rp1.hu/${ISO_NAME}" \
-H "Authorization: token ${{ secrets.RELEASE_TOKEN }}" \
-F "name=${ISO_NAME}"
echo "External link hozzaadva: https://release.rp1.hu/${ISO_NAME}"
echo "Release kesz: https://git.rp1.hu/RaveOS/RaveOS-Releases/releases/tag/${TAG}"
# Regi release-ek torlese (3-nal tobbet nem tartunk)
RELEASES=$(curl -f -s --retry 3 --retry-delay 5 \
"https://git.rp1.hu/api/v1/repos/RaveOS/RaveOS-Releases/releases?limit=50" \
-H "Authorization: token ${{ secrets.RELEASE_TOKEN }}")
echo "$RELEASES" | python3 -c "import sys,json; releases=json.load(sys.stdin); releases.sort(key=lambda r:r['id'],reverse=True); [print(r['id'],r['tag_name']) for r in releases[3:]]" | while IFS=' ' read -r id tag; do
curl -f -s --retry 3 -X DELETE "https://git.rp1.hu/api/v1/repos/RaveOS/RaveOS-Releases/releases/$id" \
-H "Authorization: token ${{ secrets.RELEASE_TOKEN }}"
curl -f -s --retry 3 -X DELETE "https://git.rp1.hu/api/v1/repos/RaveOS/RaveOS-Releases/tags/$tag" \
-H "Authorization: token ${{ secrets.RELEASE_TOKEN }}"
echo "Regi release torolve: $tag"
done
- name: Cleanup (SAFE)
if: always()
run: |
rm -f ~/.ssh/vps_release_key
sudo umount -R "${GITHUB_WORKSPACE}/work" 2>/dev/null || true
sudo umount -R "${GITHUB_WORKSPACE}/output" 2>/dev/null || true
sudo rm -rf "${GITHUB_WORKSPACE}/work"
sudo rm -rf "${GITHUB_WORKSPACE}/output"
sudo rm -rf "${GITHUB_WORKSPACE}/.tmp"
sudo rm -rf /var/cache/pacman/pkg/*
df -h
|