# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions

name: Bootstrap
on:
  pull_request:
    branches:
      - stable
  push:
    branches:
      - master
      - stable

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  main:
    strategy:
      fail-fast: false
      matrix:
        version: [
                                                                2.076.1, 2.077.1, 2.078.3, 2.079.1,
          2.080.1, 2.081.2, 2.082.1, 2.083.1, 2.084.1, 2.085.1, 2.086.1, 2.087.1, 2.088.1, 2.089.1,
          2.090.1, 2.091.1, 2.092.1, 2.093.1, 2.094.2, 2.095.1, 2.096.1, 2.097.2, 2.098.1, 2.099.1,
          2.100.2, 2.101.2, 2.102.2, 2.103.1, 2.104.2, 2.105.3, 2.106.1, 2.107.1
        ]

    name: Build with dmd-${{ matrix.version }}
    runs-on: ubuntu-22.04
    timeout-minutes: 10
    env:
      # for ci/run.sh:
      OS_NAME: linux
      MODEL: 64
      HOST_DMD: dmd-${{ matrix.version }}
      # N is set dynamically below
      FULL_BUILD: true
    defaults:
      run:
        shell: bash

    steps:
    - uses: actions/checkout@v4
      with:
        fetch-depth: 50

    - name: Set environment variable N (parallelism)
      run: echo "N=$(nproc)" >> $GITHUB_ENV

    - name: Install host compiler
      run: ci/run.sh install_host_compiler

    - name: Set up repos
      run: |
        set -uexo pipefail
        ref='${{ github.ref }}'
        if [[ "$ref" =~ ^refs/pull/ ]]; then
          # PR: clone the Phobos head with the same name as this DMD PR's target branch
          # e.g., Phobos stable when targeting DMD stable
          REPO_BRANCH="$GITHUB_BASE_REF"
        elif [[ "$ref" =~ ^refs/(heads|tags)/(.*)$ ]]; then
          # no PR: try to clone the Phobos head with the same name as this DMD head, falling back to master
          # e.g., Phobos stable for a push to DMD stable, or Phobos v2.105.2 for DMD tag v2.105.2
          REPO_BRANCH="${BASH_REMATCH[2]}"
        else
          echo "Error: unexpected GitHub ref '$ref'" >&2
          exit 1
        fi
        ci/run.sh setup_repos "$REPO_BRANCH"

    - name: Build dmd
      run: ENABLE_RELEASE=0 ENABLE_DEBUG=0 ci/run.sh build 0

    - name: Rebuild dmd
      run: ENABLE_RELEASE=0 ENABLE_DEBUG=0 ci/run.sh rebuild
