name: Release the book and website

on:
  push:
    branches:
      - main

env:
  LATEST_IMAGE: ghcr.io/${{ github.repository }}:latest

jobs:
  build-and-push-image:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      packages: write
    steps:
      - name: Checkout repository
        uses: actions/checkout@v3

      - name: Log in to the Container registry
        uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
      # Buildx for caching
      - uses: docker/setup-buildx-action@v3
      - name: Build and push Docker image
        uses: docker/build-push-action@v5
        with:
          context: .
          push: true
          tags: ghcr.io/${{ github.repository }}:latest
          cache-from: type=gha
          cache-to: type=gha,mode=max
  

  release-book-website:
    needs: build-and-push-image
    runs-on: ubuntu-latest
    steps:
      - name: Set up git repository
        uses: actions/checkout@v3
      - name: Print dependency versions
        uses: addnab/docker-run-action@v3
        with:
          image: ${{ env.IMAGE }}
          options: -v ${{ github.workspace }}:/app
          run: |
            cd /app/book
            make show_tools_version
      - name: Print build variables
        uses: addnab/docker-run-action@v3
        with:
          image: ${{ env.IMAGE }}
          options: -v ${{ github.workspace }}:/app
          run: |
            cd /app/book
            make printvars
      - name: Bake the book
        uses: addnab/docker-run-action@v3
        with:
          image: ${{ env.IMAGE }}
          options: -v ${{ github.workspace }}:/app
          run: |
            cd /app/book
            make -j bake
      - name: Release baked book to S3
        uses: shallwefootball/s3-upload-action@master
        with:
          aws_key_id: ${{ secrets.AWS_KEY_ID }}
          aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY}}
          aws_bucket: ${{ secrets.AWS_BUCKET_BOOK }}
          source_dir: book/release
          destination_dir: release
      - name: Upload book Artifacts
        uses: actions/upload-artifact@v3
        with:
          name: books
          path: |
            book/book_serif/book.log
            book/book_serif/book.pdf
            book/book-epub/book.epub
      - name: Bake the website
        uses: addnab/docker-run-action@v3
        with:
          image: ${{ env.IMAGE }}
          options: -v ${{ github.workspace }}:/app
          run: |
            cd /app/book
            make mrproper && make website
      - name: Release baked website to S3
        uses: shallwefootball/s3-upload-action@master
        with:
          aws_key_id: ${{ secrets.AWS_KEY_ID }}
          aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY}}
          aws_bucket: ${{ secrets.AWS_BUCKET_WEBSITE }}
          source_dir: website/static_website_html
          destination_dir: static_html_root
      - name: Upload website Artifacts
        uses: actions/upload-artifact@v3
        with:
          name: website
          path: website/static_website_html
  invalidate-book-website-cache:
    needs: release-book-website
    runs-on: ubuntu-latest
    steps:
      - name: Invalidate Cloudfront book cache
        uses: chetan/invalidate-cloudfront-action@v2
        env:
          DISTRIBUTION: ${{ secrets.CLOUDFRONT_DISTRIBUTION_BOOK }}
          PATHS: "/*"
          AWS_REGION: "us-east-1"
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
      - name: Invalidate Cloudfront website cache
        uses: chetan/invalidate-cloudfront-action@v2
        env:
          DISTRIBUTION: ${{ secrets.CLOUDFRONT_DISTRIBUTION_WEBSITE }}
          PATHS: "/*"
          AWS_REGION: "us-east-1"
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
