name: "Releases"

on:
  workflow_dispatch:
  push:
    tags:
    - 'v*'

jobs:
  main:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3

    - name: Set node version
      uses: actions/setup-node@v3
      with:
        node-version: '18.x'

    - name: Install
      run: |
        npm install
        npm run setheapsize

    - name: Lint
      run: npx grunt lint

    - name: Unit Tests
      run: |
        npm test
        npm run testnodeconsumer

    - name: Production Build
      if: success()
      run: npx grunt prod

    # - name: UI Tests
    #   if: success()
    #   run: xvfb-run --server-args="-screen 0 1200x800x24" npx grunt testui

    - name: Upload Release Assets
      if: success()
      id: upload-release-assets
      uses: svenstaro/upload-release-action@v2
      with:
        repo_token: ${{ secrets.GITHUB_TOKEN }}
        file: build/prod/*.zip
        tag: ${{ github.ref }}
        overwrite: true
        file_glob: true
        body: "See the [CHANGELOG](https://github.com/gchq/CyberChef/blob/master/CHANGELOG.md) and [commit messages](https://github.com/gchq/CyberChef/commits/master) for details."

    - name: Publish to NPM
      if: success()
      uses: JS-DevTools/npm-publish@v1
      with:
        token: ${{ secrets.NPM_TOKEN }}

  cross-platform-app:
    strategy:
      fail-fast: false
      matrix:
        platform: [ macos-latest, ubuntu-20.04, windows-latest ]
    runs-on: ${{ matrix.platform }}
    steps:
      - name: Checkout repository
        uses: actions/checkout@v3

      - name: Install dependencies (ubuntu only)
        if: matrix.platform == 'ubuntu-20.04'
        # You can remove libayatana-appindicator3-dev if you don't use the system tray feature.
        run: |
          sudo apt-get update
          sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.0-dev libayatana-appindicator3-dev librsvg2-dev

      - name: Rust setup
        uses: dtolnay/rust-toolchain@stable

      - name: Rust cache
        uses: swatinem/rust-cache@v2
        with:
          workspaces: './src-tauri -> target'

      - name: Sync node version and setup cache
        uses: actions/setup-node@v3
        with:
          node-version: '18.x'
          cache: 'npm' # Set this to npm, yarn or pnpm.

      - name: Install app dependencies and build web
        # Remove `&& yarn build` if you build your frontend in `beforeBuildCommand`
        run: |
            npm install
            npm run setheapsize

      - name: Build the app
        uses: tauri-apps/tauri-action@v0

        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          tagName: ${{ github.ref_name }} # This only works if your workflow triggers on new tags.
          releaseName: 'App Name v__VERSION__' # tauri-action replaces \_\_VERSION\_\_ with the app version.
          releaseBody: 'See the assets to download and install this version.'
          releaseDraft: true
          prerelease: false
