# 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: push: branches: - master - 'releases/*' tags: 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: 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: 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: Export NuttX Repo SHA run: echo "::set-env name=nuttx_sha::`git -C sources/nuttx rev-parse HEAD`" - name: Refresh Git Credentials uses: actions/checkout@v2 with: repository: apache/incubator-nuttx ref: ${{ env.nuttx_sha }} path: sources/nuttx fetch-depth: 1 - name: Get Tags for NuttX Repo run: git -C sources/nuttx fetch --tags - name: Run builds uses: ./sources/testing/.github/actions/ci-container env: BLOBDIR: /tools/blobs with: run: | cd sources/testing ./cibuild.sh -x 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: Export NuttX Repo SHA run: echo "::set-env name=nuttx_sha::`git -C sources/nuttx rev-parse HEAD`" - name: Refresh Git Credentials uses: actions/checkout@v2 with: repository: apache/incubator-nuttx ref: ${{ env.nuttx_sha }} path: sources/nuttx fetch-depth: 1 - name: Get Tags for NuttX Repo run: git -C sources/nuttx fetch --tags - name: Run Builds run: | cd sources/testing ./cibuild.sh -i -x testlist/${{matrix.boards}}.dat