name: MacOS.

on:
  push:
    paths-ignore:
      - 'docs/**'
      - '**.md'
      - 'changelog.txt'
      - 'LEGAL'
      - 'LICENSE'
      - '.github/**'
      - '!.github/workflows/mac.yml'
      - 'lib/xdg/**'
      - 'snap/**'
      - 'Telegram/build/docker/**'
      - 'Telegram/Resources/uwp/**'
      - 'Telegram/Resources/winrc/**'
      - 'Telegram/SourceFiles/platform/win/**'
      - 'Telegram/SourceFiles/platform/linux/**'
      - 'Telegram/configure.bat'
  pull_request:
    paths-ignore:
      - 'docs/**'
      - '**.md'
      - 'changelog.txt'
      - 'LEGAL'
      - 'LICENSE'
      - '.github/**'
      - '!.github/workflows/mac.yml'
      - 'lib/xdg/**'
      - 'snap/**'
      - 'Telegram/build/docker/**'
      - 'Telegram/Resources/uwp/**'
      - 'Telegram/Resources/winrc/**'
      - 'Telegram/SourceFiles/platform/win/**'
      - 'Telegram/SourceFiles/platform/linux/**'
      - 'Telegram/configure.bat'

jobs:

  macos:
    name: MacOS
    runs-on: macos-12

    strategy:
      matrix:
        defines:
          - ""
    env:
      UPLOAD_ARTIFACT: "false"
      ONLY_CACHE: "false"
      PREPARE_PATH: "Telegram/build/prepare/prepare.py"

    steps:
      - name: Get repository name.
        run: echo "REPO_NAME=${GITHUB_REPOSITORY##*/}" >> $GITHUB_ENV

      - name: Clone.
        uses: actions/checkout@v3.1.0
        with:
          submodules: recursive
          path: ${{ env.REPO_NAME }}

      - name: First set up.
        run: |
          sudo chown -R `whoami`:admin /usr/local/share
          brew install automake ninja pkg-config

          # Disable spotlight.
          sudo mdutil -a -i off

          sudo xcode-select -s /Applications/Xcode.app/Contents/Developer

      - name: ThirdParty cache.
        id: cache-third-party
        uses: actions/cache@v3.0.11
        with:
          path: ThirdParty
          key: ${{ runner.OS }}-third-party-${{ hashFiles(format('{0}/{1}', env.REPO_NAME, env.PREPARE_PATH)) }}
          restore-keys: ${{ runner.OS }}-third-party-

      - name: Libraries cache.
        id: cache-libs
        uses: actions/cache@v3.0.11
        with:
          path: Libraries
          key: ${{ runner.OS }}-libs-${{ hashFiles(format('{0}/{1}', env.REPO_NAME, env.PREPARE_PATH)) }}
          restore-keys: ${{ runner.OS }}-libs-

      - name: Libraries.
        run: |
          ./$REPO_NAME/Telegram/build/prepare/mac.sh skip-release silent

      - name: Free up some disk space.
        run: |
          cd Libraries
          find . -iname "*.dir" -exec rm -rf {} || true \;

      - name: Telegram Desktop build.
        if: env.ONLY_CACHE == 'false'
        run: |
          cd $REPO_NAME/Telegram

          DEFINE=""
          if [ -n "${{ matrix.defines }}" ]; then
            DEFINE="-D ${{ matrix.defines }}=ON"
            echo Define from matrix: $DEFINE
            echo "ARTIFACT_NAME=Telegram_${{ matrix.defines }}" >> $GITHUB_ENV
          else
            echo "ARTIFACT_NAME=Telegram" >> $GITHUB_ENV
          fi

          ./configure.sh \
          -D CMAKE_C_FLAGS="-Werror" \
          -D CMAKE_CXX_FLAGS="-Werror" \
          -D CMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED=NO \
          -D TDESKTOP_API_TEST=ON \
          -D DESKTOP_APP_DISABLE_CRASH_REPORTS=OFF \
          $DEFINE

          cd ../out

          xcoderun='xcodebuild build -project Telegram.xcodeproj -scheme Telegram -destination "platform=macOS,arch=x86_64" -configuration Debug'
          bash -c "$xcoderun" || bash -c "$xcoderun" || bash -c "$xcoderun"

      - name: Move artifact.
        if: env.UPLOAD_ARTIFACT == 'true'
        run: |
          cd $REPO_NAME/out/Debug
          mkdir artifact
          mv Telegram.app artifact/
          mv Updater artifact/
      - uses: actions/upload-artifact@master
        if: env.UPLOAD_ARTIFACT == 'true'
        name: Upload artifact.
        with:
          name: ${{ env.ARTIFACT_NAME }}
          path: ${{ env.REPO_NAME }}/out/Debug/artifact/
