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:
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]
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 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: 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: 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 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: Fetch nuttx tags
run: |
cd nuttx
git fetch --tags
- 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: 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: Run Builds
run: |
git -C sources/nuttx fetch --tags
cd sources/testing
./cibuild.sh -i -x -G testlist/${{matrix.boards}}.dat