Skip to content

Use scoped options

Use scoped options #24

Workflow file for this run

name: Debian
on:
push:
paths:
- .github/workflows/debian.yml
- configs
- recipes
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
defaults:
run:
shell: bash
env:
# Note that `conan user` implicitly uses the environment variables
# `CONAN_LOGIN_USERNAME_<REMOTE>` and `CONAN_PASSWORD_<REMOTE>`, see also
# https://docs.conan.io/2/reference/environment.html#remote-login-variables.
CONAN_REMOTE_URL: https://conan.ripplex.io
CONAN_REMOTE_NAME: xrplf
CONAN_LOGIN_USERNAME_XRPLF: ${{ secrets.CONAN_USERNAME }}
CONAN_PASSWORD_XRPLF: ${{ secrets.CONAN_PASSWORD }}
jobs:
build:
strategy:
max-parallel: 10
matrix:
architecture:
- runner: ubuntu-24.04
# - runner: ubuntu-24.04-arm
docker:
- image: ghcr.io/xrplf/ci/debian-bookworm:gcc-12
# - image: ghcr.io/xrplf/ci/debian-bookworm:gcc-13
# - image: ghcr.io/xrplf/ci/debian-bookworm:gcc-14
# - image: ghcr.io/xrplf/ci/debian-bookworm:clang-16
# - image: ghcr.io/xrplf/ci/debian-bookworm:clang-17
# - image: ghcr.io/xrplf/ci/debian-bookworm:clang-18
# - image: ghcr.io/xrplf/ci/debian-bookworm:clang-19
# - image: ghcr.io/xrplf/ci/debian-bookworm:clang-20
build:
- type: Debug
# - type: Release
runs-on: ${{ matrix.architecture.runner }}
container: ${{ matrix.docker.image }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Configure Conan
run: |
cat configs/global.conf >> $(conan config home)/global.conf
conan config install profiles/ -tf $(conan config home)/profiles/
- name: Add Conan remote
run: |
conan remote list
if conan remote list | grep -q '${{ env.CONAN_REMOTE_NAME }}'; then
conan remote remove ${{ env.CONAN_REMOTE_NAME }}
echo "Removed existing conan remote '${{ env.CONAN_REMOTE_NAME }}'."
fi
conan remote add --index 0 ${{ env.CONAN_REMOTE_NAME }} ${{ env.CONAN_REMOTE_URL }}
echo "Added new conan remote '${{ env.CONAN_REMOTE_NAME }}' at ${{ env.CONAN_REMOTE_URL }}."
- name: Verify Conan remote
run: |
conan remote auth ${{ env.CONAN_REMOTE_NAME }} --force
conan remote list-users
- name: Build the recipes
working-directory: recipes
run: |
# Loop over all recipe config files.
for config in ../configs/recipes/*.json; do
json=${config##../configs/recipes/}
# Extract the recipe name, directory, version, and options. Note
# that Conan expects the options to be scoped with either '&:'
# meaning only the current recipe or '*:' meaning all dependent
# recipes as well; we use the latter here.
name=$(jq -r '.name' ${config})
dir=$(jq -r '.dir' ${config})
version=$(jq -r '.version' ${config})
opts=$(jq -r '.options | join(" -o *:") | if length == 0 then "" else "-o *:" + . end' ${config})
# Create the recipe.
echo "Creating recipe '${name}@${version}' with options '${opts}'."
conan create ${name}/${dir} \
--version=${version} \
--build=missing \
--settings:all=build_type=${{ matrix.build.type }} \
--update \
${opts}
done
- name: Upload the recipes (dry-run)
if: ${{ github.ref_type == 'branch' && github.ref_name != github.event.repository.default_branch }}
run: |
conan upload '*' \
--remote ${{ env.CONAN_REMOTE_NAME }} \
--confirm \
--dry-run
- name: Upload the recipes
if: ${{ github.ref_type == 'branch' && github.ref_name == github.event.repository.default_branch }}
run: |
conan upload '*' \
--remote ${{ env.CONAN_REMOTE_NAME }} \
--confirm