name: CI on: [push, pull_request] jobs: build-linux-ubuntu-x64-clang: runs-on: ubuntu-20.04 steps: - name: Checkout uses: actions/checkout@v3 with: fetch-depth: 10 - name: Prepare run: | sudo apt-get install libtool-bin libtomcrypt1 libtomcrypt-dev libtommath1 libtommath-dev libicu-dev zlib1g-dev - name: Build run: | CC=clang CXX=clang++ ./autogen.sh --enable-binreloc --prefix=/opt/firebird make -j4 make tests -j4 make run_tests make dist tar xzvf gen/Firebird-*-linux-x64.tar.gz (cd Firebird-*-linux-x64; sudo ./install.sh -silent) - name: Upload installer uses: actions/upload-artifact@main with: name: firebird-ubuntu-20.04-clang-x64 path: gen/Firebird-*-linux-x64.tar.gz build-linux-docker-x64: runs-on: ubuntu-20.04 container: asfernandes/firebird-builder:x86_64-5 steps: - name: Checkout uses: actions/checkout@v3 with: fetch-depth: 10 - name: Build run: /entry.sh - name: Upload installer uses: actions/upload-artifact@main with: name: firebird-linux-x64 path: gen/Firebird-*-linux-x64.tar.gz - name: Upload debug symbols uses: actions/upload-artifact@main with: name: firebird-linux-x64-debugSymbols path: gen/Firebird-*-linux-x64-debugSymbols.tar.gz - name: Snapshot - prepare id: snapshot_prepare if: | github.repository == 'FirebirdSQL/firebird' && github.event.head_commit.message == 'increment build number' && github.ref_name == 'master' run: | echo "::set-output name=snapshot_name::${{ github.ref_name }}" - name: Snapshot - delete old assets uses: mknejp/delete-release-assets@v1 if: steps.snapshot_prepare.outputs.snapshot_name with: repository: FirebirdSQL/snapshots token: ${{ secrets.SNAPSHOT_RELEASE_TOKEN }} tag: snapshot-${{ steps.snapshot_prepare.outputs.snapshot_name }} fail-if-no-release: false fail-if-no-assets: false assets: | Firebird-*-linux-x64*.tar.gz - name: Snapshot - release id: snapshot_release_try1 uses: softprops/action-gh-release@v1 if: steps.snapshot_prepare.outputs.snapshot_name continue-on-error: true with: repository: FirebirdSQL/snapshots name: Latest snapshots for ${{ steps.snapshot_prepare.outputs.snapshot_name }} tag_name: snapshot-${{ steps.snapshot_prepare.outputs.snapshot_name }} prerelease: true token: ${{ secrets.SNAPSHOT_RELEASE_TOKEN }} files: | gen/Firebird-*-linux-x64*.tar.gz - name: Snapshot - release (retry) uses: softprops/action-gh-release@v1 if: | steps.snapshot_prepare.outputs.snapshot_name && steps.snapshot_release_try1.outcome == 'failure' with: repository: FirebirdSQL/snapshots name: Latest snapshots for ${{ steps.snapshot_prepare.outputs.snapshot_name }} tag_name: snapshot-${{ steps.snapshot_prepare.outputs.snapshot_name }} prerelease: true token: ${{ secrets.SNAPSHOT_RELEASE_TOKEN }} files: | gen/Firebird-*-linux-x64*.tar.gz build-linux-docker-x86: runs-on: ubuntu-20.04 steps: - name: Checkout uses: actions/checkout@v3 with: fetch-depth: 10 - name: Build run: | cd builds/docker/linux/i586-x86_64 ./run-i586.sh - name: Upload installer uses: actions/upload-artifact@main with: name: firebird-linux-x86 path: gen/Firebird-*-linux-x86.tar.gz - name: Upload debug symbols uses: actions/upload-artifact@main with: name: firebird-linux-x86-debugSymbols path: gen/Firebird-*-linux-x86-debugSymbols.tar.gz - name: Snapshot - prepare id: snapshot_prepare if: | github.repository == 'FirebirdSQL/firebird' && github.event.head_commit.message == 'increment build number' && github.ref_name == 'master' run: | echo "::set-output name=snapshot_name::${{ github.ref_name }}" - name: Snapshot - delete old assets uses: asfernandes/delete-release-assets@v2 if: steps.snapshot_prepare.outputs.snapshot_name with: repository: FirebirdSQL/snapshots token: ${{ secrets.SNAPSHOT_RELEASE_TOKEN }} tag: snapshot-${{ steps.snapshot_prepare.outputs.snapshot_name }} fail-if-no-release: false fail-if-no-assets: false assets: | Firebird-*-linux-x86*.tar.gz - name: Snapshot - release id: snapshot_release_try1 uses: softprops/action-gh-release@v1 if: steps.snapshot_prepare.outputs.snapshot_name continue-on-error: true with: repository: FirebirdSQL/snapshots name: Latest snapshots for ${{ steps.snapshot_prepare.outputs.snapshot_name }} tag_name: snapshot-${{ steps.snapshot_prepare.outputs.snapshot_name }} prerelease: true token: ${{ secrets.SNAPSHOT_RELEASE_TOKEN }} files: | gen/Firebird-*-linux-x86*.tar.gz - name: Snapshot - release (retry) uses: softprops/action-gh-release@v1 if: | steps.snapshot_prepare.outputs.snapshot_name && steps.snapshot_release_try1.outcome == 'failure' with: repository: FirebirdSQL/snapshots name: Latest snapshots for ${{ steps.snapshot_prepare.outputs.snapshot_name }} tag_name: snapshot-${{ steps.snapshot_prepare.outputs.snapshot_name }} prerelease: true token: ${{ secrets.SNAPSHOT_RELEASE_TOKEN }} files: | gen/Firebird-*-linux-x86*.tar.gz build-alpine-x64: runs-on: ubuntu-20.04 container: alpine:3.14 steps: - name: Checkout uses: actions/checkout@v3 with: fetch-depth: 10 - name: Prepare 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 run: | ./autogen.sh --enable-binreloc-threads --with-builtin-tommath --with-builtin-tomcrypt --prefix=/opt/firebird make -j4 make tests -j4 make run_tests make dist tar xzvf gen/Firebird-*-linux-x64.tar.gz - name: Upload installer uses: actions/upload-artifact@main with: name: firebird-alpine-x64 path: gen/Firebird-*-linux-x64.tar.gz build-windows: runs-on: ${{ matrix.os }} env: VS_VERSION: ${{ (matrix.os == 'windows-2019' && '2019' || (matrix.os == 'windows-2022' && '2022' || '')) }} strategy: fail-fast: false matrix: os: - windows-2022 - windows-2019 platform: [x64, x86] steps: - name: Checkout uses: actions/checkout@v3 with: fetch-depth: 10 - name: Prepare shell: cmd run: | for /r %%i in (*.bat) do unix2dos "%%i" choco uninstall --no-progress --yes innosetup choco install --no-progress --yes innosetup --version=6.1.2 - name: Build 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: | set SEVENZIP=C:\Program Files\7-Zip set INNO6_SETUP_PATH=C:\Program Files (x86)\Inno Setup 6 if "%PLATFORM%" == "x64" set FB_VS_ARCH=amd64 if "%PLATFORM%" == "x64" set FB_PROCESSOR_ARCHITECTURE=AMD64 if "%PLATFORM%" == "x86" set FB_VS_ARCH=x86 if "%PLATFORM%" == "x86" set FB_PROCESSOR_ARCHITECTURE=x86 call "%VS_SCRIPT%" -arch=%FB_VS_ARCH% cd builds\win32 call run_all.bat call run_tests.bat - name: Upload zip uses: actions/upload-artifact@main with: name: firebird-windows-vs-${{ env.VS_VERSION }}-${{ matrix.platform }}-zip path: builds/install_images/Firebird-*-windows-${{ matrix.platform }}.zip - name: Upload installer uses: actions/upload-artifact@main with: name: firebird-windows-vs-${{ env.VS_VERSION }}-${{ matrix.platform }}-installer path: builds/install_images/*-windows-${{ matrix.platform }}.exe build-windows-docker: runs-on: windows-2022 env: VS_VERSION: ${{ (matrix.os == 'windows-2019' && '2019' || (matrix.os == 'windows-2022' && '2022' || '')) }} strategy: fail-fast: false matrix: platform: [x64, x86] steps: - name: Checkout uses: actions/checkout@v3 with: fetch-depth: 10 - name: Build id: build shell: cmd env: PLATFORM: ${{ matrix.platform }} run: | echo ::set-output name=arch_suffix::%PLATFORM% mkdir builds\install_images cd builds\docker\windows call build.bat call run.bat C:\fbscripts\build-%PLATFORM%.bat - name: Upload zip uses: actions/upload-artifact@main with: name: firebird-windows-${{ matrix.platform }}-zip path: builds/install_images/Firebird-*-windows-${{ matrix.platform }}.zip - name: Upload zip (withDebugSymbols) uses: actions/upload-artifact@main with: name: firebird-windows-${{ matrix.platform }}-withDebugSymbols-zip path: builds/install_images/Firebird-*-windows-${{ matrix.platform }}-withDebugSymbols.zip - name: Upload installer uses: actions/upload-artifact@main with: name: firebird-windows-${{ matrix.platform }}-installer path: builds/install_images/*-windows-${{ matrix.platform }}.exe - name: Upload installer (withDebugSymbols) uses: actions/upload-artifact@main with: name: firebird-windows-${{ matrix.platform }}-withDebugSymbols-installer path: builds/install_images/*-windows-${{ matrix.platform }}-withDebugSymbols.exe - name: Snapshot - prepare id: snapshot_prepare if: | github.repository == 'FirebirdSQL/firebird' && github.event.head_commit.message == 'increment build number' && github.ref_name == 'master' shell: cmd run: | echo ::set-output name=snapshot_name::${{ github.ref_name }} - name: Snapshot - delete old assets uses: asfernandes/delete-release-assets@v2 if: steps.snapshot_prepare.outputs.snapshot_name with: repository: FirebirdSQL/snapshots token: ${{ secrets.SNAPSHOT_RELEASE_TOKEN }} tag: snapshot-${{ steps.snapshot_prepare.outputs.snapshot_name }} fail-if-no-release: false fail-if-no-assets: false assets: | Firebird-*-windows-${{ steps.build.outputs.arch_suffix }}*.exe Firebird-*-windows-${{ steps.build.outputs.arch_suffix }}*.zip - name: Snapshot - release id: snapshot_release_try1 uses: softprops/action-gh-release@v1 if: steps.snapshot_prepare.outputs.snapshot_name continue-on-error: true with: repository: FirebirdSQL/snapshots name: Latest snapshots for ${{ steps.snapshot_prepare.outputs.snapshot_name }} tag_name: snapshot-${{ steps.snapshot_prepare.outputs.snapshot_name }} prerelease: true token: ${{ secrets.SNAPSHOT_RELEASE_TOKEN }} files: | builds/install_images/Firebird-*-windows-*.exe builds/install_images/Firebird-*-windows-*.zip - name: Snapshot - release (retry) uses: softprops/action-gh-release@v1 if: | steps.snapshot_prepare.outputs.snapshot_name && steps.snapshot_release_try1.outcome == 'failure' with: repository: FirebirdSQL/snapshots name: Latest snapshots for ${{ steps.snapshot_prepare.outputs.snapshot_name }} tag_name: snapshot-${{ steps.snapshot_prepare.outputs.snapshot_name }} prerelease: true token: ${{ secrets.SNAPSHOT_RELEASE_TOKEN }} files: | builds/install_images/Firebird-*windows-*.exe builds/install_images/Firebird-*windows-*.zip build-macos: runs-on: macos-latest steps: - name: Checkout uses: actions/checkout@v3 with: fetch-depth: 10 - name: Prepare - Install tools run: | brew install automake libtool ninja - name: Cache - libc++ install id: cache-libcxx-install-macos uses: actions/cache@v3 with: key: ${{ runner.os }}-libcxx-install-13.0.1 path: | extern/libcxx-macos-install - name: Download libc++ sources if: steps.cache-libcxx-install-macos.outputs.cache-hit != 'true' run: | mkdir extern/libcxx-macos pushd extern/libcxx-macos curl -OL https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.1/llvm-project-13.0.1.src.tar.xz tar xJf llvm-project-13.0.1.src.tar.xz popd - name: Build libc++ if: steps.cache-libcxx-install-macos.outputs.cache-hit != 'true' run: | LIBCXX_BUILD_PATH=`pwd`/extern/libcxx-macos-build LIBCXX_INSTALL_PATH=`pwd`/extern/libcxx-macos-install mkdir $LIBCXX_BUILD_PATH pushd extern/libcxx-macos/llvm-project-13.0.1.src export MACOSX_DEPLOYMENT_TARGET=10.9 cmake -G Ninja -S llvm -B $LIBCXX_BUILD_PATH \ -DLLVM_ENABLE_PROJECTS="libcxx;libcxxabi" \ -DCMAKE_INSTALL_PREFIX=$LIBCXX_INSTALL_PATH \ -DCMAKE_BUILD_TYPE=Release \ -DLIBCXX_ENABLE_SHARED=false \ -DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=true ninja -C $LIBCXX_BUILD_PATH cxx cxxabi ninja -C $LIBCXX_BUILD_PATH install-cxx install-cxxabi popd - name: Cache - libicu install id: cache-libicu-install-macos uses: actions/cache@v3 with: key: ${{ runner.os }}-libicu-install-63.2 path: | extern/libicu-macos-install - name: Download and patch libicu sources if: steps.cache-libicu-install-macos.outputs.cache-hit != 'true' run: | mkdir extern/libicu-macos pushd extern/libicu-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 cd icu/source patch -p3 < ../../24aeb9a5a5874f4ce5db912e30670ac3ae236971.patch popd - name: Build libicu if: steps.cache-libicu-install-macos.outputs.cache-hit != 'true' run: | export LIBTOOLIZE=glibtoolize export LIBTOOL=glibtool LIBICU_INSTALL_PATH=`pwd`/extern/libicu-macos-install pushd extern/libicu-macos/icu/source ./runConfigureICU MacOSX --prefix=$LIBICU_INSTALL_PATH make -j4 make install install_name_tool -id @rpath/lib/libicuuc.dylib $LIBICU_INSTALL_PATH/lib/libicuuc.dylib install_name_tool -id @rpath/lib/libicui18n.dylib $LIBICU_INSTALL_PATH/lib/libicui18n.dylib install_name_tool -id @rpath/lib/libicudata.dylib $LIBICU_INSTALL_PATH/lib/libicudata.dylib install_name_tool -change libicudata.63.dylib @loader_path/libicudata.63.dylib $LIBICU_INSTALL_PATH/lib/libicuuc.63.dylib install_name_tool -change libicudata.63.dylib @loader_path/libicudata.63.dylib $LIBICU_INSTALL_PATH/lib/libicui18n.63.dylib install_name_tool -change libicuuc.63.dylib @loader_path/libicuuc.63.dylib $LIBICU_INSTALL_PATH/lib/libicui18n.63.dylib popd - name: Build run: | export LIBTOOLIZE=glibtoolize export LIBTOOL=glibtool LIBCXX_INSTALL_PATH=`pwd`/extern/libcxx-macos-install LIBICU_INSTALL_PATH=`pwd`/extern/libicu-macos-install mkdir -p gen/Release/firebird/lib cp -R $LIBICU_INSTALL_PATH/lib/libicu{data,i18n,uc}.*dylib gen/Release/firebird/lib/ export C_INCLUDE_PATH="$LIBICU_INSTALL_PATH/include:`xcrun --show-sdk-path`/usr/include" export CPLUS_INCLUDE_PATH="$LIBCXX_INSTALL_PATH/include/c++/v1:$LIBICU_INSTALL_PATH/include:`xcrun --show-sdk-path`/usr/include" export LIBRARY_PATH="$LIBCXX_INSTALL_PATH/lib:$LIBICU_INSTALL_PATH/lib:$LIBRARY_PATH" ./autogen.sh --with-builtin-tommath --with-builtin-tomcrypt make -j4 make tests -j4 make run_tests (cd gen; make -B -f make.platform.postfix ICU_LOC="$LIBICU_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: Upload installer uses: actions/upload-artifact@main with: name: firebird-macos path: gen/artifacts - name: Snapshot - prepare id: snapshot_prepare if: | github.repository == 'FirebirdSQL/firebird' && github.event.head_commit.message == 'increment build number' && github.ref_name == 'master' run: | echo "::set-output name=snapshot_name::${{ github.ref_name }}" - name: Snapshot - delete old assets uses: asfernandes/delete-release-assets@v2 if: steps.snapshot_prepare.outputs.snapshot_name with: repository: FirebirdSQL/snapshots token: ${{ secrets.SNAPSHOT_RELEASE_TOKEN }} tag: snapshot-${{ steps.snapshot_prepare.outputs.snapshot_name }} fail-if-no-release: false fail-if-no-assets: false assets: | Firebird-*-macos-x64*.pkg - name: Snapshot - release id: snapshot_release_try1 uses: softprops/action-gh-release@v1 if: steps.snapshot_prepare.outputs.snapshot_name continue-on-error: true with: repository: FirebirdSQL/snapshots name: Latest snapshots for ${{ steps.snapshot_prepare.outputs.snapshot_name }} tag_name: snapshot-${{ steps.snapshot_prepare.outputs.snapshot_name }} prerelease: true token: ${{ secrets.SNAPSHOT_RELEASE_TOKEN }} files: | gen/artifacts/Firebird-*-macos-x64*.pkg - name: Snapshot - release (retry) uses: softprops/action-gh-release@v1 if: | steps.snapshot_prepare.outputs.snapshot_name && steps.snapshot_release_try1.outcome == 'failure' with: repository: FirebirdSQL/snapshots name: Latest snapshots for ${{ steps.snapshot_prepare.outputs.snapshot_name }} tag_name: snapshot-${{ steps.snapshot_prepare.outputs.snapshot_name }} prerelease: true token: ${{ secrets.SNAPSHOT_RELEASE_TOKEN }} files: | gen/artifacts/Firebird-*-macos-x64*.pkg