CI: Add logic for determining which branches of OS App and Testing repos should be used

This commit is contained in:
Brennan Ashton 2020-04-23 00:40:21 -07:00 committed by Xiang Xiao
parent fe0ba38580
commit 63b3737b77

View File

@ -14,109 +14,201 @@ name: Build
on: on:
pull_request: pull_request:
push:
branches:
- master
- 'releases/*'
tags:
jobs: 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: Linux:
runs-on: ubuntu-18.04 needs: Fetch-Source
runs-on: ubuntu-latest
env: env:
DOCKER_BUILDKIT: 1 DOCKER_BUILDKIT: 1
strategy: strategy:
matrix: 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] 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: steps:
- name: Checkout nuttx repo - name: Fetch Cached Source
uses: actions/checkout@v2 id: cache-source
with: uses: actions/cache@v1
repository: apache/incubator-nuttx with:
path: nuttx path: sources-cache
fetch-depth: 0 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: Fetch nuttx tags - name: Docker Login
run: | uses: azure/docker-login@v1
cd nuttx with:
git fetch --tags login-server: docker.pkg.github.com
username: ${GITHUB_ACTOR}
- name: Checkout apps repo password: ${{ secrets.GITHUB_TOKEN }}
uses: actions/checkout@v2
with: - name: Docker Pull
repository: apache/incubator-nuttx-apps uses: nick-invision/retry@v1
path: apps with:
fetch-depth: 0 timeout_minutes: 10
max_attempts: 3
- name: Checkout testing repo retry_wait_seconds: 10
uses: actions/checkout@v2 command: docker pull docker.pkg.github.com/apache/incubator-nuttx-testing/nuttx-ci-linux
with:
repository: apache/incubator-nuttx-testing - name: Run builds
path: testing uses: ./sources/testing/.github/actions/ci-container
env:
- name: Docker Login BLOBDIR: /tools/blobs
uses: azure/docker-login@v1 with:
with: run: |
login-server: docker.pkg.github.com git -C sources/nuttx fetch --tags
username: ${GITHUB_ACTOR} cd sources/testing
password: ${{ secrets.GITHUB_TOKEN }} ./cibuild.sh -x -G testlist/${{matrix.boards}}.dat
- 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
macOS: macOS:
runs-on: macos-10.15 runs-on: macos-10.15
needs: Fetch-Source
strategy: strategy:
matrix: matrix:
boards: [arm-12, mips-riscv-x86-xtensa, sim] boards: [arm-12, mips-riscv-x86-xtensa, sim]
steps: steps:
- name: Checkout nuttx repo - name: Fetch Cached Source
uses: actions/checkout@v2 id: cache-source
with: uses: actions/cache@v1
repository: apache/incubator-nuttx with:
path: nuttx path: sources-cache
fetch-depth: 0 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: Fetch nuttx tags - name: Restore Tools Cache
run: | id: cache-tools
cd nuttx uses: actions/cache@v1
git fetch --tags env:
cache-name: ${{ runner.os }}-cache-tools
with:
path: prebuilt
key: ${{ runner.os }}-tools-${{ hashFiles('./sources/testing/cibuild.sh') }}
- name: Checkout apps repo - name: Run Builds
uses: actions/checkout@v2 run: |
with: git -C sources/nuttx fetch --tags
repository: apache/incubator-nuttx-apps cd sources/testing
path: apps ./cibuild.sh -i -x -G testlist/${{matrix.boards}}.dat
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