Skip to content

Commit

Permalink
WIP: Add Cygwin to CI
Browse files Browse the repository at this point in the history
  • Loading branch information
btashton committed Apr 28, 2020
1 parent a288ed4 commit b1771fa
Show file tree
Hide file tree
Showing 2 changed files with 267 additions and 88 deletions.
339 changes: 251 additions & 88 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,107 +16,270 @@ on:
pull_request:

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
- 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: 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: 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
Cygwin:
runs-on: windows-latest
needs: Fetch-Source
strategy:
matrix:
boards: [sim-cygwin.dat]
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: Write Cygwin Package List # Needed for cache key hash
shell: bash
run: |
echo -n "\
make gcc-core gcc-g++ flex git bison byacc gperf gdb unzip awk automake-1.15 autoconf wget xxd
libmpc-devel libncurses-devel libmpfr-devel zlib-devel" > cyg-requirements
# Cache is disabled here because cache breaks symlinks on Windows (https://github.com/actions/cache/issues/120)
# - name: Cached Cygwin
# id: cache-cygwin
# uses: actions/cache@v1
# with:
# path: C:\tools\cygwin\
# key: cygwin-3.1.4-${{ hashFiles('cyg-requirements') }}
- name: Checkout tools repo
run: |
git config --global core.autocrlf false # We don't want CR to be added to the files
git clone --depth 1 https://bitbucket.org/nuttx/tools.git sources/tools
- name: Install cygwin base packages with chocolatey
# if: steps.cache-cygwin.outputs.cache-hit != 'true'
shell: pwsh
run: |
choco install --no-progress cygwin --version 3.1.4
choco install cyg-get
- name: Install NuutX Build Requirements for Cygwin
# if: steps.cache-cygwin.outputs.cache-hit != 'true'
shell: pwsh
run: |
cyg-get (Get-Content cyg-requirements)
- name: Set ENV
run: |
echo '::set-env name=PATH::C:\tools\cygwin\bin;C:\tools\cygwin\usr\bin'
- name: Build CI Tools
shell: cmd
run: |
C:\tools\cygwin\bin\bash.exe --noprofile --norc -e -o pipefail -c "cd sources/testing && mkdir ../prebuilt && install=\"kconfig-frontends gen-romfs\" ./cibuild.sh -i"
- name: Fetch Git Tags
run: |
git -C sources/nuttx fetch --tags
- name: Reset git repos from Linux cache
shell: cmd
run: |
C:\tools\cygwin\bin\bash.exe --noprofile --norc -e -o pipefail -c "cd sources/nuttx && git rm --cached -r . && git reset --hard"
C:\tools\cygwin\bin\bash.exe --noprofile --norc -e -o pipefail -c "cd sources/apps && git rm --cached -r . && git reset --hard"
- name: Run Builds
shell: cmd
run: |
C:\tools\cygwin\bin\bash.exe --noprofile --norc -e -o pipefail -c "cd sources/testing && export PATH=$PATH:`pwd`/../prebuilt/kconfig-frontends/bin:`pwd`/../prebuilt/genromfs/usr/bin && ../nuttx/tools/testbuild.sh -c -x -G -j 2 -e \"-Wno-cpp -Werror\" testlist/${{matrix.boards}}.dat"
16 changes: 16 additions & 0 deletions testlist/sim-cygwin.dat
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
/sim
-sim:cxxtest
-sim:nxwm
-sim:rpproxy
-sim:rpserver

# X11
-sim:nxlines
-sim:touchscreen
-sim:nx11
-sim:nsh2

# Network Issues
-sim:module
-sim:nettest
-sim:tcpblaster

0 comments on commit b1771fa

Please sign in to comment.