name: Base

on:
  push:
    branches: [main]
    tags:
      - '[0-9]+.[0-9]+.[0-9]+*'

  pull_request:
    branches: [main]

  workflow_dispatch:

# This ensures that previous jobs for the PR are canceled when PR is updated
concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  build:
    runs-on: macos-latest

    steps:
      - uses: actions/checkout@v4

      - name: Check broken links
        uses: JustinBeckwith/linkinator-action@v1
        with:
          paths: "**/*.md"

      - name: Setup Java
        uses: actions/setup-java@v4
        with:
          distribution: 'zulu'
          java-version: '11'

      - name: Flutter action
        uses: subosito/flutter-action@v2
        with:
          channel: 'stable'
          cache: true

      - name: Install dependencies
        run: flutter pub get
      - name: Format code
        run: dart format --set-exit-if-changed .
      - name: Analyze static code
        run: flutter analyze
      - name: Run tests
        run: flutter test --coverage
      - name: Upload coverage to Codecov
        uses: codecov/codecov-action@v4
        env:
          CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
        with:
          files: coverage/lcov.info
          name: flutter_form_builder
      - name: Check publish warnings
        run: dart pub publish --dry-run
      - name: Build example
        run: |
          cd example
          flutter build appbundle --debug
          flutter build ios --debug --no-codesign
          flutter build web

  deployment:
    if: ${{ github.ref_type == 'tag' }}
    needs: build
    name: Deploy package
    permissions:
      id-token: write
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dart-lang/setup-dart@v1
      - name: Flutter action
        uses: subosito/flutter-action@v2
        with:
          channel: 'stable'
          cache: true
      - name: Publish package
        run: dart pub publish -v -f
