# N.B.: This won't run on releases because of
# https://docs.github.com/en/actions/using-workflows/triggering-a-workflow#triggering-a-workflow-from-a-workflow.
# However, we also have a companion deploy that's part of the release.yml workflow.
name: Companion Edge Deploy

on:
  push:
    branches: ['main']
    paths:
      - yarn.lock
      - 'packages/@uppy/companion/**'
      - '.github/workflows/companion-deploy.yml'

env:
  YARN_ENABLE_GLOBAL_CACHE: false

jobs:
  npm:
    name: Generate npm tarball
    runs-on: ubuntu-latest
    steps:
      - name: Checkout sources
        uses: actions/checkout@v6
      - name: Set SHA commit in version
        run:
          (cd packages/@uppy/companion && node -e 'const
          pkg=require("./package.json");pkg.version+="+${{ github.sha
          }}";fs.writeFileSync("package.json",JSON.stringify(pkg, undefined,
          2)+"\n")')
      - name: Create Companion tarball
        run:
          corepack yarn workspace @uppy/companion pack --install-if-needed -o
          /tmp/companion-${{ github.sha }}.tar.gz
      - name: Upload artifact
        if: success()
        uses: actions/upload-artifact@v5
        with:
          name: companion-${{ github.sha }}.tar.gz
          path: /tmp/companion-${{ github.sha }}.tar.gz

  docker:
    name: DockerHub
    runs-on: ubuntu-latest
    env:
      DOCKER_BUILDKIT: 0
      COMPOSE_DOCKER_CLI_BUILD: 0
    steps:
      - name: Checkout sources
        uses: actions/checkout@v6
      - name: Docker meta
        id: docker_meta
        uses: docker/metadata-action@c299e40c65443455700f0fdfc63efafe5b349051 # v5.10.0
        with:
          images: transloadit/companion
          tags: |
            type=edge
            type=raw,value=latest,enable=false
      - uses: docker/setup-qemu-action@c7c53464625b32c7a7e944ae62b3e17d2b600130 # v3.7.0
      - uses: docker/setup-buildx-action@v3
      - name: Log in to DockerHub
        uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0
        with:
          username: ${{secrets.DOCKER_USERNAME}}
          password: ${{secrets.DOCKER_PASSWORD}}
      - name: Build and push
        uses: docker/build-push-action@471d1dc4e07e5cdedd4c2171150001c434f0b7a4 # v6.15.0
        with:
          push: true
          context: .
          platforms: linux/amd64,linux/arm64
          file: Dockerfile
          tags: ${{ steps.docker_meta.outputs.tags }}
          labels: ${{ steps.docker_meta.outputs.labels }}

  heroku:
    name: Heroku
    runs-on: ubuntu-latest
    steps:
      - name: Checkout sources
        uses: actions/checkout@v6
      - name: Alter dockerfile
        run: |
          sed -i 's/^EXPOSE 3020$/EXPOSE $PORT/g' Dockerfile
      # https://github.com/AkhileshNS/heroku-deploy/issues/188
      - name: Install Heroku CLI
        run: |
          curl https://cli-assets.heroku.com/install.sh | sh
      - name: Deploy to heroku
        uses: akhileshns/heroku-deploy@e3eb99d45a8e2ec5dca08735e089607befa4bf28 # v3.14.15
        with:
          heroku_api_key: ${{secrets.HEROKU_API_KEY}}
          heroku_app_name: companion-demo
          heroku_email: ${{secrets.HEROKU_EMAIL}}
          usedocker: true
