name: Jan Build MacOS App

on:
  push:
    tags: ['v*.*.*']

jobs:
  build-macos:
    runs-on: macos-latest
    environment: production
    permissions:
      contents: write
    steps:
      - name: Getting the repo
        uses: actions/checkout@v3

      - name: Installing node
        uses: actions/setup-node@v1
        with:
          node-version: 20

      - name: Install jq      
        uses: dcarbone/install-jq-action@v2.0.1

      - name: Get tag
        id: tag
        uses: dawidd6/action-get-tag@v1
  
      - name: Update app version base on tag
        run: |
          if [[ ! "${VERSION_TAG}" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
              echo "Error: Tag is not valid!"
              exit 1
          fi
          jq --arg version "${VERSION_TAG#v}" '.version = $version' electron/package.json > /tmp/package.json
          mv /tmp/package.json electron/package.json
        env:
          VERSION_TAG: ${{ steps.tag.outputs.tag }}

      - name: Get Cer for code signing
        run: base64 -d <<< "$CODE_SIGN_P12_BASE64" > /tmp/codesign.p12
        shell: bash
        env:
          CODE_SIGN_P12_BASE64: ${{ secrets.CODE_SIGN_P12_BASE64 }}

      - uses: apple-actions/import-codesign-certs@v2
        with: 
          p12-file-base64: ${{ secrets.CODE_SIGN_P12_BASE64 }}
          p12-password: ${{ secrets.CODE_SIGN_P12_PASSWORD }}

      - name: Install yarn dependencies
        run: |
          yarn install
          yarn build:plugins-darwin

      - name: Build and publish app
        run: |
          yarn build:publish-darwin
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          CSC_LINK: "/tmp/codesign.p12"
          CSC_KEY_PASSWORD: ${{ secrets.CODE_SIGN_P12_PASSWORD }}
          CSC_IDENTITY_AUTO_DISCOVERY: "true"
          APPLE_ID: ${{ secrets.APPLE_ID }}
          APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }}

  build-windows-x64:
    runs-on: windows-latest
    permissions:
      contents: write
    steps:
      - name: Getting the repo
        uses: actions/checkout@v3

      - name: Installing node
        uses: actions/setup-node@v1
        with:
          node-version: 20

      - name: Install jq      
        uses: dcarbone/install-jq-action@v2.0.1

      - name: Get tag
        id: tag
        uses: dawidd6/action-get-tag@v1
  
      - name: Update app version base on tag
        shell: bash
        run: |
          if [[ ! "${VERSION_TAG}" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
              echo "Error: Tag is not valid!"
              exit 1
          fi
          jq --arg version "${VERSION_TAG#v}" '.version = $version' electron/package.json > /tmp/package.json
          mv /tmp/package.json electron/package.json
        env:
          VERSION_TAG: ${{ steps.tag.outputs.tag }}

      - name: Install yarn dependencies
        run: |
          yarn config set network-timeout 300000
          yarn install
          yarn build:plugins

      - name: Build and publish app
        run: |
          yarn build:publish-win32
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

  build-linux-x64:
    runs-on: ubuntu-latest
    environment: production
    env:
      SNAPCRAFT_STORE_CREDENTIALS: ${{ secrets.SNAPCRAFT_TOKEN }}
    permissions:
      contents: write
    steps:
      - name: Getting the repo
        uses: actions/checkout@v3

      - name: Installing node
        uses: actions/setup-node@v1
        with:
          node-version: 20

      - name: Install jq      
        uses: dcarbone/install-jq-action@v2.0.1

      - name: Install Snapcraft
        uses: samuelmeuli/action-snapcraft@v2

      - name: Get tag
        id: tag
        uses: dawidd6/action-get-tag@v1
  
      - name: Update app version base on tag
        run: |
          if [[ ! "${VERSION_TAG}" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
              echo "Error: Tag is not valid!"
              exit 1
          fi
          jq --arg version "${VERSION_TAG#v}" '.version = $version' electron/package.json > /tmp/package.json
          mv /tmp/package.json electron/package.json
        env:
          VERSION_TAG: ${{ steps.tag.outputs.tag }}

      - name: Install yarn dependencies
        run: |
          yarn config set network-timeout 300000
          yarn install
          yarn build:plugins

      - name: Build and publish app
        run: |
          yarn build:publish-linux
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

  update_release_draft:
    needs: [build-macos, build-windows-x64, build-linux-x64]
    permissions:
      # write permission is required to create a github release
      contents: write
      # write permission is required for autolabeler
      # otherwise, read permission is required at least
      pull-requests: write
    runs-on: ubuntu-latest
    steps:
      # (Optional) GitHub Enterprise requires GHE_HOST variable set
      #- name: Set GHE_HOST
      #  run: |
      #    echo "GHE_HOST=${GITHUB_SERVER_URL##https:\/\/}" >> $GITHUB_ENV

      # Drafts your next Release notes as Pull Requests are merged into "master"
      - uses: release-drafter/release-drafter@v5
        # (Optional) specify config name to use, relative to .github/. Default: release-drafter.yml
        # with:
        #   config-name: my-config.yml
        #   disable-autolabeler: true
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}