2222
2323jobs :
2424
25- rip-and-test :
26- runs-on : ubuntu-24.04
27- steps :
28- - name : Dump GitHub context
29- env :
30- GITHUB_CONTEXT : ${{ toJson(github) }}
31- run : |
32- echo Number of CPUs: $(nproc)
33- echo "$GITHUB_CONTEXT"
34- - name : Checkout repository
35- uses : actions/checkout@v6
36- with :
37- submodules : false
38- fetch-depth : 1
39- - name : Install dependencies
40- run : |
41- set -x
42- .github/scripts/install-deps.sh
43- - name : Build RIP GCC
44- run : |
45- set -x
46- .github/scripts/build-rip.sh --with-realtime=uspace
47- - name : Verify no untracked or modified files after build
48- run : |
49- .github/scripts/verify-clean-repo.sh
50- - name : Test
51- run : |
52- set -x
53- scripts/rip-environment runtests -p
54- - name : Verify no untracked or modified files after test
55- run : |
56- .github/scripts/verify-clean-repo.sh
57-
58- rip-rtai :
59- runs-on : ubuntu-24.04
60- steps :
61- - name : Dump GitHub context
62- env :
63- GITHUB_CONTEXT : ${{ toJson(github) }}
64- run : |
65- echo Number of CPUs: $(nproc)
66- echo "$GITHUB_CONTEXT"
67- - name : Checkout repository
68- uses : actions/checkout@v6
69- with :
70- submodules : false
71- fetch-depth : 1
72- - name : Install dependencies
73- run : |
74- set -x
75- .github/scripts/install-rtai.sh trixie
76- .github/scripts/install-deps.sh
77- - name : Build RIP RTAI
78- run : |
79- set -x
80- #It is save to assume there is only one /usr/realtime-* folder
81- .github/scripts/build-rip.sh --with-realtime=/usr/realtime-*
82- - name : Verify no untracked or modified files after build
83- run : |
84- .github/scripts/verify-clean-repo.sh
85-
86- rip-and-test-clang :
87- runs-on : ubuntu-24.04
88- steps :
89- - name : Dump GitHub context
90- env :
91- GITHUB_CONTEXT : ${{ toJson(github) }}
92- run : |
93- echo Number of CPUs: $(nproc)
94- echo "$GITHUB_CONTEXT"
95- - name : Checkout repository
96- uses : actions/checkout@v6
97- with :
98- submodules : false
99- fetch-depth : 1
100- - name : Install dependencies
101- run : |
102- set -x
103- .github/scripts/install-deps.sh
104- - name : Build RIP Clang
105- run : |
106- set -x
107- CC=clang CXX=clang++ .github/scripts/build-rip.sh --with-realtime=uspace
108- - name : Verify no untracked or modified files after build
109- run : |
110- .github/scripts/verify-clean-repo.sh
111- - name : Test
112- run : |
113- set -x
114- scripts/rip-environment runtests -p
115- - name : Verify no untracked or modified files after test
116- run : |
117- .github/scripts/verify-clean-repo.sh
118-
119- cppcheck :
120- runs-on : ubuntu-24.04
121- steps :
122- - name : Checkout repository
123- uses : actions/checkout@v6
124- with :
125- submodules : false
126- fetch-depth : 1
127- - name : Install dependencies
128- run : |
129- set -x
130- sudo apt-get -q update
131- sudo apt-get --yes install cppcheck shellcheck
132- - name : Cppcheck
133- continue-on-error : true
134- run : |
135- set -x
136- scripts/cppcheck.sh
137- - name : Shellcheck
138- continue-on-error : true
139- run : |
140- scripts/shellcheck.sh
141-
14225 htmldocs :
14326 runs-on : ubuntu-24.04
14427 steps :
17457
17558 htmldocs-package :
17659 runs-on : ubuntu-24.04
60+ needs : htmldocs
17761 permissions :
17862 contents : write
17963 steps :
@@ -199,204 +83,3 @@ jobs:
19983 echo ${{ secrets.GITHUB_TOKEN }} | oras login --username ${{ github.actor }} --password-stdin ghcr.io
20084 oras push ghcr.io/${{ github.repository_owner }}/linuxcnc/doc:${TAG} --artifact-type application/vnd.pkgw doc.tar.gz
20185
202- package-arch :
203- runs-on : ${{ matrix.runner }}
204- strategy :
205- matrix :
206- runner : ["ubuntu-24.04", "ubuntu-24.04-arm"]
207- image : ["debian:bookworm", "debian:trixie", "debian:sid"]
208- container :
209- image : ${{ matrix.image }}
210- # IPC_OWNER is needed for shmget IPC_CREAT
211- # SYS_ADMIN is needed for shmctl IPC_SET
212- options : --cap-add=IPC_OWNER --cap-add=SYS_ADMIN
213- steps :
214- - name : Dump GitHub context
215- env :
216- GITHUB_CONTEXT : ${{ toJson(github) }}
217- run : |
218- echo Number of CPUs: $(nproc)
219- echo "$GITHUB_CONTEXT"
220- - name : Install pre-dependencies
221- run : |
222- set -x
223- apt-get -q update
224- apt --yes upgrade
225- # Install stuff needed to check out the linuxcnc repo and turn it into a debian source package and run tests.
226- apt-get --yes --no-install-recommends install curl git lsb-release python3 devscripts sudo adduser xauth
227- - name : Checkout repository
228- uses : actions/checkout@v6
229- with :
230- submodules : false
231- # "fetch-depth: 0" fetches all of history, this is needed by
232- # our build system to determine the version from tags
233- fetch-depth : 0
234- - name : Git config
235- run : |
236- set -x
237- git config --global --add safe.directory ${PWD}
238- - name : Build architecture-specific Debian packages
239- env :
240- DEBEMAIL : emc-developers@lists.sourceforge.net
241- DEBFULLNAME : LinuxCNC Github CI Robot
242- run : |
243- set -x
244- .github/scripts/build-package-arch.sh
245- - name : Verify no untracked or modified files after build
246- run : |
247- .github/scripts/verify-clean-repo.sh ':(exclude)VERSION' ':(exclude)debian/changelog'
248- - name : Install debian packages
249- run : |
250- set -x
251- apt-get --yes --no-install-recommends install ../*.deb
252- - name : Test debian packages
253- run : |
254- set -x
255- adduser --disabled-password --gecos "" testrunner
256- passwd -d testrunner
257- adduser testrunner sudo
258- chmod 0777 $(find tests/ -type d) # make test dirs world-writable for the testrunner
259- su -c "./scripts/runtests -p ./tests" testrunner
260- - name : Verify no untracked or modified files after test
261- run : |
262- .github/scripts/verify-clean-repo.sh ':(exclude)VERSION' ':(exclude)debian/changelog'
263- - name : Gather build artifacts
264- run : |
265- set -x
266- ARCH=$(dpkg --print-architecture)
267- DIST=$(echo ${{ matrix.image }} | cut -d : -f 2)
268- OUTDIR="artifacts/${DIST}/${ARCH}"
269- mkdir -p "$OUTDIR"
270- cp -v $(find .. -maxdepth 1 -type f | LC_ALL=C sort) "$OUTDIR" || true
271- (cd "$OUTDIR" && sha256sum * > SHA256SUMS.txt)
272- echo "DIST=$DIST" >> "$GITHUB_ENV"
273- echo "ARCH=$ARCH" >> "$GITHUB_ENV"
274- - name : Compute artifact metadata
275- id : meta
276- run : |
277- echo "dist=$(echo ${{ matrix.image }} | cut -d : -f 2)" >> $GITHUB_OUTPUT
278- echo "arch=$(dpkg --print-architecture)" >> $GITHUB_OUTPUT
279- - name : Upload build artifacts
280- uses : actions/upload-artifact@v7
281- with :
282- name : linuxcnc-${{ steps.meta.outputs.dist }}-${{ steps.meta.outputs.arch }}
283- path : artifacts/${{ steps.meta.outputs.dist }}/${{ steps.meta.outputs.arch }}
284- if-no-files-found : error
285-
286- package-indep :
287- runs-on : ubuntu-24.04
288- strategy :
289- matrix :
290- image : ["debian:bookworm", "debian:trixie", "debian:sid"]
291- container :
292- image : ${{ matrix.image }}
293- # IPC_OWNER is needed for shmget IPC_CREAT
294- # SYS_ADMIN is needed for shmctl IPC_SET
295- options : --cap-add=IPC_OWNER --cap-add=SYS_ADMIN
296- steps :
297- - name : Dump GitHub context
298- env :
299- GITHUB_CONTEXT : ${{ toJson(github) }}
300- run : |
301- echo Number of CPUs: $(nproc)
302- echo "$GITHUB_CONTEXT"
303- - name : Install pre-dependencies
304- run : |
305- set -x
306- apt-get -q update
307- apt --yes upgrade
308- # Install stuff needed to check out the linuxcnc repo and turn it into a debian source package.
309- apt-get --yes --no-install-recommends install curl git lsb-release python3 devscripts
310- - name : Checkout repository
311- uses : actions/checkout@v6
312- with :
313- submodules : false
314- # "fetch-depth: 0" fetches all of history, this is needed by
315- # our build system to determine the version from tags
316- fetch-depth : 0
317- - name : Git config
318- run : |
319- set -x
320- git config --global --add safe.directory ${PWD}
321- - name : Build architecture-independent Debian packages
322- env :
323- DEBEMAIL : emc-developers@lists.sourceforge.net
324- DEBFULLNAME : LinuxCNC Github CI Robot
325- run : |
326- set -x
327- .github/scripts/build-package-indep.sh
328- - name : Verify no untracked or modified files after build
329- run : |
330- #*.po and documentation.pot are modifyed by build. Ignore them for now.
331- .github/scripts/verify-clean-repo.sh ':(exclude)VERSION' ':(exclude)debian/changelog' ':(exclude)docs/po/*.po' ':(exclude)docs/po/documentation.pot'
332- - name : Install debian packages
333- run : |
334- set -x
335- apt-get --yes --no-install-recommends install ../*.deb
336- - name : Gather build artifacts
337- run : |
338- set -x
339- ARCH=all
340- DIST=$(echo ${{ matrix.image }} | cut -d : -f 2)
341- OUTDIR="artifacts/${DIST}/${ARCH}"
342- mkdir -p "$OUTDIR"
343- cp -v $(find .. -maxdepth 1 -type f | LC_ALL=C sort) "$OUTDIR" || true
344- (cd "$OUTDIR" && sha256sum * > SHA256SUMS.txt)
345- echo "DIST=$DIST" >> "$GITHUB_ENV"
346- echo "ARCH=$ARCH" >> "$GITHUB_ENV"
347- - name : Compute artifact metadata
348- id : meta
349- run : |
350- echo "dist=$(echo ${{ matrix.image }} | cut -d : -f 2)" >> $GITHUB_OUTPUT
351- echo "arch=all" >> $GITHUB_OUTPUT
352- - name : Upload build artifacts
353- uses : actions/upload-artifact@v7
354- with :
355- name : linuxcnc-${{ steps.meta.outputs.dist }}-${{ steps.meta.outputs.arch }}
356- path : artifacts/${{ steps.meta.outputs.dist }}/${{ steps.meta.outputs.arch }}
357- if-no-files-found : error
358-
359- release :
360- name : Release packages
361- needs :
362- - package-arch
363- - package-indep
364- if : (github.event_name == 'release' && github.event.action == 'published') || startsWith(github.ref, 'refs/tags/')
365- permissions :
366- contents : write
367- runs-on : ubuntu-24.04
368- steps :
369- - name : Download artifacts
370- uses : actions/download-artifact@v8
371- with :
372- path : release_artifacts
373- - name : Prepare upload assets
374- run : |
375- set -x
376- mkdir -p upload
377- echo "Downloaded artifacts layout:" && find release_artifacts -maxdepth 3 -print | sed 's/^/ /'
378- for d in release_artifacts/*; do
379- [ -d "$d" ] || continue
380- name=$(basename "$d")
381- # Expect name like linuxcnc-bookworm-amd64 or linuxcnc-trixie-all
382- dist=${name#linuxcnc-}
383- dist=${dist%-*}
384- arch=${name##*-}
385- echo "Processing artifact: $name (dist=$dist arch=$arch)"
386- # Copy built files into distro and arch specific directory
387- mkdir "upload/${dist}-${arch}/"
388- # sort file list for stable output
389- for f in $(find "$d" -maxdepth 1 -type f | LC_ALL=C sort); do
390- [ -f "$f" ] || continue
391- cp "$f" "upload/${dist}-${arch}"
392- done
393- echo "Preview of SHA256SUMS.txt:" && sed -n '1,200p' "upload/${dist}-${arch}/SHA256SUMS.txt" | sed 's/^/ /'
394- echo "Upload dir contents:" && ls -l "upload/${dist}-${arch}" | sed 's/^/ /'
395- done
396- - name : Create GitHub Release and upload assets
397- uses : softprops/action-gh-release@v3
398- with :
399- files : |
400- upload/*
401- env :
402- GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
0 commit comments