name: "macOS build"

on:
  push:
    branches: [ main, stable ]
    paths-ignore:
      - 'README.md'
      - 'SECURITY.md'
      - '.gitmodules'
      - '.gitignore'
      - 'LICENSE'
      - 'cider.lock'

jobs:
  build-macos:
    name: build-macos
    runs-on: macos-11
    permissions:
      actions: read
      contents: write
      security-events: write

    strategy:
      fail-fast: false
      matrix:
        node-version: [ 18 ]

    steps:
      - uses: maxim-lobanov/setup-xcode@v1
        with:
          xcode-version: '12.4'

      - uses: actions/checkout@v3
        with:
          fetch-depth: 0

      - uses: pnpm/action-setup@v2.2.2
        with:
          version: 7

      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v2
        with:
          node-version: ${{ matrix.node-version }}
          cache: 'pnpm'

      - name: Run Version Script
        env:
          GH_REQUEST_TOKEN: ${{ secrets.RELEASE_TOKEN }}
        run: |
          sudo chmod +x resources/version.sh && ./resources/version.sh || true
          echo "APP_VERSION=$(node -p -e 'require("./package.json").version')" >>$GITHUB_ENV

      - name: Clear node_airtunes2 cache
        run: rm -rf ~/Library/pnpm/store/v3/tmp/cf5bc2de2629636ca224995234b8eaa1 || true

      - name: Sign in to EVS
        run: |
          python3 -m pip install --upgrade castlabs-evs
          python3 -m castlabs_evs.account refresh -A ${{ secrets.EVS_ACCOUNT_NAME }} -P ${{ secrets.EVS_PASSWD }}

      - name: Setup Environment
        run: brew install automake #libtool autoconf

      - name: Install and Configure Node Modules
        run: |
          pnpm install
          cp resources/verror-types node_modules/@types/verror/index.d.ts
          cp resources/macPackager.js node_modules/app-builder-lib/out/macPackager.js
          rm -r node_modules/pouchdb-node/node_modules/leveldown || true
          rm -r node_modules/pouchdb-adapter-leveldb/node_modules/leveldown || true

      - name: Build the DMG
        env:
          CSC_LINK: ${{ secrets.CSC_LINK }}
          CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }}
          APPLEID: ${{ secrets.APPLEID }}
          APPLEIDPASS: ${{ secrets.APPLEIDPASS }}
          APPLE_ID: ${{ secrets.APPLEID }}
          APPLE_ID_PASSWORD: ${{ secrets.APPLEIDPASS }}
          PSC_NAME: ${{ secrets.PSC_NAME }}
          DEVELOPER_DIR: /Applications/Xcode_12.4.app/Contents/Developer
        run: pnpm dist:universalNotWorking -p never

      - name: Add license to DMG
        run: npx dmg-license resources/license.json dist/*.dmg

      - name: Upload macOS Latest
        uses: svenstaro/upload-release-action@v2
        with:
          repo_name: ciderapp/cider-releases
          repo_token: ${{ secrets.RELEASE_TOKEN }}
          file: dist/latest-mac.yml
          tag: v${{ env.APP_VERSION }}

      - name: Import
        uses: apple-actions/import-codesign-certs@v1
        with:
          p12-file-base64: ${{ secrets.CSC_LINK }}
          p12-password: ${{ secrets.CSC_KEY_PASSWORD }}

      - name: Build the PKG
        env:
          CSC_LINK: ${{ secrets.CSC_LINK }}
          CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }}
          APPLEID: ${{ secrets.APPLEID }}
          APPLEIDPASS: ${{ secrets.APPLEIDPASS }}
        run: |
          pkgbuild --component dist/mac-universal/Cider.app --install-location /Applications dist/Cider-${{ env.APP_VERSION }}-universal.pkg --sign ${{ secrets.PSC_NAME }}
          xcrun altool --notarize-app --primary-bundle-id com.ciderapp.cider -f dist/Cider*.pkg  --username ${{ secrets.APPLEID }} --password ${{ secrets.APPLEIDPASS }}
          sleep 5m
          xcrun stapler staple dist/Cider*.pkg || true

      - name: Upload a Build Artifact
        uses: actions/upload-artifact@v2.2.3
        with:
          name: Cider-macOS-${{ env.APP_VERSION }}
          path: |
            dist/*.dmg
            dist/*.pkg
            dist/latest-mac.yml

      - name: Upload Files (DMG)
        uses: svenstaro/upload-release-action@v2
        with:
          repo_name: ciderapp/cider-releases
          repo_token: ${{ secrets.RELEASE_TOKEN }}
          file: dist/Cider-${{ env.APP_VERSION }}-universal.dmg
          tag: v${{ env.APP_VERSION }}

      - name: Upload Files (PKG)
        uses: svenstaro/upload-release-action@v2
        with:
          repo_name: ciderapp/cider-releases
          repo_token: ${{ secrets.RELEASE_TOKEN }}
          file: dist/Cider-${{ env.APP_VERSION }}-universal.pkg
          tag: v${{ env.APP_VERSION }}
      - name: Trigger Bot Sync (main)
        uses: indiesdev/curl@v1.1
        with:
          url: http://129.146.42.180/api/v1/github/sync/main
          log-response: true
          timeout: 60000
      - name: Trigger Bot Sync (stable)
        uses: indiesdev/curl@v1.1
        with:
          url: http://129.146.42.180/api/v1/github/sync/stable
          log-response: true
          timeout: 60000

