lncm/invoicer

View on GitHub
.github/workflows/test.yml

Summary

Maintainability
Test Coverage
name: Build invoicer on push, or PR to master

env:
  APP: invoicer
  ACTIONS_ALLOW_UNSECURE_COMMANDS: true

on:
  push:
    branches: [ 'master' ]
  pull_request:
    branches: [ 'master' ]

jobs:
  build:
    name: Build invoicer
    runs-on: ubuntu-18.04

    strategy:
      fail-fast: false
      matrix:
        arch:
          - amd64
          - arm32v6
          - arm32v7
          - arm64v8

    env:
      QEMU_VERSION: v4.2.0
      DOCKER_BUILDKIT: 1

    steps:
      - uses: actions/checkout@v2

      # GOARCH => arm|arm64
      # GOARM  => 6|7
      - name: Setup Go environment
        if: matrix.arch != 'amd64'
        env:
          ARCH: ${{ matrix.arch }}
        run: |
          GOARCH="${ARCH%32v?}"
          echo ::set-env name=GOARCH::"${GOARCH%v8}"
          echo ::set-env name=GOARM::"$(echo "$ARCH" | sed -En 's|^arm32v([6-7])$|\1|p')"

      - name: Build ${{ env.APP }}
        run: >
          docker build --no-cache . \
            --build-arg "ARCH=${{ matrix.arch }}" \
            --build-arg "GOARCH=$GOARCH" \
            --build-arg "GOARM=$GOARM" \
            --tag       "$APP"

      - name: Show built image details
        run: docker images "$APP"

      - name: Register self-compiled qemu
        if: matrix.arch != 'amd64'
        env:
          ARCH: ${{ matrix.arch }}
        run: docker run --rm --privileged "meedamian/simple-qemu:$QEMU_VERSION-${ARCH%32v6}" -p yes

      - name: Run sanity checks
        env:
          DIR: /usr/local/bin
        run: |
          run() {
            ENTRYPOINT="${1:-$APP}"; shift;
            ARGS=${*:-"--version"}

            printf "\n$ %s %s\n" "$ENTRYPOINT" "$ARGS"
            docker run --rm  --entrypoint "$ENTRYPOINT"  "$APP"  $ARGS
            printf "\n"
          }

          docker inspect "$APP" | jq '.'
          printf "\n"

          run invoicer

          run uname -a
          run cat /etc/os-release
          run sha256sum "$DIR/invoicer"

          docker run --rm --entrypoint=sh -u=root "$APP" -c "apk add --no-cache file && file $DIR/invoicer"