name: CI

on:
  push:
    branches:
      - "main"
      - "*.*"
      - "!*backport*"
    tags:
      - "v*"
      - "!*dev*"
      - "!*pre*"
      - "!*post*"
  pull_request:
  # Allow manual runs through the web UI
  workflow_dispatch:
  schedule:
    #        ┌───────── minute (0 - 59)
    #        │ ┌───────── hour (0 - 23)
    #        │ │ ┌───────── day of the month (1 - 31)
    #        │ │ │ ┌───────── month (1 - 12 or JAN-DEC)
    #        │ │ │ │ ┌───────── day of the week (0 - 6 or SUN-SAT)
    - cron: "0 7 * * *" # Every day at 07:00 UTC

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  core:
    uses: OpenAstronomy/github-actions-workflows/.github/workflows/tox.yml@main
    with:
      submodules: false
      coverage: codecov
      libraries: |
        apt:
        - pandoc
        - graphviz
      envs: |
        - linux: py313-sphinx8
    secrets:
      CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}

  test:
    needs: [core]
    uses: OpenAstronomy/github-actions-workflows/.github/workflows/tox.yml@main
    with:
      submodules: false
      libraries: |
        brew:
            - pandoc
            - graphviz
        choco:
            - pandoc
            - graphviz
        apt:
            - pandoc
            - graphviz
      envs: |
        - macos: py312-sphinx8
        - windows: py311-sphinx8
        - linux: py310-sphinx8
        - linux: py312-pydata-sphinx-theme
        - linux: py313-devdeps

  extra_tests:
    needs: [test]
    uses: OpenAstronomy/github-actions-workflows/.github/workflows/tox.yml@main
    with:
      submodules: false
      libraries: |
        apt:
            - pandoc
            - graphviz
      envs: |
        - linux: py312-pydata-sphinx-theme
        - linux: py313-devdeps

  docs:
    needs: [core]
    uses: OpenAstronomy/github-actions-workflows/.github/workflows/tox.yml@main
    with:
      submodules: false
      pytest: false
      libraries: |
        apt:
            - pandoc
            - graphviz
      envs: |
        - linux: py313-docs
        - linux: py313-linkcheck

  sdist_verify:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: "3.13"
      - run: python -m pip install -U --user build
      - run: python -m build . --sdist
      - run: python -m pip install -U --user twine
      - run: python -m twine check dist/*

  conda:
    needs: [test]
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
          lfs: true
      - uses: conda-incubator/setup-miniconda@v3
        with:
          activate-environment: ablog-test
          environment-file: ablog-conda-test-env.yml
          python-version: "3.13"
      - name: Install ablog
        shell: bash -el {0}
        run: |
          pip install --no-deps --no-build-isolation .
      - name: Run test
        shell: bash -el {0}
        run: |
          conda list
          cd /tmp
          pytest -vvv -r a --pyargs ablog
          make tests

  publish:
    # Build wheels on PRs only when labelled. Releases will only be published if tagged ^v.*
    # see https://github-actions-workflows.openastronomy.org/en/latest/publish.html#upload-to-pypi
    if: |
      github.event_name != 'pull_request' ||
      (
        github.event_name == 'pull_request' &&
        contains(github.event.pull_request.labels.*.name, 'Run publish')
      )
    needs: [test, docs, sdist_verify]
    uses: OpenAstronomy/github-actions-workflows/.github/workflows/publish_pure_python.yml@main
    with:
      python-version: "3.13"
      submodules: false
    secrets:
      pypi_token: ${{ secrets.PYPI_TOKEN }}