--- /dev/null
+ARG ARCH=x86-64
+FROM openwrt/rootfs:$ARCH
+
+ADD entrypoint.sh /entrypoint.sh
+
+CMD ["/entrypoint.sh"]
--- /dev/null
+#!/bin/sh
+
+color_out() {
+ printf "\e[0;$1m$PKG_NAME: %s\e[0;0m\n" "$2"
+}
+
+success() {
+ color_out 32 "$1"
+}
+
+info() {
+ color_out 36 "$1"
+}
+
+err() {
+ color_out 31 "$1"
+}
+
+warn() {
+ color_out 33 "$1"
+}
+
+err_die() {
+ err "$1"
+ exit 1
+}
--- /dev/null
+#!/bin/sh
+
+mkdir -p /var/lock/
+
+opkg update
+
+[ -n "$CI_HELPER" ] || CI_HELPER="/ci/.github/workflows/ci_helpers.sh"
+
+for PKG in /ci/*.ipk; do
+ tar -xzOf "$PKG" ./control.tar.gz | tar xzf - ./control
+ # package name including variant
+ PKG_NAME=$(sed -ne 's#^Package: \(.*\)$#\1#p' ./control)
+ # package version without release
+ PKG_VERSION=$(sed -ne 's#^Version: \(.*\)-[0-9]*$#\1#p' ./control)
+ # package source contianing test.sh script
+ PKG_SOURCE=$(sed -ne 's#^Source: .*/\(.*\)$#\1#p' ./control)
+
+ echo "Testing package $PKG_NAME in version $PKG_VERSION from $PKG_SOURCE"
+
+ opkg install "$PKG"
+
+ export PKG_NAME PKG_VERSION CI_HELPER
+
+ TEST_SCRIPT=$(find /ci/ -name "$PKG_SOURCE" -type d)/test.sh
+
+ if [ -f "$TEST_SCRIPT" ]; then
+ echo "Use package specific test.sh"
+ if sh "$TEST_SCRIPT" "$PKG_NAME" "$PKG_VERSION"; then
+ echo "Test successful"
+ else
+ echo "Test failed"
+ exit 1
+ fi
+ else
+ echo "No test.sh script available"
+ fi
+
+ opkg remove "$PKG_NAME" --force-removal-of-dependent-packages --force-remove
+done
--- /dev/null
+name: Test Formalities
+
+on:
+ pull_request:
+
+jobs:
+ build:
+ name: Test Formalities
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+
+ steps:
+ - uses: actions/checkout@v2
+ with:
+ ref: ${{ github.event.pull_request.head.sha }}
+ fetch-depth: 0
+
+ - name: Determine branch name
+ run: |
+ BRANCH="${GITHUB_BASE_REF#refs/heads/}"
+ echo "Building for $BRANCH"
+ echo "BRANCH=$BRANCH" >> $GITHUB_ENV
+
+ - name: Test formalities
+ run: |
+ source .github/workflows/ci_helpers.sh
+
+ RET=0
+ for commit in $(git rev-list HEAD ^origin/$BRANCH); do
+ info "=== Checking commit '$commit'"
+ if git show --format='%P' -s $commit | grep -qF ' '; then
+ err "Pull request should not include merge commits"
+ RET=1
+ fi
+
+ author="$(git show -s --format=%aN $commit)"
+ if echo $author | grep -q '\S\+\s\+\S\+'; then
+ success "Author name ($author) seems ok"
+ else
+ err "Author name ($author) need to be your real name 'firstname lastname'"
+ RET=1
+ fi
+
+ subject="$(git show -s --format=%s $commit)"
+ if echo "$subject" | grep -q -e '^[0-9A-Za-z,+/_-]\+: ' -e '^Revert '; then
+ success "Commit subject line seems ok ($subject)"
+ else
+ err "Commit subject line MUST start with '<package name>: ' ($subject)"
+ RET=1
+ fi
+
+ body="$(git show -s --format=%b $commit)"
+ sob="$(git show -s --format='Signed-off-by: %aN <%aE>' $commit)"
+ if echo "$body" | grep -qF "$sob"; then
+ success "Signed-off-by match author"
+ else
+ err "Signed-off-by is missing or doesn't match author (should be '$sob')"
+ RET=1
+ fi
+ done
+
+ exit $RET
--- /dev/null
+name: Test Build
+
+on:
+ pull_request:
+
+jobs:
+ build:
+ name: Test ${{ matrix.arch }}
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ matrix:
+ include:
+ - arch: arc_archs
+ target: archs38-generic
+ runtime_test: false
+
+ - arch: arm_cortex-a9_vfpv3-d16
+ target: mvebu-cortexa9
+ runtime_test: false
+
+ - arch: mips_24kc
+ target: ath79-generic
+ runtime_test: false
+
+ - arch: powerpc_464fp
+ target: apm821xx-nand
+ runtime_test: false
+
+ - arch: powerpc_8540
+ target: mpc85xx-p1010
+ runtime_test: false
+
+ - arch: aarch64_cortex-a53
+ target: mvebu-cortexa53
+ runtime_test: true
+
+ - arch: arm_cortex-a15_neon-vfpv4
+ target: armvirt-32
+ runtime_test: true
+
+ - arch: i386_pentium-mmx
+ target: x86-geode
+ runtime_test: true
+
+ - arch: x86_64
+ target: x86-64
+ runtime_test: true
+
+ steps:
+ - uses: actions/checkout@v2
+ with:
+ fetch-depth: 0
+
+ - name: Determine branch name
+ run: |
+ BRANCH="${GITHUB_BASE_REF#refs/heads/}"
+ echo "Building for $BRANCH"
+ echo "BRANCH=$BRANCH" >> $GITHUB_ENV
+
+ - name: Determine changed packages
+ run: |
+ # only detect packages with changes
+ PKG_ROOTS=$(find . -name Makefile | \
+ grep -v ".*/src/Makefile" | \
+ sed -e 's@./\(.*\)/Makefile@\1/@')
+ CHANGES=$(git diff --diff-filter=d --name-only origin/$BRANCH)
+
+ for ROOT in $PKG_ROOTS; do
+ for CHANGE in $CHANGES; do
+ if [[ "$CHANGE" == "$ROOT"* ]]; then
+ PACKAGES+=$(echo "$ROOT" | sed -e 's@.*/\(.*\)/@\1 @')
+ break
+ fi
+ done
+ done
+
+ # fallback to test packages if nothing explicitly changes this is
+ # should run if other mechanics in packages.git changed
+ PACKAGES="${PACKAGES:-vim attendedsysupgrade-common bmon}"
+
+ echo "Building $PACKAGES"
+ echo "PACKAGES=$PACKAGES" >> $GITHUB_ENV
+
+ - name: Build
+ uses: openwrt/gh-action-sdk@v1
+ env:
+ ARCH: ${{ matrix.arch }}-${{ env.BRANCH }}
+ FEEDNAME: packages_ci
+
+ - name: Move created packages to project dir
+ run: cp bin/packages/${{ matrix.arch }}/packages_ci/*.ipk . || true
+
+ - name: Store packages
+ uses: actions/upload-artifact@v2
+ with:
+ name: ${{ matrix.arch}}-packages
+ path: "*.ipk"
+
+ - name: Store logs
+ uses: actions/upload-artifact@v2
+ with:
+ name: ${{ matrix.arch}}-logs
+ path: logs/
+
+ - name: Remove logs
+ run: sudo rm -rf logs/ || true
+
+ - name: Register QEMU
+ if: ${{ matrix.runtime_test }}
+ run: |
+ sudo docker run --rm --privileged aptman/qus -s -- -p
+
+ - name: Build Docker container
+ if: ${{ matrix.runtime_test }}
+ run: |
+ docker build -t test-container --build-arg ARCH .github/workflows/
+ env:
+ ARCH: ${{ matrix.arch }}
+
+ - name: Test via Docker container
+ if: ${{ matrix.runtime_test }}
+ run: |
+ docker run --rm -v $GITHUB_WORKSPACE:/ci test-container