diff --git a/.drone.yml b/.drone.yml index 634c0a1a..11bd14d4 100644 --- a/.drone.yml +++ b/.drone.yml @@ -1,3 +1,6 @@ -image: rancher/dind:v1.9.1-rancher1 -script: - - ./scripts/ci +build: + image: rancher/dapper:1.9.1 + volumes: + - /var/run/docker.sock:/var/run/docker.sock + commands: + - dapper -k -O make DEV_BUILD=1 test diff --git a/Dockerfile.build b/Dockerfile.build deleted file mode 100644 index ffff4c42..00000000 --- a/Dockerfile.build +++ /dev/null @@ -1,4 +0,0 @@ -FROM ros-build-base - -COPY . ./ -COPY .dockerignore.docker .dockerignore diff --git a/Dockerfile.build-base b/Dockerfile.dapper similarity index 71% rename from Dockerfile.build-base rename to Dockerfile.dapper index 4ccdd1db..b0ab07d0 100644 --- a/Dockerfile.build-base +++ b/Dockerfile.dapper @@ -1,24 +1,26 @@ FROM debian:jessie RUN apt-get update && \ - apt-get -y dist-upgrade && \ apt-get -y install locales sudo vim less curl wget git rsync build-essential syslinux isolinux xorriso \ - libblkid-dev libmount-dev libselinux1-dev cpio genisoimage qemu-kvm python-pip ca-certificates + libblkid-dev libmount-dev libselinux1-dev cpio genisoimage qemu-kvm python-pip ca-certificates && \ + rm -rf /var/lib/apt/lists/* RUN ln -s /usr/bin/genisoimage /usr/bin/mkisofs RUN locale-gen en_US.UTF-8 ENV LANG en_US.UTF-8 -ENV LC_ALL en_US.UTF-8 -ENV TERM xterm -RUN curl -sL https://get.docker.com/builds/Linux/x86_64/docker-1.9.1 > /usr/bin/docker -RUN chmod +x /usr/bin/docker - -RUN pip install tox - -RUN curl -sSL https://storage.googleapis.com/golang/go1.5.2.linux-amd64.tar.gz | tar -xz -C /usr/local ENV PATH $PATH:/usr/local/go/bin - RUN mkdir -p /go/src /go/bin && chmod -R 777 /go ENV GOPATH /go ENV PATH /go/bin:$PATH ENV GO15VENDOREXPERIMENT 1 -WORKDIR /go/src/github.com/rancher/os +RUN pip install tox +RUN curl -sSL https://storage.googleapis.com/golang/go1.5.2.linux-amd64.tar.gz | tar -xz -C /usr/local +RUN curl -sL https://get.docker.com/builds/Linux/x86_64/docker-1.9.1 > /usr/bin/docker +RUN chmod +x /usr/bin/docker + +ENV DAPPER_SOURCE /go/src/github.com/rancher/os +ENV DAPPER_OUTPUT ./bin ./dist +ENV DAPPER_RUN_ARGS --privileged +ENV SHELL /bin/bash +WORKDIR ${DAPPER_SOURCE} + +COPY .dockerignore.docker .dockerignore diff --git a/Makefile b/Makefile index b3fba352..c16cf8ab 100644 --- a/Makefile +++ b/Makefile @@ -3,45 +3,62 @@ FORCE_PULL := 0 DEV_BUILD := 0 -compile: bin/rancheros +installer: minimal + docker build -t $(IMAGE_NAME):$(VERSION) . + +bin/rancheros: + mkdir -p $(dir $@) + go build -tags netgo -installsuffix netgo -ldflags "-X github.com/rancher/os/config.VERSION=$(VERSION) -linkmode external -extldflags -static" -o $@ + strip --strip-all $@ -all: clean ros-build-base build-all +pwd := $(shell pwd) +include scripts/build-common -ros-build-base: - docker build -t ros-build-base -f Dockerfile.build-base . +assets/docker: + mkdir -p $(dir $@) + curl -L "$(DOCKER_BINARY_URL)" > $@ + chmod +x $@ -ros-build-image: - docker build -t ros-build -f Dockerfile.build . +$(DIST)/artifacts/vmlinuz: $(BUILD)/kernel/ + mkdir -p $(dir $@) + mv $(BUILD)/kernel/boot/vmlinuz* $@ -bin/rancheros: ros-build-image - ./scripts/docker-run.sh make -f Makefile.docker $@ - - mkdir -p bin - docker cp ros-build:/go/src/github.com/rancher/os/$@ $(dir $@) +$(BUILD)/kernel/: + mkdir -p $@ + ([ -e "$(COMPILED_KERNEL_URL)" ] && cat "$(COMPILED_KERNEL_URL)" || curl -L "$(COMPILED_KERNEL_URL)") | tar -xzf - -C $@ -build-all: ros-build-image - ./scripts/docker-run.sh make -f Makefile.docker DEV_BUILD=$(DEV_BUILD) FORCE_PULL=$(FORCE_PULL) $@ - - mkdir -p bin dist - docker cp ros-build:/go/src/github.com/rancher/os/bin/rancheros bin/ - docker cp ros-build:/go/src/github.com/rancher/os/dist/artifacts dist/ +$(BUILD)/images.tar: bin/rancheros + FORCE_PULL=$(FORCE_PULL) ./scripts/mk-images-tar.sh -installer: ros-build-image - ./scripts/docker-run.sh --rm make -f Makefile.docker DEV_BUILD=$(DEV_BUILD) FORCE_PULL=$(FORCE_PULL) $@ +$(DIST)/artifacts/initrd: bin/rancheros assets/docker $(BUILD)/kernel/ $(BUILD)/images.tar + mkdir -p $(dir $@) + DFS_IMAGE=$(DFS_IMAGE) DEV_BUILD=$(DEV_BUILD) ./scripts/mk-initrd.sh + + +$(DIST)/artifacts/rancheros.iso: minimal + ./scripts/mk-rancheros-iso.sh + + +$(DIST)/artifacts/iso-checksums.txt: $(DIST)/artifacts/rancheros.iso + ./scripts/mk-iso-checksums-txt.sh version: @echo $(VERSION) +all: minimal installer iso -clean: - rm -rf bin build dist gopath .dockerfile +minimal: $(DIST)/artifacts/initrd $(DIST)/artifacts/vmlinuz +iso: $(DIST)/artifacts/rancheros.iso $(DIST)/artifacts/iso-checksums.txt -.PHONY: all compile clean build-all ros-build-image ros-build-base version bin/rancheros installer +test: minimal + cd tests/integration && tox + +.PHONY: build-all minimal iso installer version bin/rancheros integration-tests diff --git a/Makefile.docker b/Makefile.docker deleted file mode 100644 index d9512e5a..00000000 --- a/Makefile.docker +++ /dev/null @@ -1,64 +0,0 @@ -include build.conf -FORCE_PULL := 0 -DEV_BUILD := 0 - - -bin/rancheros: - mkdir -p $(dir $@) - go build -tags netgo -installsuffix netgo -ldflags "-X github.com/rancher/os/config.VERSION=$(VERSION) -linkmode external -extldflags -static" -o $@ - strip --strip-all $@ - - -pwd := $(shell pwd) -include scripts/build-common - - -assets/docker: - mkdir -p $(dir $@) - curl -L "$(DOCKER_BINARY_URL)" > $@ - chmod +x $@ - - -$(DIST)/artifacts/vmlinuz: $(BUILD)/kernel/ - mkdir -p $(dir $@) - mv $(BUILD)/kernel/boot/vmlinuz* $@ - - -$(BUILD)/kernel/: - mkdir -p $@ - ([ -e "$(COMPILED_KERNEL_URL)" ] && cat "$(COMPILED_KERNEL_URL)" || curl -L "$(COMPILED_KERNEL_URL)") | tar -xzf - -C $@ - - -$(BUILD)/images.tar: bin/rancheros - FORCE_PULL=$(FORCE_PULL) ./scripts/mk-images-tar.sh - - -$(DIST)/artifacts/initrd: bin/rancheros assets/docker $(BUILD)/kernel/ $(BUILD)/images.tar - mkdir -p $(dir $@) - DFS_IMAGE=$(DFS_IMAGE) DEV_BUILD=$(DEV_BUILD) ./scripts/mk-initrd.sh - - -$(DIST)/artifacts/rancheros.iso: minimal - ./scripts/mk-rancheros-iso.sh - - -$(DIST)/artifacts/iso-checksums.txt: $(DIST)/artifacts/rancheros.iso - ./scripts/mk-iso-checksums-txt.sh - - -version: - @echo $(VERSION) - -installer: minimal - docker build -t $(IMAGE_NAME):$(VERSION) . - -build-all: minimal installer iso - -minimal: $(DIST)/artifacts/initrd $(DIST)/artifacts/vmlinuz - -iso: $(DIST)/artifacts/rancheros.iso $(DIST)/artifacts/iso-checksums.txt - -integration-tests: - cd tests/integration && tox - -.PHONY: build-all minimal iso installer version bin/rancheros integration-tests diff --git a/build.sh b/build.sh index 4bcfcbfb..9e4a3be9 100755 --- a/build.sh +++ b/build.sh @@ -8,9 +8,9 @@ if [ "$1" != "--dev" ]; then echo echo For \"developer\" builds, run ./build.sh --dev echo - make all + dapper -k make all else - make DEV_BUILD=1 all + dapper -k make DEV_BUILD=1 all fi diff --git a/scripts/ci b/scripts/ci index 5a46cea3..d21c059c 100755 --- a/scripts/ci +++ b/scripts/ci @@ -3,10 +3,4 @@ set -ex cd $(dirname $0)/.. -if [ -x "$(which wrapdocker)" ] && ! docker info >/dev/null 2>&1; then - wrapdocker -fi - -docker build -t ros-build-base -f Dockerfile.build-base . -docker build -t ros-build -f Dockerfile.build . -./scripts/docker-run.sh --name ros-ci make -f Makefile.docker DEV_BUILD=1 minimal integration-tests +dapper -k -O make DEV_BUILD=1 test diff --git a/scripts/docker-run.sh b/scripts/docker-run.sh deleted file mode 100755 index 9296004d..00000000 --- a/scripts/docker-run.sh +++ /dev/null @@ -1,39 +0,0 @@ -#!/bin/bash -set -e - -DOCKER_ARGS= -if [ -n "$BIND_DIR" ]; then - if [ "$BIND_DIR" = "." ]; then - BIND_DIR=$(pwd) - fi - DOCKER_ARGS="-t -v $BIND_DIR:/go/src/github.com/rancher/os" -fi -if [ -c /dev/kvm ] || [ "${KVM}" == "1" ]; then - DOCKER_ARGS="${DOCKER_ARGS} --device=/dev/kvm:/dev/kvm" -fi - -NAME=ros-build -while [ "$#" -gt 0 ]; do - case $1 in - --name) - shift 1 - NAME="$1" - ;; - --rm) - NAME=$(mktemp ${NAME}-XXXXXX) - rm $NAME - DOCKER_ARGS="${DOCKER_ARGS} --rm" - ;; - -t) - DOCKER_ARGS="${DOCKER_ARGS} -t" - ;; - *) - break - ;; - esac - shift 1 -done - -DOCKER_ARGS="${DOCKER_ARGS} --name=${NAME}" -docker rm -fv ${NAME} >/dev/null 2>&1 || true -exec docker run -i -v /var/run/docker.sock:/var/run/docker.sock $DOCKER_ARGS ros-build "$@" diff --git a/tests/integration/assets/test_02/build.conf b/tests/integration/assets/test_02/build.conf deleted file mode 100644 index 6b559412..00000000 --- a/tests/integration/assets/test_02/build.conf +++ /dev/null @@ -1,6 +0,0 @@ -IMAGE_NAME=rancher/os -VERSION=v0.4.0-test - -DOCKER_BINARY_URL=https://github.com/rancher/docker/releases/download/v1.8.2-rc1-ros/docker-1.8.2-rc1 -COMPILED_KERNEL_URL=https://github.com/imikushin/os-kernel/releases/download/4.2/linux-4.2.0-rancher-x86.tar.gz -DFS_IMAGE=rancher/docker:1.8.1 diff --git a/tests/integration/assets/test_02/test-custom-kernel.sh b/tests/integration/assets/test_02/test-custom-kernel.sh deleted file mode 100755 index 4c34daa7..00000000 --- a/tests/integration/assets/test_02/test-custom-kernel.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash -set -ex - -cd $(dirname $0)/../../../.. - -cp ./tests/integration/assets/test_02/build.conf ./ - -make -f Makefile.docker DEV_BUILD=1 minimal - -exec ./scripts/run --qemu --no-rebuild --no-rm-usr --fresh diff --git a/tests/integration/rostest/test_02_custom_kernel.py b/tests/integration/rostest/test_02_custom_kernel.py deleted file mode 100644 index 3c3aa37f..00000000 --- a/tests/integration/rostest/test_02_custom_kernel.py +++ /dev/null @@ -1,30 +0,0 @@ -from __future__ import print_function - -import subprocess - -import pytest -import rostest.util as u - - -@pytest.fixture(scope="module") -def build_and_run(request): - print('\nBuilding and running RancherOS with custom kernel') - p = subprocess.Popen(['./scripts/docker-run.sh', '--rm', - './tests/integration/assets/test_02/test-custom-kernel.sh'], - stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True) - - def fin(): - print('\nTerminating docker-run test-custom-kernel') - p.terminate() - p.wait() - - request.addfinalizer(fin) - return p - - -@pytest.mark.timeout(30) -def test_system_boot(build_and_run): - version = u.rancheros_version('./tests/integration/assets/test_02/build.conf') - print('parsed version: ' + version) - - u.flush_out(build_and_run.stdout, 'RancherOS {v} started'.format(v=version))