mirror of
https://github.com/pyenv/pyenv.git
synced 2025-11-08 11:33:49 -05:00
add bats test under docker
This commit is contained in:
9
.github/workflows/pyenv_tests.yml
vendored
9
.github/workflows/pyenv_tests.yml
vendored
@@ -40,10 +40,15 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
echo $PYENV_ROOT
|
echo $PYENV_ROOT
|
||||||
echo "$PYENV_ROOT/shims:$PYENV_ROOT/bin" >> $GITHUB_PATH
|
echo "$PYENV_ROOT/shims:$PYENV_ROOT/bin" >> $GITHUB_PATH
|
||||||
- run: |
|
- name: Run test on the host
|
||||||
|
run: |
|
||||||
make test
|
make test
|
||||||
|
- name: Run test with docker
|
||||||
|
if: ${{ ! contains(matrix.os, 'macos') }}
|
||||||
|
run: |
|
||||||
|
make test-docker
|
||||||
- env:
|
- env:
|
||||||
PYENV_NATIVE_EXT: 1
|
PYENV_NATIVE_EXT: 1
|
||||||
run: |
|
run: |
|
||||||
(cd src; ./configure; make)
|
(cd src; ./configure; make)
|
||||||
bats/bin/bats test/{pyenv,hooks,versions}.bats
|
bats/bin/bats test/{pyenv,hooks,versions}.bats
|
||||||
|
|||||||
90
Makefile
90
Makefile
@@ -1,4 +1,81 @@
|
|||||||
BATS_VERSION = v1.10.0
|
TEST_BATS_VERSION = v1.10.0
|
||||||
|
TEST_BASH_VERSIONS = 3.2.57 4.1.17
|
||||||
|
TEST_UNIT_DOCKER_PREFIX = test-unit-docker
|
||||||
|
TEST_UNIT_DOCKER_TARGETS = $(foreach bash,$(TEST_BASH_VERSIONS),$(addsuffix -$(bash),$(TEST_UNIT_DOCKER_PREFIX)) $(addsuffix -gnu-$(bash),$(TEST_UNIT_DOCKER_PREFIX)))
|
||||||
|
TEST_PLUGIN_DOCKER_PREFIX = test-plugin-docker
|
||||||
|
TEST_PLUGIN_DOCKER_TARGETS = $(foreach bash,$(TEST_BASH_VERSIONS),$(addsuffix -$(bash),$(TEST_PLUGIN_DOCKER_PREFIX)) $(addsuffix -gnu-$(bash),$(TEST_PLUGIN_DOCKER_PREFIX)))
|
||||||
|
TEST_BATS_IMAGE_PREFIX = test-pyenv-docker-image
|
||||||
|
TEST_BATS_IMAGE_TARGETS = $(foreach bash,$(TEST_BASH_VERSIONS),$(addsuffix -$(bash),$(TEST_BATS_IMAGE_PREFIX)) $(addsuffix -gnu-$(bash),$(TEST_BATS_IMAGE_PREFIX)))
|
||||||
|
|
||||||
|
.PHONY:
|
||||||
|
test-docker: $(TEST_UNIT_DOCKER_PREFIX) $(TEST_PLUGIN_DOCKER_PREFIX)
|
||||||
|
|
||||||
|
# Run all unit test under bats docker
|
||||||
|
.PHONY: $(TEST_UNIT_DOCKER_PREFIX)
|
||||||
|
$(TEST_UNIT_DOCKER_PREFIX): $(TEST_UNIT_DOCKER_TARGETS)
|
||||||
|
|
||||||
|
# Run each unit test under bats docker
|
||||||
|
.PHONY: $(TEST_UNIT_DOCKER_TARGETS)
|
||||||
|
$(TEST_UNIT_DOCKER_TARGETS): DOCKER_IMAGE = $(TEST_BATS_IMAGE_PREFIX)
|
||||||
|
$(TEST_UNIT_DOCKER_TARGETS): GNU = $(if $(findstring -gnu-,$@),True,False)
|
||||||
|
$(TEST_UNIT_DOCKER_TARGETS): BASH = $(filter $(TEST_BASH_VERSIONS),$(subst -, ,$@))
|
||||||
|
$(TEST_UNIT_DOCKER_TARGETS): DOCKER_TAG = bash-$(BASH)-gnu-$(GNU)
|
||||||
|
$(TEST_UNIT_DOCKER_TARGETS): INTERACTIVE = $(if $(findstring true,$(CI)),,-ti)
|
||||||
|
$(TEST_UNIT_DOCKER_TARGETS): $(TEST_UNIT_DOCKER_PREFIX)-% : $(TEST_BATS_IMAGE_PREFIX)-%
|
||||||
|
$(info Running test with docker image '$(DOCKER_IMAGE):$(DOCKER_TAG)')
|
||||||
|
docker run \
|
||||||
|
--init \
|
||||||
|
-v $(PWD):/code:ro \
|
||||||
|
-v /etc/passwd:/etc/passwd:ro \
|
||||||
|
-v /etc/group:/etc/group:ro \
|
||||||
|
-u "$$(id -u $$(whoami)):$$(id -g $$(whoami))" \
|
||||||
|
$(INTERACTIVE) \
|
||||||
|
$(DOCKER_IMAGE):$(DOCKER_TAG) \
|
||||||
|
test/run
|
||||||
|
|
||||||
|
# Run all plugin test under bats docker
|
||||||
|
.PHONY: $(TEST_PLUGIN_DOCKER_PREFIX)
|
||||||
|
$(TEST_PLUGIN_DOCKER_PREFIX): $(TEST_PLUGIN_DOCKER_TARGETS)
|
||||||
|
|
||||||
|
# Run each plugin test under bats docker
|
||||||
|
.PHONY: $(TEST_PLUGIN_DOCKER_TARGETS)
|
||||||
|
$(TEST_PLUGIN_DOCKER_TARGETS): DOCKER_IMAGE = $(TEST_BATS_IMAGE_PREFIX)
|
||||||
|
$(TEST_PLUGIN_DOCKER_TARGETS): GNU = $(if $(findstring -gnu-,$@),True,False)
|
||||||
|
$(TEST_PLUGIN_DOCKER_TARGETS): BASH = $(filter $(TEST_BASH_VERSIONS),$(subst -, ,$@))
|
||||||
|
$(TEST_PLUGIN_DOCKER_TARGETS): DOCKER_TAG = bash-$(BASH)-gnu-$(GNU)
|
||||||
|
$(TEST_PLUGIN_DOCKER_TARGETS): INTERACTIVE = $(if $(findstring true,$(CI)),,-ti)
|
||||||
|
$(TEST_PLUGIN_DOCKER_TARGETS): $(TEST_PLUGIN_DOCKER_PREFIX)-% : $(TEST_BATS_IMAGE_PREFIX)-%
|
||||||
|
$(info Running test with docker image '$(DOCKER_IMAGE):$(DOCKER_TAG)')
|
||||||
|
docker run \
|
||||||
|
--init \
|
||||||
|
-v $(PWD):/code:ro \
|
||||||
|
-v /etc/passwd:/etc/passwd:ro \
|
||||||
|
-v /etc/group:/etc/group:ro \
|
||||||
|
-u "$$(id -u $$(whoami)):$$(id -g $$(whoami))" \
|
||||||
|
$(INTERACTIVE) \
|
||||||
|
$(DOCKER_IMAGE):$(DOCKER_TAG) \
|
||||||
|
bats plugins/python-build/test
|
||||||
|
|
||||||
|
# Build all images needed for bats under docker
|
||||||
|
.PHONY: $(TEST_BATS_IMAGE_PREFIX)
|
||||||
|
$(TEST_BATS_IMAGE_PREFIX): $(TEST_BATS_IMAGE_TARGETS)
|
||||||
|
|
||||||
|
# Build each image needed for bats under docker
|
||||||
|
.PHONY: $(TEST_BATS_IMAGE_TARGETS)
|
||||||
|
$(TEST_BATS_IMAGE_TARGETS): DOCKER_IMAGE = $(TEST_BATS_IMAGE_PREFIX)
|
||||||
|
$(TEST_BATS_IMAGE_TARGETS): GNU = $(if $(findstring -gnu-,$@),True,False)
|
||||||
|
$(TEST_BATS_IMAGE_TARGETS): BASH = $(filter $(TEST_BASH_VERSIONS),$(subst -, ,$@))
|
||||||
|
$(TEST_BATS_IMAGE_TARGETS): DOCKER_TAG = bash-$(BASH)-gnu-$(GNU)
|
||||||
|
$(TEST_BATS_IMAGE_TARGETS):
|
||||||
|
$(info Building docker image '$(DOCKER_IMAGE):$(DOCKER_TAG)')
|
||||||
|
docker build \
|
||||||
|
--quiet \
|
||||||
|
-f "$(PWD)/test/Dockerfile" \
|
||||||
|
--build-arg GNU="$(GNU)" \
|
||||||
|
--build-arg BASH="$(BASH)" \
|
||||||
|
--build-arg BATS_VERSION="$(TEST_BATS_VERSION)" \
|
||||||
|
-t $(DOCKER_IMAGE):$(DOCKER_TAG) \
|
||||||
|
./
|
||||||
|
|
||||||
.PHONY: test test-build test-unit test-plugin
|
.PHONY: test test-build test-unit test-plugin
|
||||||
|
|
||||||
@@ -27,11 +104,12 @@ test-build:
|
|||||||
[ -e $(PYTHON_BUILD_TEST_PREFIX)/bin/pip ]
|
[ -e $(PYTHON_BUILD_TEST_PREFIX)/bin/pip ]
|
||||||
$(PYTHON_BUILD_TEST_PREFIX)/bin/pip -V
|
$(PYTHON_BUILD_TEST_PREFIX)/bin/pip -V
|
||||||
|
|
||||||
.SECONDARY: bats-$(BATS_VERSION)
|
.SECONDARY: bats-$(TEST_BATS_VERSION)
|
||||||
bats-$(BATS_VERSION):
|
bats-$(TEST_BATS_VERSION):
|
||||||
rm -rf bats
|
rm -rf bats
|
||||||
ln -sf bats-$(BATS_VERSION) bats
|
ln -sf bats-$(TEST_BATS_VERSION) bats
|
||||||
git clone --depth 1 --branch $(BATS_VERSION) https://github.com/bats-core/bats-core.git bats-$(BATS_VERSION)
|
git clone --depth 1 --branch $(TEST_BATS_VERSION) https://github.com/bats-core/bats-core.git bats-$(TEST_BATS_VERSION)
|
||||||
|
|
||||||
.PHONY: bats
|
.PHONY: bats
|
||||||
bats: bats-$(BATS_VERSION)
|
bats: bats-$(TEST_BATS_VERSION)
|
||||||
|
ln -sf bats-$(TEST_BATS_VERSION) bats
|
||||||
|
|||||||
25
test/Dockerfile
Normal file
25
test/Dockerfile
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
ARG BASH
|
||||||
|
|
||||||
|
FROM alpine/git:v2.30.0 as bats
|
||||||
|
ARG BATS_VERSION
|
||||||
|
RUN git clone https://github.com/bats-core/bats-core.git /root/bats-core \
|
||||||
|
&& cd /root/bats-core \
|
||||||
|
&& git checkout "${BATS_VERSION}"
|
||||||
|
|
||||||
|
FROM bash:$BASH
|
||||||
|
# Gnu tools
|
||||||
|
RUN if [[ "${GNU:-}" == True ]];then \
|
||||||
|
apk add sed coreutils findutils \
|
||||||
|
;fi
|
||||||
|
# Bats
|
||||||
|
RUN apk add --update parallel ncurses git \
|
||||||
|
&& mkdir -p ~/.parallel \
|
||||||
|
&& touch ~/.parallel/will-cite
|
||||||
|
COPY --from=bats /root/bats-core /root/bats-core
|
||||||
|
RUN /root/bats-core/install.sh "/usr/local"
|
||||||
|
# Clean
|
||||||
|
RUN rm -rf /var/cache/apk/*
|
||||||
|
# Setup
|
||||||
|
RUN echo 'source /etc/profile' >> ~/.bashrc
|
||||||
|
WORKDIR /code/
|
||||||
|
CMD ["bash"]
|
||||||
Reference in New Issue
Block a user