name: website

on:
  push:
    branches:
      - 'main'
      - 'release-**'
  pull_request:
    types:
      - opened
      - reopened
      - synchronize
      - ready_for_review
    branches:
      - 'main'
      - 'release-**'

concurrency:
  group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
  cancel-in-progress: true

permissions:
  # Required: allow read access to the content for analysis.
  contents: read

jobs:
  changes:
    outputs:
      should-run-website-check: ${{ steps.changes.outputs.src == 'true' }}
    if: github.event.pull_request.draft == false
    runs-on: ubuntu-24.04
    steps:
      - name: Harden Runner
        uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
        with:
          egress-policy: audit

      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
      - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3
        id: changes
        with:
          filters: |
            src:
              - 'runatlantis.io/**'
              - 'package-lock.json'
              - 'package.json'
              - '.github/workflows/website.yml'

  # Check that the website builds and there's no missing links.
  website-check:
    needs: [changes]
    if: github.event.pull_request.draft == false && needs.changes.outputs.should-run-website-check == 'true'
    name: Website Check
    runs-on: ubuntu-latest
    steps:
      - name: Harden Runner
        uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
        with:
          egress-policy: audit

      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4

      - name: markdown-lint
        uses: DavidAnson/markdownlint-cli2-action@05f32210e84442804257b2a6f20b273450ec8265 # v19
        with:
          config: .markdownlint.yaml
          globs: 'runatlantis.io/**/*.md'

      - name: Link Checker
        id: lychee
        uses: lycheeverse/lychee-action@82202e5e9c2f4ef1a55a3d02563e1cb6041e5332 # v2.4.1
        with:
          args: --verbose --no-progress ./runatlantis.io

      - name: setup npm
        uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
        with:
          cache: 'npm'

      - name: run http-server
        run: |
          # build site
          npm install
          npm run website:build

          # start http-server for integration testing
          npx http-server runatlantis.io/.vitepress/dist &

      - name: Run Playwright E2E tests
        run: |
          npx playwright install --with-deps
          npm run e2e

  skip-website-check:
    needs: [changes]
    if: needs.changes.outputs.should-run-website-check == 'false'
    name: Website Check
    runs-on: ubuntu-latest
    steps:
      - name: Harden Runner
        uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
        with:
          egress-policy: audit

      - run: 'echo "No build required"'
