name: citra-ci

on:
  push:
    branches: [ "*" ]
    tags: [ "*" ]
  pull_request:
    branches: [ master ]

jobs:
  clang-format:
    runs-on: ubuntu-latest
    container: 
      image: citraemu/build-environments:linux-clang-format
      options: -u 1001
    steps:
      - uses: actions/checkout@v3
        with: 
          fetch-depth: 0
      - name: Build
        env:
          COMMIT_RANGE: ${{ github.event.pull_request.base.sha }}..${{ github.event.pull_request.head.sha }}
        run: ./.ci/linux-clang-format/docker.sh
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        image: ["linux-fresh", "linux-frozen", "linux-mingw"]
    container:
      image: citraemu/build-environments:${{ matrix.image }}
      options: -u 1001
    steps:
      - uses: actions/checkout@v3
        with:
          submodules: recursive
      - name: Set up cache
        uses: actions/cache@v3
        with:
          path: ~/.ccache
          key: ${{ runner.os }}-${{ matrix.image }}-${{ github.sha }}
          restore-keys: |
            ${{ runner.os }}-${{ matrix.image }}-
      - name: Query tag name
        uses: little-core-labs/get-git-tag@v3.0.2
        id: tagName
      - name: Build
        run: ./.ci/${{ matrix.image }}/docker.sh
        env:
          ENABLE_COMPATIBILITY_REPORTING: "ON"
      - name: Pack
        run: ./.ci/${{ matrix.image }}/upload.sh
        if: ${{ matrix.image != 'linux-frozen' }}
        env:
          NAME: ${{ matrix.image }}
      - name: Upload
        uses: actions/upload-artifact@v3
        if: ${{ matrix.image != 'linux-frozen' }}
        with:
          name: ${{ matrix.image }}
          path: artifacts/
  source:
    if: ${{ !github.head_ref }}
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
        with:
          submodules: recursive
      - name: Pack
        run: ./.ci/source/build.sh
      - name: Upload
        uses: actions/upload-artifact@v3
        with:
          name: source
          path: artifacts/
  macos:
    runs-on: macos-latest
    strategy:
      matrix:
        arch: ["x86_64", "arm64"]
    steps:
      - uses: actions/checkout@v3
        with:
          submodules: recursive
      - name: Set up cache
        uses: actions/cache@v3
        with:
          path: ~/Library/Caches/ccache
          key: ${{ runner.os }}-macos-${{ matrix.arch }}-${{ github.sha }}
          restore-keys: |
            ${{ runner.os }}-macos-${{ matrix.arch }}-
      - name: Query tag name
        uses: little-core-labs/get-git-tag@v3.0.2
        id: tagName
      - name: Install dependencies
        run: ./.ci/macos/deps.sh
      - name: Build
        run: ./.ci/macos/build.sh
        env:
          MACOSX_DEPLOYMENT_TARGET: "11"
          ENABLE_COMPATIBILITY_REPORTING: "ON"
          TARGET_ARCH: ${{ matrix.arch }}
      - name: Pack
        run: ./.ci/macos/upload.sh
      - name: Upload
        uses: actions/upload-artifact@v3
        with:
          name: macos-${{ matrix.arch }}
          path: artifacts/
  macos-universal:
    runs-on: macos-latest
    needs: macos
    steps:
      - uses: actions/checkout@v3
        with:
          submodules: recursive
      - name: Query tag name
        uses: little-core-labs/get-git-tag@v3.0.2
        id: tagName
      - name: Download x86 build
        uses: actions/download-artifact@master
        with:
          name: macos-x86_64
          path: macos-x86_64/
      - name: Download ARM64 build
        uses: actions/download-artifact@master
        with:
          name: macos-arm64
          path: macos-arm64/
      - name: Create universal app
        run: ./.ci/macos/universal.sh
        env:
          ARTIFACTS: macos-x86_64 macos-arm64
#      - name: Upload
#        uses: actions/upload-artifact@v3
#        with:
#          name: macos
#          path: artifacts/
      - name: Delete intermediate artifacts
        uses: geekyeggo/delete-artifact@v2
        with:
          name: |
            macos-x86_64
            macos-arm64
  windows:
    runs-on: windows-latest
    steps:
      - uses: actions/checkout@v3
        with:
          submodules: recursive
      - name: Set up cache
        uses: actions/cache@v3
        with:
          path: ~/.buildcache
          key: ${{ runner.os }}-win-${{ github.sha }}
          restore-keys: |
            ${{ runner.os }}-win-
      - name: Query tag name
        uses: little-core-labs/get-git-tag@v3.0.2
        id: tagName
      - name: Install dependencies
        run: ./.ci/windows-msvc/deps.sh
        shell: bash
      - name: Set up MSVC
        uses: ilammy/msvc-dev-cmd@v1
      - name: Build
        run: ./.ci/windows-msvc/build.sh
        shell: bash
        env:
          ENABLE_COMPATIBILITY_REPORTING: "ON"
      - name: Pack
        run: ./.ci/windows-msvc/upload.ps1
      - name: Upload
        uses: actions/upload-artifact@v3
        with:
          name: msvc
          path: artifacts/
  android:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
        with:
          submodules: recursive
      - name: Set up cache
        uses: actions/cache@v3
        with:
          path: |
            ~/.gradle/caches
            ~/.gradle/wrapper
            ~/.ccache
          key: ${{ runner.os }}-android-${{ github.sha }}
          restore-keys: |
            ${{ runner.os }}-android-
      - name: Query tag name
        uses: little-core-labs/get-git-tag@v3.0.2
        id: tagName
      - name: Deps
        run: |
          sudo apt-get update
          sudo apt-get install ccache apksigner -y
      - name: Build
        run: ./.ci/android/build.sh
      - name: Copy and sign artifacts
        env:
          ANDROID_KEYSTORE_B64: ${{ secrets.ANDROID_KEYSTORE_B64 }}
          ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }}
          ANDROID_KEYSTORE_PASS: ${{ secrets.ANDROID_KEYSTORE_PASS }}
        run: ./.ci/android/upload.sh
      - name: Upload
        uses: actions/upload-artifact@v3
        with:
          name: android
          path: artifacts/
  transifex:
    runs-on: ubuntu-latest
    container: citraemu/build-environments:linux-transifex
    if: ${{ github.repository == 'citra-emu/citra' && !github.head_ref }}
    steps:
      - uses: actions/checkout@v3
        with:
          submodules: recursive
      - name: Update Translation
        run: ./.ci/transifex/docker.sh
        env:
          TRANSIFEX_API_TOKEN: ${{ secrets.TRANSIFEX_API_TOKEN }}
  release:
    runs-on: ubuntu-latest
    needs: [build, android, macos-universal, source, windows]
    if: ${{ startsWith(github.ref, 'refs/tags/') }}
    steps:
      - uses: actions/download-artifact@v3
      - name: Query tag name
        uses: little-core-labs/get-git-tag@v3.0.2
        id: tagName
      - name: Create release
        uses: actions/create-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          tag_name: ${{ steps.tagName.outputs.tag }}
          release_name: ${{ steps.tagName.outputs.tag }}
          draft: false
          prerelease: false
      - name: Upload artifacts
        uses: alexellis/upload-assets@0.2.3
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          asset_paths: '["./**/*.tar.*","./**/*.7z","./**/*.zip","./**/*.apk","./**/*.aab"]'