n2n/.github/workflows/tests.yml
Hamish Coleman 71521b81d8 Only trigger release process on annotated tags
Annotated tags are meant for releases while lightweight tags are meant
for private or temporary object labels.

For this reason, we should not trigger the automatic release actions
unless we have an annotated tag.
2021-10-31 11:36:29 +00:00

523 lines
12 KiB
YAML

---
name: Testing
# yamllint disable-line rule:truthy
on:
push:
pull_request:
jobs:
smoketest:
name: Smoke test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Run minimal test set
run: |
./autogen.sh
./configure
make test
lint:
name: Code syntax
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Make the makefiles
run: |
./autogen.sh
./configure
- name: Install essential
run: |
make build-dep
- name: Run the lint tools
run: |
make lint
test_linux:
needs: smoketest
name: Test Linux
runs-on: ${{ matrix.os }}
strategy:
fail-fast: true
matrix:
os:
- ubuntu-20.04
- ubuntu-18.04
steps:
- uses: actions/checkout@v2
- name: Install essential
run: |
sudo apt-get update
sudo apt-get install build-essential
- name: generate a makefile and use it to install more packages
run: |
./autogen.sh
./configure
make build-dep
shell: bash
- name: Run the real configure step
run: |
export CFLAGS="-fprofile-arcs -ftest-coverage"
export LDFLAGS="--coverage"
./configure --with-zstd
shell: bash
- name: Run embedded tests
run: make test
shell: bash
- if: ${{ always() }}
name: Move test outputs to an arch specific location
shell: bash
run: |
mkdir -p tests/${{ matrix.os }}
mv tests/*.out tests/${{ matrix.os }}
- if: ${{ always() }}
name: Upload tests output
uses: actions/upload-artifact@v2
with:
name: tests-out
path: tests
- name: Generate coverage reports
run: |
make gcov
make cover COVERAGEDIR=coverage/${{ matrix.os }}
shell: bash
- name: Upload gcovr report artifact
uses: actions/upload-artifact@v2
with:
name: coverage
path: coverage
- name: Upload data to codecov
uses: codecov/codecov-action@v2
test_macos:
needs: smoketest
name: Test MacOS
runs-on: ${{ matrix.os }}
strategy:
fail-fast: true
matrix:
os:
- macos-10.15
- macos-11
steps:
- uses: actions/checkout@v2
- name: Install packages
run: |
brew install automake
- name: generate a makefile and use it to install more packages
run: |
./autogen.sh
./configure
make build-dep
shell: bash
- name: Run the real configure step
run: |
export CFLAGS="-fprofile-arcs -ftest-coverage"
export LDFLAGS="--coverage"
./configure --with-zstd
shell: bash
- name: Run embedded tests
run: make test
shell: bash
- if: ${{ always() }}
name: Move test outputs to an arch specific location
shell: bash
run: |
mkdir -p tests/${{ matrix.os }}
mv tests/*.out tests/${{ matrix.os }}
- if: ${{ always() }}
name: Upload tests output
uses: actions/upload-artifact@v2
with:
name: tests-out
path: tests
- name: Generate coverage reports
run: |
make gcov
# This was working fine for tens of jobs, up until
# 2021-10-19T18:53+0100 and it still works fine when run from my
# personal github actions. The next run at 2021-10-19T19:08+0100
# didnt work.
# Assume that they changed something on the runner - I cannot debug
# it as I do not have a Mac.
#
# make cover COVERAGEDIR=coverage/${{ matrix.os }}
shell: bash
# - name: Upload gcovr report artifact
# uses: actions/upload-artifact@v2
# with:
# name: coverage
# path: coverage
- name: Upload data to codecov
uses: codecov/codecov-action@v2
test_windows:
needs: smoketest
name: Test Windows
runs-on: ${{ matrix.os }}
strategy:
fail-fast: true
matrix:
os:
- windows-2016
- windows-2019
- windows-2022
steps:
- uses: actions/checkout@v2
- name: generate a makefile and use it to install more packages
run: |
# This is a pretty big hammer, but gets the windows compile moving
./scripts/hack_fakeautoconf.sh
make build-dep
shell: bash
- name: Run a configure step
run: |
export CFLAGS="-fprofile-arcs -ftest-coverage"
export LDFLAGS="--coverage"
./scripts/hack_fakeautoconf.sh
shell: bash
- name: Run embedded tests
run: make test
shell: bash
- if: ${{ always() }}
name: Move test outputs to an arch specific location
shell: bash
run: |
mkdir -p tests/${{ matrix.os }}
mv tests/*.out tests/${{ matrix.os }}
- if: ${{ always() }}
name: Upload tests output
uses: actions/upload-artifact@v2
with:
name: tests-out
path: tests
- name: Generate coverage data
run: |
make gcov
shell: bash
- name: Upload data to codecov
uses: codecov/codecov-action@v2
package_dpkg:
name: Package for Debian/Ubuntu
needs:
- test_linux
runs-on: ubuntu-latest
strategy:
fail-fast: true
matrix:
arch:
- amd64
- arm64
- armhf
- i386
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Install packages needed for build
run: |
sudo apt-get update
sudo apt-get install debhelper build-essential \
crossbuild-essential-${{ matrix.arch }}
- name: Configure
# The HOST_TRIPLET line is not easily foldable
# yamllint disable rule:line-length
run: |
# This will warn about CC, but we cannot set CC until we run it :-S
HOST_TRIPLET=$(dpkg-architecture -a${{ matrix.arch }} -q DEB_HOST_GNU_TYPE)
export CC=$HOST_TRIPLET-gcc
export AR=$HOST_TRIPLET-ar
./autogen.sh
./configure --host $HOST_TRIPLET
cd packages/debian/
./configure EXTN=${{ matrix.arch }}
# yamllint enable rule:line-length
- name: Build
run: |
cd packages/debian/
make
- name: Upload dpkg
uses: actions/upload-artifact@v2
with:
name: packages-dpkg
path: packages/debian/*.deb
package_rpm:
name: Package for Redhat/RPM
needs:
- test_linux
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Install packages needed for build
run: |
sudo apt-get install rpm
- name: Configure
run: |
./autogen.sh
./configure
cd packages/rpm/
./configure
- name: Build
run: |
make
HOME=$(pwd)/../
cd packages/rpm/
make
cd ../../
mv ../rpmbuild ./
- name: Upload rpm
uses: actions/upload-artifact@v2
with:
name: packages-rpm
path: rpmbuild/RPMS/x86_64/*.rpm
binaries_windows:
name: Binaries for Windows (x86_64-pc-mingw64)
needs:
- test_windows
runs-on: windows-latest
steps:
- uses: actions/checkout@v2
- name: Configure and Build
shell: bash
run: |
./scripts/hack_fakeautoconf.sh
make
- name: Create binary dir
shell: bash
run: |
make install DESTDIR=binaries/x86_64-pc-mingw64
- name: Upload binary artifacts
uses: actions/upload-artifact@v2
with:
name: binaries
path: binaries
binaries_macos:
name: Binaries for MacOS
needs:
- test_macos
runs-on: macos-latest
strategy:
fail-fast: true
matrix:
arch:
- x86_64-apple-macos
- arm64-apple-macos
steps:
- uses: actions/checkout@v2
- name: Install packages needed for build
run: |
brew install automake
- name: Configure and Build
shell: bash
run: |
# this is a hack! it assumes the default SDK is the 'right' one
export SDKROOT=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
./autogen.sh
export CC=clang
export CFLAGS="-target ${{ matrix.arch }}"
export LDFLAGS="-target ${{ matrix.arch }}"
./configure --host=${{ matrix.arch }}
make
- if: ${{ failure() }}
name: Upload config.log output
uses: actions/upload-artifact@v2
with:
name: config-log-${{ matrix.arch }}
path: config.log
- name: Create binary dir
shell: bash
run: |
make install DESTDIR=binaries/${{ matrix.arch }}
- name: Upload binary artifacts
uses: actions/upload-artifact@v2
with:
name: binaries
path: binaries
binaries_macos_universal:
name: Binaries for MacOS (universal arch)
needs:
- test_macos
runs-on: macos-latest
steps:
- uses: actions/checkout@v2
- name: Install packages needed for build
run: |
brew install automake
- name: Configure and Build
shell: bash
run: |
# this is a hack! it assumes the default SDK is the 'right' one
export SDKROOT=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
./autogen.sh
export CC=clang
export CFLAGS="-arch x86_64 -arch arm64"
export LDFLAGS="-arch x86_64 -arch arm64"
./configure
make
- name: Create binary dir
shell: bash
run: |
make install DESTDIR=binaries/universal-apple-darwin
- name: Upload binary artifacts
uses: actions/upload-artifact@v2
with:
name: binaries
path: binaries
binaries_linux_crosscompile:
name: Binaries for linux
needs:
- test_linux
runs-on: ubuntu-latest
strategy:
fail-fast: true
matrix:
arch:
- arm-linux-gnueabi
# I assume these architectures produce working code, but this has
# not been directly confirmed.
# They are compiled dynamically against normal libc, so will not
# work on openwrt.
- aarch64-linux-gnu
- mips-linux-gnu
- mipsel-linux-gnu
steps:
- uses: actions/checkout@v2
- name: Install cross compiler
run: |
sudo apt-get update
sudo apt-get install \
binutils-${{ matrix.arch }} \
gcc-${{ matrix.arch }}
- name: Configure and Build
shell: bash
run: |
./autogen.sh
export CC=${{ matrix.arch }}-gcc
export AR=${{ matrix.arch }}-ar
./configure --host ${{ matrix.arch }}
make
- name: Create binary dir
shell: bash
run: |
make install DESTDIR=binaries/${{ matrix.arch }}
- name: Upload binary artifacts
uses: actions/upload-artifact@v2
with:
name: binaries
path: binaries
# Given the clearly documented use of annotated tags to signal releases,
# it seems strange that there is no simple way to trigger actions if the
# tag is annotated. So we need to jump through some hoops.
#
get_tagtype:
name: Get the type of Tag
if: startsWith(github.ref, 'refs/tags/')
needs:
- package_dpkg
- package_rpm
- binaries_windows
- binaries_macos
- binaries_macos_universal
- binaries_linux_crosscompile
runs-on: ubuntu-latest
steps:
- name: Set variable
run: |
echo '::set-output name=TAGTYPE::$(git cat-file -t $GITHUB_REF)'
upload_release:
name: Upload Release Assets
if: steps.get_tagtype.outputs.TAGTYPE == 'tag'
needs:
- get_tagtype
runs-on: ubuntu-latest
steps:
- name: Fetch all Artifacts
uses: actions/download-artifact@v2
with:
path: artifacts
- name: Upload Assets to Release
uses: softprops/action-gh-release@v1
with:
prerelease: true
files: |
artifacts/packages-dpkg/*.deb
artifacts/packages-rpm/*.rpm