From 93d2f0180857603aaeed78d0503bef536be5b299 Mon Sep 17 00:00:00 2001 From: Egor Tensin Date: Mon, 18 Jan 2021 22:08:09 +0300 Subject: add GitHub workflow --- .github/workflows/ci.yml | 112 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 .github/workflows/ci.yml (limited to '.github/workflows') diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..7c35ccf --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,112 @@ +name: CI + +on: + push: + pull_request: + schedule: + # Weekly, at 5:30 AM on Sunday (somewhat randomly chosen). + - cron: '30 5 * * 0' + workflow_dispatch: + +jobs: + build: + strategy: + matrix: + os: [ubuntu-18.04, windows-2016, windows-2019] + platform: [x64, x86] + configuration: [Debug, Release] + include: + # Prettier run names. + - {os: windows-2016, name: VS 2017} + - {os: windows-2019, name: VS 2019} + - {os: ubuntu-18.04, name: Ubuntu} + exclude: + # 32-bit Linux builds, meh. + - {os: ubuntu-18.04, platform: x86} + runs-on: '${{ matrix.os }}' + name: 'Build: ${{ matrix.name }} / ${{ matrix.platform }} / ${{ matrix.configuration }}' + env: + platform: '${{ matrix.platform }}' + configuration: '${{ matrix.configuration }}' + defaults: + run: + shell: pwsh + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + submodules: recursive + - name: Set up Python + uses: actions/setup-python@v2 + with: + python-version: '3.x' + - name: Build + run: | + cd cmake + python -m project.ci.github.cmake --boost $env:BOOST_ROOT_1_72_0 --install -- -D MATH_SERVER_TESTS=ON + - name: Upload the binaries + uses: actions/upload-artifact@v2 + with: + name: 'math-server-${{ matrix.platform }}-${{ matrix.configuration }}' + path: '${{ runner.workspace }}/install/' + - name: Run unit tests + run: ../install/bin/math-server-unit-tests + - name: Run the benchmarks + run: ../install/bin/math-server-benchmarks + - name: Run the stress test + run: ./test/stress_test.sh ../install + if: runner.os == 'Linux' + + native: + needs: [build] + runs-on: ubuntu-18.04 + name: 'Docker: build native images' + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + submodules: recursive + - name: Build native images + run: make docker/build + + compose: + needs: [build] + runs-on: ubuntu-18.04 + name: 'Docker: build using Compose' + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + submodules: recursive + - name: Build using Compose + run: make compose/build + + publish: + needs: [native, compose] + strategy: + matrix: + project: [client, server] + runs-on: ubuntu-18.04 + name: 'Docker: publish math-${{ matrix.project }}' + if: github.ref == 'refs/heads/master' + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + submodules: recursive + - name: Set up QEMU + uses: docker/setup-qemu-action@v1 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + - name: Login to Docker Hub + uses: docker/login-action@v1 + with: + username: '${{ secrets.DOCKERHUB_USERNAME }}' + password: '${{ secrets.DOCKERHUB_TOKEN }}' + - name: 'Publish math-${{ matrix.project }}' + uses: docker/build-push-action@v2 + with: + file: '${{ matrix.project }}/Dockerfile' + platforms: linux/amd64,linux/armhf + push: true + tags: '${{ secrets.DOCKERHUB_USERNAME }}/math-${{ matrix.project }}:latest' -- cgit v1.2.3