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: mipsel_24kc target: mt7621 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@v4 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: Collect metadata run: | MERGE_ID=$(git rev-parse --short HEAD) echo "MERGE_ID=$MERGE_ID" >> $GITHUB_ENV echo "BASE_ID=$(git rev-parse --short HEAD^1)" >> $GITHUB_ENV echo "HEAD_ID=$(git rev-parse --short HEAD^2)" >> $GITHUB_ENV PRNUMBER=${GITHUB_REF_NAME%/merge} echo "PRNUMBER=$PRNUMBER" >> $GITHUB_ENV echo "ARCHIVE_NAME=${{matrix.arch}}-PR$PRNUMBER-$MERGE_ID" >> $GITHUB_ENV - name: Generate metadata run: | cat << _EOF_ > PKG-INFO Metadata-Version: 2.1 Name: ${{env.ARCHIVE_NAME}} Version: $BRANCH Author: $GITHUB_ACTOR Home-page: $GITHUB_SERVER_URL/$GITHUB_REPOSITORY/pull/$PRNUMBER Download-URL: $GITHUB_SERVER_URL/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID Summary: $PACKAGES Platform: ${{ matrix.arch }} Packages for OpenWrt $BRANCH running on ${{matrix.arch}}, built from PR $PRNUMBER at commit $HEAD_ID, against $BRANCH at commit $BASE_ID, with merge SHA $MERGE_ID. Modified packages: _EOF_ for p in $PACKAGES do echo " "$p >> PKG-INFO done echo >> PKG-INFO echo Full file listing: >> PKG-INFO ls -al *.ipk >> PKG-INFO || true cat PKG-INFO - name: Store packages uses: actions/upload-artifact@v2 with: name: ${{env.ARCHIVE_NAME}}-packages path: | *.ipk PKG-INFO - name: Store logs uses: actions/upload-artifact@v2 with: name: ${{env.ARCHIVE_NAME}}-logs path: | logs/ PKG-INFO - 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 }}-${{ env.BRANCH }} - name: Test via Docker container if: ${{ matrix.runtime_test }} run: | docker run --rm -v $GITHUB_WORKSPACE:/ci test-container