mirror of
				https://github.com/XRPLF/clio.git
				synced 2025-11-04 03:45:50 +00:00 
			
		
		
		
	There are 2 things to know about prettier: - it's quite pretty most of the time - it's not configurable
		
			
				
	
	
		
			193 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
			
		
		
	
	
			193 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
name: Reusable build
 | 
						|
on:
 | 
						|
  workflow_call:
 | 
						|
    inputs:
 | 
						|
      runs_on:
 | 
						|
        description: Runner to run the job on
 | 
						|
        required: true
 | 
						|
        type: string
 | 
						|
        default: heavy
 | 
						|
 | 
						|
      container:
 | 
						|
        description: "The container object as a JSON string (leave empty to run natively)"
 | 
						|
        required: true
 | 
						|
        type: string
 | 
						|
        default: ""
 | 
						|
 | 
						|
      conan_profile:
 | 
						|
        description: Conan profile to use
 | 
						|
        required: true
 | 
						|
        type: string
 | 
						|
 | 
						|
      build_type:
 | 
						|
        description: Build type
 | 
						|
        required: true
 | 
						|
        type: string
 | 
						|
 | 
						|
      disable_cache:
 | 
						|
        description: Whether ccache and conan cache should be disabled
 | 
						|
        required: false
 | 
						|
        type: boolean
 | 
						|
        default: false
 | 
						|
 | 
						|
      code_coverage:
 | 
						|
        description: Whether to enable code coverage
 | 
						|
        required: true
 | 
						|
        type: boolean
 | 
						|
        default: false
 | 
						|
 | 
						|
      static:
 | 
						|
        description: Whether to build static binaries
 | 
						|
        required: true
 | 
						|
        type: boolean
 | 
						|
        default: true
 | 
						|
 | 
						|
      unit_tests:
 | 
						|
        description: Whether to run unit tests
 | 
						|
        required: true
 | 
						|
        type: boolean
 | 
						|
        default: false
 | 
						|
 | 
						|
      integration_tests:
 | 
						|
        description: Whether to run integration tests
 | 
						|
        required: true
 | 
						|
        type: boolean
 | 
						|
        default: false
 | 
						|
 | 
						|
      clio_server:
 | 
						|
        description: Whether to build clio_server
 | 
						|
        required: true
 | 
						|
        type: boolean
 | 
						|
        default: true
 | 
						|
 | 
						|
      target:
 | 
						|
        description: Build target name
 | 
						|
        required: false
 | 
						|
        type: string
 | 
						|
        default: all
 | 
						|
 | 
						|
      sanitizer:
 | 
						|
        description: Sanitizer to use
 | 
						|
        required: false
 | 
						|
        type: string
 | 
						|
        default: "false"
 | 
						|
 | 
						|
jobs:
 | 
						|
  build:
 | 
						|
    name: Build ${{ inputs.container != '' && 'in container' || 'natively' }}
 | 
						|
    runs-on: ${{ inputs.runs_on }}
 | 
						|
    container: ${{ inputs.container != '' && fromJson(inputs.container) || null }}
 | 
						|
 | 
						|
    steps:
 | 
						|
      - name: Clean workdir
 | 
						|
        if: ${{ runner.os == 'macOS' }}
 | 
						|
        uses: kuznetsss/workspace-cleanup@80b9863b45562c148927c3d53621ef354e5ae7ce #v1.0
 | 
						|
 | 
						|
      - uses: actions/checkout@v4
 | 
						|
        with:
 | 
						|
          fetch-depth: 0
 | 
						|
 | 
						|
      - name: Prepare runner
 | 
						|
        uses: ./.github/actions/prepare_runner
 | 
						|
        with:
 | 
						|
          disable_ccache: ${{ inputs.disable_cache }}
 | 
						|
 | 
						|
      - name: Setup conan
 | 
						|
        uses: ./.github/actions/setup_conan
 | 
						|
        id: conan
 | 
						|
        with:
 | 
						|
          conan_profile: ${{ inputs.conan_profile }}
 | 
						|
 | 
						|
      - name: Restore cache
 | 
						|
        if: ${{ !inputs.disable_cache }}
 | 
						|
        uses: ./.github/actions/restore_cache
 | 
						|
        id: restore_cache
 | 
						|
        with:
 | 
						|
          conan_dir: ${{ env.CONAN_USER_HOME }}/.conan
 | 
						|
          conan_profile: ${{ steps.conan.outputs.conan_profile }}
 | 
						|
          ccache_dir: ${{ env.CCACHE_DIR }}
 | 
						|
          build_type: ${{ inputs.build_type }}
 | 
						|
          code_coverage: ${{ inputs.code_coverage }}
 | 
						|
 | 
						|
      - name: Run conan and cmake
 | 
						|
        uses: ./.github/actions/generate
 | 
						|
        with:
 | 
						|
          conan_profile: ${{ steps.conan.outputs.conan_profile }}
 | 
						|
          conan_cache_hit: ${{ !inputs.disable_cache && steps.restore_cache.outputs.conan_cache_hit }}
 | 
						|
          build_type: ${{ inputs.build_type }}
 | 
						|
          code_coverage: ${{ inputs.code_coverage }}
 | 
						|
          static: ${{ inputs.static }}
 | 
						|
          sanitizer: ${{ inputs.sanitizer }}
 | 
						|
 | 
						|
      - name: Build Clio
 | 
						|
        uses: ./.github/actions/build_clio
 | 
						|
        with:
 | 
						|
          target: ${{ inputs.target }}
 | 
						|
 | 
						|
      - name: Show ccache's statistics
 | 
						|
        if: ${{ !inputs.disable_cache }}
 | 
						|
        shell: bash
 | 
						|
        id: ccache_stats
 | 
						|
        run: |
 | 
						|
          ccache -s > /tmp/ccache.stats
 | 
						|
          miss_rate=$(cat /tmp/ccache.stats | grep 'Misses' | head -n1 | sed 's/.*(\(.*\)%).*/\1/')
 | 
						|
          echo "miss_rate=${miss_rate}" >> $GITHUB_OUTPUT
 | 
						|
          cat /tmp/ccache.stats
 | 
						|
 | 
						|
      - name: Strip unit_tests
 | 
						|
        if: ${{ inputs.unit_tests && !inputs.code_coverage && inputs.sanitizer == 'false' }}
 | 
						|
        run: strip build/clio_tests
 | 
						|
 | 
						|
      - name: Strip integration_tests
 | 
						|
        if: ${{ inputs.integration_tests && !inputs.code_coverage }}
 | 
						|
        run: strip build/clio_integration_tests
 | 
						|
 | 
						|
      - name: Upload clio_server
 | 
						|
        if: ${{ inputs.clio_server }}
 | 
						|
        uses: actions/upload-artifact@v4
 | 
						|
        with:
 | 
						|
          name: clio_server_${{ runner.os }}_${{ inputs.build_type }}_${{ steps.conan.outputs.conan_profile }}
 | 
						|
          path: build/clio_server
 | 
						|
 | 
						|
      - name: Upload clio_tests
 | 
						|
        if: ${{ inputs.unit_tests && !inputs.code_coverage }}
 | 
						|
        uses: actions/upload-artifact@v4
 | 
						|
        with:
 | 
						|
          name: clio_tests_${{ runner.os }}_${{ inputs.build_type }}_${{ steps.conan.outputs.conan_profile }}
 | 
						|
          path: build/clio_tests
 | 
						|
 | 
						|
      - name: Upload clio_integration_tests
 | 
						|
        if: ${{ inputs.integration_tests && !inputs.code_coverage }}
 | 
						|
        uses: actions/upload-artifact@v4
 | 
						|
        with:
 | 
						|
          name: clio_integration_tests_${{ runner.os }}_${{ inputs.build_type }}_${{ steps.conan.outputs.conan_profile }}
 | 
						|
          path: build/clio_integration_tests
 | 
						|
 | 
						|
      - name: Save cache
 | 
						|
        if: ${{ !inputs.disable_cache && github.ref == 'refs/heads/develop' }}
 | 
						|
        uses: ./.github/actions/save_cache
 | 
						|
        with:
 | 
						|
          conan_dir: ${{ env.CONAN_USER_HOME }}/.conan
 | 
						|
          conan_hash: ${{ steps.restore_cache.outputs.conan_hash }}
 | 
						|
          conan_cache_hit: ${{ steps.restore_cache.outputs.conan_cache_hit }}
 | 
						|
          ccache_dir: ${{ env.CCACHE_DIR }}
 | 
						|
          ccache_cache_hit: ${{ steps.restore_cache.outputs.ccache_cache_hit }}
 | 
						|
          ccache_cache_miss_rate: ${{ steps.ccache_stats.outputs.miss_rate }}
 | 
						|
          build_type: ${{ inputs.build_type }}
 | 
						|
          code_coverage: ${{ inputs.code_coverage }}
 | 
						|
          conan_profile: ${{ steps.conan.outputs.conan_profile }}
 | 
						|
 | 
						|
      # TODO: This is not a part of build process but it is the easiest way to do it here.
 | 
						|
      # It will be refactored in https://github.com/XRPLF/clio/issues/1075
 | 
						|
      - name: Run code coverage
 | 
						|
        if: ${{ inputs.code_coverage }}
 | 
						|
        uses: ./.github/actions/code_coverage
 | 
						|
 | 
						|
  upload_coverage_report:
 | 
						|
    if: ${{ inputs.code_coverage }}
 | 
						|
    name: Codecov
 | 
						|
    needs: build
 | 
						|
    uses: ./.github/workflows/upload_coverage_report.yml
 | 
						|
    secrets:
 | 
						|
      CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
 |