on:
  push:
    tags:
      - "v*"
name: Test and Release
jobs:
  npm-test:
    name: JavaScript Tests
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v3
      - name: Install Node
        uses: actions/setup-node@v3
      - name: Install pnpm
        uses: pnpm/action-setup@v2.2.4
        with:
          version: 6.20.1
      - name: Install dependencies
        run: pnpm install
      - name: Run Tests
        run: pnpm run test
  go-test:
    name: Go Tests
    runs-on: ubuntu-latest
    steps:
      - name: Install Go
        uses: actions/setup-go@v3
        with:
          go-version: 1.18.x
      - name: Checkout code
        uses: actions/checkout@v3
      - name: Run Go Tests with Coverage
        run: make test SKIP_ASSET=1
  int-test:
    name: Integration Tests
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v3
      - name: Build images
        run: COMPOSE_DOCKER_CLI_BUILD=1 DOCKER_BUILDKIT=1 docker-compose -f e2e/docker-compose.yml build
      - name: Run tests
        run: COMPOSE_DOCKER_CLI_BUILD=1 DOCKER_BUILDKIT=1 docker-compose -f e2e/docker-compose.yml up --build --force-recreate --exit-code-from cypress
  buildx:
    needs: [go-test, npm-test, int-test]
    name: Release
    runs-on: ubuntu-latest
    steps:
      - name: Docker meta
        id: meta
        uses: docker/metadata-action@v4
        with:
          images: amir20/dozzle
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v2.2.1
      - name: Login to DockerHub
        uses: docker/login-action@v2.1.0
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}
      - name: Build and push
        uses: docker/build-push-action@v3.2.0
        with:
          push: true
          platforms: linux/amd64,linux/arm/v7,linux/arm64/v8
          tags: ${{ steps.meta.outputs.tags }}
          build-args: TAG=${{ steps.meta.outputs.version }}
          labels: ${{ steps.meta.outputs.labels }}
          cache-from: type=registry,ref=amir20/dozzle:latest
          cache-to: type=inline
  git-release:
    needs: [buildx]
    name: Github Release
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v3
        with:
          fetch-depth: 0
      - name: Install Node
        uses: actions/setup-node@v3
      - name: Install pnpm
        uses: pnpm/action-setup@v2.2.4
        with:
          version: 6.20.1
      - name: Install dependencies
        run: pnpm install
      - name: Release to Github
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: pnpm run release -- --github.release --no-increment --no-git --ci
