From f8853c456b11b13fbb21a7c6ce718186eedd87c5 Mon Sep 17 00:00:00 2001 From: Mason Malone Date: Wed, 20 Oct 2021 19:14:07 -0700 Subject: [PATCH 1/2] feat: Add back BATS for testing images 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. --- .github/workflows/build-test.yml | 30 ++++++++------------------ .gitmodules | 3 +++ test/bats | 1 + test/docker-image.bats | 36 ++++++++++++++++++++++++++++++++ 4 files changed, 49 insertions(+), 21 deletions(-) create mode 100644 .gitmodules create mode 160000 test/bats create mode 100644 test/docker-image.bats diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index 98a693b11..beba48047 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -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 @@ -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 diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 000000000..bc61e07bb --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "test/bats"] + path = test/bats + url = https://github.com/bats-core/bats-core.git diff --git a/test/bats b/test/bats new file mode 160000 index 000000000..99d64eb01 --- /dev/null +++ b/test/bats @@ -0,0 +1 @@ +Subproject commit 99d64eb017abcd6a766dd0d354e625526da69cb3 diff --git a/test/docker-image.bats b/test/docker-image.bats new file mode 100644 index 000000000..215713517 --- /dev/null +++ b/test/docker-image.bats @@ -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' ] +} From 352a3b152501e636a69ff4d5febd67cd46d8c819 Mon Sep 17 00:00:00 2001 From: Mason Malone <651224+MasonM@users.noreply.github.com> Date: Mon, 28 Feb 2022 21:09:07 -0800 Subject: [PATCH 2/2] Remove submodule and use npx instead --- .github/workflows/build-test.yml | 4 +--- .gitmodules | 3 --- test/bats | 1 - 3 files changed, 1 insertion(+), 7 deletions(-) delete mode 100644 .gitmodules delete mode 160000 test/bats diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index beba48047..8ef0ad660 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -69,8 +69,6 @@ jobs: - name: Checkout uses: actions/checkout@v2 - with: - submodules: true - name: Build image uses: docker/build-push-action@v2 @@ -81,4 +79,4 @@ jobs: tags: ${{ env.IMAGE_TAG }} - name: Run tests with BATS - run: test/bats/bin/bats --verbose-run test/docker-image.bats + run: npx bats@1.6.0 --verbose-run test/docker-image.bats diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index bc61e07bb..000000000 --- a/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "test/bats"] - path = test/bats - url = https://github.com/bats-core/bats-core.git diff --git a/test/bats b/test/bats deleted file mode 160000 index 99d64eb01..000000000 --- a/test/bats +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 99d64eb017abcd6a766dd0d354e625526da69cb3