name: CI on: [push, pull_request] jobs: build: runs-on: ${{ matrix.os }} container: ${{ matrix.container }} env: VS_VERSION: ${{ matrix.os == 'windows-2016' && '2017' || (matrix.os == 'windows-2019' && '2019' || (matrix.os == 'windows-2022' && '2022' || '')) }} strategy: fail-fast: false matrix: os: - macOS-latest - windows-2016 - windows-2019 - windows-2022 - ubuntu-20.04 platform: [x64, x86] include: - os: ubuntu-18.04 platform: x64 container: alpine:3.14 exclude: - os: macOS-latest platform: x86 - os: ubuntu-20.04 platform: x86 steps: - uses: actions/checkout@v1 with: fetch-depth: 10 - name: Prepare (Linux) if: matrix.os == 'ubuntu-20.04' && !startsWith(matrix.container, 'alpine') run: | sudo apt-get install libtool-bin libtomcrypt1 libtomcrypt-dev libtommath1 libtommath-dev libicu-dev zlib1g-dev - name: Build (Linux) if: matrix.os == 'ubuntu-20.04' && !startsWith(matrix.container, 'alpine') run: | CC=clang CXX=clang++ ./autogen.sh --enable-binreloc --prefix=/opt/firebird make -j4 make dist tar xzvf gen/Firebird-[0-9]*.tar.gz (cd Firebird-[0-9]*; sudo ./install.sh -silent) - name: Prepare (Linux, Alpine) if: matrix.os == 'ubuntu-18.04' && startsWith(matrix.container, 'alpine') run: apk update && apk --no-cache --update add build-base libtool git autoconf automake zlib-dev icu-dev ncurses-dev libedit-dev linux-headers tar - name: Build (Linux, Alpine) if: matrix.os == 'ubuntu-18.04' && startsWith(matrix.container, 'alpine') run: | ./autogen.sh --enable-binreloc-threads --with-builtin-tommath --with-builtin-tomcrypt --prefix=/opt/firebird make -j4 make dist tar xzvf gen/Firebird-[0-9]*.tar.gz - 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 curl -OL https://github.com/unicode-org/icu/releases/download/release-63-2/icu4c-63_2-src.tgz curl -OL https://github.com/unicode-org/icu/commit/24aeb9a5a5874f4ce5db912e30670ac3ae236971.patch tar xzf icu4c-63_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.63.dylib @loader_path/libicudata.63.dylib $ICU_INSTALL_PATH/lib/libicuuc.63.dylib install_name_tool -change libicudata.63.dylib @loader_path/libicudata.63.dylib $ICU_INSTALL_PATH/lib/libicui18n.63.dylib install_name_tool -change libicuuc.63.dylib @loader_path/libicuuc.63.dylib $ICU_INSTALL_PATH/lib/libicui18n.63.dylib popd mkdir -p gen/Release/firebird/lib mkdir -p gen/Debug/firebird/lib cp $ICU_INSTALL_PATH/lib/libicu{data,i18n,uc}.*dylib gen/Release/firebird/lib/ cp $ICU_INSTALL_PATH/lib/libicu{data,i18n,uc}.*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 --with-builtin-tomcrypt 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: startsWith(matrix.os, 'windows-') shell: cmd run: | for /r %%i in (*.bat) do unix2dos "%%i" - name: Build (Windows) if: startsWith(matrix.os, 'windows-') shell: cmd env: PLATFORM: ${{ matrix.platform }} VS_SCRIPT: ${{ matrix.os == 'windows-2022' && 'C:\Program Files\Microsoft Visual Studio\%VS_VERSION%\Enterprise\Common7\Tools\VsDevCmd.bat' || 'C:\Program Files (x86)\Microsoft Visual Studio\%VS_VERSION%\Enterprise\Common7\Tools\VsDevCmd.bat' }} run: | 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 call "%VS_SCRIPT%" -arch=%FB_VS_ARCH% cd builds\win32 run_all.bat JUSTBUILD - name: Upload (Linux) if: matrix.os == 'ubuntu-20.04' && !startsWith(matrix.container, 'alpine') uses: actions/upload-artifact@main with: name: firebird-linux-${{ matrix.platform }} path: gen/Firebird-[0-9]*.tar.gz - name: Upload (Linux, Alpine) if: matrix.os == 'ubuntu-18.04' && startsWith(matrix.container, 'alpine') uses: actions/upload-artifact@master with: name: firebird-linux-alpine path: gen/Firebird-[0-9]*.tar.gz - name: Upload (MacOS) if: matrix.os == 'macOS-latest' uses: actions/upload-artifact@main with: name: firebird-macos path: gen/artifacts - name: Upload (Windows x64) if: startsWith(matrix.os, 'windows-') && matrix.platform == 'x64' uses: actions/upload-artifact@main with: name: firebird-windows-x64-vs-${{ env.VS_VERSION }} path: output_x64 - name: Upload (Windows x86) if: startsWith(matrix.os, 'windows-') && matrix.platform == 'x86' uses: actions/upload-artifact@main with: name: firebird-windows-x86-vs-${{ env.VS_VERSION }} path: output_win32