Skip to content

Fix Build Rust Cross Platform Upload #1166

Fix Build Rust Cross Platform Upload

Fix Build Rust Cross Platform Upload #1166

Workflow file for this run

name: Build C++ SDK
on:
push:
branches:
- main
- rc
- hotfix-rc
pull_request:
workflow_dispatch:
jobs:
generate-schemas:
uses: ./.github/workflows/generate_schemas.yml
build_rust:
uses: ./.github/workflows/build-rust-cross-platform.yml
build:
name: Build for ${{ matrix.settings.os }} ${{ matrix.settings.target }}
needs:
- generate-schemas
- build_rust
runs-on: ${{ matrix.settings.os }}
strategy:
fail-fast: false
matrix:
settings:
- os: macos-13
target: x86_64-apple-darwin
- os: macos-13
target: aarch64-apple-darwin
- os: windows-2022
target: x86_64-pc-windows-msvc
- os: ubuntu-22.04
target: x86_64-unknown-linux-gnu
steps:
- name: Checkout Repository
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
- name: install dependencies linux
if: runner.os == 'Linux'
run: |
sudo apt-get install -y nlohmann-json3-dev
sudo apt-get install -y libboost-all-dev
- name: install dependencies macos
if: runner.os == 'macOS'
run: |
brew install nlohmann-json
brew install boost
- name: Export GitHub Actions cache environment variables
if: runner.os == 'Windows'
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
with:
script: |
core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || '');
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
- name: Download schemas
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
with:
name: sdk-schemas-cpp
path: languages/cpp/include
- name: Download ${{ matrix.settings.target }} files
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
with:
name: libbitwarden_c_files-${{ matrix.settings.target }}
path: languages/cpp/include
- name: Set permissions to include folder
if: runner.os == 'Windows'
shell: pwsh
run: |
Get-Acl languages/cpp/include/* | Format-List
$path = "./languages/cpp/include"
$name = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name
$acl = Get-Acl languages/cpp/include
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule($name,"FullControl","Allow")
$acl.SetAccessRule($accessRule)
$acl | Set-Acl languages/cpp/include
Get-ChildItem -Path "$path" -Recurse -Force | Set-Acl -aclObject $acl -Verbose
Get-Acl languages/cpp/include/* | Format-List
- name: Ensure bitwarden-c is in include folder
working-directory: languages/cpp
shell: bash
run: |
mv include/release/* include/
if [[ '${{ runner.os }}' == 'macOS' || '${{ runner.os }}' == 'Linux' ]]; then
ls include/libbitwarden_c.* || { echo "Missing libbitwarden_c.*"; exit 1; }
fi
if [[ '${{ runner.os }}' == 'Windows' ]]; then
ls include/bitwarden_c.dll || { echo "Missing bitwarden_c.dll"; exit 1; }
ls include/bitwarden_c.dll.lib || { echo "Missing bitwarden_c.dll.lib"; exit 1; }
fi
rmdir include/release
- name: Build unix
working-directory: languages/cpp
if: runner.os == 'macOS' || runner.os == 'Linux'
run: |
if [[ '${{ runner.os }}' == 'macOS' ]]; then
export DNLOHMANN_PATH=/usr/local/opt/nlohmann-json
export DBOOST_PATH=/usr/local/opt/boost
export DTARGET=include/libbitwarden_c.dylib
fi
if [[ '${{ runner.os }}' == 'Linux' ]]; then
export DNLOHMANN_PATH=/usr/share/doc/nlohmann-json3-dev
export DBOOST_PATH=/usr/share/doc/libboost-all-dev
export DTARGET=include/libbitwarden_c.so
fi
mkdir build
cd build
cmake .. -DNLOHMANN=$DNLOHMANN_PATH -DBOOST=$DBOOST_PATH -DTARGET=$DTARGET
cmake --build .
- name: Build windows
if: runner.os == 'Windows'
working-directory: languages/cpp
env:
VCPKG_BINARY_SOURCES: "clear;x-gha,readwrite"
run: |
mkdir build
cd build
$env:DTARGET="include\bitwarden_c.dll.lib"
cmake .. -DTARGET="$env:DTARGET" -DCMAKE_TOOLCHAIN_FILE="$env:VCPKG_INSTALLATION_ROOT\scripts\buildsystems\vcpkg.cmake"
cmake --build . --config Release
shell: pwsh
- name: Copy artifacts
working-directory: languages/cpp/build
shell: bash
run: |
mkdir artifacts
if [[ '${{ runner.os }}' == 'macOS' || '${{ runner.os }}' == 'Linux' ]]; then
cp libbitwarden_c.* artifacts
cp libBitwardenClient.* artifacts
fi
if [[ '${{ runner.os }}' == 'Windows' ]]; then
cp */BitwardenClient.* artifacts
cp ../include/bitwarden_c.{lib,dll.lib,dll} artifacts
fi
- name: Upload C++ package for ${{ matrix.settings.target }}
uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0
with:
name: libbitwarden_cpp-${{ matrix.settings.target }}
path: languages/cpp/build/artifacts
if-no-files-found: error