mpc: update to 0.35
[feed/packages.git] / .github / workflows / multi-arch-test-build.yml
1 name: Test Build
2
3 on:
4 pull_request:
5
6 concurrency:
7 group: ${{ github.workflow }}-${{ github.ref }}
8 cancel-in-progress: ${{ github.event_name == 'pull_request' }}
9
10 jobs:
11 build:
12 name: Test ${{ matrix.arch }}
13 runs-on: ubuntu-latest
14 strategy:
15 fail-fast: false
16 matrix:
17 include:
18 - arch: aarch64_generic
19 target: armsr-armv8
20 runtime_test: true
21
22 - arch: arm_cortex-a15_neon-vfpv4
23 target: armsr-armv7
24 runtime_test: true
25
26 - arch: arm_cortex-a9_vfpv3-d16
27 target: mvebu-cortexa9
28 runtime_test: false
29
30 - arch: i386_pentium-mmx
31 target: x86-geode
32 runtime_test: true
33
34 - arch: mips_24kc
35 target: ath79-generic
36 runtime_test: true
37
38 - arch: mipsel_24kc
39 target: mt7621
40 runtime_test: false
41
42 - arch: powerpc_464fp
43 target: apm821xx-nand
44 runtime_test: false
45
46 - arch: powerpc_8548
47 target: mpc85xx-p1010
48 runtime_test: false
49
50 - arch: riscv64_riscv64
51 target: sifiveu-generic
52 runtime_test: false
53
54 - arch: x86_64
55 target: x86-64
56 runtime_test: true
57
58 steps:
59 - uses: actions/checkout@v4
60 with:
61 fetch-depth: 0
62
63 - name: Determine branch name
64 run: |
65 BRANCH="${GITHUB_BASE_REF#refs/heads/}"
66 echo "Building for $BRANCH"
67 echo "BRANCH=$BRANCH" >> $GITHUB_ENV
68
69 - name: Determine changed packages
70 run: |
71 # only detect packages with changes
72 PKG_ROOTS=$(find . -name Makefile | \
73 grep -v ".*/src/Makefile" | \
74 sed -e 's@./\(.*\)/Makefile@\1/@')
75 CHANGES=$(git diff --diff-filter=d --name-only origin/$BRANCH...)
76
77 for ROOT in $PKG_ROOTS; do
78 for CHANGE in $CHANGES; do
79 if [[ "$CHANGE" == "$ROOT"* ]]; then
80 PACKAGES+=$(echo "$ROOT" | sed -e 's@.*/\(.*\)/@\1 @')
81 break
82 fi
83 done
84 done
85
86 # fallback to test packages if nothing explicitly changes this is
87 # should run if other mechanics in packages.git changed
88 PACKAGES="${PACKAGES:-vim attendedsysupgrade-common bmon}"
89
90 echo "Building $PACKAGES"
91 echo "PACKAGES=$PACKAGES" >> $GITHUB_ENV
92
93 - name: Generate build keys
94 run: |
95 sudo apt-get update
96 sudo apt-get install -y signify-openbsd
97 signify-openbsd -G -n -c 'DO NOT USE - OpenWrt packages feed CI' -p packages_ci.pub -s packages_ci.sec
98 EOF=$(dd if=/dev/urandom bs=15 count=1 status=none | base64)
99 echo "KEY_BUILD<<$EOF" >> $GITHUB_ENV
100 cat packages_ci.sec >> $GITHUB_ENV
101 echo "$EOF" >> $GITHUB_ENV
102
103 - name: Build
104 uses: openwrt/gh-action-sdk@v7
105 env:
106 ARCH: ${{ matrix.arch }}-${{ env.BRANCH }}
107 FEEDNAME: packages_ci
108 INDEX: 1
109 KEY_BUILD: ${{ env.KEY_BUILD }}
110 V: s
111
112 - name: Move created packages to project dir
113 if: always()
114 run: cp bin/packages/${{ matrix.arch }}/packages_ci/* . || true
115
116 - name: Collect metadata
117 if: always()
118 run: |
119 MERGE_ID=$(git rev-parse --short HEAD)
120 echo "MERGE_ID=$MERGE_ID" >> $GITHUB_ENV
121 echo "BASE_ID=$(git rev-parse --short HEAD^1)" >> $GITHUB_ENV
122 echo "HEAD_ID=$(git rev-parse --short HEAD^2)" >> $GITHUB_ENV
123 PRNUMBER=${GITHUB_REF_NAME%/merge}
124 echo "PRNUMBER=$PRNUMBER" >> $GITHUB_ENV
125 echo "ARCHIVE_NAME=${{matrix.arch}}-PR$PRNUMBER-$MERGE_ID" >> $GITHUB_ENV
126
127 - name: Generate metadata
128 if: always()
129 run: |
130 cat << _EOF_ > PKG-INFO
131 Metadata-Version: 2.1
132 Name: ${{env.ARCHIVE_NAME}}
133 Version: $BRANCH
134 Author: $GITHUB_ACTOR
135 Home-page: $GITHUB_SERVER_URL/$GITHUB_REPOSITORY/pull/$PRNUMBER
136 Download-URL: $GITHUB_SERVER_URL/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID
137 Summary: $PACKAGES
138 Platform: ${{ matrix.arch }}
139
140 Packages for OpenWrt $BRANCH running on ${{matrix.arch}}, built from PR $PRNUMBER
141 at commit $HEAD_ID, against $BRANCH at commit $BASE_ID, with merge SHA $MERGE_ID.
142
143 Modified packages:
144 _EOF_
145 for p in $PACKAGES
146 do
147 echo " "$p >> PKG-INFO
148 done
149 echo >> PKG-INFO
150 echo Full file listing: >> PKG-INFO
151 ls -al *.ipk >> PKG-INFO || true
152 cat PKG-INFO
153
154 - name: Store packages
155 if: always()
156 uses: actions/upload-artifact@v4
157 with:
158 name: ${{env.ARCHIVE_NAME}}-packages
159 path: |
160 Packages
161 Packages.*
162 *.ipk
163 PKG-INFO
164
165 - name: Store logs
166 if: always()
167 uses: actions/upload-artifact@v4
168 with:
169 name: ${{env.ARCHIVE_NAME}}-logs
170 path: |
171 logs/
172 PKG-INFO
173
174 - name: Remove logs
175 if: always()
176 run: sudo rm -rf logs/ || true
177
178 - name: Check if any packages were built
179 run: |
180 if [ -n "$(find . -maxdepth 1 -type f -name '*.ipk' -print -quit)" ]; then
181 echo "Found *.ipk files"
182 HAVE_IPKS=true
183 else
184 echo "No *.ipk files found"
185 HAVE_IPKS=false
186 fi
187 echo "HAVE_IPKS=$HAVE_IPKS" >> $GITHUB_ENV
188
189 - name: Register QEMU
190 if: ${{ matrix.runtime_test && fromJSON(env.HAVE_IPKS) }}
191 run: |
192 sudo apt-get update
193 sudo apt-get install -y qemu-user-static binfmt-support
194 sudo update-binfmts --import
195
196 - name: Build Docker container
197 if: ${{ matrix.runtime_test && fromJSON(env.HAVE_IPKS) }}
198 run: |
199 docker build -t test-container --build-arg ARCH .github/workflows/
200 env:
201 ARCH: ${{ matrix.arch }}-${{ env.BRANCH }}
202
203 - name: Test via Docker container
204 if: ${{ matrix.runtime_test && fromJSON(env.HAVE_IPKS) }}
205 run: |
206 docker run --rm -v $GITHUB_WORKSPACE:/ci test-container