# name of the workflow.
# this is optional.
name: Interview Cloud Actions

# events that will trigger this workflow.
# here, we only have "pull_request", so the workflow will run
# whenever we create a pull request.
# other examples: [push] and [pull_request, push]
on: 
  pull_request:

  push:
    branches: 
      - main

# each workflow must have at least one job.
# jobs run in parallel by default (we can change that).
# each job groups together a series of steps to accomplish a purpose.
jobs:
  # name of the job
  ruffLint:
    # the platform or OS that the workflow will run on.
    runs-on: ubuntu-latest

    # series of steps to finish the job.
    steps:
      # name of the step.
      # steps run sequentially.
      # this is optionale
      - name: checkout
        # each step can either have "uses" or "run".
        # "uses" run an action written somewhere other than this workflow .
        # usually from the community.
        # this action checks out the repo code to the runner (instance)
        # running the action
        uses: actions/checkout@v3

      # another step.
      # this step runs a bash (Ubuntu's default shell) command
      - name: install ruff
        run: pip install ruff

      - name: Lint
        run: ruff check ./*/*.py --ignore E402

  Dockerhub:
    runs-on: ubuntu-latest
    needs: ruffLint # will only run if linter is successful
    if: ${{ github.ref == 'refs/heads/main' || github.event.pull_request.merged == true }}  # Runs if it's a push to 'main' or a merged PR to 'main'
    steps:
      - name: checkout
        uses: actions/checkout@v3

      - name: Login to Dockerhub # log into docker hub
        uses: docker/login-action@v2
        with:
          username: ${{ secrets.DOCKER_USERNAME }}   # Using secret for Docker username
          password: ${{ secrets.DOCKER_PASSWORD }}   # Using secret for Docker password
        id: docker-login

      - name: build container image # build the container
        run: docker compose build --no-cache
        id: docker-build
        
      - name: check image names
        run: docker image ls

      - name: Upload to Dockerhub
        run: docker push darkicewolf50/uofcbajacloud:latest
        if: ${{ steps.docker-login.outcome == 'success' && steps.docker-build.outcome == 'success' }}