# Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # name: Build on: pull_request: paths-ignore: - 'Documentation/**' - 'tools/ci/docker/linux/**' push: paths-ignore: - 'Documentation/**' branches: - master - 'releases/*' tags: permissions: contents: read concurrency: group: build-${{ github.event.pull_request.number || github.ref }} cancel-in-progress: true jobs: Fetch-Source: runs-on: ubuntu-latest steps: - name: Determine Target Branches id: gittargets shell: bash run: | 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/nuttx") # OS echo "Triggered by change in OS" APPS_REF=$REF_NAME ;; "apache/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 "name=$OS_REF" >> $GITHUB_OUTPUT echo "app_ref=$APPS_REF" >> $GITHUB_OUTPUT - name: Checkout nuttx repo uses: actions/checkout@v4 with: repository: apache/nuttx ref: ${{ steps.gittargets.outputs.os_ref }} path: sources/nuttx fetch-depth: 1 - name: Checkout nuttx repo tags run: git -C sources/nuttx fetch --tags - name: Checkout apps repo uses: actions/checkout@v4 with: repository: apache/nuttx-apps ref: ${{ steps.gittargets.outputs.apps_ref }} path: sources/apps fetch-depth: 1 - name: Tar sources run: tar zcf sources.tar.gz sources - name: Archive Source Bundle uses: actions/upload-artifact@v4 with: name: source-bundle path: sources.tar.gz Linux: needs: Fetch-Source runs-on: ubuntu-latest env: DOCKER_BUILDKIT: 1 strategy: max-parallel: 12 matrix: boards: [ arm-01, other, risc-v-01, sim-01, xtensa-01, arm-02, risc-v-02, sim-02, xtensa-02, arm-03, arm-04, arm-05, arm-06, arm-07, arm-08, arm-09, arm-10, arm-11, arm-12, arm-13 ] steps: - name: Download Source Artifact uses: actions/download-artifact@v4 with: name: source-bundle path: . - name: Extract sources run: tar zxf sources.tar.gz - name: Docker Login uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Docker Pull run: docker pull ghcr.io/apache/nuttx/apache-nuttx-ci-linux - name: Export NuttX Repo SHA run: echo "nuttx_sha=`git -C sources/nuttx rev-parse HEAD`" >> $GITHUB_ENV - name: Run builds uses: ./sources/nuttx/.github/actions/ci-container env: BLOBDIR: /tools/blobs with: run: | echo "::add-matcher::sources/nuttx/.github/gcc.json" export ARTIFACTDIR=`pwd`/buildartifacts git config --global --add safe.directory /github/workspace/sources/nuttx git config --global --add safe.directory /github/workspace/sources/apps cd sources/nuttx/tools/ci if [ "X${{matrix.boards}}" = "Xcodechecker" ]; then ./cibuild.sh -c -A -N -R --codechecker testlist/${{matrix.boards}}.dat else ./cibuild.sh -c -A -N -R -S testlist/${{matrix.boards}}.dat fi - uses: actions/upload-artifact@v4 if: ${{ always() }} with: name: linux-${{matrix.boards}}-builds path: buildartifacts/ continue-on-error: true macOS: permissions: contents: none runs-on: macos-13 needs: Fetch-Source strategy: max-parallel: 2 matrix: boards: [macos, sim-01, sim-02] steps: - name: Download Source Artifact uses: actions/download-artifact@v4 with: name: source-bundle path: . - name: Extract sources run: tar zxf sources.tar.gz - name: Restore Tools Cache id: cache-tools uses: actions/cache@v4 env: cache-name: ${{ runner.os }}-cache-tools with: path: ./sources/tools key: ${{ runner.os }}-tools-${{ hashFiles('./sources/nuttx/tools/ci/platforms/darwin.sh') }} - name: Export NuttX Repo SHA run: echo "nuttx_sha=`git -C sources/nuttx rev-parse HEAD`" >> $GITHUB_ENV # Released version of Cython has issues with Python 11. Set runner to use Python 3.10 # https://github.com/cython/cython/issues/4500 - uses: actions/setup-python@v5 with: python-version: '3.10' - name: Run Builds run: | echo "::add-matcher::sources/nuttx/.github/gcc.json" export ARTIFACTDIR=`pwd`/buildartifacts cd sources/nuttx/tools/ci ./cibuild.sh -i -c -A -R testlist/${{matrix.boards}}.dat - uses: actions/upload-artifact@v4 with: name: macos-${{matrix.boards}}-builds path: buildartifacts/ continue-on-error: true msys2: needs: Fetch-Source runs-on: windows-latest strategy: fail-fast: false max-parallel: 1 matrix: boards: [msys2] defaults: run: shell: msys2 {0} steps: - uses: actions/checkout@v4 - uses: msys2/setup-msys2@v2 with: msystem: MSYS update: false install: >- base-devel gcc gperf automake autoconf git python3 ncurses-devel unzip zip tio zlib-devel cmake ninja python-pip vim - name: pip3 install run: | python3 -m venv --system-site-packages /usr/local pip3 install --root-user-action=ignore --no-cache-dir pyelftools cxxfilt kconfiglib - run: git config --global core.autocrlf false - name: Download Source Artifact uses: actions/download-artifact@v4 with: name: source-bundle path: . - name: Extract sources run: tar zxf sources.tar.gz - name: Export NuttX Repo SHA run: echo "nuttx_sha=`git -C sources/nuttx rev-parse HEAD`" >> $GITHUB_ENV - name: Run Builds run: | echo "::add-matcher::sources/nuttx/.github/gcc.json" export ARTIFACTDIR=`pwd`/buildartifacts git config --global --add safe.directory /github/workspace/sources/nuttx git config --global --add safe.directory /github/workspace/sources/apps cd sources/nuttx/tools/ci ./cibuild.sh -g -i -A -C -N -R testlist/${{matrix.boards}}.dat - uses: actions/upload-artifact@v4 with: name: msys2-${{matrix.boards}}-builds path: buildartifacts/ continue-on-error: true