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' ] +}