.github/workflows/test.yml
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"