docker/docker-push-action
と addnab/docker-run-action
というやつを組み合わせると最小構成でいい感じにできる。
name: Test on: push jobs: test: name: test runs-on: Ubuntu-20.04 steps: - name: Checkout uses: actions/checkout@v2 - uses: docker/build-push-action@v2 with: file: Dockerfile.test tags: yourtestapp push: false # pushするならここtrueでもいい - uses: addnab/docker-run-action@v3 with: image: yourtestapp options: -v ${{ github.workspace }}:/src run: make test
ビルドするDockerfile.testはこういう感じ
FROM golang:1.16.14-bullseye ENV APP_ROOT /src WORKDIR $APP_ROOT # download app deps COPY go.mod $APP_ROOT COPY go.sum $APP_ROOT RUN go mod download # use bash for entrypoint to run commands passed on running this Docker image ENTRYPOINT ["/bin/bash", "-c"]
ローカルでもdocker上でテスト実行できるようにソースコードまるごとはCOPYしない。
あとは、最後のENTRYPOINTに /bin/bash -c
を与えているのがポイント。こうしないと docker run
に渡した任意のコマンドをコンテナ内で実行できない。