diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml new file mode 100644 index 0000000000..ff8801a2b5 --- /dev/null +++ b/.github/workflows/android.yml @@ -0,0 +1,47 @@ +name: Android +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + schedule: + - cron: '5 12 * * 0' + +jobs: + build: + name: ${{ matrix.type }}-build + runs-on: ubuntu-latest + strategy: + matrix: + type: [manager] + fail-fast: false + steps: + - uses: actions/checkout@v2 + + - name: Set up JDK 1.9 + uses: actions/setup-java@v1 + with: + java-version: 1.9 + + - name: Setup Android SDK + uses: android-actions/setup-android@v2 + + - name: Cache dependencies + uses: actions/cache@v2.1.3 + with: + path: 3rdParty/buildCache + key: android-${{ matrix.type }}-${{ hashFiles('android/*.sh') }} + restore-keys: android-${{ matrix.type }}- + + - name: Build + run: | + ./android/ci_build_all.sh + bash <(curl -s https://codecov.io/bash) + + - name: Deploy to BinTray + if: ${{ success() }} + env: + BINTRAY_API_KEY: ${{ secrets.BINTRAY_API_KEY }} + PULL_REQUEST: ${{ github.event.number }} + PULL_REQUEST_SHA: ${{ github.event.pull_request.head.sha }} + run: ./deploy/prepare_deployment.sh android_${{ matrix.type }} && ./deploy/deploy_to_bintray.sh deploy/android_${{ matrix.type }}/ diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml new file mode 100644 index 0000000000..d372477c15 --- /dev/null +++ b/.github/workflows/linux.yml @@ -0,0 +1,90 @@ +name: Linux +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + schedule: + - cron: '10 12 * * 0' + +jobs: + build: + name: ${{ matrix.type }}-build + runs-on: ubuntu-latest + strategy: + matrix: + type: [libs, server, client, apps, manager-with-webview, manager-without-webview, unit-test, integration-test] + fail-fast: false + steps: + - uses: actions/checkout@v2 + + - name: Install dependencies + run: | + sudo apt-get -qq update + sudo apt-get install -y freeglut3-dev libcurl4-openssl-dev libxmu-dev libxi-dev libfcgi-dev libxss-dev libnotify-dev libxcb-util0-dev libgtk2.0-dev libwebkitgtk-dev p7zip-full + + - name: Install dependencies for integration testing + if: matrix.type == 'integration-test' + run: | + sudo apt-get install ansible + sudo service mysql stop + ./integration_test/installTestSuite.sh + + - name: Cache dependencies + uses: actions/cache@v2.1.3 + with: + path: 3rdParty/buildCache + key: linux-${{ matrix.type }}-${{ hashFiles('3rdParty/*Linux*.sh') }} + restore-keys: linux-${{ matrix.type }}- + + - name: Automake + if: ${{ success() }} + run: ./_autosetup + + - name: Configure libs + if: ${{ success() && matrix.type == 'libs' }} + run: ./configure --disable-server --disable-client --disable-manager + + - name: Configure server + if: ${{ success() && matrix.type == 'server' }} + run: ./configure --enable-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 --disable-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') + run: make + + - name: Execute unit-test and report coverage + if: success() && matrix.type == 'unit-test' + run: ./tests/executeUnitTests.sh --report-coverage + + - name: Execute integration-test + if: success() && matrix.type == 'integration-test' + run: ./integration_test/executeTestSuite.sh + + - name: Deploy to BinTray + if: ${{ success() && ! contains(matrix.type, 'libs') && ! contains(matrix.type, 'server') && ! contains(matrix.type, 'test') }} + env: + BINTRAY_API_KEY: ${{ secrets.BINTRAY_API_KEY }} + PULL_REQUEST: ${{ github.event.number }} + PULL_REQUEST_SHA: ${{ github.event.pull_request.head.sha }} + run: ./deploy/prepare_deployment.sh linux_${{ matrix.type }} && ./deploy/deploy_to_bintray.sh deploy/linux_${{ matrix.type }}/ diff --git a/.github/workflows/mingw.yml b/.github/workflows/mingw.yml new file mode 100644 index 0000000000..9816605c67 --- /dev/null +++ b/.github/workflows/mingw.yml @@ -0,0 +1,40 @@ +name: Linux-MinGW +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + schedule: + - cron: '0 12 * * 0' + +jobs: + build: + name: ${{ matrix.type }}-build + runs-on: ubuntu-latest + strategy: + matrix: + type: [libs-mingw, apps-mingw] + fail-fast: false + steps: + - uses: actions/checkout@v2 + + - name: Install dependencies + run: | + sudo apt-get -qq update + sudo apt-get install -y mingw-w64 binutils-mingw-w64-i686 binutils-mingw-w64-x86-64 gcc-mingw-w64 gcc-mingw-w64-i686 gcc-mingw-w64-x86-64 g++-mingw-w64 g++-mingw-w64-i686 g++-mingw-w64-x86-64 p7zip-full + + - name: Make libs with mingw + if: success() && matrix.type == 'libs-mingw' + run: cd lib && MINGW=x86_64-w64-mingw32 make -f Makefile.mingw + + - name: Make apps with mingw + if: success() && matrix.type == 'apps-mingw' + run: cd lib && MINGW=x86_64-w64-mingw32 make -f Makefile.mingw wrapper + + - name: Deploy to BinTray + if: ${{ success() && ! contains(matrix.type, 'libs-mingw') }} + env: + BINTRAY_API_KEY: ${{ secrets.BINTRAY_API_KEY }} + PULL_REQUEST: ${{ github.event.number }} + PULL_REQUEST_SHA: ${{ github.event.pull_request.head.sha }} + run: ./deploy/prepare_deployment.sh win_${{ matrix.type }} && ./deploy/deploy_to_bintray.sh deploy/win_${{ matrix.type }}/ diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml new file mode 100644 index 0000000000..e6da7c2817 --- /dev/null +++ b/.github/workflows/windows.yml @@ -0,0 +1,72 @@ +name: Windows +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + schedule: + - cron: '15 12 * * 0' + +jobs: + build: + name: ${{ matrix.configuration }}-${{ matrix.platform }}-build + runs-on: windows-latest + strategy: + matrix: + platform: [x64] + configuration: [Release] + env: + VCPKG_BINARY_SOURCES: 'clear;files,${{ github.workspace }}\3rdParty\buildCache\windows\vcpkgcache\,readwrite' + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v2 + + - name: Download GoogleTestAdapter + uses: suisei-cn/actions-download-file@v1 + id: DownloadGoogleTestAdapter + with: + url: "https://github.com/csoltenborn/GoogleTestAdapter/releases/download/v0.18.0/GoogleTestAdapter-0.18.0.vsix" + target: ${{ github.workspace }}\temp\ + + - name: Unzip GoogleTestAdapter + uses: DuckSoft/extract-7z-action@v1.0 + with: + pathSource: ${{ github.workspace }}\temp\GoogleTestAdapter-0.18.0.vsix + pathTarget: ${{ github.workspace }}\temp\GoogleTestAdapter + + - name: Setup msbuild + uses: microsoft/setup-msbuild@v1 + + - name: Setup vstest + uses: darenm/Setup-VSTest@v1 + + - name: Fix vcpkg + run: vcpkg.exe integrate remove + + - name: Cache dependencies + uses: actions/cache@v2.1.3 + with: + path: | + ${{ github.workspace }}\3rdParty\buildCache\windows\vcpkgcache\ + ${{ github.workspace }}\3rdParty\Windows\cuda\ + key: windows-${{ matrix.platform }}-${{ matrix.configuration }}-${{ hashFiles('win_build/vcpkg_3rdparty_dependencies_vs2019.vcxproj') }} + restore-keys: windows-${{ matrix.platform }}-${{ matrix.configuration }}- + + - name: Build + run: msbuild win_build\boinc_vs2019.sln -p:Configuration=${{ matrix.configuration }} -p:Platform=${{ matrix.platform }} -p:VcpkgTripletConfig=ci -m + + - name: Run tests + run: vstest.console.exe win_build\Build\${{ matrix.platform }}\${{ matrix.configuration }}\unittests.exe /TestAdapterPath:${{ github.workspace }}\temp\GoogleTestAdapter + + - name: Deploy to BinTray + if: ${{ success() }} + env: + BINTRAY_API_KEY: ${{ secrets.BINTRAY_API_KEY }} + PULL_REQUEST: ${{ github.event.number }} + PULL_REQUEST_SHA: ${{ github.event.pull_request.head.sha }} + platform: ${{ matrix.platform }} + configuration: ${{ matrix.configuration }} + shell: cmd + run: | + call deploy\prepare_deployment.bat + call deploy\deploy_to_bintray.bat diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 19651993d8..0000000000 --- a/.travis.yml +++ /dev/null @@ -1,89 +0,0 @@ -language: cpp -os: linux -compiler: - - gcc - -branches: - only: - - master - - coverity_scan - -dist: xenial -jdk: - - oraclejdk9 - -cache: - timeout: 600 - directories: - - 3rdParty/buildCache - -addons: - coverity_scan: - project: - name: "BOINC/boinc" - description: "Build submitted via Travis CI" - notification_email: christian.beer@posteo.de - build_command_prepend: "./configure --enable-apps" - build_command: "make -j 4" - branch_pattern: coverity_scan - -env: - global: - # secret API keys for Coverity and bintray - - secure: "Rd++Hyurnwd/tvjH0PX2seO3QUZ6WOf8bSB2ZkKPfZCU6+tXVMvloyog6Mlc7vl0m3WFAzw24MDtNLFBUktRsVXOkqDup1s6PdkwwcwG+5wAnydN+kXF9PcqKyOi0xJvl48Wji+r92Y9SCLzPnQGjZg70xHET22bDZHt2FsjP80=" - - secure: dYJhIQi9mB00HsyjNEbyyeh7ChHxbg9o6dkBvub/4dRwJKN+KAReU7yHshUTpHI+Nn4TdCjpwHcDMDOklRTSeUFz79jGEmCVqvnz0DynZFroryX3rdAnc/kW4QkupgLZk4JKCN0JRPOM/j9RS2zLxkqrDc7gibF7BNgIhu1jUXk= - jobs: - - BOINC_TYPE=libs - - BOINC_TYPE=server - - BOINC_TYPE=client - - BOINC_TYPE=apps - - BOINC_TYPE=manager - - BOINC_TYPE=libs-mingw - - BOINC_TYPE=apps-mingw - - BOINC_TYPE=unit-test - -jobs: - fast_finish: true - include: - - language: php - os: linux - php: 7.0 - env: - - BOINC_TYPE=integration-test - - language: cpp - os: osx - env: BOINC_TYPE=manager-osx - - language: android - android: - components: - - build-tools-29.0.3 - - android-29 - - extra-google-m2repository - - extra-android-m2repository - env: BOINC_TYPE=manager-android - -before_install: - - if [[ "${TRAVIS_OS_NAME}" == "linux" ]]; then ( sudo apt-get -qq update ) fi - - if [[ "${TRAVIS_OS_NAME}" == "linux" ]]; then ( sudo apt-get install -y freeglut3-dev libxmu-dev libxi-dev libfcgi-dev libxss-dev libnotify-dev libxcb-util0-dev libgtk2.0-dev libwebkitgtk-dev mingw-w64 binutils-mingw-w64-i686 binutils-mingw-w64-x86-64 gcc-mingw-w64 gcc-mingw-w64-i686 gcc-mingw-w64-x86-64 g++-mingw-w64 g++-mingw-w64-i686 g++-mingw-w64-x86-64 realpath p7zip-full ) fi - - if [[ "${BOINC_TYPE}" == "integration-test" ]]; then ( sudo apt-get install ansible/xenial-backports; sudo service mysql stop; ) fi - -before_script: -- if [[ "${TRAVIS_OS_NAME}" == "linux" ]]; then ( ./_autosetup ) fi -- if [[ "${BOINC_TYPE}" == "integration-test" ]]; then ( ./integration_test/installTestSuite.sh ) fi - -script: -- if [[ "${BOINC_TYPE}" == "libs" ]]; then ( ./configure --disable-server --disable-client --disable-manager && make ) fi -- if [[ "${BOINC_TYPE}" == "server" ]]; then ( ./configure --disable-client --disable-manager && make ) fi -- if [[ "${BOINC_TYPE}" == "client" ]]; then ( ./configure --disable-server --disable-manager && make ) fi -- if [[ "${BOINC_TYPE}" == "apps" ]]; then ( ./configure --enable-apps --disable-server --disable-client --disable-manager && make ) fi -- if [[ "${BOINC_TYPE}" == "manager" && "${TRAVIS_OS_NAME}" == "linux" ]]; then ( ./3rdParty/buildLinuxDependencies.sh && ./configure --disable-server --disable-client --with-wx-prefix=${TRAVIS_BUILD_DIR}/3rdParty/buildCache/linux && make ) fi -- if [[ "${BOINC_TYPE}" == "manager" && "${TRAVIS_OS_NAME}" == "linux" ]]; then ( make distclean && ./3rdParty/buildLinuxDependencies.sh --disable-webview --cache_dir ${TRAVIS_BUILD_DIR}/3rdParty/buildCache/linux2 && ./configure --disable-server --disable-client --with-wx-prefix=${TRAVIS_BUILD_DIR}/3rdParty/buildCache/linux2 && make ) fi -- if [[ "${BOINC_TYPE}" == "libs-mingw" ]]; then ( cd lib && MINGW=x86_64-w64-mingw32 make -f Makefile.mingw ) fi -- if [[ "${BOINC_TYPE}" == "apps-mingw" ]]; then ( cd lib && MINGW=x86_64-w64-mingw32 make -f Makefile.mingw wrapper ) fi -- if [[ "${BOINC_TYPE}" == "manager-osx" ]]; then ( ./3rdParty/buildMacDependencies.sh -q && ./mac_build/buildMacBOINC-CI.sh --no_shared_headers ) fi -- if [[ "${BOINC_TYPE}" == "manager-android" ]]; then ( cd android && ./travis_build_all.sh && cd BOINC && ./gradlew clean assemble jacocoTestReportDebug && bash <(curl -s https://codecov.io/bash) && cd ../../ ) fi -- if [[ "${BOINC_TYPE}" == "unit-test" ]]; then ( ./3rdParty/buildLinuxDependencies.sh --gtest-only && ./configure --disable-client --disable-manager --enable-unit-tests CFLAGS="-g -O0" CXXFLAGS="-g -O0" && make && ./tests/executeUnitTests.sh --report-coverage ) fi -- if [[ "${BOINC_TYPE}" == "integration-test" ]]; then ( ./integration_test/executeTestSuite.sh ) fi - -after_success: -- ./deploy/prepare_deployment.sh ${BOINC_TYPE} deploy/${BOINC_TYPE}/ && ./deploy/deploy_to_bintray.sh deploy/${BOINC_TYPE}/ diff --git a/README.md b/README.md index 040f82a59b..cfbe4dab3c 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Status -[![Build Status](https://travis-ci.org/BOINC/boinc.svg?branch=master)](https://travis-ci.org/BOINC/boinc) [![Build status](https://ci.appveyor.com/api/projects/status/9dgoc9h5ppos8vcy/branch/master?svg=true)](https://ci.appveyor.com/project/BOINC/boinc/branch/master) [![Coverity Scan Build Status](https://scan.coverity.com/projects/4226/badge.svg)](https://scan.coverity.com/projects/boinc-boinc) [![codecov](https://codecov.io/gh/BOINC/boinc/branch/master/graph/badge.svg)](https://codecov.io/gh/BOINC/boinc) [![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/BOINC/boinc/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/BOINC/boinc/?branch=master) +![Build Status](https://github.com/BOINC/boinc/workflows/Linux/badge.svg) ![Build Status](https://github.com/BOINC/boinc/workflows/Windows/badge.svg) ![Build Status](https://github.com/BOINC/boinc/workflows/Android/badge.svg) ![Build Status](https://github.com/BOINC/boinc/workflows/Linux-MinGW/badge.svg) [![Coverity Scan Build Status](https://scan.coverity.com/projects/4226/badge.svg)](https://scan.coverity.com/projects/boinc-boinc) [![codecov](https://codecov.io/gh/BOINC/boinc/branch/master/graph/badge.svg)](https://codecov.io/gh/BOINC/boinc) [![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/BOINC/boinc/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/BOINC/boinc/?branch=master) # Social @@ -18,16 +18,16 @@ Read about all the [ways you can help](CONTRIBUTING.md) ### Note -The University of California holds the copyright on all BOINC source code. By -submitting contributions to the BOINC code, you irrevocably assign all right, -title, and interest, including copyright and all copyright rights, in such -contributions to The Regents of the University of California, who may then -use the code for any purpose that it desires. +The University of California holds the copyright on all BOINC source code. By +submitting contributions to the BOINC code, you irrevocably assign all right, +title, and interest, including copyright and all copyright rights, in such +contributions to The Regents of the University of California, who may then +use the code for any purpose that it desires. ## Reporting Security Issues -We strongly encourage you to report security problems to our private mailing -list and not by posting an issue. You can do this by sending an email to -boinc_pmc@googlegroups.com. This will be privately sent to the members of the +We strongly encourage you to report security problems to our private mailing +list and not by posting an issue. You can do this by sending an email to +boinc_pmc@googlegroups.com. This will be privately sent to the members of the BOINC Project Management Committee. # License diff --git a/android/travis_build_all.sh b/android/ci_build_all.sh similarity index 53% rename from android/travis_build_all.sh rename to android/ci_build_all.sh index 37c78e5c40..ba700c9d68 100755 --- a/android/travis_build_all.sh +++ b/android/ci_build_all.sh @@ -7,9 +7,27 @@ set -e # Script to compile everything BOINC needs for Android +# check working directory because the script needs to be called like: ./android/ci_build_all.sh +if [ ! -d "android" ]; then + echo "start this script in the source root directory" + exit 1 +fi + +cd android + +echo '===== BOINC Client for all platforms build start =====' + ./buildAndroidBOINC-CI.sh --cache_dir "$ANDROID_TC" --build_dir "$BUILD_DIR" --silent --ci --arch arm ./buildAndroidBOINC-CI.sh --cache_dir "$ANDROID_TC" --build_dir "$BUILD_DIR" --silent --ci --arch arm64 ./buildAndroidBOINC-CI.sh --cache_dir "$ANDROID_TC" --build_dir "$BUILD_DIR" --silent --ci --arch x86 ./buildAndroidBOINC-CI.sh --cache_dir "$ANDROID_TC" --build_dir "$BUILD_DIR" --silent --ci --arch x86_64 -echo '===== BOINC for all platforms build done =====' +echo '===== BOINC Client for all platforms build done =====' + +cd BOINC + +echo '===== BOINC Manager build start =====' + +./gradlew clean assemble jacocoTestReportDebug + +echo '===== BOINC Manager build done =====' diff --git a/appveyor.yml b/appveyor.yml deleted file mode 100644 index efed2efa9e..0000000000 --- a/appveyor.yml +++ /dev/null @@ -1,129 +0,0 @@ -# NOTE: settings in this file have precedence over settings on the website -image: - - Visual Studio 2013 - - Visual Studio 2019 - -matrix: - fast_finish: true - exclude: - - platform: x64 - TOOLCHAIN_VERSION: 10.0 - - platform: Win32 - TOOLCHAIN_VERSION: 10.0 - image: Visual Studio 2019 - - TOOLCHAIN_VERSION: 12.0 - image: Visual Studio 2019 - - platform: Win32 - TOOLCHAIN_VERSION: 16.0 - - platform: x64 - TOOLCHAIN_VERSION: 16.0 - image: Visual Studio 2013 - -platform: - - Win32 - - x64 - -pull_requests: - do_not_increment_build_number: true - -notifications: - - provider: Email - to: - - boinc_cvs@ssl.berkeley.edu - on_build_success: false - on_build_failure: true - on_build_status_changed: true - -branches: - only: - - master - -skip_tags: true - -skip_commits: - files: - - .github/ - - 3rdParty/*.sh - - android/ - - client/android/ - - client/os2/ - - client/scripts/ - - clientgui/gtk/ - - clientgui/mac/ - - clientgui/skins/ - - db/ - - doc/ - - drupal/ - - html/ - - integration_test - - lib/mac/ - - locale/ - - m4/ - - mac_build/ - - mac_installer/ - - packages/ - - py/ - - stripchart/ - - tests/ - - tools/ - - vda/ - - xcompile/ - -configuration: - - Release - -environment: - matrix: - - TOOLCHAIN_VERSION: 10.0 - solution_name: win_build\boinc_vs2010.sln - depends_zip_path: https://boinc.berkeley.edu/dl/boinc_depends/boinc_depends_win_vs2010.zip - depends_path: C:\projects\boinc_depends_win_vs2010 - - TOOLCHAIN_VERSION: 12.0 - solution_name: win_build\boinc_vs2013.sln - depends_zip_path: https://boinc.berkeley.edu/dl/boinc_depends/boinc_depends_win_vs2013.zip - depends_path: C:\projects\boinc_depends_win_vs2013 - - TOOLCHAIN_VERSION: 16.0 - solution_name: win_build\boinc_vs2019.sln - BINTRAY_API_KEY: - secure: kZI9k0Kh2bFSCbXfkz+J16fGNAee1ToRMl10D8QPQsKpC2PqhF/uVMpd6gRC+OSI - APPVEYOR_CACHE_ENTRY_ZIP_ARGS: "-t7z -m0=lzma2 -mx=9 -ms=on" - -cache: - - C:\projects\boinc_depends_win_vs2010 -> appveyor.yml, win_build\load_dependencies.bat - - C:\projects\boinc_depends_win_vs2013 -> appveyor.yml, win_build\load_dependencies.bat - - '%LOCALAPPDATA%\vcpkg\archives -> appveyor.yml' - -before_build: - - if %TOOLCHAIN_VERSION%==10.0 call win_build\load_dependencies.bat %depends_zip_path% %depends_path% %platform% %configuration% - - if %TOOLCHAIN_VERSION%==12.0 call win_build\load_dependencies.bat %depends_zip_path% %depends_path% %platform% %configuration% - - if %TOOLCHAIN_VERSION%==10.0 call "%VS100COMNTOOLS%\vsvars32.bat" - - if %TOOLCHAIN_VERSION%==10.0 call git apply boinc_vs2010.sln.ci.patch - - if %TOOLCHAIN_VERSION%==12.0 call "%VS120COMNTOOLS%\vsvars32.bat" - - if %TOOLCHAIN_VERSION%==12.0 call rmdir /S /Q %localappdata%\Microsoft\VisualStudio\%TOOLCHAIN_VERSION%\ComponentModelCache - - if %TOOLCHAIN_VERSION%==16.0 call "C:\Tools\vcpkg\vcpkg.exe" integrate remove - - if %TOOLCHAIN_VERSION%==16.0 call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Tools\vsdevcmd.bat" - -build_script: - - msbuild %solution_name% /p:Configuration=%configuration%;Platform=%platform%;VcpkgTripletConfig=ci -m - -after_build: - - if %TOOLCHAIN_VERSION%==12.0 call deploy\prepare_deployment.bat - - if %TOOLCHAIN_VERSION%==12.0 call deploy\deploy_to_bintray.bat - -artifacts: - - path: deploy\win-apps\*.7z - name: win-apps - - path: deploy\win-client\*.7z - name: win-client - - path: deploy\win-manager\*.7z - name: win-manager - -before_test: - - if %TOOLCHAIN_VERSION%==16.0 curl -fsSL https://github.com/csoltenborn/GoogleTestAdapter/releases/download/v0.18.0/GoogleTestAdapter-0.18.0.vsix -o C:\projects\GoogleTestAdapter.zip - - if %TOOLCHAIN_VERSION%==16.0 call 7z.exe x C:\projects\GoogleTestAdapter.zip -oC:\projects\GoogleTestAdapter -aoa - -test_script: - - if %TOOLCHAIN_VERSION%==16.0 call vstest.console.exe win_build\Build\%platform%\%configuration%\unittests.exe /TestAdapterPath:C:\projects\GoogleTestAdapter /logger:Appveyor - -# on_finish: -# - ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) diff --git a/deploy/deploy_to_bintray.bat b/deploy/deploy_to_bintray.bat index 081f6b9398..d7834ebba4 100644 --- a/deploy/deploy_to_bintray.bat +++ b/deploy/deploy_to_bintray.bat @@ -1,11 +1,38 @@ setlocal EnableDelayedExpansion rem @echo off -if not defined bintray_deploy ( - set bintray_deploy=False +for /f "tokens=2-4 delims=/ " %%a in ("%date%") do (set MM=%%a& set DD=%%b& set YYYY=%%c) +set build_date=%YYYY%-%MM%-%DD% + +set pkg_name=custom +rem GITHUB_SHA might not be available here, better use "git rev-parse --short=8 HEAD" instead +set git_rev=%GITHUB_SHA:~0,8% +set pkg_version=custom_%build_date%_!git_rev! +set pkg_version_desc=Custom build created on %build_date% +if not defined GITHUB_ACTIONS ( + set GITHUB_ACTIONS=False ) -if !bintray_deploy! == False ( - goto :EOF +set CI_RUN=%GITHUB_ACTIONS% + +if "%CI_RUN%" == "True" ( + if "%GITHUB_EVENT_NAME%" == "pull_request" ( + set pkg_name=pull-requests + set git_rev=%PULL_REQUEST_SHA:~0,8% + set pkg_version=PR%PULL_REQUEST%_%build_date%_!git_rev! + set pkg_version_desc=CI build created from PR #%PULL_REQUEST% on %build_date% + ) + if "%GITHUB_EVENT_NAME%" == "schedule" ( + set pkg_name=weekly + set git_rev=%GITHUB_SHA:~0,8% + set pkg_version=weekly_%build_date%_!git_rev! + set pkg_version_desc=Weekly CI build created on %build_date% + ) + if "%GITHUB_EVENT_NAME%" == "push" ( + set pkg_name=master + set git_rev=%GITHUB_SHA:~0,8% + set pkg_version=master_%build_date%_!git_rev! + set pkg_version_desc=Custom build created on %build_date% + ) ) if not defined BINTRAY_API_KEY ( @@ -35,14 +62,11 @@ if not defined ISSUE_TRACKER_URL ( rem Mandatory for packages in free Bintray repos if not defined VCS_URL ( set VCS_URL=https://github.com/BOINC/boinc.git -) +) set CURL=curl -u%BINTRAY_USER%:%BINTRAY_API_KEY% -H Accept:application/json -w \n rem use this for local debugging rem set CURL=echo -if not defined pkg_name ( - set pkg_name=custom -) if not defined pkg_desc ( set pkg_desc=Automated CI build of BOINC components ) @@ -51,37 +75,23 @@ echo Creating package %pkg_name%... set data={\"name\": \"!pkg_name!\", \"desc\": \"!pkg_desc!\", \"desc_url\": \"auto\", \"website_url\": [\"%WEBSITE_URL%\"], \"vcs_url\": [\"%VCS_URL%\"], \"issue_tracker_url\": [\"%ISSUE_TRACKER_URL%\"], \"licenses\": [\"LGPL-3.0\"]} %CURL% -H Content-Type:application/json -X POST -d "%data%" "%API%/packages/%BINTRAY_REPO_OWNER%/%BINTRAY_REPO%" -for /f "tokens=2-4 delims=/ " %%a in ("%date%") do (set MM=%%a& set DD=%%b& set YYYY=%%c) -if not defined build_date ( - set build_date=%YYYY%-%MM%-%DD% -) -if not defined git_rev ( - set git_rev=%APPVEYOR_REPO_COMMIT:~0,8% -) -if not defined pkg_version ( - set pkg_version=custom_%build_date%_!git_rev! -) -if not defined pkg_version_desc ( - set pkg_version_desc=Custom build created on %build_date% -) - echo Creating version !pkg_version!... set data={\"name\": \"!pkg_version!\", \"desc\": \"!pkg_version_desc!\"} %CURL% -H Content-Type:application/json -X POST -d "%data%" "%API%/packages/%BINTRAY_REPO_OWNER%/%BINTRAY_REPO%/!pkg_name!/versions" -if exist "deploy\win-apps\win-apps_!pkg_version!_%platform%.7z" ( - echo Uploading and publishing "deploy\win-apps\win-apps_!pkg_version!_%platform%.7z" - %CURL% -H Content-Type:application/octet-stream -T "deploy\win-apps\win-apps_!pkg_version!_%platform%.7z" "%API%/content/%BINTRAY_REPO_OWNER%/%BINTRAY_REPO%/!pkg_name!/!pkg_version!/win-apps_!pkg_version!_%platform%.7z?publish=1&override=1" +if exist "deploy\win_apps\win_apps.7z" ( + echo Uploading and publishing "deploy\win_apps\win_apps.7z" + %CURL% -H Content-Type:application/octet-stream -T "deploy\win_apps\win_apps.7z" "%API%/content/%BINTRAY_REPO_OWNER%/%BINTRAY_REPO%/!pkg_name!/!pkg_version!/win_apps_!pkg_version!.7z?publish=1&override=1" ) -if exist "deploy\win-client\win-client_!pkg_version!_%platform%.7z" ( - echo Uploading and publishing "deploy\win-client\win-client_!pkg_version!_%platform%.7z" - %CURL% -H Content-Type:application/octet-stream -T "deploy\win-client\win-client_!pkg_version!_%platform%.7z" "%API%/content/%BINTRAY_REPO_OWNER%/%BINTRAY_REPO%/!pkg_name!/!pkg_version!/win-client_!pkg_version!_%platform%.7z?publish=1&override=1" +if exist "deploy\win_client\win_client.7z" ( + echo Uploading and publishing "deploy\win_client\win_client.7z" + %CURL% -H Content-Type:application/octet-stream -T "deploy\win_client\win_client.7z" "%API%/content/%BINTRAY_REPO_OWNER%/%BINTRAY_REPO%/!pkg_name!/!pkg_version!/win_client_!pkg_version!.7z?publish=1&override=1" ) -if exist "deploy\win-manager\win-manager_!pkg_version!_%platform%.7z" ( - echo Uploading and publishing "deploy\win-manager\win-manager_!pkg_version!_%platform%.7z" - %CURL% -H Content-Type:application/octet-stream -T "deploy\win-manager\win-manager_!pkg_version!_%platform%.7z" "%API%/content/%BINTRAY_REPO_OWNER%/%BINTRAY_REPO%/!pkg_name!/!pkg_version!/win-manager_!pkg_version!_%platform%.7z?publish=1&override=1" +if exist "deploy\win_manager\win_manager.7z" ( + echo Uploading and publishing "deploy\win_manager\win_manager.7z" + %CURL% -H Content-Type:application/octet-stream -T "deploy\win_manager\win_manager.7z" "%API%/content/%BINTRAY_REPO_OWNER%/%BINTRAY_REPO%/!pkg_name!/!pkg_version!/win_manager_!pkg_version!.7z?publish=1&override=1" ) rem if defined APPVEYOR_JOB_ID ( diff --git a/deploy/deploy_to_bintray.sh b/deploy/deploy_to_bintray.sh index e44be724e2..915ecedb3d 100755 --- a/deploy/deploy_to_bintray.sh +++ b/deploy/deploy_to_bintray.sh @@ -2,7 +2,7 @@ # This file is part of BOINC. # http://boinc.berkeley.edu -# Copyright (C) 2018 University of California +# Copyright (C) 2020 University of California # # BOINC is free software; you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License @@ -51,7 +51,7 @@ if [ "${BINTRAY_API_KEY}" == "" ] ; then exit 0 fi -CI_RUN="${TRAVIS:-false}" +CI_RUN="${GITHUB_ACTIONS:-false}" BOINC_TYPE="$(basename "${SOURCE_DIR}")" # TODO: do not infer TYPE from directory, instead make it an argument API=https://api.bintray.com BINTRAY_USER="${BINTRAY_USER:-ChristianBeer}" @@ -66,22 +66,23 @@ CURL="curl -u${BINTRAY_USER}:${BINTRAY_API_KEY} -H Accept:application/json -w \n #CURL="echo " # use this for local debugging BUILD_DATE=$(date "+%Y-%m-%d") -GIT_REV=$(git rev-parse --short HEAD) +GIT_REV=$(git rev-parse --short=8 HEAD) PKG_NAME="custom" PKG_DESC="Automated CI build of BOINC components" VERSION="custom_${BUILD_DATE}_${GIT_REV}" VERSION_DESC="Custom build created on ${BUILD_DATE}" RUN_CLEANUP="false" if [[ $CI_RUN == "true" ]]; then - case $TRAVIS_EVENT_TYPE in + case $GITHUB_EVENT_NAME in pull_request) PKG_NAME="pull-requests" - GIT_REV=${TRAVIS_PULL_REQUEST_SHA:0:8} - VERSION="PR${TRAVIS_PULL_REQUEST}_${BUILD_DATE}_${GIT_REV}" - VERSION_DESC="CI build created from PR #${TRAVIS_PULL_REQUEST} on ${BUILD_DATE}" + GIT_REV=${PULL_REQUEST_SHA:0:8} + VERSION="PR${PULL_REQUEST}_${BUILD_DATE}_${GIT_REV}" + VERSION_DESC="CI build created from PR #${PULL_REQUEST} on ${BUILD_DATE}" ;; - cron) + schedule) PKG_NAME="weekly" + GIT_REV=${GITHUB_SHA:0:8} VERSION="weekly_${BUILD_DATE}_${GIT_REV}" VERSION_DESC="Weekly CI build created on ${BUILD_DATE}" # run cleanup script once a month @@ -89,9 +90,11 @@ if [[ $CI_RUN == "true" ]]; then RUN_CLEANUP="true" fi ;; - *) - echo "event $TRAVIS_EVENT_TYPE not supported for deployment" - exit 0; + push) + PKG_NAME="master" + GIT_REV=${GITHUB_SHA:0:8} + VERSION="master_${BUILD_DATE}_${GIT_REV}" + VERSION_DESC="Master build created on ${BUILD_DATE}" ;; esac fi @@ -118,7 +121,7 @@ ${CURL} -H Content-Type:application/json -X POST -d "${data}" "${API}/packages/$ echo "Adding attributes to version ${VERSION}" # this can be used to cleanup old versions -pr="${TRAVIS_PULL_REQUEST:-0}" +pr="${PULL_REQUEST:-0}" created=$(date -u +%s) data="[{\"name\": \"PR\", \"values\": [\"${pr}\"], \"type\": \"string\"}, {\"name\": \"create_time_utc\", \"values\": [${created}], \"type\": \"number\"}]" @@ -131,19 +134,19 @@ if [ -f "${SOURCE_DIR}/${BOINC_TYPE}.7z" ]; then ${CURL} -H Content-Type:application/octet-stream -T "${SOURCE_DIR}/${BOINC_TYPE}.7z" "${API}/content/${BINTRAY_REPO_OWNER}/${BINTRAY_REPO}/${PKG_NAME}/${VERSION}/${BOINC_TYPE}_${VERSION}.7z?publish=1&override=1" fi -if [ "$TRAVIS_BUILD_ID" ] ; then - echo "Adding Travis CI log to release notes..." - BUILD_LOG="https://travis-ci.org/BOINC/boinc/builds/${TRAVIS_BUILD_ID}" - #BUILD_LOG="https://api.travis-ci.org/jobs/${TRAVIS_JOB_ID}/log.txt?deansi=true" - data='{ - "bintray": { - "syntax": "markdown", - "content": "'${BUILD_LOG}'" - } -}' - set +x - ${CURL} -H Content-Type:application/json -X POST -d "${data}" "${API}/packages/${BINTRAY_REPO_OWNER}/${BINTRAY_REPO}/${PKG_NAME}/versions/${VERSION}/release_notes" -fi +# if [ "$TRAVIS_BUILD_ID" ] ; then +# echo "Adding Travis CI log to release notes..." +# BUILD_LOG="https://travis-ci.org/BOINC/boinc/builds/${TRAVIS_BUILD_ID}" +# #BUILD_LOG="https://api.travis-ci.org/jobs/${TRAVIS_JOB_ID}/log.txt?deansi=true" +# data='{ +# "bintray": { +# "syntax": "markdown", +# "content": "'${BUILD_LOG}'" +# } +# }' +# set +x +# ${CURL} -H Content-Type:application/json -X POST -d "${data}" "${API}/packages/${BINTRAY_REPO_OWNER}/${BINTRAY_REPO}/${PKG_NAME}/versions/${VERSION}/release_notes" +# fi if [[ $RUN_CLEANUP == "true" ]]; then ./deploy/cleanup_bintray.sh diff --git a/deploy/prepare_deployment.bat b/deploy/prepare_deployment.bat index 9bc2429b4e..ff101d9dce 100644 --- a/deploy/prepare_deployment.bat +++ b/deploy/prepare_deployment.bat @@ -1,77 +1,38 @@ setlocal EnableDelayedExpansion rem @echo off -set bintray_deploy=False -for /f "tokens=2-4 delims=/ " %%a in ("%date%") do (set MM=%%a& set DD=%%b& set YYYY=%%c) -set build_date=%YYYY%-%MM%-%DD% -rem Default values because %bintray_deploy% is currently unused -set pkg_name=master -set git_rev=%APPVEYOR_REPO_COMMIT:~0,8% -set pkg_version=master_%build_date%_!git_rev! -set pkg_version_desc=Custom build created on %build_date% - -if defined APPVEYOR_PULL_REQUEST_NUMBER ( - set pkg_name=pull-requests - set git_rev=%APPVEYOR_PULL_REQUEST_HEAD_COMMIT:~0,8% - set pkg_version=PR%APPVEYOR_PULL_REQUEST_NUMBER%_%build_date%_!git_rev! - set pkg_version_desc=CI build created from PR #%APPVEYOR_PULL_REQUEST_NUMBER% on %build_date% - set bintray_deploy=True -) -if defined APPVEYOR_SCHEDULED_BUILD ( - if "%APPVEYOR_SCHEDULED_BUILD%" == "True" ( - set pkg_name=weekly - set pkg_version=weekly_%build_date%_!git_rev! - set pkg_version_desc=Weekly CI build created on %build_date% - set bintray_deploy=True - ) -) - -if not exist "deploy\win-apps" mkdir deploy\win-apps -copy "win_build\Build\%platform%\%configuration%\htmlgfx*.exe" "deploy\win-apps\" -copy "win_build\Build\%platform%\%configuration%\wrapper*.exe" "deploy\win-apps\" -copy "win_build\Build\%platform%\%configuration%\vboxwrapper*.exe" "deploy\win-apps\" -copy "win_build\Build\%platform%\%configuration%\boincsim.exe" "deploy\win-apps\" -copy "win_build\Build\%platform%\%configuration%\slide_show.exe" "deploy\win-apps\" -copy "win_build\Build\%platform%\%configuration%\example_app_multi_thread.exe" "deploy\win-apps\" -copy "win_build\Build\%platform%\%configuration%\example_app_graphics.exe" "deploy\win-apps\" -copy "win_build\Build\%platform%\%configuration%\example_app.exe" "deploy\win-apps\" -copy "win_build\Build\%platform%\%configuration%\worker.exe" "deploy\win-apps\" -copy "win_build\Build\%platform%\%configuration%\sleeper.exe" "deploy\win-apps\" -cd deploy\win-apps -7z a win-apps_!pkg_version!_%platform%.7z *.exe +if not exist "deploy\win_apps" mkdir deploy\win_apps +copy "win_build\Build\%platform%\%configuration%\htmlgfx*.exe" "deploy\win_apps\" +copy "win_build\Build\%platform%\%configuration%\wrapper*.exe" "deploy\win_apps\" +copy "win_build\Build\%platform%\%configuration%\vboxwrapper*.exe" "deploy\win_apps\" +copy "win_build\Build\%platform%\%configuration%\boincsim.exe" "deploy\win_apps\" +copy "win_build\Build\%platform%\%configuration%\slide_show.exe" "deploy\win_apps\" +copy "win_build\Build\%platform%\%configuration%\example*.exe" "deploy\win_apps\" +copy "win_build\Build\%platform%\%configuration%\worker*.exe" "deploy\win_apps\" +copy "win_build\Build\%platform%\%configuration%\sleeper*.exe" "deploy\win_apps\" +copy "win_build\Build\%platform%\%configuration%\boinclog.exe" "deploy\win_apps\" +copy "win_build\Build\%platform%\%configuration%\boincsim.exe" "deploy\win_apps\" +copy "win_build\Build\%platform%\%configuration%\multi_thread*.exe" "deploy\win_apps\" +copy "win_build\Build\%platform%\%configuration%\slide_show.exe" "deploy\win_apps\" +copy "win_build\Build\%platform%\%configuration%\test*.exe" "deploy\win_apps\" +copy "win_build\Build\%platform%\%configuration%\wrappture*.exe" "deploy\win_apps\" +cd deploy\win_apps +7z a win_apps.7z *.exe cd ..\.. -if not exist "deploy\win-client" mkdir deploy\win-client -copy "win_build\Build\%platform%\%configuration%\boinc.exe" "deploy\win-client\" -copy "win_build\Build\%platform%\%configuration%\boincsvcctrl.exe" "deploy\win-client\" -copy "win_build\Build\%platform%\%configuration%\boinccmd.exe" "deploy\win-client\" -copy "win_build\Build\%platform%\%configuration%\boincscr.exe" "deploy\win-client\" -copy "win_build\Build\%platform%\%configuration%\boinc.scr" "deploy\win-client\" -cd deploy\win-client -7z a win-client_!pkg_version!_%platform%.7z *.exe *.scr +if not exist "deploy\win_client" mkdir deploy\win_client +copy "win_build\Build\%platform%\%configuration%\boinc.exe" "deploy\win_client\" +copy "win_build\Build\%platform%\%configuration%\boincsvcctrl.exe" "deploy\win_client\" +copy "win_build\Build\%platform%\%configuration%\boinccmd.exe" "deploy\win_client\" +copy "win_build\Build\%platform%\%configuration%\boincscr.exe" "deploy\win_client\" +copy "win_build\Build\%platform%\%configuration%\boinc.scr" "deploy\win_client\" +cd deploy\win_client +7z a win_client.7z *.exe *.scr cd ..\.. -if not exist "deploy\win-manager" mkdir deploy\win-manager -copy "win_build\Build\%platform%\%configuration%\boinctray.exe" "deploy\win-manager\" -copy "win_build\Build\%platform%\%configuration%\boincmgr.exe" "deploy\win-manager\" -cd deploy\win-manager -7z a win-manager_!pkg_version!_%platform%.7z *.exe +if not exist "deploy\win_manager" mkdir deploy\win_manager +copy "win_build\Build\%platform%\%configuration%\boinctray.exe" "deploy\win_manager\" +copy "win_build\Build\%platform%\%configuration%\boincmgr.exe" "deploy\win_manager\" +cd deploy\win_manager +7z a win_manager.7z *.exe cd ..\.. - -rem setlocal mode is very 'interesting' -rem see https://stackoverflow.com/questions/33898076/passing-variable-out-of-setlocal-code for details - -( - endlocal - set "bintray_deploy=%bintray_deploy%" - set "pkg_name=%pkg_name%" - set "git_rev=%git_rev%" - set "pkg_version=%pkg_version%" - set "pkg_version_desc=%pkg_version_desc%" -) - -set bintray_deploy -set pkg_name -set git_rev -set pkg_version -set pkg_version_desc diff --git a/deploy/prepare_deployment.sh b/deploy/prepare_deployment.sh index 0bee1ec32e..885302b791 100755 --- a/deploy/prepare_deployment.sh +++ b/deploy/prepare_deployment.sh @@ -2,7 +2,7 @@ # This file is part of BOINC. # http://boinc.berkeley.edu -# Copyright (C) 2018 University of California +# Copyright (C) 2020 University of California # # BOINC is free software; you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License @@ -19,7 +19,7 @@ # ## support script to put all build artefacts into a defined location -## BOINC_TYPE should always be consistent with content in .travis.yml and appveyor.yml +## BOINC_TYPE should always be consistent with content in CI configuration files ## Change artefacts in each prepare_*() function below. ## Don't hardlink files because this can be run on a filesystem without hardlinks ## On error always exit non-zero so the deploy script does not run @@ -85,6 +85,8 @@ prepare_manager() { prepare_apps_mingw() { mkdir -p "${TARGET_DIR}" + cp_if_exists lib/wrapper.exe "${TARGET_DIR}" + prepare_7z_archive } prepare_osx() { @@ -101,7 +103,7 @@ prepare_android() { ROOTDIR=$(pwd) if [[ $# -eq 0 || $# -gt 2 ]]; then echo "Usage: $0 BOINC_TYPE [TARGET_DIR]" - echo "BOINC_TYPE : [client | apps | manager | apps-mingw | manager-osx | manager-android]" + echo "BOINC_TYPE : [linux_client | linux_apps | linux_manager-with-webview | linux_manager-without-webview | win_apps-mingw | osx_manager | android_manager]" echo "TARGET_DIR : relative path where binaries should be copied to (default: deploy/BOINC_TYPE/)" exit 1 fi @@ -110,22 +112,25 @@ TYPE="$1" TARGET_DIR="${2:-deploy/$TYPE/}" case $TYPE in - client) + linux_client) prepare_client ;; - apps) + linux_apps) prepare_apps ;; - manager) + linux_manager-with-webview) prepare_manager ;; - apps-mingw) + linux_manager-without-webview) + prepare_manager + ;; + win_apps-mingw) prepare_apps_mingw ;; - manager-osx) + osx_manager) prepare_osx ;; - manager-android) + android_manager) prepare_android ;; *)