on:
  push:
    branches:
      - master
      - main
name: Build Dev
jobs:
  publish:
    strategy:
      matrix:
        os:
          - linux
          - darwin
          - windows
        arch:
          - amd64
          - 386
          - arm64
          - arm
        include:
          - os: linux
            arch: amd64
            artifact_name: dasel_linux_amd64
            build_docker: true
            test_version: true
          - os: linux
            arch: 386
            artifact_name: dasel_linux_386
            build_docker: false
            test_version: false
          - os: darwin
            arch: amd64
            artifact_name: dasel_darwin_amd64
            build_docker: false
            test_version: false
          - os: darwin
            arch: arm64
            artifact_name: dasel_darwin_arm64
            build_docker: false
            test_version: false
          - os: windows
            arch: amd64
            artifact_name: dasel_windows_amd64.exe
            build_docker: false
            test_version: false
          - os: windows
            arch: 386
            artifact_name: dasel_windows_386.exe
            build_docker: false
            test_version: false
          - os: linux
            arch: arm64
            artifact_name: dasel_linux_arm64
            build_docker: false
            test_version: false
          - os: linux
            arch: arm
            artifact_name: dasel_linux_arm32
            build_docker: false
            test_version: false
        exclude:
          - os: darwin
            arch: 386
          - os: windows
            arch: arm64
          - os: windows
            arch: arm
          - os: darwin
            arch: arm
    name: Dev build ${{ matrix.os }} ${{ matrix.arch }}
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-go@v2
        with:
          go-version: '^1.18.0' # The Go version to download (if necessary) and use.
      - name: Set env
        run: echo RELEASE_VERSION=development >> $GITHUB_ENV
      - name: Build
        run: GOOS=${{ matrix.os }} GOARCH=${{ matrix.arch }} CGO_ENABLED=0 go build -o target/release/${{ matrix.artifact_name }} -ldflags="-X 'github.com/tomwright/dasel/v2/internal.Version=${{ env.RELEASE_VERSION }}'" ./cmd/dasel
      - name: Test version
        if: matrix.test_version == true
        run: ./target/release/${{ matrix.artifact_name }} --version
      - name: Build docker image
        if: matrix.build_docker == true
        run: |
          docker build --build-arg daselpath=target/release/${{ matrix.artifact_name }} -f docker/Dockerfile -t tomwright/dasel:latest .
          docker build --build-arg daselpath=target/release/${{ matrix.artifact_name }} -f docker/alpine.Dockerfile -t tomwright/dasel:alpine .
      - name: Test docker image
        if: matrix.build_docker == true
        run: |
          echo '{"hello": "World"}' | docker run -i --rm tomwright/dasel:latest -r json 'hello'
          echo '{"hello": "World"}' | docker run -i --rm tomwright/dasel:alpine -r json 'hello'
      - name: Docker login
        if: matrix.build_docker == true
        run: echo "${{ secrets.GHCR_PAT }}" | docker login ghcr.io -u TomWright --password-stdin
      - name: Docker tag release
        if: matrix.build_docker == true
        run: |
          docker tag tomwright/dasel:latest ghcr.io/tomwright/dasel:${{ env.RELEASE_VERSION }}
          docker tag tomwright/dasel:latest ghcr.io/tomwright/dasel:${{ env.RELEASE_VERSION }}-buster-slim
          docker tag tomwright/dasel:alpine ghcr.io/tomwright/dasel:${{ env.RELEASE_VERSION }}-alpine
      - name: Docker push release
        if: matrix.build_docker == true
        run: |
          docker push ghcr.io/tomwright/dasel:${{ env.RELEASE_VERSION }}
          docker push ghcr.io/tomwright/dasel:${{ env.RELEASE_VERSION }}-buster-slim
          docker push ghcr.io/tomwright/dasel:${{ env.RELEASE_VERSION }}-alpine
