diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 0000000000..f72df74fba --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,43 @@ +version: 2 +jobs: + build-go1.9: + docker: + - image: kolide/fleet-builder:1.9 + working_directory: /go/src/github.com/kolide/fleet + steps: &steps + - checkout + - restore_cache: + keys: + - vendor-cache-{{ .Branch }}-{{ checksum "glide.lock" }} + - vendor-cache-{{ .Branch }} + - vendor-cache + + - run: + name: "fix node-sass" + command: | + yarn remove node-sass + yarn add node-sass@latest + + - run: make deps + - save_cache: + key: vendor-cache-{{ .Branch }}-{{ checksum "glide.lock" }} + paths: + - vendor + - save_cache: + key: vendor-cache-{{ .Branch }} + paths: + - vendor + - save_cache: + key: vendor-cache + paths: + - vendor + + - run: make generate + - run: make test + - run: make build + +workflows: + version: 2 + build: + jobs: + - build-go1.9 diff --git a/circle.yml b/circle.yml deleted file mode 100644 index 4696606143..0000000000 --- a/circle.yml +++ /dev/null @@ -1,48 +0,0 @@ -machine: - environment: - PROJECT_NAME: kolide-ose-testing - CLUSTER_NAME: cluster-1 - CLOUDSDK_COMPUTE_ZONE: us-east1-c - GOOGLE_APPLICATION_CREDENTIALS: ${HOME}/gcloud-service-key.json - pre: - - sudo curl -L -o /usr/bin/docker 'https://s3-external-1.amazonaws.com/circle-downloads/docker-1.9.1-circleci' - - sudo chmod 0755 /usr/bin/docker - services: - - docker - -dependencies: - pre: - - docker info - - docker login -e $DOCKER_HUB_EMAIL -u $DOCKER_HUB_USERNAME -p $DOCKER_HUB_PASSWORD - - ./tools/ci/setup-build-environment.sh - - ./tools/ci/download-build-deps.sh - - cache_directories: - - "vendor" - - "node_modules" - - "~/deps" - # - "/opt/google-cloud-sdk" - - override: - # workaround for https://github.com/yarnpkg/yarn/issues/1981 - - docker run -v $(pwd):/go/src/github.com/kolide/fleet -v /home/ubuntu/.go_workspace/pkg:/go/pkg --entrypoint /usr/bin/yarn kolide/fleet-builder:1.8 add --force node-sass - - docker run -v $(pwd):/go/src/github.com/kolide/fleet -v /home/ubuntu/.go_workspace/pkg:/go/pkg -v /home/ubuntu/.ssh/id_circleci_github:/tmp/id_rsa kolide/fleet-builder:1.8 --deps - -test: - override: - - docker run -d --name redis redis - - docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=toor -e MYSQL_DATABASE=kolide -e MYSQL_USER=kolide -e MYSQL_PASSWORD=kolide mysql:5.7 - - docker run --link redis:redis --link mysql:mysql -e MYSQL_TEST=true -e REDIS_TEST=true -v $(pwd):/go/src/github.com/kolide/fleet -v /home/ubuntu/.go_workspace/pkg:/go/pkg kolide/fleet-builder:1.8 --build - - ./tools/ci/verify-dependencies-docs.sh - - docker stop $(docker ps -a -q) - -deployment: - development: - branch: /.*/ - commands: - - make docker-build-circle - - ./tools/ci/deploy-k8s-testing.sh - release: - tag: /.*/ - commands: - - make docker-build-release diff --git a/tools/ci/docker/fleet-builder/1.8/Dockerfile b/tools/ci/docker/fleet-builder/1.8/Dockerfile deleted file mode 100644 index 10753e2400..0000000000 --- a/tools/ci/docker/fleet-builder/1.8/Dockerfile +++ /dev/null @@ -1,29 +0,0 @@ -FROM golang:1.8-alpine -MAINTAINER Kolide Developers - -RUN apk add --update \ - git \ - nodejs \ - bash \ - alpine-sdk \ - musl-dev \ - openssl \ - openssh-client - -RUN go get -u -v github.com/Masterminds/glide - -RUN echo -e 'http://dl-cdn.alpinelinux.org/alpine/edge/main\nhttp://dl-cdn.alpinelinux.org/alpine/edge/community\nhttp://dl-cdn.alpinelinux.org/alpine/edge/testing' > /etc/apk/repositories && \ - apk add --no-cache yarn - -# git must be explicitly instructed to follow redirects for compatibility with -# gopkg.in -RUN git config --global http.https://gopkg.in.followRedirects true - -COPY rootfs / - -VOLUME /go/src/github.com/kolide/fleet -WORKDIR /go/src/github.com/kolide/fleet - -EXPOSE 8080 - -ENTRYPOINT ["/builder.sh"] diff --git a/tools/ci/docker/fleet-builder/1.8/rootfs/builder.sh b/tools/ci/docker/fleet-builder/1.8/rootfs/builder.sh deleted file mode 100755 index 35521394dd..0000000000 --- a/tools/ci/docker/fleet-builder/1.8/rootfs/builder.sh +++ /dev/null @@ -1,101 +0,0 @@ -#!/usr/bin/env bash - -set -eo pipefail - -usage() { - base="$(basename "$0")" - cat <> ~/.ssh/known_hosts - cp /tmp/id_rsa /root/.ssh/id_rsa - chmod 0600 /root/.ssh/id_rsa - - make deps - make generate - GOGC=off go install - exit 0 -fi - -build=${build:-0} -if [ ${build} -eq 1 ]; then - make test - make build - exit 0 -fi - -tests=${tests:-0} -if [ ${tests} -eq 1 ]; then - make test - exit 0 -fi - -ci=${ci:-0} -if [ ${ci} -eq 1 ]; then - ci_run - exit 0 -fi diff --git a/tools/ci/docker/fleet-builder/1.9/Dockerfile b/tools/ci/docker/fleet-builder/1.9/Dockerfile new file mode 100644 index 0000000000..b8bcb5fe92 --- /dev/null +++ b/tools/ci/docker/fleet-builder/1.9/Dockerfile @@ -0,0 +1,86 @@ +FROM golang:1.9-alpine +MAINTAINER Kolide Developers + +ENV NPM_CONFIG_LOGLEVEL info +ENV NODE_VERSION 8.7.0 + +RUN addgroup -g 1000 node \ + && adduser -u 1000 -G node -s /bin/sh -D node \ + && apk add --no-cache \ + libstdc++ \ + && apk add --no-cache --virtual .build-deps \ + binutils-gold \ + curl \ + g++ \ + gcc \ + gnupg \ + libgcc \ + linux-headers \ + make \ + python \ + # gpg keys listed at https://github.com/nodejs/node#release-team + && for key in \ + 9554F04D7259F04124DE6B476D5A82AC7E37093B \ + 94AE36675C464D64BAFA68DD7434390BDBE9B9C5 \ + FD3A5288F042B6850C66B31F09FE44734EB7990E \ + 71DCFD284A79C3B38668286BC97EC7A07EDE3FC1 \ + DD8F2338BAE7501E3DD5AC78C273792F7D83545D \ + B9AE9905FFD7803F25714661B63B535A4C206CA9 \ + C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8 \ + 56730D5401028683275BD23C23EFEFE93C4CFFFE \ + ; do \ + gpg --keyserver pgp.mit.edu --recv-keys "$key" || \ + gpg --keyserver keyserver.pgp.com --recv-keys "$key" || \ + gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key" ; \ + done \ + && curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION.tar.xz" \ + && curl -SLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" \ + && gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc \ + && grep " node-v$NODE_VERSION.tar.xz\$" SHASUMS256.txt | sha256sum -c - \ + && tar -xf "node-v$NODE_VERSION.tar.xz" \ + && cd "node-v$NODE_VERSION" \ + && ./configure \ + && make -j$(getconf _NPROCESSORS_ONLN) \ + && make install \ + && apk del .build-deps \ + && cd .. \ + && rm -Rf "node-v$NODE_VERSION" \ + && rm "node-v$NODE_VERSION.tar.xz" SHASUMS256.txt.asc SHASUMS256.txt + +ENV YARN_VERSION 1.2.0 + +RUN apk add --no-cache --virtual .build-deps-yarn curl gnupg tar \ + && for key in \ + 6A010C5166006599AA17F08146C2130DFD2497F5 \ + ; do \ + gpg --keyserver pgp.mit.edu --recv-keys "$key" || \ + gpg --keyserver keyserver.pgp.com --recv-keys "$key" || \ + gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key" ; \ + done \ + && curl -fSLO --compressed "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz" \ + && curl -fSLO --compressed "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz.asc" \ + && gpg --batch --verify yarn-v$YARN_VERSION.tar.gz.asc yarn-v$YARN_VERSION.tar.gz \ + && mkdir -p /opt/yarn \ + && tar -xzf yarn-v$YARN_VERSION.tar.gz -C /opt/yarn --strip-components=1 \ + && ln -s /opt/yarn/bin/yarn /usr/local/bin/yarn \ + && ln -s /opt/yarn/bin/yarn /usr/local/bin/yarnpkg \ + && rm yarn-v$YARN_VERSION.tar.gz.asc yarn-v$YARN_VERSION.tar.gz \ + && apk del .build-deps-yarn + +RUN apk add --update \ + git \ + alpine-sdk \ + openssl \ + openssh-client + + +RUN go get -u -v github.com/Masterminds/glide + +# git must be explicitly instructed to follow redirects for compatibility with +# gopkg.in +RUN git config --global http.https://gopkg.in.followRedirects true + +VOLUME /go/src/github.com/kolide/fleet +WORKDIR /go/src/github.com/kolide/fleet + +EXPOSE 8080 diff --git a/tools/ci/docker/fleet-builder/Makefile b/tools/ci/docker/fleet-builder/Makefile deleted file mode 100644 index a56d1e02b1..0000000000 --- a/tools/ci/docker/fleet-builder/Makefile +++ /dev/null @@ -1,18 +0,0 @@ -.PHONY: build fleet-builder push - -GO_VERSION = 1.8 - -all: clean build - -build: fleet-builder - -fleet-builder: - # copy node-sass artifacts into rootfs - cd $(GO_VERSION) && \ - docker build -t kolide/fleet-builder:$(GO_VERSION) . - -push: - docker push kolide/fleet-builder:$(GO_VERSION) - -clean: - rm -rf build diff --git a/tools/ci/docker/fleet-builder/README.md b/tools/ci/docker/fleet-builder/README.md deleted file mode 100644 index eb6fcf6afe..0000000000 --- a/tools/ci/docker/fleet-builder/README.md +++ /dev/null @@ -1,29 +0,0 @@ -Usage -``` -Usage: builder.sh [args] - -T,--tests : Go run tests then exit - -C,--ci : Replicate full circle CI run - -B,--build : Build a release -``` - -### Caching pkg folder - -If you're repeatedly testing the build on a development machine, it makes sense to mount the `$GOPATH/pkg` along with your source. - -``` -docker run --rm -it -v (pwd):/go/src/github.com/kolide/fleet -v $GOPATH/pkg:/go/pkg fleet-builder -T -``` - -The first time the container runs, `go install` will compile all the dependencies under `$GOPATH/pkg/linux_amd64/...` making future test runs faster. - -### Build a binary - -Using the `-B,--build` flag will first run the CI build and then create a linux build in `./build/`. -This option is intended to be used followed by `docker build` to build a new release. - -# Building the builder - -use `make` to create a new container and then `make push` to push the builder to Docker Hub - -The Makefile first compiles `node-sass` bindings to work on alpine linux and then builds the `fleet-builder` container with the compiled bindings. -Separating the two steps keeps the build container small, but increases the difficulty of building it.