Skip to content

CI

CI #80

Workflow file for this run

name: CI
on:
push:
branches:
- master
pull_request:
branches:
- master
schedule:
- cron: '11 1 * * 0'
jobs:
build:
runs-on: ubuntu-latest
env:
CI: true
strategy:
matrix:
compiler:
- clang
- gcc
container:
- almalinux:8
- alpine:3.14
- ubuntu:18.04
container: ${{ matrix.container }}
steps:
- name: Checkout ProFTPD
uses: actions/checkout@v2
with:
repository: proftpd/proftpd
path: proftpd
- name: Checkout module source code
uses: actions/checkout@v2
with:
path: proftpd/contrib/mod_aws
- name: Whitespace check
if: ${{ matrix.container == 'ubuntu:18.04' }}
run: |
apt-get update -qq
apt-get install -y git
cd proftpd/contrib/mod_aws
if [[ -n $(git diff --check HEAD^) ]]; then
echo "You must remove whitespace before submitting a pull request"
echo ""
git diff --check HEAD^
exit 1
fi
- name: Install Alpine packages
if: ${{ matrix.container == 'alpine:3.14' }}
run: |
apk update
# for builds
apk add bash build-base clang compiler-rt-static gcc make zlib-dev
# for unit tests
apk add check check-dev subunit subunit-dev
# for Curl support
apk add curl-dev
# for OpenSSL support
apk add openssl-dev
# for XML support
apk add libxml2-dev
# for debugging
clang --version
gcc --version
- name: Install RPM packages
if: ${{ matrix.container == 'almalinux:8' }}
run: |
# Need to add other repos for e.g. libsodium
yum install -y dnf-plugins-core epel-release clang gcc make zlib-devel
# for unit tests
yum install -y check-devel https://cbs.centos.org/kojifiles/packages/subunit/1.4.0/1.el8/x86_64/subunit-1.4.0-1.el8.x86_64.rpm https://cbs.centos.org/kojifiles/packages/subunit/1.4.0/1.el8/x86_64/subunit-devel-1.4.0-1.el8.x86_64.rpm
# for Curl support
yum install -y libcurl-devel
# for OpenSSL support
yum install -y openssl-devel
# for XML support
yum install -y libxml2-devel
# for debugging
clang --version
gcc --version
- name: Install Ubuntu packages
if: ${{ matrix.container == 'ubuntu:18.04' }}
run: |
apt-get update -qq
# for builds
apt-get install -y clang gcc make
# for unit tests
apt-get install -y check libsubunit-dev
# for Curl support
apt-get install -y libcurl4-openssl-dev
# for OpenSSL support
apt-get install -y libssl-dev
# for XML support
apt-get install -y libxml2-dev
# for integration/regression test
# for test code coverage
apt-get install -y lcov ruby
gem install coveralls-lcov
# for HTML validation
apt-get install -y tidy
# for debugging
clang --version
gcc --version
- name: Prepare code coverage
if: ${{ matrix.container == 'ubuntu:18.04' }}
run: |
lcov --directory proftpd --zerocounters
- name: Build as static module
env:
CC: ${{ matrix.compiler }}
run: |
cd proftpd
./configure LIBS="-lm -lsubunit -lrt -pthread" --enable-devel=coverage --enable-tests --with-includes=/usr/include/libxml2 --with-modules=mod_aws
make
- name: Run unit tests
env:
CC: ${{ matrix.compiler }}
# Note: Skip the unit tests on Alpine
if: ${{ matrix.container != 'alpine:3.14' }}
run: |
cd proftpd/contrib/mod_aws
make TEST_VERBOSE=1 check
- name: Upload code coverage
env:
COVERALLS_REPO_TOKEN: ${{ secrets.GITHUB_TOKEN }}
if: ${{ matrix.compiler == 'gcc' && matrix.container == 'ubuntu:18.04' }}
run: |
cd proftpd/contrib/mod_aws
lcov --ignore-errors gcov,source --directory . --capture --output-file all.info
# filter out system and test code
lcov --output-file coverage.info --remove all.info '*/t/*'
# debug before upload
lcov --list coverage.info
# upload coverage info to coveralls
coveralls-lcov --repo-token="$COVERALLS_REPO_TOKEN" --service-name=github --service-job-id="$GITHUB_RUN_ID" --branch="$GITHUB_REF" coverage.info
- name: Install as static module
run: |
cd proftpd
make install
- name: Build as shared module
env:
CC: ${{ matrix.compiler }}
run: |
cd proftpd
make clean
./configure LIBS="-lm -lsubunit -lrt -pthread" --enable-devel --enable-dso --with-includes=/usr/include/libxml2 --with-shared=mod_aws
make
- name: Install as shared module
run: |
cd proftpd
make install
- name: Check HTML docs
if: ${{ matrix.container == 'ubuntu:18.04' }}
run: |
cd proftpd/contrib/mod_aws
for f in $(/bin/ls *.html); do echo "Processing $f"; tidy -errors -omit -q $f; done || exit 0