name: ci
on:
  push:
    branches: [main]
  pull_request:
    branches: [main]
jobs:
  lint:
    runs-on: 'ubuntu-latest'
    steps:
      - name: 'Get Changed Files'
        id: 'files'
        uses: 'masesgroup/retrieve-changed-files@v2'
        with:
          format: 'json'
        # a force push will cause the action above to fail. Don't do force push when people are
        # reviewing!
      - name: Check out code.
        uses: actions/checkout@v3
      - uses: 'actions/setup-go@v4'
        with:
          go-version: '1.20'
      - name: 'Check EditorConfig Lint'
        run: |
          sudo apt install -y jq
          go install 'github.com/editorconfig-checker/editorconfig-checker/cmd/editorconfig-checker@latest'

          readarray -t changed_files <<<"$(jq -r '.[]' <<<'${{ steps.files.outputs.added_modified }}')"
          ~/go/bin/editorconfig-checker ${changed_files[@]}

  typo:
    runs-on: ubuntu-latest
    steps:
      - name: Check out code.
        uses: actions/checkout@v3
      - name: spell check
        run: |
          pip install codespell==2.2
          git grep --cached -l '' | grep -v -e 'History\.md' -e 'AUTHORS' -e 'man/.*\.1' -e 'man/.*\.html' | xargs codespell --ignore-words=.github/.ignore_words

  test:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3
      - name: Set up Python 3.10
        uses: actions/setup-python@v4
        with:
          python-version: '3.10'
      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install pytest==7.4.0
          pip install GitPython==3.1.36
      - name: Unit test
        run: make test

  build:
    strategy:
      fail-fast: false
      matrix:
        platform:
          - ubuntu-latest
          - macos-latest
    runs-on: ${{ matrix.platform }}
    steps:
      - name: Check out code.
        uses: actions/checkout@v3
      - name: Linux Install
        if: matrix.platform == 'ubuntu-22.04'
        run: |
          sudo apt-get install -y bsdmainutils
      - name: Script
        run: |
          ./check_integrity.sh $(find bin | cut -b 5- | xargs)
      - name: Brew release
        if: matrix.platform == 'macos-latest'
        run: |
          mkdir ../release && git archive --format=tar.gz HEAD > ../release/git-extras-release.tar.gz
          cd ../release
          tar -xzf git-extras-release.tar.gz && make PREFIX=$(pwd) INSTALL_VIA=brew
          ./bin/git-extras update | grep "brew upgrade git-extras"
