# This is a basic workflow to help you get started with Actions

name: CI

# Controls when the action will run. Triggers the workflow on push or pull request
# events but only for the master branch
on:
  push:
    branches: [ master ]
    tags: [ "v*.*.*" ]
  pull_request:
    branches: [ master ]
  workflow_dispatch:
    inputs:
      suite:
        description: "Coq OPAM suite"
        required: true
        default: "released"
        type: choice
        options:
        - released
        - extra-dev

env:
  OPAM_SUITE: ${{ inputs.suite }}

jobs:

  build:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        coq_version: [ '8.20+rc1' , 'dev' ]
        ocaml_version:
          - '4.14.x'
          - '5.2.x'
    steps:
    - uses: actions/checkout@v2
    - uses: avsm/setup-ocaml@v3
      with:
        ocaml-compiler: ${{ matrix.ocaml_version }}
        opam-pin: false
        opam-local-packages:
    - run: opam repo add coq-dev https://coq.inria.fr/opam/core-dev
    - run: opam install coq-core.${{ matrix.coq_version }}
    - run: opam install coq-stdlib.${{ matrix.coq_version }}
    - run: |
        opam pin add coq-core ${{ matrix.coq_version }}
        opam pin add coq-stdlib ${{ matrix.coq_version }}
      if: ${{ matrix.coq_version != 'dev' }}
    - run: opam install ./coq-elpi.opam --deps-only --with-test -y
    - run: opam exec make build
    - run: opam exec make test

  release:
    runs-on: ubuntu-latest
    if: startsWith(github.ref, 'refs/tags/')
    #needs: [build]
    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Inject slug/short variables
        uses: rlespinasse/github-slug-action@v4

      - name: Create archive
        run: |
          VERSION="${GITHUB_REF_NAME_SLUG#v}"
          git archive -o coq-elpi-$VERSION.tar.gz --prefix=coq-elpi-$VERSION/ $GITHUB_SHA .

      - name: Release
        uses: softprops/action-gh-release@v1
        with:
          files: coq-elpi-*.tar.gz
          fail_on_unmatched_files: true
          prerelease: true
          generate_release_notes: true
          name: Coq-Elpi ${{ github.ref }} for Coq XXX

      - name: Use OCaml 4.14.x
        uses: avsm/setup-ocaml@v2
        with:
          ocaml-compiler: 4.14.x
          opam-local-packages: |
            !coq-elpi.opam

      - name: Write PAT
        env:
          OPAM_PUBLISH_TOKEN: ${{ secrets.OPAM_PUBLISH_TOKEN }}
        run: |
          mkdir -p ~/.opam/plugins/opam-publish
          printf "$OPAM_PUBLISH_TOKEN" > ~/.opam/plugins/opam-publish/coqelpibot.token
          
      - name: Setup SSH
        uses: webfactory/ssh-agent@v0.8.0
        with:
          ssh-private-key: ${{ secrets.BOT_SSH_KEY }}
          
      - name: Install opam-publish # 2.0.3 because more recent versions do not respect OPAMYES
        run: opam install -y -j 2 opam-publish=2.0.3

      - name: Publish
        run: |
          eval $(opam env)
          git config --global user.name coqelpibot
          git config --global user.email coqelpibot@inria.fr
          TAG=`git tag --sort=-v:refname|head -1`
          opam-publish --tag=$TAG --packages-directory=${OPAM_SUITE:-released}/packages --repo=coq/opam --no-browser -v ${TAG##v}	coq-elpi.opam https://github.com/LPCIC/coq-elpi/releases/download/$TAG/coq-elpi-${TAG##v}.tar.gz
