mirror of
				https://github.com/XRPLF/clio.git
				synced 2025-11-04 03:45:50 +00:00 
			
		
		
		
	chore: Commits for 2.5.0 (#2352)
This commit is contained in:
		
							
								
								
									
										11
									
								
								.github/scripts/conan/apple-clang-local.profile
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								.github/scripts/conan/apple-clang-local.profile
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
			
		||||
[settings]
 | 
			
		||||
arch={{detect_api.detect_arch()}}
 | 
			
		||||
build_type=Release
 | 
			
		||||
compiler=apple-clang
 | 
			
		||||
compiler.cppstd=20
 | 
			
		||||
compiler.libcxx=libc++
 | 
			
		||||
compiler.version=17
 | 
			
		||||
os=Macos
 | 
			
		||||
 | 
			
		||||
[conf]
 | 
			
		||||
grpc/1.50.1:tools.build:cxxflags+=["-Wno-missing-template-arg-list-after-template-kw"]
 | 
			
		||||
							
								
								
									
										3
									
								
								.github/scripts/conan/generate_matrix.py
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.github/scripts/conan/generate_matrix.py
									
									
									
									
										vendored
									
									
								
							@@ -22,9 +22,6 @@ def generate_matrix():
 | 
			
		||||
        itertools.product(MACOS_OS, MACOS_CONTAINERS, MACOS_COMPILERS),
 | 
			
		||||
    ):
 | 
			
		||||
        for sanitizer_ext, build_type in itertools.product(SANITIZER_EXT, BUILD_TYPES):
 | 
			
		||||
            # libbacktrace doesn't build on arm64 with gcc.tsan
 | 
			
		||||
            if os == "heavy-arm64" and compiler == "gcc" and sanitizer_ext == ".tsan":
 | 
			
		||||
                continue
 | 
			
		||||
            configurations.append(
 | 
			
		||||
                {
 | 
			
		||||
                    "os": os,
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								.github/scripts/conan/init.sh
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.github/scripts/conan/init.sh
									
									
									
									
										vendored
									
									
								
							@@ -8,7 +8,11 @@ REPO_DIR="$(cd "$CURRENT_DIR/../../../" && pwd)"
 | 
			
		||||
CONAN_DIR="${CONAN_HOME:-$HOME/.conan2}"
 | 
			
		||||
PROFILES_DIR="$CONAN_DIR/profiles"
 | 
			
		||||
 | 
			
		||||
APPLE_CLANG_PROFILE="$CURRENT_DIR/apple-clang.profile"
 | 
			
		||||
if [[ -z "$CI" ]]; then
 | 
			
		||||
    APPLE_CLANG_PROFILE="$CURRENT_DIR/apple-clang-local.profile"
 | 
			
		||||
else
 | 
			
		||||
    APPLE_CLANG_PROFILE="$CURRENT_DIR/apple-clang-ci.profile"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
GCC_PROFILE="$REPO_DIR/docker/ci/conan/gcc.profile"
 | 
			
		||||
CLANG_PROFILE="$REPO_DIR/docker/ci/conan/clang.profile"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										11
									
								
								.github/workflows/sanitizers.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										11
									
								
								.github/workflows/sanitizers.yml
									
									
									
									
										vendored
									
									
								
							@@ -40,14 +40,6 @@ jobs:
 | 
			
		||||
        compiler: [gcc, clang]
 | 
			
		||||
        sanitizer_ext: [.asan, .tsan, .ubsan]
 | 
			
		||||
        build_type: [Release, Debug]
 | 
			
		||||
        exclude:
 | 
			
		||||
          # Currently, clang.tsan unit tests hang
 | 
			
		||||
          - compiler: clang
 | 
			
		||||
            sanitizer_ext: .tsan
 | 
			
		||||
            build_type: Release
 | 
			
		||||
          - compiler: clang
 | 
			
		||||
            sanitizer_ext: .tsan
 | 
			
		||||
            build_type: Debug
 | 
			
		||||
 | 
			
		||||
    uses: ./.github/workflows/build_and_test.yml
 | 
			
		||||
    with:
 | 
			
		||||
@@ -57,7 +49,8 @@ jobs:
 | 
			
		||||
      conan_profile: ${{ matrix.compiler }}${{ matrix.sanitizer_ext }}
 | 
			
		||||
      build_type: ${{ matrix.build_type }}
 | 
			
		||||
      static: false
 | 
			
		||||
      run_unit_tests: true
 | 
			
		||||
      # Currently, both gcc.tsan and clang.tsan unit tests hang
 | 
			
		||||
      run_unit_tests: ${{ matrix.sanitizer_ext != '.tsan' }}
 | 
			
		||||
      run_integration_tests: false
 | 
			
		||||
      upload_clio_server: false
 | 
			
		||||
      targets: clio_tests clio_integration_tests
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										59
									
								
								.github/workflows/update_docker_ci.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										59
									
								
								.github/workflows/update_docker_ci.yml
									
									
									
									
										vendored
									
									
								
							@@ -30,15 +30,26 @@ concurrency:
 | 
			
		||||
 | 
			
		||||
env:
 | 
			
		||||
  CLANG_MAJOR_VERSION: 19
 | 
			
		||||
  GCC_MAJOR_VERSION: 12
 | 
			
		||||
  GCC_VERSION: 12.3.0
 | 
			
		||||
 | 
			
		||||
  GHCR_REPO: ghcr.io/${{ github.repository_owner }}
 | 
			
		||||
  GCC_MAJOR_VERSION: 14
 | 
			
		||||
  GCC_VERSION: 14.3.0
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  repo:
 | 
			
		||||
    name: Calculate repo name
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    outputs:
 | 
			
		||||
      GHCR_REPO: ${{ steps.set-ghcr-repo.outputs.GHCR_REPO }}
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Set GHCR_REPO
 | 
			
		||||
        id: set-ghcr-repo
 | 
			
		||||
        run: |
 | 
			
		||||
          echo "GHCR_REPO=$(echo ghcr.io/${{ github.repository_owner }} | tr '[:upper:]' '[:lower:]')" >> ${GITHUB_OUTPUT}
 | 
			
		||||
 | 
			
		||||
  gcc-amd64:
 | 
			
		||||
    name: Build and push GCC docker image (amd64)
 | 
			
		||||
    runs-on: heavy
 | 
			
		||||
    needs: repo
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
      - uses: actions/checkout@v4
 | 
			
		||||
@@ -57,7 +68,7 @@ jobs:
 | 
			
		||||
          DOCKERHUB_PW: ${{ secrets.DOCKERHUB_PW }}
 | 
			
		||||
        with:
 | 
			
		||||
          images: |
 | 
			
		||||
            ${{ env.GHCR_REPO }}/clio-gcc
 | 
			
		||||
            ${{ needs.repo.outputs.GHCR_REPO }}/clio-gcc
 | 
			
		||||
            rippleci/clio_gcc
 | 
			
		||||
          push_image: ${{ github.event_name != 'pull_request' }}
 | 
			
		||||
          directory: docker/compilers/gcc
 | 
			
		||||
@@ -76,6 +87,7 @@ jobs:
 | 
			
		||||
  gcc-arm64:
 | 
			
		||||
    name: Build and push GCC docker image (arm64)
 | 
			
		||||
    runs-on: heavy-arm64
 | 
			
		||||
    needs: repo
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
      - uses: actions/checkout@v4
 | 
			
		||||
@@ -94,7 +106,7 @@ jobs:
 | 
			
		||||
          DOCKERHUB_PW: ${{ secrets.DOCKERHUB_PW }}
 | 
			
		||||
        with:
 | 
			
		||||
          images: |
 | 
			
		||||
            ${{ env.GHCR_REPO }}/clio-gcc
 | 
			
		||||
            ${{ needs.repo.outputs.GHCR_REPO }}/clio-gcc
 | 
			
		||||
            rippleci/clio_gcc
 | 
			
		||||
          push_image: ${{ github.event_name != 'pull_request' }}
 | 
			
		||||
          directory: docker/compilers/gcc
 | 
			
		||||
@@ -113,7 +125,7 @@ jobs:
 | 
			
		||||
  gcc-merge:
 | 
			
		||||
    name: Merge and push multi-arch GCC docker image
 | 
			
		||||
    runs-on: heavy
 | 
			
		||||
    needs: [gcc-amd64, gcc-arm64]
 | 
			
		||||
    needs: [repo, gcc-amd64, gcc-arm64]
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
      - uses: actions/checkout@v4
 | 
			
		||||
@@ -142,14 +154,10 @@ jobs:
 | 
			
		||||
          username: ${{ secrets.DOCKERHUB_USER }}
 | 
			
		||||
          password: ${{ secrets.DOCKERHUB_PW }}
 | 
			
		||||
 | 
			
		||||
      - name: Make GHCR_REPO lowercase
 | 
			
		||||
        run: |
 | 
			
		||||
          echo "GHCR_REPO_LC=$(echo ${{env.GHCR_REPO}} | tr '[:upper:]' '[:lower:]')" >> ${GITHUB_ENV}
 | 
			
		||||
 | 
			
		||||
      - name: Create and push multi-arch manifest
 | 
			
		||||
        if: github.event_name != 'pull_request' && steps.changed-files.outputs.any_changed == 'true'
 | 
			
		||||
        run: |
 | 
			
		||||
          for image in ${{ env.GHCR_REPO_LC }}/clio-gcc rippleci/clio_gcc; do
 | 
			
		||||
          for image in ${{ needs.repo.outputs.GHCR_REPO }}/clio-gcc rippleci/clio_gcc; do
 | 
			
		||||
            docker buildx imagetools create \
 | 
			
		||||
              -t $image:latest \
 | 
			
		||||
              -t $image:${{ env.GCC_MAJOR_VERSION }} \
 | 
			
		||||
@@ -162,6 +170,7 @@ jobs:
 | 
			
		||||
  clang:
 | 
			
		||||
    name: Build and push Clang docker image
 | 
			
		||||
    runs-on: heavy
 | 
			
		||||
    needs: repo
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
      - uses: actions/checkout@v4
 | 
			
		||||
@@ -180,7 +189,7 @@ jobs:
 | 
			
		||||
          DOCKERHUB_PW: ${{ secrets.DOCKERHUB_PW }}
 | 
			
		||||
        with:
 | 
			
		||||
          images: |
 | 
			
		||||
            ${{ env.GHCR_REPO }}/clio-clang
 | 
			
		||||
            ${{ needs.repo.outputs.GHCR_REPO }}/clio-clang
 | 
			
		||||
            rippleci/clio_clang
 | 
			
		||||
          push_image: ${{ github.event_name != 'pull_request' }}
 | 
			
		||||
          directory: docker/compilers/clang
 | 
			
		||||
@@ -197,7 +206,7 @@ jobs:
 | 
			
		||||
  tools-amd64:
 | 
			
		||||
    name: Build and push tools docker image (amd64)
 | 
			
		||||
    runs-on: heavy
 | 
			
		||||
    needs: [gcc-merge]
 | 
			
		||||
    needs: [repo, gcc-merge]
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
      - uses: actions/checkout@v4
 | 
			
		||||
@@ -214,7 +223,7 @@ jobs:
 | 
			
		||||
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
        with:
 | 
			
		||||
          images: |
 | 
			
		||||
            ${{ env.GHCR_REPO }}/clio-tools
 | 
			
		||||
            ${{ needs.repo.outputs.GHCR_REPO }}/clio-tools
 | 
			
		||||
          push_image: ${{ github.event_name != 'pull_request' }}
 | 
			
		||||
          directory: docker/tools
 | 
			
		||||
          tags: |
 | 
			
		||||
@@ -222,12 +231,13 @@ jobs:
 | 
			
		||||
            type=raw,value=amd64-${{ github.sha }}
 | 
			
		||||
          platforms: linux/amd64
 | 
			
		||||
          build_args: |
 | 
			
		||||
            GHCR_REPO=${{ needs.repo.outputs.GHCR_REPO }}
 | 
			
		||||
            GCC_VERSION=${{ env.GCC_VERSION }}
 | 
			
		||||
 | 
			
		||||
  tools-arm64:
 | 
			
		||||
    name: Build and push tools docker image (arm64)
 | 
			
		||||
    runs-on: heavy-arm64
 | 
			
		||||
    needs: [gcc-merge]
 | 
			
		||||
    needs: [repo, gcc-merge]
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
      - uses: actions/checkout@v4
 | 
			
		||||
@@ -244,7 +254,7 @@ jobs:
 | 
			
		||||
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
        with:
 | 
			
		||||
          images: |
 | 
			
		||||
            ${{ env.GHCR_REPO }}/clio-tools
 | 
			
		||||
            ${{ needs.repo.outputs.GHCR_REPO }}/clio-tools
 | 
			
		||||
          push_image: ${{ github.event_name != 'pull_request' }}
 | 
			
		||||
          directory: docker/tools
 | 
			
		||||
          tags: |
 | 
			
		||||
@@ -252,12 +262,13 @@ jobs:
 | 
			
		||||
            type=raw,value=arm64-${{ github.sha }}
 | 
			
		||||
          platforms: linux/arm64
 | 
			
		||||
          build_args: |
 | 
			
		||||
            GHCR_REPO=${{ needs.repo.outputs.GHCR_REPO }}
 | 
			
		||||
            GCC_VERSION=${{ env.GCC_VERSION }}
 | 
			
		||||
 | 
			
		||||
  tools-merge:
 | 
			
		||||
    name: Merge and push multi-arch tools docker image
 | 
			
		||||
    runs-on: heavy
 | 
			
		||||
    needs: [tools-amd64, tools-arm64]
 | 
			
		||||
    needs: [repo, tools-amd64, tools-arm64]
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
      - uses: actions/checkout@v4
 | 
			
		||||
@@ -279,14 +290,10 @@ jobs:
 | 
			
		||||
          username: ${{ github.repository_owner }}
 | 
			
		||||
          password: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
 | 
			
		||||
      - name: Make GHCR_REPO lowercase
 | 
			
		||||
        run: |
 | 
			
		||||
          echo "GHCR_REPO_LC=$(echo ${{env.GHCR_REPO}} | tr '[:upper:]' '[:lower:]')" >> ${GITHUB_ENV}
 | 
			
		||||
 | 
			
		||||
      - name: Create and push multi-arch manifest
 | 
			
		||||
        if: github.event_name != 'pull_request' && steps.changed-files.outputs.any_changed == 'true'
 | 
			
		||||
        run: |
 | 
			
		||||
          image=${{ env.GHCR_REPO_LC }}/clio-tools
 | 
			
		||||
          image=${{ needs.repo.outputs.GHCR_REPO }}/clio-tools
 | 
			
		||||
          docker buildx imagetools create \
 | 
			
		||||
            -t $image:latest \
 | 
			
		||||
            -t $image:${{ github.sha }} \
 | 
			
		||||
@@ -296,7 +303,7 @@ jobs:
 | 
			
		||||
  ci:
 | 
			
		||||
    name: Build and push CI docker image
 | 
			
		||||
    runs-on: heavy
 | 
			
		||||
    needs: [gcc-merge, clang, tools-merge]
 | 
			
		||||
    needs: [repo, gcc-merge, clang, tools-merge]
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
      - uses: actions/checkout@v4
 | 
			
		||||
@@ -307,7 +314,7 @@ jobs:
 | 
			
		||||
          DOCKERHUB_PW: ${{ secrets.DOCKERHUB_PW }}
 | 
			
		||||
        with:
 | 
			
		||||
          images: |
 | 
			
		||||
            ${{ env.GHCR_REPO }}/clio-ci
 | 
			
		||||
            ${{ needs.repo.outputs.GHCR_REPO }}/clio-ci
 | 
			
		||||
            rippleci/clio_ci
 | 
			
		||||
          push_image: ${{ github.event_name != 'pull_request' }}
 | 
			
		||||
          directory: docker/ci
 | 
			
		||||
@@ -317,7 +324,9 @@ jobs:
 | 
			
		||||
            type=raw,value=${{ github.sha }}
 | 
			
		||||
          platforms: linux/amd64,linux/arm64
 | 
			
		||||
          build_args: |
 | 
			
		||||
            GHCR_REPO=${{ needs.repo.outputs.GHCR_REPO }}
 | 
			
		||||
            CLANG_MAJOR_VERSION=${{ env.CLANG_MAJOR_VERSION }}
 | 
			
		||||
            GCC_MAJOR_VERSION=${{ env.GCC_MAJOR_VERSION }}
 | 
			
		||||
            GCC_VERSION=${{ env.GCC_VERSION }}
 | 
			
		||||
          dockerhub_repo: rippleci/clio_ci
 | 
			
		||||
          dockerhub_description: CI image for XRPLF/clio.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										8
									
								
								.github/workflows/upload_conan_deps.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								.github/workflows/upload_conan_deps.yml
									
									
									
									
										vendored
									
									
								
							@@ -17,8 +17,8 @@ on:
 | 
			
		||||
 | 
			
		||||
      - .github/actions/generate/action.yml
 | 
			
		||||
      - .github/actions/prepare_runner/action.yml
 | 
			
		||||
      - .github/scripts/conan/generate_matrix.py
 | 
			
		||||
      - .github/scripts/conan/init.sh
 | 
			
		||||
      - ".github/scripts/conan/**"
 | 
			
		||||
      - "!.github/scripts/conan/apple-clang-local.profile"
 | 
			
		||||
 | 
			
		||||
      - conanfile.py
 | 
			
		||||
      - conan.lock
 | 
			
		||||
@@ -29,8 +29,8 @@ on:
 | 
			
		||||
 | 
			
		||||
      - .github/actions/generate/action.yml
 | 
			
		||||
      - .github/actions/prepare_runner/action.yml
 | 
			
		||||
      - .github/scripts/conan/generate_matrix.py
 | 
			
		||||
      - .github/scripts/conan/init.sh
 | 
			
		||||
      - ".github/scripts/conan/**"
 | 
			
		||||
      - "!.github/scripts/conan/apple-clang-local.profile"
 | 
			
		||||
 | 
			
		||||
      - conanfile.py
 | 
			
		||||
      - conan.lock
 | 
			
		||||
 
 | 
			
		||||
@@ -55,6 +55,12 @@ repos:
 | 
			
		||||
            --ignore-words=pre-commit-hooks/codespell_ignore.txt,
 | 
			
		||||
          ]
 | 
			
		||||
 | 
			
		||||
  - repo: https://github.com/trufflesecurity/trufflehog
 | 
			
		||||
    rev: 6641d4ba5b684fffe195b9820345de1bf19f3181 # frozen: v3.89.2
 | 
			
		||||
    hooks:
 | 
			
		||||
      - id: trufflehog
 | 
			
		||||
        entry: trufflehog git file://. --since-commit HEAD --no-verification --fail
 | 
			
		||||
 | 
			
		||||
  # Running some C++ hooks before clang-format
 | 
			
		||||
  # to ensure that the style is consistent.
 | 
			
		||||
  - repo: local
 | 
			
		||||
 
 | 
			
		||||
@@ -1,10 +1,11 @@
 | 
			
		||||
ARG GHCR_REPO=invalid
 | 
			
		||||
ARG CLANG_MAJOR_VERSION=invalid
 | 
			
		||||
ARG GCC_VERSION=invalid
 | 
			
		||||
 | 
			
		||||
FROM ghcr.io/xrplf/clio-gcc:${GCC_VERSION} AS clio-gcc
 | 
			
		||||
FROM ghcr.io/xrplf/clio-tools:latest AS clio-tools
 | 
			
		||||
FROM ${GHCR_REPO}/clio-gcc:${GCC_VERSION} AS clio-gcc
 | 
			
		||||
FROM ${GHCR_REPO}/clio-tools:latest AS clio-tools
 | 
			
		||||
 | 
			
		||||
FROM ghcr.io/xrplf/clio-clang:${CLANG_MAJOR_VERSION}
 | 
			
		||||
FROM ${GHCR_REPO}/clio-clang:${CLANG_MAJOR_VERSION}
 | 
			
		||||
 | 
			
		||||
ARG DEBIAN_FRONTEND=noninteractive
 | 
			
		||||
 | 
			
		||||
@@ -59,27 +60,29 @@ RUN apt-get update \
 | 
			
		||||
    && apt-get clean \
 | 
			
		||||
    && rm -rf /var/lib/apt/lists/*
 | 
			
		||||
 | 
			
		||||
# Install gcc-12 and make ldconfig aware of the new libstdc++ location (for gcc)
 | 
			
		||||
ARG GCC_MAJOR_VERSION=invalid
 | 
			
		||||
 | 
			
		||||
# Install custom-built gcc and make ldconfig aware of the new libstdc++ location (for gcc)
 | 
			
		||||
# Note: Clang is using libc++ instead
 | 
			
		||||
COPY --from=clio-gcc /gcc12.deb /
 | 
			
		||||
COPY --from=clio-gcc /gcc${GCC_MAJOR_VERSION}.deb /
 | 
			
		||||
RUN apt-get update \
 | 
			
		||||
    && apt-get install -y --no-install-recommends --no-install-suggests \
 | 
			
		||||
        binutils \
 | 
			
		||||
        libc6-dev \
 | 
			
		||||
    && apt-get clean \
 | 
			
		||||
    && rm -rf /var/lib/apt/lists/* \
 | 
			
		||||
    && dpkg -i /gcc12.deb \
 | 
			
		||||
    && rm -rf /gcc12.deb \
 | 
			
		||||
    && dpkg -i /gcc${GCC_MAJOR_VERSION}.deb \
 | 
			
		||||
    && rm -rf /gcc${GCC_MAJOR_VERSION}.deb \
 | 
			
		||||
    && ldconfig
 | 
			
		||||
 | 
			
		||||
# Rewire to use gcc-12 as default compiler
 | 
			
		||||
RUN update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-12 100 \
 | 
			
		||||
    && update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++-12 100 \
 | 
			
		||||
    && update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 100 \
 | 
			
		||||
    && update-alternatives --install /usr/bin/cc cc /usr/bin/gcc-12 100 \
 | 
			
		||||
    && update-alternatives --install /usr/bin/gcov gcov /usr/bin/gcov-12 100 \
 | 
			
		||||
    && update-alternatives --install /usr/bin/gcov-dump gcov-dump /usr/bin/gcov-dump-12 100 \
 | 
			
		||||
    && update-alternatives --install /usr/bin/gcov-tool gcov-tool /usr/bin/gcov-tool-12 100
 | 
			
		||||
# Rewire to use our custom-built gcc as default compiler
 | 
			
		||||
RUN update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-${GCC_MAJOR_VERSION} 100 \
 | 
			
		||||
    && update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++-${GCC_MAJOR_VERSION} 100 \
 | 
			
		||||
    && update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-${GCC_MAJOR_VERSION} 100 \
 | 
			
		||||
    && update-alternatives --install /usr/bin/cc cc /usr/bin/gcc-${GCC_MAJOR_VERSION} 100 \
 | 
			
		||||
    && update-alternatives --install /usr/bin/gcov gcov /usr/bin/gcov-${GCC_MAJOR_VERSION} 100 \
 | 
			
		||||
    && update-alternatives --install /usr/bin/gcov-dump gcov-dump /usr/bin/gcov-dump-${GCC_MAJOR_VERSION} 100 \
 | 
			
		||||
    && update-alternatives --install /usr/bin/gcov-tool gcov-tool /usr/bin/gcov-tool-${GCC_MAJOR_VERSION} 100
 | 
			
		||||
 | 
			
		||||
COPY --from=clio-tools \
 | 
			
		||||
    /usr/local/bin/mold \
 | 
			
		||||
 
 | 
			
		||||
@@ -10,7 +10,7 @@ The image is based on Ubuntu 20.04 and contains:
 | 
			
		||||
- ClangBuildAnalyzer 1.6.0
 | 
			
		||||
- Conan 2.17.0
 | 
			
		||||
- Doxygen 1.12
 | 
			
		||||
- GCC 12.3.0
 | 
			
		||||
- GCC 14.3.0
 | 
			
		||||
- gh 2.74
 | 
			
		||||
- git-cliff 2.9.1
 | 
			
		||||
- mold 2.40.1
 | 
			
		||||
 
 | 
			
		||||
@@ -4,8 +4,8 @@ build_type=Release
 | 
			
		||||
compiler=gcc
 | 
			
		||||
compiler.cppstd=20
 | 
			
		||||
compiler.libcxx=libstdc++11
 | 
			
		||||
compiler.version=12
 | 
			
		||||
compiler.version=14
 | 
			
		||||
os=Linux
 | 
			
		||||
 | 
			
		||||
[conf]
 | 
			
		||||
tools.build:compiler_executables={"c": "/usr/bin/gcc-12", "cpp": "/usr/bin/g++-12"}
 | 
			
		||||
tools.build:compiler_executables={"c": "/usr/bin/gcc-14", "cpp": "/usr/bin/g++-14"}
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@ ARG UBUNTU_VERSION
 | 
			
		||||
 | 
			
		||||
ARG GCC_MAJOR_VERSION
 | 
			
		||||
 | 
			
		||||
ARG BUILD_VERSION=7
 | 
			
		||||
ARG BUILD_VERSION=0
 | 
			
		||||
 | 
			
		||||
ARG DEBIAN_FRONTEND=noninteractive
 | 
			
		||||
ARG TARGETARCH
 | 
			
		||||
@@ -68,12 +68,13 @@ RUN /gcc-$GCC_VERSION/configure \
 | 
			
		||||
        --enable-checking=release
 | 
			
		||||
 | 
			
		||||
RUN make -j "$(nproc)"
 | 
			
		||||
RUN make install-strip DESTDIR=/gcc-$GCC_VERSION-$BUILD_VERSION-ubuntu-$UBUNTU_VERSION
 | 
			
		||||
 | 
			
		||||
RUN make install-strip DESTDIR=/gcc-$GCC_VERSION-$BUILD_VERSION-ubuntu-$UBUNTU_VERSION \
 | 
			
		||||
    && mkdir -p /gcc-$GCC_VERSION-$BUILD_VERSION-ubuntu-$UBUNTU_VERSION/usr/share/gdb/auto-load/usr/lib64 \
 | 
			
		||||
RUN export GDB_AUTOLOAD_DIR="/gcc-$GCC_VERSION-$BUILD_VERSION-ubuntu-$UBUNTU_VERSION/usr/share/gdb/auto-load/usr/lib64" \
 | 
			
		||||
    && mkdir -p "$GDB_AUTOLOAD_DIR" \
 | 
			
		||||
    && mv \
 | 
			
		||||
        /gcc-$GCC_VERSION-$BUILD_VERSION-ubuntu-$UBUNTU_VERSION/usr/lib64/libstdc++.so.6.0.30-gdb.py \
 | 
			
		||||
        /gcc-$GCC_VERSION-$BUILD_VERSION-ubuntu-$UBUNTU_VERSION/usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.30-gdb.py
 | 
			
		||||
        /gcc-$GCC_VERSION-$BUILD_VERSION-ubuntu-$UBUNTU_VERSION/usr/lib64/libstdc++.so.*-gdb.py \
 | 
			
		||||
        $GDB_AUTOLOAD_DIR/
 | 
			
		||||
 | 
			
		||||
# Generate deb
 | 
			
		||||
WORKDIR /
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
Package: gcc-12-ubuntu-UBUNTUVERSION
 | 
			
		||||
Package: gcc-14-ubuntu-UBUNTUVERSION
 | 
			
		||||
Version: VERSION
 | 
			
		||||
Architecture: TARGETARCH
 | 
			
		||||
Maintainer: Alex Kremer <akremer@ripple.com>
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,7 @@
 | 
			
		||||
ARG GHCR_REPO=invalid
 | 
			
		||||
ARG GCC_VERSION=invalid
 | 
			
		||||
 | 
			
		||||
FROM ghcr.io/xrplf/clio-gcc:${GCC_VERSION}
 | 
			
		||||
FROM ${GHCR_REPO}/clio-gcc:${GCC_VERSION}
 | 
			
		||||
 | 
			
		||||
ARG DEBIAN_FRONTEND=noninteractive
 | 
			
		||||
ARG TARGETARCH
 | 
			
		||||
 
 | 
			
		||||
@@ -35,7 +35,7 @@ The default profile is the file in `~/.conan2/profiles/default`.
 | 
			
		||||
 | 
			
		||||
Here are some examples of possible profiles:
 | 
			
		||||
 | 
			
		||||
**Mac apple-clang 16 example**:
 | 
			
		||||
**Mac apple-clang 17 example**:
 | 
			
		||||
 | 
			
		||||
```text
 | 
			
		||||
[settings]
 | 
			
		||||
@@ -44,7 +44,7 @@ build_type=Release
 | 
			
		||||
compiler=apple-clang
 | 
			
		||||
compiler.cppstd=20
 | 
			
		||||
compiler.libcxx=libc++
 | 
			
		||||
compiler.version=16
 | 
			
		||||
compiler.version=17
 | 
			
		||||
os=Macos
 | 
			
		||||
 | 
			
		||||
[conf]
 | 
			
		||||
 
 | 
			
		||||
@@ -41,7 +41,6 @@
 | 
			
		||||
#include "util/build/Build.hpp"
 | 
			
		||||
#include "util/config/ConfigDefinition.hpp"
 | 
			
		||||
#include "util/log/Logger.hpp"
 | 
			
		||||
#include "util/prometheus/Prometheus.hpp"
 | 
			
		||||
#include "web/AdminVerificationStrategy.hpp"
 | 
			
		||||
#include "web/RPCServerHandler.hpp"
 | 
			
		||||
#include "web/Server.hpp"
 | 
			
		||||
@@ -91,7 +90,6 @@ ClioApplication::ClioApplication(util::config::ClioConfigDefinition const& confi
 | 
			
		||||
    : config_(config), signalsHandler_{config_}
 | 
			
		||||
{
 | 
			
		||||
    LOG(util::LogService::info()) << "Clio version: " << util::build::getClioFullVersionString();
 | 
			
		||||
    PrometheusService::init(config);
 | 
			
		||||
    signalsHandler_.subscribeToStop([this]() { appStopper_.stop(); });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -25,6 +25,7 @@
 | 
			
		||||
#include "util/TerminationHandler.hpp"
 | 
			
		||||
#include "util/config/ConfigDefinition.hpp"
 | 
			
		||||
#include "util/log/Logger.hpp"
 | 
			
		||||
#include "util/prometheus/Prometheus.hpp"
 | 
			
		||||
 | 
			
		||||
#include <cstdlib>
 | 
			
		||||
#include <exception>
 | 
			
		||||
@@ -52,6 +53,7 @@ try {
 | 
			
		||||
            if (not app::parseConfig(run.configPath))
 | 
			
		||||
                return EXIT_FAILURE;
 | 
			
		||||
 | 
			
		||||
            PrometheusService::init(gClioConfig);
 | 
			
		||||
            if (auto const initSuccess = util::LogService::init(gClioConfig); not initSuccess) {
 | 
			
		||||
                std::cerr << initSuccess.error() << std::endl;
 | 
			
		||||
                return EXIT_FAILURE;
 | 
			
		||||
 
 | 
			
		||||
@@ -197,22 +197,31 @@ private:
 | 
			
		||||
    std::expected<ValueType, ErrorType>
 | 
			
		||||
    wait(boost::asio::yield_context yield, Updater updater, Verifier verifier)
 | 
			
		||||
    {
 | 
			
		||||
        boost::asio::steady_timer timer{yield.get_executor(), boost::asio::steady_timer::duration::max()};
 | 
			
		||||
        struct SharedContext {
 | 
			
		||||
            SharedContext(boost::asio::yield_context y)
 | 
			
		||||
                : timer(y.get_executor(), boost::asio::steady_timer::duration::max())
 | 
			
		||||
            {
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            boost::asio::steady_timer timer;
 | 
			
		||||
            std::optional<std::expected<ValueType, ErrorType>> result;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        auto sharedContext = std::make_shared<SharedContext>(yield);
 | 
			
		||||
        boost::system::error_code errorCode;
 | 
			
		||||
 | 
			
		||||
        std::optional<std::expected<ValueType, ErrorType>> result;
 | 
			
		||||
        boost::signals2::scoped_connection const slot =
 | 
			
		||||
            updateFinished_.connect([yield, &timer, &result](std::expected<ValueType, ErrorType> value) {
 | 
			
		||||
                boost::asio::spawn(yield, [&timer, &result, value = std::move(value)](auto&&) {
 | 
			
		||||
                    result = std::move(value);
 | 
			
		||||
                    timer.cancel();
 | 
			
		||||
            updateFinished_.connect([yield, sharedContext](std::expected<ValueType, ErrorType> value) {
 | 
			
		||||
                boost::asio::spawn(yield, [sharedContext = std::move(sharedContext), value = std::move(value)](auto&&) {
 | 
			
		||||
                    sharedContext->result = std::move(value);
 | 
			
		||||
                    sharedContext->timer.cancel();
 | 
			
		||||
                });
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
        if (state_ == State::Updating) {
 | 
			
		||||
            timer.async_wait(yield[errorCode]);
 | 
			
		||||
            ASSERT(result.has_value(), "There should be some value after waiting");
 | 
			
		||||
            return std::move(result).value();
 | 
			
		||||
            sharedContext->timer.async_wait(yield[errorCode]);
 | 
			
		||||
            ASSERT(sharedContext->result.has_value(), "There should be some value after waiting");
 | 
			
		||||
            return std::move(sharedContext->result).value();
 | 
			
		||||
        }
 | 
			
		||||
        return asyncGet(yield, std::move(updater), std::move(verifier));
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -25,6 +25,9 @@
 | 
			
		||||
#include "util/config/ArrayView.hpp"
 | 
			
		||||
#include "util/config/ConfigDefinition.hpp"
 | 
			
		||||
#include "util/config/ObjectView.hpp"
 | 
			
		||||
#include "util/prometheus/Counter.hpp"
 | 
			
		||||
#include "util/prometheus/Label.hpp"
 | 
			
		||||
#include "util/prometheus/Prometheus.hpp"
 | 
			
		||||
 | 
			
		||||
#include <boost/algorithm/string/predicate.hpp>
 | 
			
		||||
#include <boost/date_time/posix_time/posix_time_duration.hpp>
 | 
			
		||||
@@ -42,6 +45,7 @@
 | 
			
		||||
#include <boost/log/keywords/target_file_name.hpp>
 | 
			
		||||
#include <boost/log/keywords/time_based_rotation.hpp>
 | 
			
		||||
#include <boost/log/sinks/text_file_backend.hpp>
 | 
			
		||||
#include <boost/log/utility/exception_handler.hpp>
 | 
			
		||||
#include <boost/log/utility/setup/common_attributes.hpp>
 | 
			
		||||
#include <boost/log/utility/setup/console.hpp>
 | 
			
		||||
#include <boost/log/utility/setup/file.hpp>
 | 
			
		||||
@@ -52,7 +56,9 @@
 | 
			
		||||
#include <array>
 | 
			
		||||
#include <cstddef>
 | 
			
		||||
#include <cstdint>
 | 
			
		||||
#include <exception>
 | 
			
		||||
#include <filesystem>
 | 
			
		||||
#include <functional>
 | 
			
		||||
#include <ios>
 | 
			
		||||
#include <iostream>
 | 
			
		||||
#include <optional>
 | 
			
		||||
@@ -65,6 +71,30 @@
 | 
			
		||||
 | 
			
		||||
namespace util {
 | 
			
		||||
 | 
			
		||||
namespace {
 | 
			
		||||
 | 
			
		||||
class LoggerExceptionHandler {
 | 
			
		||||
    std::reference_wrapper<util::prometheus::CounterInt> exceptionCounter_ =
 | 
			
		||||
        PrometheusService::counterInt("logger_exceptions_total_number", util::prometheus::Labels{});
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
    using result_type = void;
 | 
			
		||||
 | 
			
		||||
    LoggerExceptionHandler()
 | 
			
		||||
    {
 | 
			
		||||
        ASSERT(PrometheusService::isInitialised(), "Prometheus should be initialised before Logger");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void
 | 
			
		||||
    operator()(std::exception const& e) const
 | 
			
		||||
    {
 | 
			
		||||
        std::cerr << fmt::format("Exception in logger: {}\n", e.what());
 | 
			
		||||
        ++exceptionCounter_.get();
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
}  // namespace
 | 
			
		||||
 | 
			
		||||
Logger LogService::generalLog = Logger{"General"};
 | 
			
		||||
Logger LogService::alertLog = Logger{"Alert"};
 | 
			
		||||
boost::log::filter LogService::filter{};
 | 
			
		||||
@@ -160,6 +190,10 @@ LogService::init(config::ClioConfigDefinition const& config)
 | 
			
		||||
            sinks::file::make_collector(keywords::target = dirPath, keywords::max_size = dirSize)
 | 
			
		||||
        );
 | 
			
		||||
        fileSink->locked_backend()->scan_for_files();
 | 
			
		||||
 | 
			
		||||
        boost::log::core::get()->set_exception_handler(
 | 
			
		||||
            boost::log::make_exception_handler<std::exception>(LoggerExceptionHandler())
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // get default severity, can be overridden per channel using the `log_channels` array
 | 
			
		||||
 
 | 
			
		||||
@@ -184,6 +184,12 @@ PrometheusService::init(util::config::ClioConfigDefinition const& config)
 | 
			
		||||
    impl = std::make_unique<util::prometheus::PrometheusImpl>(enabled, compressReply);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool
 | 
			
		||||
PrometheusService::isInitialised()
 | 
			
		||||
{
 | 
			
		||||
    return impl != nullptr;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
util::prometheus::Bool
 | 
			
		||||
PrometheusService::boolMetric(std::string name, util::prometheus::Labels labels, std::optional<std::string> description)
 | 
			
		||||
{
 | 
			
		||||
@@ -271,7 +277,7 @@ PrometheusService::replaceInstance(std::unique_ptr<util::prometheus::PrometheusI
 | 
			
		||||
util::prometheus::PrometheusInterface&
 | 
			
		||||
PrometheusService::instance()
 | 
			
		||||
{
 | 
			
		||||
    ASSERT(impl != nullptr, "PrometheusService::instance() called before init()");
 | 
			
		||||
    ASSERT(isInitialised(), "PrometheusService::instance() called before init()");
 | 
			
		||||
    return *impl;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -260,6 +260,14 @@ public:
 | 
			
		||||
    static void
 | 
			
		||||
    init(util::config::ClioConfigDefinition const& config);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @brief Whether the singleton has been already initialised
 | 
			
		||||
     *
 | 
			
		||||
     * @return True if the singleton was already initialised and false otherwise
 | 
			
		||||
     */
 | 
			
		||||
    static bool
 | 
			
		||||
    isInitialised();
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @brief Get a bool based metric. It will be created if it doesn't exist
 | 
			
		||||
     * @note Prometheus does not have a native bool type, so we use a counter with a value of 0 or 1
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user