name: CI
on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

jobs:
  build_app:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
      - uses: actions/setup-node@v3
        with:
          node-version: 18.x
      - run: cd js && npm install && npm run build
      - run: echo "VITE_GIT_SHA=$(git rev-parse --short HEAD)" >> app/.env
      - run: cd app && npm install && ./node_modules/.bin/tsc && npm run prettier-check && ./node_modules/.bin/vite build --base=/PMTiles/
      - run: cd serverless/aws && npm install && npx tsc && npm run build && cp dist/lambda_function.zip ../../app/dist
      - run: cd serverless/cloudflare && cp wrangler.toml.example wrangler.toml && npm install && npx tsc && npm run build && cp dist/index.js ../../app/dist
      - run: cd spec/v3 && cp *.pmtiles ../../app/dist
      - run: cd js/examples && mkdir ../../app/dist/examples && cp *.html ../../app/dist/examples/
      - run: cd openlayers/examples && mkdir ../../app/dist/examples/openlayers && cp *.html ../../app/dist/examples/openlayers
      - name: build_app
        uses: peaceiris/actions-gh-pages@v3
        if: ${{ github.ref == 'refs/heads/main' }}
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          publish_dir: ./app/dist
          force_orphan: true

  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
      - uses: actions/setup-node@v3
        with:
          node-version: 18.x
      - run: python .github/check_examples.py
      - run: cd js && npm install && npm test
      - run: cd js && npm run prettier-check
      - run: cd python && python -m unittest test/test_*
      - run: cd cpp && make
      - run: cd serverless/cloudflare && npm install && npm test
      - run: cd serverless/vtfilter && npm install && npm test
