name: CI

on:
  pull_request:
  push:
    tags:
      - "**"
    branches:
      - main
      - zig
  schedule:
    - cron: "0 0 * * *"

env:
  BB_CI: 1

jobs:
  generate-config:
    runs-on: ubuntu-24.04
    permissions: write-all
    outputs:
      BIRTH_GITHUB_TARGETS: ${{ steps.generate-config.outputs.BIRTH_GITHUB_TARGETS }}
      BIRTH_BUILD_TYPES: ${{ steps.generate-config.outputs.BIRTH_BUILD_TYPES }}
      BIRTH_CMAKE_BUILD_TYPES: ${{ steps.generate-config.outputs.BIRTH_CMAKE_BUILD_TYPES }}
      BIRTH_COMPILERS: ${{ steps.generate-config.outputs.BIRTH_COMPILERS }}
      BIRTH_LINUX_IMAGE: ${{ steps.generate-config.outputs.BIRTH_LINUX_IMAGE }}
      BIRTH_MACOS_IMAGE: ${{ steps.generate-config.outputs.BIRTH_MACOS_IMAGE }}
      BIRTH_WINDOWS_IMAGE: ${{ steps.generate-config.outputs.BIRTH_WINDOWS_IMAGE }}
      RELEASE_TAG_NAME: ${{ steps.generate-tag.outputs.RELEASE_TAG_NAME }}  # Define job output here
    steps:
      - name: Check out repository
        uses: actions/checkout@v4
      - name: Generate config
        id: generate-config
        uses: birth-software/github-config@v4
      - name: Create tag
        if: github.ref == 'refs/heads/main'
        shell: bash
        id: generate-tag
        env:
          GH_TOKEN: ${{ github.token }}
        run: |
          set -eux
          git config --global user.name "github-actions"
          git config --global user.email "github-actions@github.com"
          TAG="dev"
          gh release delete $TAG --yes || true
          git tag -d $TAG || true
          git push origin --delete $TAG || true
          git fetch --tags
          git tag -l
          git tag $TAG
          git push origin $TAG
          echo "RELEASE_TAG_NAME=$TAG" >> $GITHUB_OUTPUT
  ci:
    needs: generate-config
    permissions: write-all
    strategy:
      fail-fast: false
      matrix:
        os: [ x86_64-linux-znver4 ]
        BIRTH_BUILD_TYPE: ${{ fromJSON(needs.generate-config.outputs.BIRTH_BUILD_TYPES) }}
    runs-on: ${{ matrix.os }}
    env:
      BIRTH_LINUX_IMAGE: ${{ needs.generate-config.outputs.BIRTH_LINUX_IMAGE }}
      BIRTH_MACOS_IMAGE: ${{ needs.generate-config.outputs.BIRTH_MACOS_IMAGE }}
      BIRTH_WINDOWS_IMAGE: ${{ needs.generate-config.outputs.BIRTH_WINDOWS_IMAGE }}
      RELEASE_TAG_NAME: ${{ needs.generate-config.outputs.RELEASE_TAG_NAME }}
    steps:
      - uses: actions/checkout@v4
      - name: Build
        env:
          CC: clang
          BB_BUILD_TYPE: ${{matrix.BIRTH_BUILD_TYPE}}
        run: ./build.sh
      - name: Run
        run: ./cache/bb