name: Linux on: push: branches: [ master ] pull_request: branches: [ master ] schedule: - cron: '10 12 * * 0' concurrency: group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} cancel-in-progress: true env: AWS_ACCESS_KEY_ID: ${{ secrets.S3_ACCESS_KEY }} AWS_SECRET_ACCESS_KEY: ${{ secrets.S3_SECRET_KEY }} AWS_DEFAULT_REGION: us-west-2 jobs: build: name: ${{ matrix.type }}-build runs-on: ubuntu-latest strategy: matrix: type: [libs, client, apps, libs-vcpkg, client-vcpkg, apps-vcpkg, libs-cmake, libs-arm64, apps-arm64, manager-with-webview-vcpkg, server, manager-with-webview, manager-without-webview, unit-test, integration-test] fail-fast: false steps: - uses: actions/checkout@v3 with: fetch-depth: 2 - name: Install dependencies run: | sudo apt-get -qq update sudo apt-get install -y libftgl-dev freeglut3-dev libcurl4-openssl-dev libxmu-dev libxi-dev libfcgi-dev libxss-dev libnotify-dev libxcb-util0-dev libgtk-3-dev libsecret-1-dev libgcrypt20-dev libsystemd-dev libwebkit2gtk-4.0-dev p7zip-full libxxf86vm-dev ocl-icd-opencl-dev zip - name: Install dependencies for arm64 if: success() && endsWith(matrix.type, 'arm64') run: | sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu binutils-aarch64-linux-gnu - name: Install dependencies for integration testing if: success() && matrix.type == 'integration-test' run: | sudo apt-get install ansible sudo service mysql stop ./integration_test/installTestSuite.sh - name: Cache dependencies uses: actions/cache@v3 with: path: | 3rdParty/buildCache !3rdParty/buildCache/linux/vcpkgcache/ key: linux-${{ matrix.type }}-${{ hashFiles('3rdParty/*Linux*.sh', 'linux/*.sh', '.github/workflows/linux.yml') }} - name: Check if build is running from origin repo if: ${{ success() && env.AWS_ACCESS_KEY_ID != 0 && env.AWS_SECRET_ACCESS_KEY != 0 }} run: | echo "VCPKG_BINARY_SOURCES=clear;x-aws,s3://vcpkg.cache.boinc/,readwrite" >> $GITHUB_ENV - name: Check if build is running from fork if: ${{ success() && (env.AWS_ACCESS_KEY_ID == 0 || env.AWS_SECRET_ACCESS_KEY == 0) }} run: | echo "VCPKG_BINARY_SOURCES=clear;x-aws-config,no-sign-request;x-aws,s3://vcpkg.cache.boinc/,read" >> $GITHUB_ENV - name: Automake if: success() run: ./_autosetup - name: Configure libs if: success() && matrix.type == 'libs' run: ./configure --disable-server --disable-client --disable-manager - name: Configure client if: success() && matrix.type == 'client' run: ./configure --disable-server --enable-client --disable-manager - name: Configure apps if: success() && matrix.type == 'apps' run: ./configure --enable-apps --enable-apps-vbox --enable-apps-gui --disable-server --disable-client --disable-manager - name: Configure libs with vcpkg if: success() && matrix.type == 'libs-vcpkg' run: linux/ci_configure_libs.sh - name: Configure client with vcpkg if: success() && matrix.type == 'client-vcpkg' run: linux/ci_configure_client.sh - name: Configure apps with vcpkg if: success() && matrix.type == 'apps-vcpkg' run: linux/ci_configure_apps.sh - name: Configure libs with cmake vcpkg if: success() && matrix.type == 'libs-cmake' run: linux/ci_configure_libs_cmake.sh - name: Configure manager with webview and vcpkg if: success() && matrix.type == 'manager-with-webview-vcpkg' run: linux/ci_configure_manager.sh - name: Configure server if: success() && matrix.type == 'server' run: ./configure --enable-server --disable-client --disable-manager - name: Configure manager with webview if: success() && matrix.type == 'manager-with-webview' run: ./3rdParty/buildLinuxDependencies.sh && ./configure --disable-server --disable-client --with-wx-prefix=${GITHUB_WORKSPACE}/3rdParty/buildCache/linux - name: Configure manager without webview if: success() && matrix.type == 'manager-without-webview' run: ./3rdParty/buildLinuxDependencies.sh --disable-webview && ./configure --disable-server --disable-client --with-wx-prefix=${GITHUB_WORKSPACE}/3rdParty/buildCache/linux - name: Configure server for unit testing if: success() && matrix.type == 'unit-test' run: ./3rdParty/buildLinuxDependencies.sh --gtest-only && ./configure --disable-client --disable-manager --enable-unit-tests CFLAGS="-g -O0" CXXFLAGS="-g -O0" - name: Make if: success() && ! contains(matrix.type, 'integration-test') && ! endsWith(matrix.type, 'cmake') && ! endsWith(matrix.type, 'arm64') run: make - name: Make for cmake if: success() && endsWith(matrix.type, 'cmake') run: cmake --build build - name: Build libraries for arm64 if: success() && matrix.type == 'libs-arm64' run: | ./linux/arm64/build_libraries_arm64.sh - name: Build apps for arm64 if: success() && matrix.type == 'apps-arm64' run: | ./linux/arm64/build_libraries_arm64.sh ./linux/arm64/build_openssl_arm64.sh ./linux/arm64/build_curl_arm64.sh ./linux/arm64/build_example_arm64.sh - name: Execute unit-test and report coverage if: success() && matrix.type == 'unit-test' run: ./tests/executeUnitTests.sh --report-coverage --report-xml - name: Execute integration-test if: success() && matrix.type == 'integration-test' run: ./integration_test/executeTestSuite.sh - name: Prepare logs on failure if: ${{ failure() }} run: python ./deploy/prepare_deployment.py logs - name: Upload logs on failure if: ${{ failure() }} uses: actions/upload-artifact@v3 with: name: linux_logs_${{ matrix.type }}_${{ github.event.pull_request.head.sha }} path: deploy/logs.7z - name: Prepare artifacts for deploy if: success() && ! contains(matrix.type, 'libs') && ! contains(matrix.type, 'server') && ! contains(matrix.type, 'test') run: python ./deploy/prepare_deployment.py linux_${{ matrix.type }} - name: Upload artifacts uses: actions/upload-artifact@v3 if: ${{ ! contains(matrix.type, 'libs') && ! contains(matrix.type, 'server') && ! contains(matrix.type, 'test') }} with: name: linux_${{ matrix.type }}_${{ github.event.pull_request.head.sha }} path: deploy/linux_${{ matrix.type }}.7z - name: Upload Google Tests Results uses: actions/upload-artifact@v3 if: always() && matrix.type == 'unit-test' # run this step even if previous step failed with: name: Linux_tests_results path: "tests/gtest/**/*_xml_report.xml" - name: Upload coverage report uses: codecov/codecov-action@v3 if: success() && matrix.type == 'unit-test' with: fail_ci_if_error: true gcov: true verbose: false