name: cd

on:
  push:
    branches:
    - main
    paths-ignore:
    - '*.md'

concurrency:
  group: deploy
  cancel-in-progress: true

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
    - name: Create Deployment
      uses: bobheadxi/deployments@v1
      id: deployment
      with:
        step: start
        env: aws

    - uses: actions/checkout@v3

    - name: add packages data
      run: |
        rm ./src/data/packages.json
        curl https://api.tea.xyz/v1/packages -H "Accept: application/json" >> ./src/data/packages.json

    - name: Create Package Detail Pages from packages.json
      uses: getneil/jq-action@v1
      id: version
      with:
        cmd: '.github/build-package-pages.sh src/data/packages.json src/content'

    - uses: teaxyz/setup@v0
    - run: tea -E just ci

    # NOTE: temp disabled? maybe can be addressed by https://github.com/teaxyz/www/issues/252
    # - name: Check for broken links
    #   uses: lycheeverse/lychee-action@v1
    #   with:
    #     fail: true
    #     args: --verbose --no-progress './public/**/*.md' './public/**/*.html'
    #   env:
    #     GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}

    ## means s3 sync will only sync things we need sync’d
    # - uses: chetan/git-restore-mtime-action@v1

    - uses: aws-actions/configure-aws-credentials@v1
      with:
        aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
        aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
        aws-region: us-east-1

    # cache-control of 10 mins because we *need* to be able to update
    # this and have people see the results can be fixed well with a static site builder
    - run: |
        aws s3 sync public s3://www.tea.xyz \
          --metadata-directive REPLACE \
          --cache-control max-age=600 \
          --exclude '.git/*' --exclude '.github/*' \
          --exclude 'Images/packages/*' \
          --exclude 'pour.sh' \
          --exclude 'tea.white-paper*.pdf' \
          --exclude '*.md' \
          --exclude 'tea-*+*' \
          --delete

    #TODO create a github-action that can be used to parse the
    # output from `s3 sync` into invalidation commands. NOTE
    # I have already looked for something to do this and failed.
    - run: |
        aws cloudfront create-invalidation \
          --distribution-id ${{ secrets.AWS_CF_DISTRIBUTION_ID }} \
          --paths '/*'

    - name: Seal Deployment
      uses: bobheadxi/deployments@v1
      if: always()
      with:
        step: finish
        status: ${{ job.status }}
        deployment_id: ${{ steps.deployment.outputs.deployment_id }}
        env: ${{ steps.deployment.outputs.env }}
