Skip to content

Commit

Permalink
feat: Add back BATS for testing images
Browse files Browse the repository at this point in the history
BATS was initially added to this repository in #802, but was then
removed in #1339. This adds it back, and hooks it up to Github Actions.

This also fixes #1583, which happened due to a bug in the "Build image"
step: the build context was set to the root project directory, which
meant the `COPY docker-entrypoint.sh /usr/local/bin/` instruction was
copying the base `docker-entrypoint.sh` file into the Docker image
instead of the one in the variant directory. Changing the context to the
variant directory solves that.
  • Loading branch information
MasonM committed Oct 23, 2021
1 parent cbbf60d commit f8853c4
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 21 deletions.
30 changes: 9 additions & 21 deletions .github/workflows/build-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,9 @@ jobs:
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.gen-matrix.outputs.matrix) }}
env:
NODE_VERSION: ${{ matrix.version }}
IMAGE_TAG: node:${{ matrix.version }}-${{ matrix.variant }}

steps:
- name: Get short node version
Expand All @@ -66,31 +69,16 @@ jobs:

- name: Checkout
uses: actions/checkout@v2
with:
submodules: true

- name: Build image
uses: docker/build-push-action@v2
with:
push: false
load: true
context: .
file: ./${{ steps.short-version.outputs.result }}/${{ matrix.variant }}/Dockerfile
tags: node:${{ matrix.version }}-${{ matrix.variant }}

- name: Test for node version
run: |
image_node_version=$(docker run --rm node:${{ matrix.version }}-${{ matrix.variant }} node --print "process.versions.node")
echo "Expected: \"${{ matrix.version }}\", Got: \"${image_node_version}\""
[ "${image_node_version}" == "${{ matrix.version }}" ]
- name: Verify entrypoint runs regular, non-executable files with node
run: |
tmp_file=$(mktemp)
echo 'console.log("success")' > "${tmp_file}"
output=$(docker run --rm -v "${tmp_file}:/app/index.js" node:${{ matrix.version }}-${{ matrix.variant }} app/index.js)
[ "${output}" = 'success' ]
- name: Test for npm
run: docker run --rm node:${{ matrix.version }}-${{ matrix.variant }} npm --version
context: ./${{ steps.short-version.outputs.result }}/${{ matrix.variant }}
tags: ${{ env.IMAGE_TAG }}

- name: Test for yarn
run: docker run --rm node:${{ matrix.version }}-${{ matrix.variant }} yarn --version
- name: Run tests with BATS
run: test/bats/bin/bats --verbose-run test/docker-image.bats
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "test/bats"]
path = test/bats
url = https://github.com/bats-core/bats-core.git
1 change: 1 addition & 0 deletions test/bats
Submodule bats added at 99d64e
36 changes: 36 additions & 0 deletions test/docker-image.bats
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# Docs: https://bats-core.readthedocs.io/en/stable/writing-tests.html

setup() {
tmp_file=$(mktemp)
echo 'console.log("success")' > "${tmp_file}"
}

@test "Test for node version" {
run -0 docker run --rm "${IMAGE_TAG}" node --print "process.versions.node"
[ "$output" = "${NODE_VERSION}" ]
}

@test "Test for node version, without directly invoking node" {
run -0 docker run --rm "${IMAGE_TAG}" --print "process.versions.node"
[ "$output" = "${NODE_VERSION}" ]
}

@test "Test for npm" {
run -0 docker run --rm "${IMAGE_TAG}" npm --version
[ -n "$output" ]
}

@test "Test for yarn" {
run -0 docker run --rm "${IMAGE_TAG}" yarn --version
[ -n "$output" ]
}

@test "Verify entrypoint runs relative path pointing to regular, non-executable file with node" {
run -0 docker run --rm -v "${tmp_file}:/index.js" "${IMAGE_TAG}" index.js
[ "$output" = 'success' ]
}

@test "Verify entrypoint runs absolute path pointing to regular, non-executable file with node" {
run -0 docker run --rm -v "${tmp_file}:/index.js" "${IMAGE_TAG}" /index.js
[ "$output" = 'success' ]
}

0 comments on commit f8853c4

Please sign in to comment.