1010 check_suite :
1111 types : [rerequested]
1212
13+ permissions :
14+ contents : read # to fetch code (actions/checkout)
15+
1316jobs :
1417
1518 rip-and-test :
2730 - name : Build RIP & test
2831 run : |
2932 set -x
30- sudo apt-get install -y eatmydata
33+ sudo apt-get --yes -o Acquire::Retries=5 install eatmydata
3134 eatmydata ./scripts/travis-install-build-deps.sh
35+ sudo eatmydata apt --yes --quiet -o Acquire::Retries=5 upgrade
3236 cd src
3337 eatmydata ./autogen.sh
3438 eatmydata ./configure --with-realtime=uspace --disable-check-runtime-deps
5155 - name : Clang build RIP & test
5256 run : |
5357 set -x
54- sudo apt-get install -y eatmydata
58+ sudo apt-get --yes -o Acquire::Retries=5 install eatmydata
5559 eatmydata ./scripts/travis-install-build-deps.sh
56- sudo eatmydata apt-get install -y clang
60+ sudo eatmydata apt-get -y -o Acquire::Retries=5 install clang
61+ sudo eatmydata apt --yes --quiet -o Acquire::Retries=5 upgrade
5762 cd src
5863 eatmydata ./autogen.sh
5964 CC=clang CXX=clang++ eatmydata ./configure --with-realtime=uspace --disable-check-runtime-deps
7681 - name : Build HTML docmentation
7782 run : |
7883 ./scripts/travis-install-build-deps.sh
79- sudo apt-get install -y eatmydata
84+ sudo apt-get -y -o Acquire::Retries=5 install eatmydata
85+ sudo eatmydata apt --yes --quiet -o Acquire::Retries=5 upgrade
8086 cd src
8187 eatmydata ./autogen.sh
8288 eatmydata ./configure --with-realtime=uspace --disable-check-runtime-deps --enable-build-documentation=html
@@ -86,11 +92,11 @@ jobs:
8692 # Note that the package build covers html docs
8793
8894 package-arch :
89- runs-on : ubuntu-latest
95+ runs-on : ${{ matrix.runner }}
9096 strategy :
9197 matrix :
92- image : ["debian:bullseye ", "debian:bookworm", "debian:sid "]
93-
98+ runner : ["ubuntu-24.04 ", "ubuntu-24.04-arm "]
99+ image : ["debian:bullseye", "debian:bookworm", "debian:trixie", "debian:sid"]
94100 container :
95101 image : ${{ matrix.image }}
96102 # IPC_OWNER is needed for shmget IPC_CREAT
@@ -107,10 +113,11 @@ jobs:
107113 run : |
108114 set -e
109115 set -x
110- apt-get --quiet update
111- apt-get --yes --quiet install eatmydata
116+ apt-get --quiet -o Acquire::Retries=5 update
117+ apt-get --yes --quiet -o Acquire::Retries=5 install eatmydata curl
118+ eatmydata apt --yes --quiet -o Acquire::Retries=5 upgrade
112119 # Install stuff needed to check out the linuxcnc repo and turn it into a debian source package.
113- eatmydata apt-get --yes --quiet install --no-install-suggests git lsb-release python3 devscripts
120+ eatmydata apt-get --yes --quiet -o Acquire::Retries=5 install --no-install-suggests git lsb-release python3 devscripts
114121
115122 - uses : actions/checkout@v3
116123 with :
@@ -123,19 +130,19 @@ jobs:
123130 DEBIAN_FRONTEND : noninteractive
124131 run : |
125132 case "${{matrix.image}}" in
126- debian:sid|debian:bookworm)
133+ debian:sid|debian:bookworm|debian:trixie )
127134 exit 0
128135 ;;
129136 *)
130137 ;;
131138 esac
132139 set -e
133140 set -x
134- eatmydata apt-get --yes --quiet install --no-install-recommends gpg software-properties-common
141+ eatmydata apt-get --yes --quiet -o Acquire::Retries=5 install --no-install-recommends gpg software-properties-common
135142 eatmydata gpg --homedir="${PWD}/gnupg" --output /etc/apt/trusted.gpg.d/linuxcnc-deb-archive.gpg --export 3CB9FD148F374FEF
136143 DIST=$(echo ${{matrix.image}} | cut -d : -f 2)
137144 eatmydata add-apt-repository "deb http://linuxcnc.org $DIST base"
138- eatmydata apt-get --quiet update
145+ eatmydata apt-get --quiet -o Acquire::Retries=5 update
139146
140147 - name : Build architecture-specific Debian packages
141148 env :
@@ -150,27 +157,52 @@ jobs:
150157 eatmydata debian/update-dch-from-git
151158 eatmydata scripts/get-version-from-git | sed -re 's/^v(.*)$/\1/' >| VERSION; cat VERSION
152159 eatmydata git diff
153- eatmydata apt-get --yes --quiet build-dep --arch-only .
160+ eatmydata apt-get --yes --quiet -o Acquire::Retries=5 build-dep --arch-only .
154161 eatmydata debuild -us -uc --build=any
155162 - name : Test debian packages
156163 env :
157164 DEBIAN_FRONTEND : noninteractive
158165 run : |
159166 set -e
160167 set -x
161- eatmydata apt-get --yes --quiet install ../*.deb
162- eatmydata apt-get --yes --quiet install sudo # some tests run sudo...
168+ eatmydata apt-get --yes --quiet -o Acquire::Retries=5 install ../*.deb
169+ eatmydata apt-get --yes --quiet -o Acquire::Retries=5 install sudo # some tests run sudo...
163170 eatmydata adduser --disabled-password --gecos "" testrunner
164171 eatmydata passwd -d testrunner
165172 eatmydata adduser testrunner sudo
166173 chmod 0777 $(find tests/ -type d) # make test dirs world-writable for the testrunner
167174 su -c "eatmydata ./scripts/runtests -p ./tests" testrunner
175+ - name : Gather build artifacts
176+ run : |
177+ set -e
178+ set -x
179+ ARCH=$(dpkg --print-architecture)
180+ DIST=$(echo ${{ matrix.image }} | cut -d : -f 2)
181+ OUTDIR="artifacts/${DIST}/${ARCH}"
182+ mkdir -p "$OUTDIR"
183+ cp -v ../*.deb ../*.changes ../*.buildinfo "$OUTDIR" || true
184+ (cd "$OUTDIR" && sha256sum * > SHA256SUMS.txt)
185+ echo "DIST=$DIST" >> "$GITHUB_ENV"
186+ echo "ARCH=$ARCH" >> "$GITHUB_ENV"
187+ - name : Compute artifact metadata
188+ id : meta
189+ run : |
190+ echo "dist=$(echo ${{ matrix.image }} | cut -d : -f 2)" >> $GITHUB_OUTPUT
191+ echo "arch=$(dpkg --print-architecture)" >> $GITHUB_OUTPUT
192+
193+ - name : Upload build artifacts
194+ uses : actions/upload-artifact@v4
195+ with :
196+ name : linuxcnc-${{ steps.meta.outputs.dist }}-${{ steps.meta.outputs.arch }}
197+ path : artifacts/${{ steps.meta.outputs.dist }}/${{ steps.meta.outputs.arch }}
198+ if-no-files-found : error
199+
168200
169201 package-indep :
170- runs-on : ubuntu-latest
202+ runs-on : ubuntu-24.04
171203 strategy :
172204 matrix :
173- image : ["debian:bullseye", "debian:bookworm", "debian:sid"]
205+ image : ["debian:bullseye", "debian:bookworm", "debian:trixie", "debian: sid"]
174206 container :
175207 image : ${{ matrix.image }}
176208 # IPC_OWNER is needed for shmget IPC_CREAT
@@ -188,10 +220,11 @@ jobs:
188220 run : |
189221 set -e
190222 set -x
191- apt-get --quiet update
192- apt-get --yes --quiet install eatmydata
223+ apt-get --quiet -o Acquire::Retries=5 update
224+ apt-get --yes --quiet -o Acquire::Retries=5 install eatmydata curl
225+ eatmydata apt --yes --quiet -o Acquire::Retries=5 upgrade
193226 # Install stuff needed to check out the linuxcnc repo and turn it into a debian source package.
194- eatmydata apt-get --yes --quiet install --no-install-suggests git lsb-release python3 devscripts
227+ eatmydata apt-get --yes --quiet -o Acquire::Retries=5 install --no-install-suggests git lsb-release python3 devscripts
195228
196229 - uses : actions/checkout@v3
197230 with :
@@ -204,19 +237,19 @@ jobs:
204237 DEBIAN_FRONTEND : noninteractive
205238 run : |
206239 case "${{matrix.image}}" in
207- debian:sid|debian:bookworm)
240+ debian:sid|debian:bookworm|debian:trixie )
208241 exit 0
209242 ;;
210243 *)
211244 ;;
212245 esac
213246 set -e
214247 set -x
215- eatmydata apt-get --yes --quiet install gpg software-properties-common
248+ eatmydata apt-get --yes --quiet -o Acquire::Retries=5 install gpg software-properties-common
216249 eatmydata gpg --homedir="${PWD}/gnupg" --output /etc/apt/trusted.gpg.d/linuxcnc-deb-archive.gpg --export 3CB9FD148F374FEF
217250 DIST=$(echo ${{matrix.image}} | cut -d : -f 2)
218251 eatmydata add-apt-repository "deb http://linuxcnc.org $DIST base"
219- eatmydata apt-get --quiet update
252+ eatmydata apt-get --quiet -o Acquire::Retries=5 update
220253
221254 - name : Build architecture-independent Debian packages
222255 env :
@@ -231,12 +264,116 @@ jobs:
231264 eatmydata debian/update-dch-from-git
232265 eatmydata scripts/get-version-from-git | sed -re 's/^v(.*)$/\1/' >| VERSION; cat VERSION
233266 eatmydata git diff
234- eatmydata apt-get --yes --quiet build-dep --indep-only .
267+ eatmydata apt-get --yes --quiet -o Acquire::Retries=5 build-dep --indep-only .
235268 eatmydata debuild -us -uc --build=all
236269 - name : Test install debian packages
237270 env :
238271 DEBIAN_FRONTEND : noninteractive
239272 run : |
240273 set -e
241274 set -x
242- eatmydata apt-get --yes --quiet install ../*.deb
275+ eatmydata apt-get --yes --quiet -o Acquire::Retries=5 install ../*.deb
276+ - name : Gather build artifacts
277+ run : |
278+ set -e
279+ set -x
280+ DIST=$(echo ${{ matrix.image }} | cut -d : -f 2)
281+ ARCH=all
282+ OUTDIR="artifacts/${DIST}/${ARCH}"
283+ mkdir -p "$OUTDIR"
284+ cp -v ../*.deb ../*.changes ../*.buildinfo "$OUTDIR" || true
285+ (cd "$OUTDIR" && sha256sum * > SHA256SUMS.txt)
286+ echo "DIST=$DIST" >> "$GITHUB_ENV"
287+ echo "ARCH=$ARCH" >> "$GITHUB_ENV"
288+ - name : Compute artifact metadata
289+ id : meta
290+ run : |
291+ echo "dist=$(echo ${{ matrix.image }} | cut -d : -f 2)" >> $GITHUB_OUTPUT
292+ echo "arch=all" >> $GITHUB_OUTPUT
293+
294+ - name : Upload build artifacts
295+ uses : actions/upload-artifact@v4
296+ with :
297+ name : linuxcnc-${{ steps.meta.outputs.dist }}-${{ steps.meta.outputs.arch }}
298+ path : artifacts/${{ steps.meta.outputs.dist }}/${{ steps.meta.outputs.arch }}
299+ if-no-files-found : error
300+
301+
302+ cppcheck :
303+ runs-on : ubuntu-24.04
304+ steps :
305+ - uses : actions/checkout@v2
306+ with :
307+ submodules : true
308+ fetch-depth : 0
309+ - name : Perform Source Code checks that were successful in the past
310+ continue-on-error : true
311+ run : |
312+ set -x
313+ git fetch --recurse-submodules=no https://github.com/linuxcnc/linuxcnc refs/tags/*:refs/tags/*
314+ sudo apt-get --yes -o Acquire::Retries=5 install cppcheck shellcheck
315+ scripts/cppcheck.sh
316+ - name : Shellcheck
317+ continue-on-error : true
318+ run : |
319+ scripts/shellcheck.sh
320+
321+
322+ release :
323+ name : Release packages
324+ needs :
325+ - package-arch
326+ - package-indep
327+ if : (github.event_name == 'release' && github.event.action == 'published') || startsWith(github.ref, 'refs/tags/')
328+ permissions :
329+ contents : write
330+ runs-on : ubuntu-24.04
331+ steps :
332+ - name : Download artifacts
333+ uses : actions/download-artifact@v4
334+ with :
335+ path : release_artifacts
336+ - name : Prepare upload assets
337+ run : |
338+ set -e
339+ mkdir -p upload
340+ echo "Downloaded artifacts layout:" && find release_artifacts -maxdepth 3 -print | sed 's/^/ /'
341+ for d in release_artifacts/*; do
342+ [ -d "$d" ] || continue
343+ name=$(basename "$d")
344+ # Expect name like linuxcnc-bookworm-amd64 or linuxcnc-trixie-all
345+ dist=${name#linuxcnc-}
346+ dist=${dist%-*}
347+ arch=${name##*-}
348+ echo "Processing artifact: $name (dist=$dist arch=$arch)"
349+ # Copy .deb files with distro suffix (arch is already in Debian filename)
350+ for f in "$d"/*.deb; do
351+ [ -f "$f" ] || continue
352+ base=$(basename "$f")
353+ base_no_ext="${base%.deb}"
354+ dest="upload/${base_no_ext}_${dist}.deb"
355+ echo " + $base -> $(basename "$dest")"
356+ cp "$f" "$dest"
357+ done
358+ done
359+
360+ echo "Upload dir contents:" && ls -l upload | sed 's/^/ /'
361+ # Single combined checksums file for all assets, deterministic order
362+ if ls upload/*.deb >/dev/null 2>&1; then
363+ (
364+ cd upload
365+ : > SHA256SUMS.txt
366+ # sort file list for stable output
367+ for f in $(ls -1 *.deb | LC_ALL=C sort); do
368+ sha256sum "$f" >> SHA256SUMS.txt
369+ done
370+ echo "Preview of SHA256SUMS.txt:" && sed -n '1,200p' SHA256SUMS.txt | sed 's/^/ /'
371+ )
372+ fi
373+ - name : Create GitHub Release and upload assets
374+ uses : softprops/action-gh-release@v2
375+ with :
376+ files : |
377+ upload/*
378+ env :
379+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
0 commit comments