diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index 98a693b11..8ef0ad660 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 @@ -72,25 +75,8 @@ jobs: with: push: false load: true - context: . - file: ./${{ steps.short-version.outputs.result }}/${{ matrix.variant }}/Dockerfile - tags: node:${{ matrix.version }}-${{ matrix.variant }} + context: ./${{ steps.short-version.outputs.result }}/${{ matrix.variant }} + tags: ${{ env.IMAGE_TAG }} - - 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 - - - name: Test for yarn - run: docker run --rm node:${{ matrix.version }}-${{ matrix.variant }} yarn --version + - name: Run tests with BATS + run: npx bats@1.6.0 --verbose-run test/docker-image.bats 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' ] +}