From b1771fa9535a7898ba611e0c1c2c34c556763e21 Mon Sep 17 00:00:00 2001 From: Brennan Ashton Date: Mon, 27 Apr 2020 23:26:56 -0700 Subject: [PATCH] WIP: Add Cygwin to CI --- .github/workflows/build.yml | 339 ++++++++++++++++++++++++++---------- testlist/sim-cygwin.dat | 16 ++ 2 files changed, 267 insertions(+), 88 deletions(-) create mode 100644 testlist/sim-cygwin.dat diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 625ca99..ce67ba6 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -16,107 +16,270 @@ on: pull_request: jobs: + Fetch-Source: + runs-on: ubuntu-latest + steps: + - name: Determine Target Branches + id: gittargets + shell: bash + run: | + TESTING_REF="master" # Always use master for testing + OS_REF="" + APPS_REF="" + + REF=$GITHUB_REF + + # If a base ref is set this is a PR and we will want to use + # the base ref instead of the ref that triggered the event + if [ ${GITHUB_BASE_REF} ]; then + REF=refs/heads/$GITHUB_BASE_REF + fi + + echo "Working with ref: $REF" + + # We modify for all tags and release branches + if [[ $REF =~ refs/heads/releases/*|refs/tags/* ]]; then + if [[ $REF =~ refs/heads/* ]] + then + REF_NAME=${REF##refs/heads/} + echo "Working with a branch: $REF_NAME" + else + REF_NAME=${REF##refs/tags/} + echo "Working with a tag: $REF_NAME" + fi + + # Determine the repo and leave that unset to use the normal checkout behavior + # of using the merge commit instead of HEAD + case $GITHUB_REPOSITORY in + "apache/incubator-nuttx") + # OS + echo "Triggered by change in OS" + APPS_REF=$REF_NAME + ;; + + "apache/incubator-nuttx-apps" ) + # APPS + OS_REF=$REF_NAME + echo "Triggered by change in APPS" + ;; + + *) + echo "Trigger by change on $GITHUB_REPOSITORY. This is unexpected." + ;; + esac + fi + + echo ::set-output name=os_ref::$OS_REF + echo ::set-output name=apps_ref::$APPS_REF + echo ::set-output name=testing_ref::$TESTING_REF + + - name: Checkout nuttx repo + uses: actions/checkout@v2 + with: + repository: apache/incubator-nuttx + ref: ${{ steps.gittargets.outputs.os_ref }} + path: sources/nuttx + fetch-depth: 1 + + - name: Checkout apps repo + uses: actions/checkout@v2 + with: + repository: apache/incubator-nuttx-apps + ref: ${{ steps.gittargets.outputs.apps_ref }} + path: sources/apps + fetch-depth: 1 + + - name: Checkout testing repo + uses: actions/checkout@v2 + with: + repository: apache/incubator-nuttx-testing + ref: ${{ steps.gittargets.outputs.testing_ref }} + path: sources/testing + fetch-depth: 1 + + - name: Create Source Bundle + run: tar -czf sources.tar.gz sources + - name: Archive Source Bundle + uses: actions/upload-artifact@v1 + with: + name: source-bundle + path: sources.tar.gz + + - name: Cache Source + id: cache-source + uses: actions/cache@v1 + with: + path: sources + key: build-sources-${{ github.run_id }} + Linux: - runs-on: ubuntu-18.04 + needs: Fetch-Source + runs-on: ubuntu-latest env: DOCKER_BUILDKIT: 1 strategy: matrix: boards: [arm-01, arm-02, arm-03, arm-04, arm-05, arm-06, arm-07, arm-08, arm-09, arm-10, arm-11, arm-12, arm-13, mips-riscv-x86-xtensa, sim] + steps: - - name: Checkout nuttx repo - uses: actions/checkout@v2 - with: - repository: apache/incubator-nuttx - path: nuttx - fetch-depth: 0 - - - name: Fetch nuttx tags - run: | - cd nuttx - git fetch --tags - - - name: Checkout apps repo - uses: actions/checkout@v2 - with: - repository: apache/incubator-nuttx-apps - path: apps - fetch-depth: 0 - - - name: Checkout testing repo - uses: actions/checkout@v2 - with: - repository: apache/incubator-nuttx-testing - path: testing - - - name: Docker Login - uses: azure/docker-login@v1 - with: - login-server: docker.pkg.github.com - username: ${GITHUB_ACTOR} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Docker Pull - uses: nick-invision/retry@v1 - with: - timeout_minutes: 10 - max_attempts: 3 - retry_wait_seconds: 10 - command: docker pull docker.pkg.github.com/apache/incubator-nuttx-testing/nuttx-ci-linux - - - name: Run builds - uses: ./testing/.github/actions/ci-container - env: - BLOBDIR: /tools/blobs - with: - run: | - cd testing - ./cibuild.sh -x -G testlist/${{matrix.boards}}.dat + - name: Fetch Cached Source + id: cache-source + uses: actions/cache@v1 + with: + path: sources-cache + key: build-sources-${{ github.run_id }} + - name: Prevent Updating Source Cache + if: steps.cache-source.outputs.cache-hit == 'true' + run: mv sources-cache sources + - name: Download Source Artifact + if: steps.cache-source.outputs.cache-hit != 'true' + uses: actions/download-artifact@v1 + with: + name: source-bundle + path: ./ + - name: Extract Source Artifact + if: steps.cache-source.outputs.cache-hit != 'true' + run: tar -xf sources.tar.gz + + - name: Docker Login + uses: azure/docker-login@v1 + with: + login-server: docker.pkg.github.com + username: ${GITHUB_ACTOR} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Docker Pull + uses: nick-invision/retry@v1 + with: + timeout_minutes: 10 + max_attempts: 3 + retry_wait_seconds: 10 + command: docker pull docker.pkg.github.com/apache/incubator-nuttx-testing/nuttx-ci-linux + + - name: Run builds + uses: ./sources/testing/.github/actions/ci-container + env: + BLOBDIR: /tools/blobs + with: + run: | + git -C sources/nuttx fetch --tags + cd sources/testing + ./cibuild.sh -x -G testlist/${{matrix.boards}}.dat macOS: runs-on: macos-10.15 - + needs: Fetch-Source strategy: matrix: boards: [arm-12, mips-riscv-x86-xtensa, sim] + steps: + - name: Fetch Cached Source + id: cache-source + uses: actions/cache@v1 + with: + path: sources-cache + key: build-sources-${{ github.run_id }} + - name: Prevent Updating Source Cache + if: steps.cache-source.outputs.cache-hit == 'true' + run: mv sources-cache sources + - name: Download Source Artifact + if: steps.cache-source.outputs.cache-hit != 'true' + uses: actions/download-artifact@v1 + with: + name: source-bundle + path: ./ + - name: Extract Source Artifact + if: steps.cache-source.outputs.cache-hit != 'true' + run: tar -xf sources.tar.gz + + - name: Restore Tools Cache + id: cache-tools + uses: actions/cache@v1 + env: + cache-name: ${{ runner.os }}-cache-tools + with: + path: prebuilt + key: ${{ runner.os }}-tools-${{ hashFiles('./sources/testing/cibuild.sh') }} + + - name: Run Builds + run: | + git -C sources/nuttx fetch --tags + cd sources/testing + ./cibuild.sh -i -x -G testlist/${{matrix.boards}}.dat + Cygwin: + runs-on: windows-latest + needs: Fetch-Source + strategy: + matrix: + boards: [sim-cygwin.dat] steps: - - name: Checkout nuttx repo - uses: actions/checkout@v2 - with: - repository: apache/incubator-nuttx - path: nuttx - fetch-depth: 0 - - - name: Fetch nuttx tags - run: | - cd nuttx - git fetch --tags - - - name: Checkout apps repo - uses: actions/checkout@v2 - with: - repository: apache/incubator-nuttx-apps - path: apps - fetch-depth: 0 - - - name: Checkout testing repo - uses: actions/checkout@v2 - with: - repository: apache/incubator-nuttx-testing - path: testing - - - name: Restore cache - id: cache-tools - uses: actions/cache@v1 - env: - cache-name: ${{ runner.os }}-cache-tools - with: - path: prebuilt - key: ${{ runner.os }}-tools-${{ hashFiles('./testing/cibuild.sh') }} - - - name: Run builds - run: | - cd testing - ./cibuild.sh -i -x -G testlist/${{matrix.boards}}.dat + - name: Fetch Cached Source + id: cache-source + uses: actions/cache@v1 + with: + path: sources-cache + key: build-sources-${{ github.run_id }} + - name: Prevent Updating Source Cache + if: steps.cache-source.outputs.cache-hit == 'true' + run: mv sources-cache sources + - name: Download Source Artifact + if: steps.cache-source.outputs.cache-hit != 'true' + uses: actions/download-artifact@v1 + with: + name: source-bundle + path: ./ + - name: Extract Source Artifact + if: steps.cache-source.outputs.cache-hit != 'true' + run: tar -xf sources.tar.gz + + - name: Write Cygwin Package List # Needed for cache key hash + shell: bash + run: | + echo -n "\ + make gcc-core gcc-g++ flex git bison byacc gperf gdb unzip awk automake-1.15 autoconf wget xxd + libmpc-devel libncurses-devel libmpfr-devel zlib-devel" > cyg-requirements + +# Cache is disabled here because cache breaks symlinks on Windows (https://github.com/actions/cache/issues/120) +# - name: Cached Cygwin +# id: cache-cygwin +# uses: actions/cache@v1 +# with: +# path: C:\tools\cygwin\ +# key: cygwin-3.1.4-${{ hashFiles('cyg-requirements') }} + - name: Checkout tools repo + run: | + git config --global core.autocrlf false # We don't want CR to be added to the files + git clone --depth 1 https://bitbucket.org/nuttx/tools.git sources/tools + - name: Install cygwin base packages with chocolatey +# if: steps.cache-cygwin.outputs.cache-hit != 'true' + shell: pwsh + run: | + choco install --no-progress cygwin --version 3.1.4 + choco install cyg-get + - name: Install NuutX Build Requirements for Cygwin +# if: steps.cache-cygwin.outputs.cache-hit != 'true' + shell: pwsh + run: | + cyg-get (Get-Content cyg-requirements) + - name: Set ENV + run: | + echo '::set-env name=PATH::C:\tools\cygwin\bin;C:\tools\cygwin\usr\bin' + + - name: Build CI Tools + shell: cmd + run: | + C:\tools\cygwin\bin\bash.exe --noprofile --norc -e -o pipefail -c "cd sources/testing && mkdir ../prebuilt && install=\"kconfig-frontends gen-romfs\" ./cibuild.sh -i" + - name: Fetch Git Tags + run: | + git -C sources/nuttx fetch --tags + - name: Reset git repos from Linux cache + shell: cmd + run: | + C:\tools\cygwin\bin\bash.exe --noprofile --norc -e -o pipefail -c "cd sources/nuttx && git rm --cached -r . && git reset --hard" + C:\tools\cygwin\bin\bash.exe --noprofile --norc -e -o pipefail -c "cd sources/apps && git rm --cached -r . && git reset --hard" + - name: Run Builds + shell: cmd + run: | + C:\tools\cygwin\bin\bash.exe --noprofile --norc -e -o pipefail -c "cd sources/testing && export PATH=$PATH:`pwd`/../prebuilt/kconfig-frontends/bin:`pwd`/../prebuilt/genromfs/usr/bin && ../nuttx/tools/testbuild.sh -c -x -G -j 2 -e \"-Wno-cpp -Werror\" testlist/${{matrix.boards}}.dat" diff --git a/testlist/sim-cygwin.dat b/testlist/sim-cygwin.dat new file mode 100644 index 0000000..f5f0146 --- /dev/null +++ b/testlist/sim-cygwin.dat @@ -0,0 +1,16 @@ +/sim +-sim:cxxtest +-sim:nxwm +-sim:rpproxy +-sim:rpserver + +# X11 +-sim:nxlines +-sim:touchscreen +-sim:nx11 +-sim:nsh2 + +# Network Issues +-sim:module +-sim:nettest +-sim:tcpblaster \ No newline at end of file