name: Jellyseerr CI

on:
  pull_request:
    branches:
      - "*"
  push:
    branches:
      - develop

jobs:
  test:
    name: Lint & Test Build
    if: github.event_name == 'pull_request'
    runs-on: ubuntu-20.04
    container: node:16.14-alpine
    steps:
      - name: Checkout
        uses: actions/checkout@v3
      - name: Install dependencies
        env:
          HUSKY_SKIP_INSTALL: 1
        run: yarn
      - name: Lint
        run: yarn lint
      - name: Build
        run: yarn build

  build_and_push:
    name: Build & Publish Docker Images
    if: github.ref == 'refs/heads/develop' && !contains(github.event.head_commit.message, '[skip ci]')
    runs-on: ubuntu-20.04
    steps:
      - name: Checkout
        uses: actions/checkout@v3
      - name: Set up QEMU
        uses: docker/setup-qemu-action@v1
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v1
      - name: Cache Docker layers
        uses: actions/cache@v2
        with:
          path: /tmp/.buildx-cache
          key: ${{ runner.os }}-buildx-${{ github.sha }}
          restore-keys: |
            ${{ runner.os }}-buildx-
      - name: Log in to Docker Hub
        uses: docker/login-action@v1
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_TOKEN }}
      - name: Build and push
        uses: docker/build-push-action@v2
        with:
          context: .
          file: ./Dockerfile
          platforms: linux/amd64,linux/arm64,linux/arm/v7
          push: true
          build-args: |
            COMMIT_TAG=${{ github.sha }}
          tags: |
            fallenbagel/jellyseerr:develop
          cache-from: type=local,src=/tmp/.buildx-cache
          cache-to: type=local,dest=/tmp/.buildx-cache-new,mode=max
      - # Temporary fix
        # https://github.com/docker/build-push-action/issues/252
        # https://github.com/moby/buildkit/issues/1896
        name: Move cache
        run: |
          rm -rf /tmp/.buildx-cache
          mv /tmp/.buildx-cache-new /tmp/.buildx-cache

  discord:
    name: Send Discord Notification
    needs: build_and_push
    if: always() && github.event_name != 'pull_request' && !contains(github.event.head_commit.message, '[skip ci]')
    runs-on: ubuntu-20.04
    steps:
      - name: Get Build Job Status
        uses: technote-space/workflow-conclusion-action@v2
      - name: Combine Job Status
        id: status
        run: |
          failures=(neutral, skipped, timed_out, action_required)
          if [[ ${array[@]} =~ $WORKFLOW_CONCLUSION ]]; then
            echo ::set-output name=status::failure
          else
            echo ::set-output name=status::$WORKFLOW_CONCLUSION
          fi
      - name: Post Status to Discord
        uses: sarisia/actions-status-discord@v1
        with:
          webhook: ${{ secrets.DISCORD_WEBHOOK }}
          status: ${{ steps.status.outputs.status }}
          title: ${{ github.workflow }}
          nofail: true
