You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by gn...@apache.org on 2020/04/23 23:04:45 UTC

[incubator-nuttx] 05/05: CI: Add logic for determining which branches of OS App and Testing repos should be used

This is an automated email from the ASF dual-hosted git repository.

gnutt pushed a commit to branch releases/9.0
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git

commit ca367a259b89a1d289e15f9fdbb6e16c2d41471e
Author: Brennan Ashton <ba...@brennanashton.com>
AuthorDate: Thu Apr 23 00:40:21 2020 -0700

    CI: Add logic for determining which branches of OS App and Testing repos should be used
---
 .github/workflows/build.yml | 272 +++++++++++++++++++++++++++++---------------
 1 file changed, 182 insertions(+), 90 deletions(-)

diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 625ca99..d59c9e0 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -14,109 +14,201 @@ 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:
-    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
+        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] 
 
-    - 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
+    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: 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: 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: 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