aboutsummaryrefslogtreecommitdiff
path: root/.github
diff options
context:
space:
mode:
authorEugene Kliuchnikov <eustas.ru@gmail.com>2021-08-31 14:07:17 +0200
committerGitHub <noreply@github.com>2021-08-31 14:07:17 +0200
commit0e42caf3591d09d156c2b35462bc91a04e903b39 (patch)
treeab1c59f14b2fd82bfd9765ce99784bad903a6755 /.github
parent68f1b90ad0d204907beb58304d0bd06391001a4d (diff)
downloadbrotli-0e42caf3591d09d156c2b35462bc91a04e903b39.zip
brotli-0e42caf3591d09d156c2b35462bc91a04e903b39.tar.gz
brotli-0e42caf3591d09d156c2b35462bc91a04e903b39.tar.bz2
Migrate to github actions (#920)
Not all combinations are migrated to the initial configuration; corresponding TODOs added. Drive-by: additional combinations uncovered minor portability problems -> fixed Drive-by: remove no-longer used "script" files. Co-authored-by: Eugene Kliuchnikov <eustas@chromium.org>
Diffstat (limited to '.github')
-rw-r--r--.github/workflows/build_test.yml382
1 files changed, 382 insertions, 0 deletions
diff --git a/.github/workflows/build_test.yml b/.github/workflows/build_test.yml
new file mode 100644
index 0000000..9324847
--- /dev/null
+++ b/.github/workflows/build_test.yml
@@ -0,0 +1,382 @@
+# Copyright 2021 Google Inc. All Rights Reserved.
+#
+# Distributed under MIT license.
+# See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+
+# Workflow for building and running tests under Ubuntu
+
+name: Build/Test
+on:
+ push:
+ branches:
+ - master
+ pull_request:
+ types: [opened, reopened, labeled, synchronize]
+
+jobs:
+ ubuntu_build:
+ name: Build and test ${{ matrix.name }}
+ runs-on: ${{ matrix.os || 'ubuntu-latest' }}
+ defaults:
+ run:
+ shell: bash
+ strategy:
+ matrix:
+ include:
+ # TODO: consider running this combination in docker
+ #- name: cmake:gcc4.4
+
+ # TODO: consider running this combination in docker
+ #- name: cmake:gcc7
+
+ - name: cmake:gcc9
+ build_system: cmake
+ c_compiler: gcc-9
+ cxx_compiler: g++-9
+ os: ubuntu-18.04
+
+ # TODO: consider running this combination in docker
+ #- name: cmake:clang3.5
+
+ - name: cmake:clang12
+ build_system: cmake
+ c_compiler: clang-12
+ cxx_compiler: clang++12
+
+ - name: cmake:clang12:asan
+ build_system: cmake
+ sanitizer: address
+ c_compiler: clang-12
+ cxx_compiler: clang++12
+
+ - name: cmake:clang12:tsan
+ build_system: cmake
+ sanitizer: thread
+ c_compiler: clang-12
+ cxx_compiler: clang++12
+
+ - name: cmake:clang12:ubsan
+ build_system: cmake
+ sanitizer: undefined
+ c_compiler: clang-12
+ cxx_compiler: clang++-12
+ c_flags: -fno-sanitize-recover=undefined,integer
+
+ - name: cmake:qemu-arm-neon-gcc
+ build_system: cmake
+ c_compiler: arm-linux-gnueabihf-gcc
+ cxx_compiler: arm-linux-gnueabihf-g++
+ c_flags: -march=armv7-a -mfloat-abi=hard -mfpu=neon
+ extra_apt_pkgs: gcc-arm-linux-gnueabihf libc6-dev-armhf-cross qemu-user
+
+ - name: cmake-osx:clang
+ build_system: cmake
+ c_compiler: clang
+ cxx_compiler: clang++
+ os: macos-latest
+
+ - name: cmake-osx:gcc
+ build_system: cmake
+ c_compiler: gcc
+ cxx_compiler: g++
+ os: macos-latest
+
+ - name: cmake-win64:msvc2017-rel
+ build_system: cmake
+ cmake_generator: Visual Studio 15 2017 Win64
+ cmake_config: Release
+ os: windows-2016
+
+ - name: cmake-win64:msvc2017-dbg
+ build_system: cmake
+ cmake_generator: Visual Studio 15 2017 Win64
+ cmake_config: Debug
+ os: windows-2016
+
+ # TODO: consider running this combination in docker
+ #- name: autotools:gcc5
+
+ - name: autotools:gcc10
+ build_system: autotools
+ c_compiler: gcc-10
+ cxx_compiler: g++-10
+
+ - name: autotools:clang12
+ build_system: autotools
+ c_compiler: clang-12
+ cxx_compiler: clang++12
+
+ - name: fuzz:clang12
+ build_system: fuzz
+ c_compiler: clang-12
+ cxx_compiler: clang++12
+
+ # TODO: consider running this combination in docker
+ #- name: python2.7:gcc5
+
+ - name: python27:clang9
+ build_system: python
+ c_compiler: clang-9
+ python_version: 2.7
+ cxx_compiler: clang++-9
+ os: ubuntu-18.04
+
+ # TODO: consider running this combination in docker
+ #- name: python27-win
+ # build_system: python
+ # python_version: 2.7
+ # # TODO: investigate why win-builds can't run tests
+ # py_setuptools_cmd: build_ext
+ # os: windows-2016
+
+ # TODO: consider running this combination in docker
+ #- name: python3.6:gcc5
+
+ # TODO: consider running this combination in docker
+ #- name: python3.7:gcc5
+
+ # TODO: consider running this combination in docker
+ #- name: python3.8:gcc5
+
+ - name: python39:clang12
+ build_system: python
+ python_version: 3.9
+ c_compiler: clang-12
+ cxx_compiler: clang++-12
+
+ - name: python39-win
+ build_system: python
+ python_version: 3.9
+ # TODO: investigate why win-builds can't run tests
+ py_setuptools_cmd: build_ext
+ os: windows-2019
+
+ - name: maven
+ build_system: maven
+
+ - name: bazel:root
+ build_system: bazel
+ bazel_project: .
+
+ - name: bazel:go
+ build_system: bazel
+ bazel_project: go
+
+ - name: bazel:java
+ build_system: bazel
+ bazel_project: java
+
+ - name: bazel:js
+ build_system: bazel
+ bazel_project: js
+
+ - name: bazel:research
+ build_system: bazel
+ bazel_project: research
+
+ - name: bazel-osx:root
+ build_system: bazel
+ bazel_project: .
+ os: macos-latest
+
+ - name: bazel-osx:go
+ build_system: bazel
+ bazel_project: go
+ os: macos-latest
+
+ - name: bazel-osx:java
+ build_system: bazel
+ bazel_project: java
+ os: macos-latest
+
+ - name: bazel-osx:js
+ build_system: bazel
+ bazel_project: js
+ os: macos-latest
+
+ - name: bazel-osx:research
+ build_system: bazel
+ bazel_project: research
+ os: macos-latest
+
+ - name: bazel-win:root
+ build_system: bazel
+ bazel_project: .
+ os: windows-latest
+
+ # TODO: use single dll on windows, otherwise it fails to link
+ #- name: bazel-win:go
+ # build_system: bazel
+ # bazel_project: go
+ # os: windows-latest
+
+ - name: bazel-win:java
+ build_system: bazel
+ bazel_project: java
+ os: windows-latest
+
+ # TODO: blocked by Bazel Closure rules issue
+ #- name: bazel-win:js
+ # build_system: bazel
+ # bazel_project: js
+ # os: windows-latest
+
+ - name: bazel-win:research
+ build_system: bazel
+ bazel_project: research
+ os: windows-latest
+
+ - name: make
+ build_system: make
+
+ - name: make-osx
+ build_system: make
+ os: macos-latest
+
+ # TODO: add 32/64-bit x MSYS2/mingw/Cygwin toolchain support.
+ - name: make-win
+ build_system: make
+ os: windows-latest
+
+ env:
+ CC: ${{ matrix.c_compiler || 'gcc' }}
+ CXX: ${{ matrix.cxx_compiler || 'gcc' }}
+
+ steps:
+ - name: Install extra deps @ Ubuntu
+ if: ${{ runner.os == 'Linux' }}
+ # Already installed: bazel, clang{10-12}, cmake, gcc{9,10}, java{8,11}, maven, python{2.7,3.5-3.9}
+ run: |
+ EXTRA_PACKAGES="${{ matrix.extra_apt_pkgs || '' }}"
+ sudo apt update
+ sudo apt install -y ${EXTRA_PACKAGES}
+
+ - name: Checkout the source
+ uses: actions/checkout@v2
+ with:
+ submodules: false
+ fetch-depth: 1
+
+ #- name: Checkout VC9 for Python
+ # if: ${{ runner.os == 'Windows' && matrix.build_system == 'python' && matrix.python_version == '2.7' }}
+ # uses: actions/checkout@v2
+ # with:
+ # repository: reider-roque/sulley-win-installer
+ # path: third_party/VCForPython27
+
+ - name: Configure / Build / Test with CMake
+ if: ${{ matrix.build_system == 'cmake' }}
+ run: |
+ export ASAN_OPTIONS=detect_leaks=0
+ declare -a CMAKE_OPTIONS=()
+ CMAKE_OPTIONS+=("-DCMAKE_VERBOSE_MAKEFILE=ON")
+ [ ! -z '${{ matrix.c_compiler || '' }}' ] && CMAKE_OPTIONS+=(-DCMAKE_C_COMPILER='${{ matrix.c_compiler }}')
+ [ ! -z '${{ matrix.cxx_compiler || '' }}' ] && CMAKE_OPTIONS+=(-DCMAKE_CXX_COMPILER='${{ matrix.cxx_compiler }}')
+ [ ! -z '${{ matrix.sanitizer || '' }}' ] && CMAKE_OPTIONS+=(-DENABLE_SANITIZER='${{ matrix.sanitizer }}')
+ [ ! -z '${{ matrix.cmake_generator || '' }}' ] && export CMAKE_GENERATOR='${{ matrix.cmake_generator }}'
+ declare -a CMAKE_BUILD_OPTIONS=()
+ [ ! -z '${{ matrix.cmake_config || '' }}' ] && CMAKE_BUILD_OPTIONS+=(--config '${{ matrix.cmake_config }}')
+ declare -a CMAKE_TEST_OPTIONS=()
+ [ ! -z '${{ matrix.cmake_config || '' }}' ] && CMAKE_TEST_OPTIONS+=(-C '${{ matrix.cmake_config }}')
+
+ cmake -B out . ${CMAKE_OPTIONS[*]} -DCMAKE_C_FLAGS='${{ matrix.c_flags || '' }}'
+ cmake --build out ${CMAKE_BUILD_OPTIONS[*]}
+ cd out; ctest ${CMAKE_TEST_OPTIONS[*]}; cd ..
+
+ - name: Quick Fuzz
+ if: ${{ matrix.build_system == 'fuzz' }}
+ run: |
+ export ASAN_OPTIONS=detect_leaks=0
+ ./c/fuzz/test_fuzzer.sh
+
+ - name: Build with Bazel
+ if: ${{ matrix.build_system == 'bazel' }}
+ run: |
+ cd ${GITHUB_WORKSPACE}/${{ matrix.bazel_project }}
+ bazel build -c opt ...:all
+
+ - name: Fix symlinks for Bazel (Windows)
+ if: ${{ matrix.build_system == 'bazel' && runner.os == 'Windows' && matrix.bazel_project == 'java' }}
+ shell: python
+ run: |
+ import fnmatch
+ import os
+ import os.path
+ from shutil import copyfile
+ os.chdir('${{ matrix.bazel_project }}')
+ print('Searching for manifests in ' + os.getcwd())
+ matches = []
+ for root, dirnames, filenames in os.walk('bazel-bin\\org\\brotli'):
+ for filename in fnmatch.filter(filenames, '*.runfiles_manifest'):
+ matches.append(os.path.join(root, filename))
+ for match in matches:
+ print('Scanning manifest ' + match)
+ runfiles = match[:-len('_manifest')]
+ with open(match) as manifest:
+ for entry in manifest:
+ entry = entry.strip()
+ if not entry.startswith("org_brotli_java"):
+ continue
+ if entry.startswith('org_brotli_java/external'):
+ continue
+ (alias, space, link) = entry.partition(' ')
+ if alias.endswith('.jar') or alias.endswith('.exe'):
+ continue
+ link = link.replace('/', '\\')
+ alias = alias.replace('/', '\\')
+ dst = os.path.join(runfiles, alias)
+ if not os.path.exists(dst):
+ print(link + ' -> ' + dst)
+ parent = os.path.dirname(dst)
+ if not os.path.exists(parent):
+ os.makedirs(parent)
+ copyfile(link, dst)
+ print('Finished resolving symlinks')
+
+ - name: Test with Bazel
+ if: ${{ matrix.build_system == 'bazel' }}
+ run: |
+ cd ${GITHUB_WORKSPACE}/${{ matrix.bazel_project }}
+ bazel query "tests(...)" --output=label > ${RUNNER_TEMP}/tests.lst
+ [ -s ${RUNNER_TEMP}/tests.lst ] && bazel test -c opt ...:all
+ bazel clean
+
+ - name: Build / Test with Maven
+ if: ${{ matrix.build_system == 'maven' }}
+ run: |
+ export MAVEN_OPTS=-Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn
+ cd java/org/brotli
+ mvn -B install
+ cd integration
+ mvn -B verify
+
+ - name: Build / Test with Autotools
+ if: ${{ matrix.build_system == 'autotools' }}
+ run: |
+ ./bootstrap && ./configure && make
+
+ - name: Build / Test with Make
+ if: ${{ matrix.build_system == 'make' }}
+ run: |
+ make brotli
+ make test
+
+ - uses: actions/setup-python@v2
+ if: ${{ matrix.build_system == 'python' }}
+ with:
+ python-version: ${{ matrix.python_version }}
+
+ # TODO: investigate, why msiexec hangs
+ #- name: Install VC9 for Python
+ # if: ${{ runner.os == 'Windows' && matrix.build_system == 'python' && matrix.python_version == '2.7' }}
+ # run: |
+ # echo "070474db76a2e625513a5835df4595df9324d820f9cc97eab2a596dcbc2f5cbf third_party/VCForPython27/VCForPython27.msi" | sha256sum --check --status
+ # msiexec ALLUSERS=1 /qn /norestart /i third_party/VCForPython27/VCForPython27.msi /l*v ${RUNNER_TEMP}/msiexec.log
+ # cat ${RUNNER_TEMP}/msiexec.log
+
+ - name: Build / Test with Python
+ if: ${{ matrix.build_system == 'python' }}
+ run: |
+ python -VV
+ python -c "import sys; sys.exit('Invalid python version') if '.'.join(map(str,sys.version_info[0:2])) != '${{ matrix.python_version }}' else True"
+ python setup.py ${{ matrix.py_setuptools_cmd || 'test'}}