From 6c1744a55c4c04477249b7b6fd28f60b21d6063c Mon Sep 17 00:00:00 2001 From: Adriano dos Santos Fernandes Date: Wed, 27 Nov 2019 12:19:12 -0300 Subject: [PATCH] Setup GitHub Actions for Linux and Windows. --- .github/workflows/main.yml | 151 +++++++++++++++++++++++++++++++++++++ 1 file changed, 151 insertions(+) create mode 100644 .github/workflows/main.yml diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000000..329fa6bd0a --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,151 @@ +name: CI + +on: [push, pull_request] + +jobs: + build: + runs-on: ${{ matrix.os }} + + strategy: + fail-fast: false + matrix: + # Build is segfaulting in Ubuntu. + #os: [macOS-latest, windows-2016, ubuntu-16.04] + os: [windows-2016] + platform: [x64, x86] + #exclude: + # - os: macOS-latest + # platform: x86 + # - os: ubuntu-16.04 + # platform: x86 + + steps: + - uses: actions/checkout@v1 + with: + fetch-depth: 10 + + - name: Prepare (Linux) + if: matrix.os == 'ubuntu-16.04' + run: | + sudo apt-get install libtool-bin libtommath0 libtommath-dev libicu-dev zlib1g-dev + + - name: Build (Linux) + if: matrix.os == 'ubuntu-16.04' + run: | + CC=clang CXX=clang++ ./autogen.sh --enable-binreloc --with-builtin-tomcrypt --prefix=/opt/firebird + make + make dist + tar xzvf gen/Firebird-[0-9]*.tar.gz + (cd Firebird-[0-9]*; sudo ./install.sh -silent) + + - name: Prepare (MacOS) + if: matrix.os == 'macOS-latest' + run: | + brew install automake libtool + export LIBTOOLIZE=glibtoolize + export LIBTOOL=glibtool + + mkdir extern/icu-macos + pushd extern/icu-macos + wget https://github.com/unicode-org/icu/releases/download/release-59-2/icu4c-59_2-src.tgz + wget https://github.com/unicode-org/icu/commit/24aeb9a5a5874f4ce5db912e30670ac3ae236971.patch + tar xzvf icu4c-59_2-src.tgz + ICU_INSTALL_PATH=`pwd`/install + cd icu/source + patch -p3 < ../../24aeb9a5a5874f4ce5db912e30670ac3ae236971.patch + ./runConfigureICU MacOSX --prefix=$ICU_INSTALL_PATH + make -j4 + make install + install_name_tool -id @rpath/lib/libicuuc.dylib $ICU_INSTALL_PATH/lib/libicuuc.dylib + install_name_tool -id @rpath/lib/libicui18n.dylib $ICU_INSTALL_PATH/lib/libicui18n.dylib + install_name_tool -id @rpath/lib/libicudata.dylib $ICU_INSTALL_PATH/lib/libicudata.dylib + install_name_tool -change libicudata.59.dylib @loader_path/libicudata.59.dylib $ICU_INSTALL_PATH/lib/libicuuc.59.dylib + install_name_tool -change libicudata.59.dylib @loader_path/libicudata.59.dylib $ICU_INSTALL_PATH/lib/libicui18n.59.dylib + install_name_tool -change libicuuc.59.dylib @loader_path/libicuuc.59.dylib $ICU_INSTALL_PATH/lib/libicui18n.59.dylib + popd + mkdir -p gen/Release/firebird/lib + mkdir -p gen/Debug/firebird/lib + cp $ICU_INSTALL_PATH/lib/*.dylib gen/Release/firebird/lib/ + cp $ICU_INSTALL_PATH/lib/*.dylib gen/Debug/firebird/lib/ + + - name: Build (MacOS) + if: matrix.os == 'macOS-latest' + run: | + export LIBTOOLIZE=glibtoolize + export LIBTOOL=glibtool + + ICU_INSTALL_PATH=`pwd`/extern/icu-macos/install + + export C_INCLUDE_PATH="$ICU_INSTALL_PATH/include:$C_INCLUDE_PATH" + export CPLUS_INCLUDE_PATH="$ICU_INSTALL_PATH/include:$CPLUS_INCLUDE_PATH" + + LIBRARY_PATH="$ICU_INSTALL_PATH/lib:$LIBRARY_PATH" ./autogen.sh --with-builtin-tommath + make -j4 + + (cd gen; make -B -f make.platform.postfix ICU_LOC="$ICU_INSTALL_PATH/lib/") + (cd gen; make -B -f Makefile.install) + + # Rename directory to make sure the build is relocatable. + mv gen gen2 + sudo installer -pkg gen2/Release/*.pkg -verbose -target / + + export FIREBIRD_LOCK=`pwd`/temp + echo "create database 't.fdb'; select '1' from rdb\$database; select _win1252 '2' from rdb\$database; select _utf8 '3' collate unicode from rdb\$database;" | /Library/Frameworks/Firebird.framework/Resources/bin/isql + + echo "create database 'localhost:/tmp/t.fdb' user sysdba password 'masterkey'; select '11' from rdb\$database; select _win1252 '22' from rdb\$database; select _utf8 '33' collate unicode from rdb\$database;" | /Library/Frameworks/Firebird.framework/Resources/bin/isql + + mv gen2 gen + mkdir gen/artifacts + mv gen/Release/*.pkg gen/artifacts + + - name: Prepare (Windows) + if: matrix.os == 'windows-2016' + shell: cmd + run: | + for /r %%i in (*.bat) do unix2dos "%%i" + + - name: Build (Windows) + if: matrix.os == 'windows-2016' + shell: cmd + env: + PLATFORM: ${{ matrix.platform }} + run: | + set + if "%PLATFORM%" == "x64" set FB_VS_ARCH=amd64 + if "%PLATFORM%" == "x64" set FB_PROCESSOR_ARCHITECTURE=AMD64 + if "%PLATFORM%" == "x64" set FB_OUTPUT_SUFFIX=x64 + if "%PLATFORM%" == "x86" set FB_VS_ARCH=x86 + if "%PLATFORM%" == "x86" set FB_PROCESSOR_ARCHITECTURE=x86 + if "%PLATFORM%" == "x86" set FB_OUTPUT_SUFFIX=win32 + set + call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\Tools\VsDevCmd.bat" -arch=%FB_VS_ARCH% + cd builds\win32 + run_all.bat JUSTBUILD + + - name: Upload (Linux) + if: matrix.os == 'ubuntu-16.04' + uses: actions/upload-artifact@master + with: + name: firebird-linux + path: gen/Firebird-[0-9]*.tar.gz + + - name: Upload (MacOS) + if: matrix.os == 'macOS-latest' + uses: actions/upload-artifact@master + with: + name: firebird-macos + path: gen/artifacts + + - name: Upload (Windows x64) + if: matrix.os == 'windows-2016' && matrix.platform == 'x64' + uses: actions/upload-artifact@master + with: + name: firebird-windows-x64 + path: output_x64 + + - name: Upload (Windows x86) + if: matrix.os == 'windows-2016' && matrix.platform == 'x86' + uses: actions/upload-artifact@master + with: + name: firebird-windows-x86 + path: output_win32