name: Nightly release

on:
  schedule:
    - cron: "0 8 * * 1-5"
  workflow_dispatch:
  pull_request:
    paths:
      - ".github/workflows/nightly.yml"
      - ".github/workflows/build_clio_docker_image.yml"

concurrency:
  # Only cancel in-progress jobs or runs for the current workflow - matches against branch & tags
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  build-and-test:
    name: Build and Test

    strategy:
      fail-fast: false
      matrix:
        include:
          - os: macos15
            conan_profile: default_apple_clang
            build_type: Release
            static: false
          - os: heavy
            conan_profile: gcc
            build_type: Release
            static: true
            container: '{ "image": "ghcr.io/xrplf/clio-ci:latest" }'
          - os: heavy
            conan_profile: gcc
            build_type: Debug
            static: true
            container: '{ "image": "ghcr.io/xrplf/clio-ci:latest" }'

    uses: ./.github/workflows/build_and_test.yml
    with:
      runs_on: ${{ matrix.os }}
      container: ${{ matrix.container }}
      conan_profile: ${{ matrix.conan_profile }}
      build_type: ${{ matrix.build_type }}
      static: ${{ matrix.static }}
      run_unit_tests: true
      run_integration_tests: ${{ matrix.os != 'macos15' }}
      upload_clio_server: true
      disable_cache: true

  analyze_build_time:
    name: Analyze Build Time

    strategy:
      fail-fast: false
      matrix:
        include:
          # TODO: Enable when we have at least ubuntu 22.04
          # as ClangBuildAnalyzer requires relatively modern glibc
          #
          # - os: heavy
          #   conan_profile: clang
          #   container: '{ "image": "ghcr.io/xrplf/clio-ci:latest" }'
          #   static: true
          - os: macos15
            conan_profile: default_apple_clang
            container: ""
            static: false
    uses: ./.github/workflows/build_impl.yml
    with:
      runs_on: ${{ matrix.os }}
      container: ${{ matrix.container }}
      conan_profile: ${{ matrix.conan_profile }}
      build_type: Release
      disable_cache: true
      code_coverage: false
      static: ${{ matrix.static }}
      upload_clio_server: false
      targets: all
      sanitizer: "false"
      analyze_build_time: true

  nightly_release:
    needs: build-and-test
    uses: ./.github/workflows/release_impl.yml
    with:
      overwrite_release: true
      title: "Clio development (nightly) build"
      version: nightly
      notes_header_file: nightly_notes.md

  build_and_publish_docker_image:
    uses: ./.github/workflows/build_clio_docker_image.yml
    needs: build-and-test
    secrets: inherit
    with:
      tags: |
        type=raw,value=nightly
        type=raw,value=${{ github.sha }}
      artifact_name: clio_server_Linux_Release_gcc
      strip_binary: true
      publish_image: ${{ github.event_name != 'pull_request' }}

  create_issue_on_failure:
    needs: [build-and-test, nightly_release, build_and_publish_docker_image]
    if: ${{ always() && contains(needs.*.result, 'failure') && github.event_name != 'pull_request' }}
    runs-on: ubuntu-latest

    permissions:
      contents: write
      issues: write

    steps:
      - uses: actions/checkout@v4

      - name: Create an issue
        uses: ./.github/actions/create_issue
        env:
          GH_TOKEN: ${{ github.token }}
        with:
          title: "Nightly release failed 🌙"
          body: >
            Nightly release failed:

            Workflow: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}/
