name: Main
on:
  workflow_dispatch:
  push:
    branches:
      - main

jobs:
  # publish to gh-pages (& IPFS when a release is detected)
  www:
    if: "! startsWith(github.event.head_commit.message, '[CI Skip]')"
    strategy:
      matrix:
        step: ['build:release:www']
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
      with:
        fetch-depth: 0
        token: ${{ secrets.GITHUB_TOKEN }}
    - uses: actions/setup-node@v4
      with:
        node-version: 'lts/*'
    - name: Set Execute Permissions
      run: chmod +x ./scripts/*
    - name: ${{ matrix.step }}
      env:
        CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
        CF_API_TOKEN: ${{ secrets.CF_API_TOKEN }}
        CRUST_SEEDS: ${{ secrets.CRUST_SEEDS }}
        GH_PAGES_SRC: packages/apps/build
        GH_PAT: ${{ secrets.GITHUB_TOKEN }}
        GH_RELEASE_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
        PINATA_API_KEY: ${{ secrets.PINATA_API_KEY }}
        PINATA_SECRET_KEY: ${{ secrets.PINATA_SECRET_KEY }}
      run: |
        yarn install --immutable
        yarn ${{ matrix.step }}

  # only run on "CI skip", i.e. when the actual version has been bumped to release/stable
  docker:
    if: "startsWith(github.event.head_commit.message, '[CI Skip] release/stable')"
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    - uses: actions/setup-node@v4
      with:
        node-version: 'lts/*'
    - name: Set Execute Permissions
      run: chmod +x ./docker/*
    - name: docker
      env:
        DOCKER_PASS: ${{ secrets.DOCKER_PASS }}
      run: |
        ./docker/build.sh

  # only run on "CI skip", i.e. when the actual version has been bumped to release/stable
  electron:
    if: "startsWith(github.event.head_commit.message, '[CI Skip] release/stable')"
    strategy:
      matrix:
        # Removed `macos-latest` since notarization errors.
        # ref: https://github.com/pezkuwichain/pezkuwi-apps/issues/10486
        os: [ubuntu-latest, windows-latest]
    runs-on: ${{ matrix.os }}
    steps:
    - uses: actions/checkout@v4
      with:
        token: ${{ secrets.GITHUB_TOKEN }}
    - uses: actions/setup-node@v4
      with:
        node-version: 'lts/*'
    # Removed `macos-latest` since notarization errors.
    # ref: https://github.com/pezkuwichain/pezkuwi-apps/issues/10486
    # - name: Prepare for app notarization (macOS)
    #   if: startsWith(matrix.os, 'macos')
    #   # Import Apple API key for app notarization on macOS
    #   run: |
    #     mkdir -p ~/private_keys/
    #     echo '${{ secrets.API_KEY }}' > ~/private_keys/AuthKey_${{ secrets.API_KEY_ID }}.p8
    - name: Set Execute Permissions
      run: chmod +x ./scripts/*
    - name: Build/release Electron app
      uses: samuelmeuli/action-electron-builder@v1
      with:
        # Base64-encoded code signing certificate for macOS
        mac_certs: ${{ secrets.MAC_CERTS }}
        # Password for decrypting `mac_certs`
        mac_certs_password: ${{ secrets.MAC_CERTS_PASSWORD }}
        # Base64-encoded code signing certificate for Windows
        windows_certs: ${{ secrets.WINDOWS_CERTS }}
        # Password for decrypting `windows_certs`
        windows_certs_password: ${{ secrets.WINDOWS_CERTS_PASSWORD }}
        # GitHub token, automatically provided to the action
        # (No need to define this secret in the repo settings)
        github_token: ${{ secrets.GITHUB_TOKEN }}
        args: '--project packages/apps-electron'
        build_script_name: build:release:electron
        # If the commit is tagged with a version (e.g. "v1.0.0"),
        # release the app after building
        release: ${{ startsWith(github.ref, 'refs/tags/v') }}
      env:
        # macOS notarization API key
        API_KEY_ID: ${{ secrets.API_KEY_ID }}
        API_KEY_ISSUER_ID: ${{ secrets.API_KEY_ISSUER_ID }}
