summaryrefslogtreecommitdiffstats
path: root/.github/workflows/macos.yml
diff options
context:
space:
mode:
Diffstat (limited to '.github/workflows/macos.yml')
-rw-r--r--.github/workflows/macos.yml168
1 files changed, 168 insertions, 0 deletions
diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml
new file mode 100644
index 0000000..0cfea7e
--- /dev/null
+++ b/.github/workflows/macos.yml
@@ -0,0 +1,168 @@
+# Copyright (c) 2023 [Ribose Inc](https://www.ribose.com).
+# All rights reserved.
+# This file is a part of rnp
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+name: macos
+
+on:
+ push:
+ branches:
+ - main
+ - 'release/**'
+ paths-ignore:
+ - '/*.sh'
+ - '/.*'
+ - '/_*'
+ - 'docs/**'
+ - '**.adoc'
+ - '**.md'
+ - '**.nix'
+ - 'flake.lock'
+ - '.github/workflows/*.yml'
+ - '!.github/workflows/macos.yml'
+ pull_request:
+ paths-ignore:
+ - '/*.sh'
+ - '/.*'
+ - '/_*'
+ - 'docs/**'
+ - '**.adoc'
+ - '**.md'
+ - '**.nix'
+ - 'flake.lock'
+
+concurrency:
+ group: '${{ github.workflow }}-${{ github.job }}-${{ github.head_ref || github.ref_name }}'
+ cancel-in-progress: true
+
+env:
+ BOTAN_VERSION: 2.19.3
+
+jobs:
+ tests:
+ name: ${{ matrix.os }} [ backend ${{ matrix.backend }}, shared libs ${{ matrix.shared_libs }} ]
+ runs-on: ${{ matrix.os }}
+ strategy:
+ fail-fast: false
+ matrix:
+# On MacOS gcc is alias of clang these days
+ os: [ macos-11, macos-12 ]
+ backend: [ 'botan' ]
+ shared_libs: [ 'on' ]
+ include:
+ - { os: 'macos-11', backend: 'openssl@1.1', shared_libs: 'on' }
+ - { os: 'macos-12', backend: 'openssl@3', shared_libs: 'on' }
+ - { os: 'macos-12', backend: 'botan', shared_libs: 'off' }
+
+ if: "!contains(github.event.head_commit.message, 'skip ci')"
+ timeout-minutes: 250
+
+ steps:
+ - uses: actions/checkout@v3
+ with:
+ fetch-depth: 1
+ submodules: true
+
+ - name: Configure openssl 1.1 backend
+ if: matrix.backend == 'openssl@1.1'
+ run: |
+ echo "brew \"openssl@1.1\"" >> Brewfile
+ echo "OPENSSL_ROOT_DIR=$(brew --prefix openssl@1.1)" >> $GITHUB_ENV
+ echo "CRYPTO_BACKEND=openssl" >> $GITHUB_ENV
+
+ - name: Configure openssl 3 backend
+ if: matrix.backend == 'openssl@3'
+ run: |
+ echo "brew \"openssl@3\"" >> Brewfile
+ echo "OPENSSL_ROOT_DIR=$(brew --prefix openssl@3)" >> $GITHUB_ENV
+ echo "CRYPTO_BACKEND=openssl" >> $GITHUB_ENV
+
+# Brew installs Botan3 now and it is not supported yet
+#
+# - name: Configure botan backend
+# if: ${{ matrix.backend == 'botan' }}
+# run: |
+# echo "brew \"botan\"" >> Brewfile
+# echo "CRYPTO_BACKEND=botan" >> $GITHUB_ENV
+
+ - name: Install dependencies
+ run: brew bundle
+
+ - name: Botan2 cache
+ id: cache
+ uses: actions/cache@v3
+ if: matrix.backend == 'botan'
+ with:
+ path: Botan-${{ env.BOTAN_VERSION }}
+ key: ${{ matrix.os }}-Botan-${{ env.BOTAN_VERSION }}
+
+ - name: Build Botan2
+ if: matrix.backend == 'botan' && steps.cache.outputs.cache-hit != 'true'
+ run: |
+ wget -qO- https://botan.randombit.net/releases/Botan-${{ env.BOTAN_VERSION }}.tar.xz | tar xvJ
+ cd Botan-${{ env.BOTAN_VERSION }}
+ ./configure.py --prefix=/usr/local
+ make
+ cd ..
+
+ - name: Install Botan2
+ if: matrix.backend == 'botan'
+ run: |
+ cd Botan-${{ env.BOTAN_VERSION }}
+ sudo make install
+ cd ..
+
+ - name: Configure
+ run: |
+ echo "CORES=$(sysctl -n hw.ncpu)" >> $GITHUB_ENV
+ echo "RNP_INSTALL=$PWD/rnp-install" >> $GITHUB_ENV
+ cmake -B build -DBUILD_SHARED_LIBS=${{ matrix.shared_libs }} \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DCMAKE_INSTALL_PREFIX="$PWD/rnp-install" \
+ -DDOWNLOAD_GTEST=OFF \
+ -DCRYPTO_BACKEND=${{ env.CRYPTO_BACKEND }} .
+
+ - name: Build
+ run: cmake --build build --config Release --parallel ${{ env.CORES }}
+
+ - name: Install
+ run: cmake --install build
+
+ - name: Test
+ run: |
+ mkdir -p "build/Testing/Temporary"
+ cp "cmake/CTestCostData.txt" "build/Testing/Temporary"
+ export PATH="$PWD/build/src/lib:$PATH"
+ ctest --parallel ${{ env.CORES }} --test-dir build -C Debug --output-on-failure
+
+ - name: Checkout shell test framework
+ if: matrix.shared_libs == 'on'
+ uses: actions/checkout@v3
+ with:
+ repository: kward/shunit2
+ path: ci/tests/shunit2
+
+ - name: Run additional ci tests
+ if: matrix.shared_libs == 'on'
+ run: zsh -o shwordsplit -- ci/tests/ci-tests.sh