Unverified Commit 9291d09b authored by Cyrill Troxler's avatar Cyrill Troxler Committed by GitHub
Browse files

Add ci pipeline with GitLab (#3)

* Add automated testing
* Create loop device while staging s3backer
parent f603d84f
Loading
Loading
Loading
Loading

.gitlab-ci.yml

0 → 100644
+30 −0
Original line number Diff line number Diff line
image:
  name: ctrox/csi-s3:test
  entrypoint: [""]

variables:
  DOCKER_HOST: tcp://docker:2375
  DOCKER_DRIVER: overlay2
  GO_PROJECT_BASE: /go/src/github.com/ctrox
  GO_PROJECT_DIR: $GO_PROJECT_BASE/csi-s3

stages:
  - build
  - test

build:
  stage: build
  before_script:
  - mkdir -p $GO_PROJECT_BASE
  - ln -s $CI_PROJECT_DIR $GO_PROJECT_BASE
  - cd $GO_PROJECT_DIR
  script:
    - make build

test:
  stage: test
  image: docker:stable
  services:
    - docker:dind
  script:
    - docker run --rm --privileged -v $(pwd):$GO_PROJECT_DIR --device /dev/fuse ctrox/$CI_PROJECT_NAME:test
+1 −1
Original line number Diff line number Diff line
@@ -25,7 +25,7 @@ build:
	CGO_ENABLED=0 GOOS=linux go build -a -ldflags '-extldflags "-static"' -o _output/s3driver ./cmd/s3driver
test:
	docker build -t $(TEST_IMAGE_TAG) -f test/Dockerfile .
	docker run --rm --privileged -v $(PWD):$(PROJECT_DIR):ro -v /dev:/dev $(TEST_IMAGE_TAG)
	docker run --rm --privileged -v $(PWD):$(PROJECT_DIR):ro --device /dev/fuse $(TEST_IMAGE_TAG)
container: build
	docker build -t $(IMAGE_TAG) -f cmd/s3driver/Dockerfile .
push: container
+6 −0
Original line number Diff line number Diff line
@@ -27,6 +27,8 @@ const (
	// blockSize to use in k
	s3backerBlockSize   = "128k"
	s3backerDefaultSize = 1024 * 1024 * 1024 // 1GiB
	// S3backerLoopDevice the loop device required by s3backer
	S3backerLoopDevice = "/dev/loop0"
)

func newS3backerMounter(bucket *bucket, cfg *Config) (Mounter, error) {
@@ -55,6 +57,10 @@ func (s3backer *s3backerMounter) String() string {
}

func (s3backer *s3backerMounter) Stage(stageTarget string) error {
	// s3backer uses the loop device
	if err := createLoopDevice(S3backerLoopDevice); err != nil {
		return err
	}
	// s3backer requires two mounts
	// first mount will fuse mount the bucket to a single 'file'
	if err := s3backer.mountInit(stageTarget); err != nil {
+2 −0
Original line number Diff line number Diff line
@@ -121,6 +121,8 @@ var _ = Describe("S3Driver", func() {
		if err := os.Remove(socket); err != nil && !os.IsNotExist(err) {
			Expect(err).NotTo(HaveOccurred())
		}
		// Clear loop device so we cover the creation of it
		os.Remove(s3.S3backerLoopDevice)
		driver, err := s3.NewS3("test-node", csiEndpoint, cfg)
		if err != nil {
			log.Fatal(err)
+18 −0
Original line number Diff line number Diff line
@@ -4,6 +4,7 @@ import (
	"fmt"
	"io/ioutil"
	"os"
	"os/exec"
	"strings"
	"syscall"
	"time"
@@ -67,3 +68,20 @@ func getCmdLine(pid int) (string, error) {
	}
	return string(cmdLine), nil
}

func createLoopDevice(device string) error {
	if _, err := os.Stat(device); !os.IsNotExist(err) {
		return nil
	}
	args := []string{
		device,
		"b", "7", "0",
	}
	cmd := exec.Command("mknod", args...)

	out, err := cmd.CombinedOutput()
	if err != nil {
		return fmt.Errorf("Error configuring loop device: %s", out)
	}
	return nil
}
Loading