name: CI on: [push, pull_request] jobs: build-linux-ubuntu-x64-clang: if: github.ref_type != 'tag' runs-on: ubuntu-22.04 steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 10 - name: Adjust snapshot build number uses: ./.github/actions/adjust-snapshot-buildno - name: Prepare run: | sudo apt-get install libtool-bin libtomcrypt1 libtomcrypt-dev libtommath1 libtommath-dev libicu-dev zlib1g-dev cmake - 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@v4 with: name: firebird-ubuntu-20.04-clang-x64 path: gen/Firebird-*-linux-x64.tar.gz build-linux-docker: name: build-linux-docker-${{ matrix.arch }} runs-on: ubuntu-22.04 env: FB_DOCKER_PATH: ${{ (startsWith(matrix.arch, 'arm') && 'arm32-arm64') || 'x86-x64' }} strategy: fail-fast: false matrix: arch: - x86 - x64 - arm32 - arm64 steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 10 - name: Adjust snapshot build number uses: ./.github/actions/adjust-snapshot-buildno - name: Get Release Notes uses: ./.github/actions/get-release-notes - name: Set up QEMU uses: docker/setup-qemu-action@v3 if: ${{ startsWith(matrix.arch, 'arm') }} - name: Build run: | cd builds/docker/linux/$FB_DOCKER_PATH ./run-${{ matrix.arch }}.sh - name: Upload installer uses: actions/upload-artifact@v4 with: name: firebird-linux-${{ matrix.arch }} path: gen/Firebird-*-linux-${{ matrix.arch }}.tar.gz - name: Upload debug symbols uses: actions/upload-artifact@v4 with: name: firebird-linux-${{ matrix.arch }}-debugSymbols path: gen/Firebird-*-linux-${{ matrix.arch }}-debugSymbols.tar.gz - name: Create release uses: ./.github/actions/create-release with: token: ${{ secrets.SNAPSHOT_RELEASE_TOKEN }} deletePatterns: Firebird-*-linux-${{ matrix.arch }}*.tar.gz uploadFiles: gen/Firebird-*-linux-${{ matrix.arch }}*.tar.gz build-src-bundle-docker: name: build-src-bundle-docker runs-on: ubuntu-22.04 steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 10 - name: Adjust snapshot build number uses: ./.github/actions/adjust-snapshot-buildno - name: Get Release Notes uses: ./.github/actions/get-release-notes - name: Build run: | cd builds/docker/linux/x86-x64 ./run-src-bundle.sh - name: Create release uses: ./.github/actions/create-release with: token: ${{ secrets.SNAPSHOT_RELEASE_TOKEN }} deletePatterns: Firebird-*-source.tar.xz uploadFiles: gen/Firebird-*-source.tar.xz build-alpine-x64: if: github.ref_type != 'tag' runs-on: ubuntu-22.04 container: alpine:3.14 steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 10 - name: Prepare run: apk update && apk --no-cache --update add build-base libtool git autoconf automake cmake zlib-dev icu-dev ncurses-dev libedit-dev linux-headers tar sed - name: Adjust snapshot build number uses: ./.github/actions/adjust-snapshot-buildno - 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@v4 with: name: firebird-alpine-x64 path: gen/Firebird-*-linux-x64.tar.gz build-windows: if: github.ref_type != 'tag' 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@v4 with: fetch-depth: 10 - name: Adjust snapshot build number uses: ./.github/actions/adjust-snapshot-buildno - 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@v4 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@v4 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 strategy: fail-fast: false matrix: platform: [x64, x86] steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 10 - name: Adjust snapshot build number uses: ./.github/actions/adjust-snapshot-buildno - name: Get Release Notes uses: ./.github/actions/get-release-notes - name: Build x86 for client package in x64 id: build-x86 shell: cmd if: ${{ matrix.platform == 'x64' }} run: | mkdir builds\install_images cd builds\docker\windows call build.bat call run.bat C:\fbscripts\build-x86.bat - name: Build id: build shell: cmd env: PLATFORM: ${{ matrix.platform }} run: | 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@v4 with: name: firebird-windows-${{ matrix.platform }}-zip path: builds/install_images/Firebird-*-windows-${{ matrix.platform }}.zip - name: Upload zip (withDebugSymbols) uses: actions/upload-artifact@v4 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@v4 with: name: firebird-windows-${{ matrix.platform }}-installer path: builds/install_images/*-windows-${{ matrix.platform }}.exe - name: Upload installer (withDebugSymbols) uses: actions/upload-artifact@v4 with: name: firebird-windows-${{ matrix.platform }}-withDebugSymbols-installer path: builds/install_images/*-windows-${{ matrix.platform }}-withDebugSymbols.exe - name: Create release uses: ./.github/actions/create-release with: token: ${{ secrets.SNAPSHOT_RELEASE_TOKEN }} deletePatterns: | Firebird-*-windows-${{ matrix.platform }}*.exe Firebird-*-windows-${{ matrix.platform }}*.zip uploadFiles: | builds/install_images/Firebird-*-windows-${{ matrix.platform }}*.exe builds/install_images/Firebird-*-windows-${{ matrix.platform }}*.zip build-macos: name: build-macos-${{ matrix.arch }} runs-on: ${{ (matrix.arch == 'arm64' && 'macos-14') || 'macos-13' }} env: VCPKG_BINARY_SOURCES: "clear;x-gha,readwrite" strategy: fail-fast: false matrix: arch: - x64 - arm64 steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 10 submodules: 'true' - name: Adjust snapshot build number uses: ./.github/actions/adjust-snapshot-buildno - name: Prepare - Install tools run: | brew install automake autoconf-archive cmake libtool ninja - name: Export GitHub Actions cache environment variables uses: actions/github-script@v7 with: script: | core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || ''); core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || ''); - name: Build run: | export LIBTOOLIZE=glibtoolize export LIBTOOL=glibtool ./autogen.sh --with-builtin-tommath --with-builtin-tomcrypt make -j4 make tests -j4 make run_tests make -C gen -B -f make.platform.postfix make -C gen -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@v4 with: name: firebird-macos-${{ matrix.arch }} path: gen/artifacts - name: Create release uses: ./.github/actions/create-release with: token: ${{ secrets.SNAPSHOT_RELEASE_TOKEN }} deletePatterns: Firebird-*-macos-${{ matrix.arch }}*.pkg uploadFiles: gen/artifacts/Firebird-*-macos-${{ matrix.arch }}*.pkg build-android-initial: name: build-android-${{ matrix.arch }}-initial runs-on: ubuntu-22.04 env: NDK: /home/runner/Android/Ndk ARCH: ${{ matrix.arch }} FB_PREFIX: ${{ (matrix.arch == 'arm32' && 'arme') || (matrix.arch == 'x64' && 'x86_64') || matrix.arch }} strategy: fail-fast: false matrix: arch: - arm32 - arm64 - x86 - x64 steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 10 - name: Adjust snapshot build number uses: ./.github/actions/adjust-snapshot-buildno - name: Prepare - install Linux tools run: | sudo apt-get install libtool-bin libtomcrypt1 libtomcrypt-dev libtommath1 libtommath-dev libicu-dev zlib1g-dev - name: Prepare - Download and install Android NDK run: | mkdir downloads pushd downloads curl -OL https://dl.google.com/android/repository/android-ndk-r25b-linux.zip mkdir -p $NDK unzip android-ndk-r25b-linux.zip -d $NDK && f=("$NDK"/*) && mv "$NDK"/*/* "$NDK" && rmdir "${f[@]}" - name: Build run: | ./autogen.sh --prefix=/opt/firebird --enable-binreloc --with-cross-build=android.$FB_PREFIX --without-editline make -j4 make CROSS_OUT=Y tests -j4 builds/install/arch-specific/android/BuildPackage.sh $ARCH - name: Upload initial build uses: actions/upload-artifact@v4 with: name: firebird-android-initial-${{ matrix.arch }} path: | gen/Firebird-*-android-initial-${{ matrix.arch }}*.tar.gz gen/Make.Version build-android-final: name: build-android-${{ matrix.arch }}-final needs: build-android-initial runs-on: ubuntu-latest env: ARCH: ${{ matrix.arch }} strategy: fail-fast: false matrix: arch: - arm32 - arm64 - x86 - x64 steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 10 - name: Adjust snapshot build number uses: ./.github/actions/adjust-snapshot-buildno - name: Enable KVM run: | echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules sudo udevadm control --reload-rules sudo udevadm trigger --name-match=kvm - name: Download initial build uses: actions/download-artifact@v4 with: name: firebird-android-initial-${{ matrix.arch }} path: gen - name: Cache - AVD uses: actions/cache@v4 id: avd-cache with: path: | ~/.android/avd/* ~/.android/adb* key: avd-v7 - name: Create AVD and generate snapshot for caching if: steps.avd-cache.outputs.cache-hit != 'true' uses: reactivecircus/android-emulator-runner@v2 with: avd-name: firebird-builder arch: x86_64 api-level: 30 target: google_apis ndk: 25.1.8937393 emulator-options: -no-window -noaudio -no-boot-anim -camera-back none -port 5554 emulator-boot-timeout: 900 script: | echo "Generated AVD snapshot for caching." - name: Create necessary files in Android emulator uses: reactivecircus/android-emulator-runner@v2 with: avd-name: firebird-builder arch: x86_64 api-level: 30 target: google_apis ndk: 25.1.8937393 emulator-options: -no-snapshot-save -no-window -noaudio -no-boot-anim -camera-back none -port 5554 emulator-boot-timeout: 900 script: | adb wait-for-device adb root NDK=/usr/local/lib/android/sdk/ndk/25.1.8937393 builds/install/arch-specific/android/BuildFinalPackage.sh $ARCH - name: Upload installer uses: actions/upload-artifact@v4 with: name: firebird-android-${{ matrix.arch }} path: gen/Firebird-*-android-${{ matrix.arch }}.tar.gz - name: Upload installer (withDebugSymbols) uses: actions/upload-artifact@v4 with: name: firebird-android-${{ matrix.arch }}-withDebugSymbols path: gen/Firebird-*-android-${{ matrix.arch }}-withDebugSymbols.tar.gz - name: Delete initial build uses: geekyeggo/delete-artifact@v5 with: name: firebird-android-initial-${{ matrix.arch }} - name: Create release uses: ./.github/actions/create-release with: token: ${{ secrets.SNAPSHOT_RELEASE_TOKEN }} deletePatterns: Firebird-*-android-${{ matrix.arch }}*.tar.gz uploadFiles: gen/Firebird-*-android-${{ matrix.arch }}*.tar.gz build-android-aar: needs: build-android-final runs-on: ubuntu-22.04 steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 10 - name: Adjust snapshot build number uses: ./.github/actions/adjust-snapshot-buildno - name: Download final build (x86) uses: actions/download-artifact@v4 with: name: firebird-android-x86 path: android/temp - name: Download final build (x64) uses: actions/download-artifact@v4 with: name: firebird-android-x64 path: android/temp - name: Download final build (arm32) uses: actions/download-artifact@v4 with: name: firebird-android-arm32 path: android/temp - name: Download final build (arm64) uses: actions/download-artifact@v4 with: name: firebird-android-arm64 path: android/temp - name: Extract final builds working-directory: android run: | mkdir -p embedded/src/main/jniLibs/{x86,x86_64,armeabi-v7a,arm64-v8a} tar xzvf temp/Firebird-*-android-x86.tar.gz -C embedded/src/main/jniLibs/x86 --strip-components=1 tar xzvf temp/Firebird-*-android-x64.tar.gz -C embedded/src/main/jniLibs/x86_64 --strip-components=1 tar xzvf temp/Firebird-*-android-arm32.tar.gz -C embedded/src/main/jniLibs/armeabi-v7a --strip-components=1 tar xzvf temp/Firebird-*-android-arm64.tar.gz -C embedded/src/main/jniLibs/arm64-v8a --strip-components=1 mkdir -p embedded/src/main/assets/firebird mv embedded/src/main/jniLibs/x86/{*.conf,*.msg,*.dat,*.res} embedded/src/main/assets/firebird/ find embedded/src/main/jniLibs -type f ! -iname "*.so" -delete - name: Assemble AAR working-directory: android run: | ./gradlew assembleRelease FB_VERSION=`cd ../src/misc/ && . writeBuildNum.sh && echo $PRODUCT_VER_STRING-$FIREBIRD_PACKAGE_VERSION` mv embedded/build/outputs/aar/firebird-embedded-release.aar \ embedded/build/outputs/aar/Firebird-$FB_VERSION-android-embedded.aar - name: Upload installer uses: actions/upload-artifact@v4 with: name: firebird-android-aar path: android/embedded/build/outputs/aar/Firebird-*-android-embedded.aar - name: Create release uses: ./.github/actions/create-release with: token: ${{ secrets.SNAPSHOT_RELEASE_TOKEN }} deletePatterns: Firebird-*-android-embedded.aar uploadFiles: android/embedded/build/outputs/aar/Firebird-*-android-embedded.aar