|
22 | 22 |
|
23 | 23 | jobs: |
24 | 24 |
|
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 | | -
|
142 | 25 | htmldocs: |
143 | 26 | runs-on: ubuntu-24.04 |
144 | 27 | steps: |
@@ -199,204 +82,3 @@ jobs: |
199 | 82 | echo ${{ secrets.GITHUB_TOKEN }} | oras login --username ${{ github.actor }} --password-stdin ghcr.io |
200 | 83 | oras push ghcr.io/${{ github.repository_owner }}/linuxcnc/doc:${TAG} --artifact-type application/vnd.pkgw doc.tar.gz |
201 | 84 |
|
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