gitnu 0.6.6-alpha6

gitnu indexes your git status so you can use numbers instead of filenames.
Documentation
name: ci

on:
  push:
    branches:
      - main
      - dev
    tags:
      - "v[0-9]+.[0-9]+.[0-9]+**"

jobs:
  matrix:
    name: Create Matrix
    runs-on: ubuntu-latest
    outputs:
      matrix: ${{ steps.x.outputs.matrix }}
    steps:
      - uses: actions/checkout@v3
      - id: x
        run: |
          MATRIX=$(jq -rc '.' .github/workflows/matrix.json)
          echo "matrix=$MATRIX" >> $GITHUB_OUTPUT

  version:
    name: Check Version
    runs-on: ubuntu-latest
    outputs:
      version: ${{ steps.x.outputs.version }}
    steps:
      - uses: actions/checkout@v3
      - run: git fetch --tags origin
      - id: x
        run: |
          VERSION=$(make next-prerelease-version)
          echo "version=$VERSION" >> $GITHUB_OUTPUT

  build-and-test:
    name: Build & Test
    needs: [matrix]
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix: ${{ fromJson(needs.matrix.outputs.matrix) }}

    steps:
      - uses: actions/checkout@v3

      # required for tests
      - run: make ci-git-user

      - name: Run tests
        run: make ci-test

  release:
    name: Release on GitHub
    needs: [matrix, build-and-test, version]
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix: ${{ fromJson(needs.matrix.outputs.matrix) }}

    steps:
      - uses: actions/checkout@v3

      - run: |
          TARGET_DIR=./target/${{ matrix.target }}
          echo "TARGET_DIR=$TARGET_DIR" >> $GITHUB_ENV
          echo "BINFILE=$TARGET_DIR/release/git-nu" >> $GITHUB_ENV

      - name: Build binary
        run: make ci-build
        env:
          CARGO_BUILD_TARGET_DIR: ${{ env.TARGET_DIR }}

      - name: Strip release binary
        if: >-
          (matrix.build == 'linux' || matrix.build == 'linux-arm' || matrix.build == 'macos')
        run: strip ${{ env.BINFILE }}

      - name: Build archive
        run: |
          STAGING="git-nu-v${{ needs.version.outputs.version }}-${{ matrix.target }}"
          mkdir -p "$STAGING"
          cp ${{ env.BINFILE }} "$STAGING"
          tar czf "$STAGING.tar.gz" "$STAGING"
          echo "ASSET=$STAGING.tar.gz" >> $GITHUB_ENV

      - name: Release
        uses: softprops/action-gh-release@v1
        with:
          tag_name: v${{ needs.version.outputs.version }}
          files: ${{ env.ASSET }}

  crates-io-publish:
    name: Publish to Crates.io
    needs: [build-and-test, version]
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3

      - name: Get git tags
        run: git fetch --tags origin

      - run: make ci-git-user

      - name: Increment prerelease version number
        run: make ci-increment-prerelease

      - uses: katyo/publish-crates@v2
        with:
          registry-token: ${{ secrets.CARGO_REGISTRY_TOKEN }}