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_ZIG_BUILD_TYPES: ${{ steps.generate-config.outputs.BIRTH_ZIG_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@v6
      - 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: [ ubuntu-24.04 ]
        BIRTH_ZIG_BUILD_TYPE: ${{ fromJSON(needs.generate-config.outputs.BIRTH_ZIG_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
      - uses: mlugg/setup-zig@v1
        with:
          version: master
      - name: Build and test (Packaged LLVM)
        run: |
          zig build test --summary all -Doptimize=${{matrix.BIRTH_ZIG_BUILD_TYPE}} -Dsystem_llvm=false
          zig build install -Doptimize=${{matrix.BIRTH_ZIG_BUILD_TYPE}} -Dsystem_llvm=false
          ldd zig-out/bin/bloat-buster