github.com/docker/compose-on-kubernetes@v0.5.0/.circleci/config.yml (about)

     1  version: 2
     2  
     3  aliases:
     4    kube_versions:
     5      - kube_1_11: &kube_1_11 "1.11.10"
     6      - kube_1_13: &kube_1_13 "1.13.10"
     7      - kube_1_14: &kube_1_14 "1.14.6"
     8      - kube_1_15: &kube_1_15 "1.15.3"
     9      - kube_1_16: &kube_1_16 "1.16.1"
    10    docker-login: &docker-login
    11      username: $DOCKER_USER
    12      password: $DOCKER_PASS
    13    compose-ci-docker: &compose-ci-docker
    14      - image: dockereng/kube-compose-ci-docker
    15        auth: *docker-login
    16    compose-ci-golang: &compose-ci-golang
    17      - image: dockereng/kube-compose-ci-golang
    18        auth: *docker-login
    19    public-golang: &public-golang
    20      - image: circleci/golang:1.16
    21        user: root
    22  
    23    e2e-kind-steps: &e2e-kind-steps
    24      - attach_workspace:
    25          at: /root
    26      - setup_remote_docker:
    27          version: 20.10.11
    28      - run:
    29          name: "Prepare Kind and run e2e tests"
    30          command: |
    31            export PATH="$PATH:/root/bin"
    32            export IMAGE_REPOSITORY=${CIRCLE_TAG:+docker}
    33            export IMAGE_REPOSITORY=${IMAGE_REPOSITORY:-dockereng}
    34            export IMAGE_PREFIX=kube-compose-
    35            export IMAGE_REPO_PREFIX=${IMAGE_REPOSITORY:-dockereng}/${IMAGE_PREFIX}
    36            export KUBERNETES_VERSION_PARAM="${KUBERNETES_VERSION:+KUBERNETES_VERSION=$KUBERNETES_VERSION}"
    37            make -f docker.Makefile ${KUBERNETES_VERSION_PARAM} create-kind-cluster
    38            make -f docker.Makefile IMAGE_ARCHIVE=/root/kube-compose-api-server-coverage.tar load-kind-image-archive
    39            make -f docker.Makefile IMAGE_ARCHIVE=/root/kube-compose-controller-coverage.tar load-kind-image-archive
    40            docker load -i /root/kube-compose-e2e-tests.tar
    41            make TAG=${CIRCLE_TAG:-${CIRCLE_SHA1}} e2e-kind-circleci
    42          no_output_timeout: 30m
    43      - persist_to_workspace:
    44          root: /root/
    45          paths:
    46            - 'src/github.com/docker/compose-on-kubernetes/e2e-coverage/compose-*/coverage.txt'
    47  
    48    e2e-benchmark-kind-steps: &e2e-benchmark-kind-steps
    49      - attach_workspace:
    50          at: /root
    51      - setup_remote_docker:
    52          version: 20.10.11
    53      - run:
    54          name: "Prepare Kind and run e2e benchmark"
    55          command: |
    56            export PATH="$PATH:/root/bin"
    57            export IMAGE_REPOSITORY=${CIRCLE_TAG:+docker}
    58            export IMAGE_REPOSITORY=${IMAGE_REPOSITORY:-dockereng}
    59            export IMAGE_PREFIX=kube-compose-
    60            export IMAGE_REPO_PREFIX=${IMAGE_REPOSITORY:-dockereng}/${IMAGE_PREFIX}
    61            export KUBERNETES_VERSION_PARAM="${KUBERNETES_VERSION:+KUBERNETES_VERSION=$KUBERNETES_VERSION}"
    62            make -f docker.Makefile ${KUBERNETES_VERSION_PARAM} create-kind-cluster
    63            make -f docker.Makefile IMAGE_ARCHIVE=/root/kube-compose-api-server-coverage.tar load-kind-image-archive
    64            make -f docker.Makefile IMAGE_ARCHIVE=/root/kube-compose-controller-coverage.tar load-kind-image-archive
    65            docker load -i /root/kube-compose-e2e-benchmark.tar
    66            make TAG=${CIRCLE_TAG:-${CIRCLE_SHA1}} e2e-benchmark-kind-circleci
    67          no_output_timeout: 30m
    68      - run:
    69          name: Get cluster info (on failure)
    70          command: |
    71            curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
    72            chmod +x ./kubectl
    73            mv kubectl /root/bin
    74            export PATH="$PATH:/root/bin"
    75            make e2e-kind-pods-info
    76          when: on_fail
    77  
    78  jobs:
    79    checkout:
    80      docker: *compose-ci-docker
    81      working_directory: /root/src/github.com/docker/compose-on-kubernetes
    82      steps:
    83        - checkout
    84        - setup_remote_docker:
    85            version: 20.10.11
    86        - run:
    87            name: Login to docker hub
    88            command: echo "$DOCKER_PASS" | docker login -u "$DOCKER_USER" --password-stdin
    89        - persist_to_workspace:
    90            root: /root/
    91            paths:
    92              - 'src'
    93              - '.docker'
    94  
    95    checkout-pr:
    96      docker: *public-golang
    97      working_directory: /root/src/github.com/docker/compose-on-kubernetes
    98      steps:
    99      - checkout
   100      - persist_to_workspace:
   101          root: /root/
   102          paths:
   103            - 'src'
   104  
   105    validate:
   106      docker: *public-golang
   107      working_directory: /root/src/github.com/docker/compose-on-kubernetes
   108      environment:
   109        GOPATH: "/root"
   110        GOPROXY: "direct"
   111      steps:
   112        - attach_workspace:
   113            at: /root
   114        - setup_remote_docker:
   115            version: 20.10.11
   116        - run: make -f docker.Makefile validate
   117    validate-vendor:
   118      docker: *public-golang
   119      working_directory: /root/src/github.com/docker/compose-on-kubernetes
   120      environment:
   121        GOPATH: "/root"
   122        GOPROXY: "direct"
   123      steps:
   124        - attach_workspace:
   125            at: /root
   126        - run:
   127            name: Validate vendoring
   128            command: make validate-vendor
   129    check-licenses:
   130      docker: *public-golang
   131      working_directory: /root/src/github.com/docker/compose-on-kubernetes
   132      environment:
   133        GOPATH: "/root"
   134        GOPROXY: "direct"
   135      steps:
   136        - attach_workspace:
   137            at: /root
   138        - run: make check-licenses
   139    images:
   140      docker: *public-golang
   141      working_directory: /root/src/github.com/docker/compose-on-kubernetes
   142      environment:
   143        GOPATH: "/root"
   144        GOPROXY: "direct"
   145      steps:
   146        - attach_workspace:
   147            at: /root
   148        - setup_remote_docker:
   149            version: 20.10.11
   150        - run:
   151            name: Build images
   152            command: |
   153              export IMAGE_REPOSITORY=${CIRCLE_TAG:+docker}
   154              export IMAGE_REPOSITORY=${IMAGE_REPOSITORY:-dockereng}
   155              export IMAGE_PREFIX=kube-compose-
   156              export IMAGE_REPO_PREFIX=${IMAGE_REPOSITORY:-dockereng}/${IMAGE_PREFIX}
   157              echo "building images with TAG=${CIRCLE_TAG:-${CIRCLE_SHA1}} and IMAGE_REPO_PREFIX=${IMAGE_REPO_PREFIX}"
   158              make -f docker.Makefile TAG=${CIRCLE_TAG:-${CIRCLE_SHA1}} images
   159              for image in controller controller-coverage api-server api-server-coverage installer e2e-tests e2e-benchmark; do
   160                docker save "${IMAGE_REPO_PREFIX}$image:${CIRCLE_TAG:-${CIRCLE_SHA1}}" -o "/root/${IMAGE_PREFIX}$image.tar"
   161              done
   162        - persist_to_workspace:
   163            root: /root/
   164            paths:
   165              - kube-compose-api-server.tar
   166              - kube-compose-api-server-coverage.tar
   167              - kube-compose-controller.tar
   168              - kube-compose-controller-coverage.tar
   169              - kube-compose-installer.tar
   170              - kube-compose-e2e-tests.tar
   171              - kube-compose-e2e-benchmark.tar
   172    e2e-kind:
   173      docker: *public-golang
   174      working_directory: /root/src/github.com/docker/compose-on-kubernetes
   175      environment:
   176        GOPATH: "/root"
   177        GOPROXY: "direct"
   178      steps: *e2e-kind-steps
   179    e2e-kind-1_11:
   180      docker: *public-golang
   181      working_directory: /root/src/github.com/docker/compose-on-kubernetes
   182      environment:
   183        GOPATH: "/root"
   184        GOPROXY: "direct"
   185        KUBERNETES_VERSION: *kube_1_11
   186      steps: *e2e-kind-steps
   187    e2e-kind-1_13:
   188      docker: *public-golang
   189      working_directory: /root/src/github.com/docker/compose-on-kubernetes
   190      environment:
   191        GOPATH: "/root"
   192        GOPROXY: "direct"
   193        KUBERNETES_VERSION: *kube_1_13
   194      steps: *e2e-kind-steps
   195    e2e-kind-1_14:
   196      docker: *public-golang
   197      working_directory: /root/src/github.com/docker/compose-on-kubernetes
   198      environment:
   199        GOPATH: "/root"
   200        GOPROXY: "direct"
   201        KUBERNETES_VERSION: *kube_1_14
   202      steps: *e2e-kind-steps
   203    e2e-kind-1_15:
   204      docker: *public-golang
   205      working_directory: /root/src/github.com/docker/compose-on-kubernetes
   206      environment:
   207        GOPATH: "/root"
   208        GOPROXY: "direct"
   209        KUBERNETES_VERSION: *kube_1_15
   210      steps: *e2e-kind-steps
   211    e2e-kind-1_16:
   212      docker: *public-golang
   213      working_directory: /root/src/github.com/docker/compose-on-kubernetes
   214      environment:
   215        GOPATH: "/root"
   216        GOPROXY: "direct"
   217        KUBERNETES_VERSION: *kube_1_16
   218      steps: *e2e-kind-steps
   219    e2e-benchmark-kind:
   220      docker: *public-golang
   221      working_directory: /root/src/github.com/docker/compose-on-kubernetes
   222      environment:
   223        GOPATH: "/root"
   224        GOPROXY: "direct"
   225        KUBERNETES_VERSION: *kube_1_13
   226      steps: *e2e-benchmark-kind-steps
   227    test-unit:
   228      docker: *public-golang
   229      working_directory: /root/src/github.com/docker/compose-on-kubernetes
   230      environment:
   231        GOPATH: "/root"
   232        GOPROXY: "direct"
   233      steps:
   234        - attach_workspace:
   235            at: /root
   236        - setup_remote_docker:
   237            version: 20.10.11
   238        - run:
   239            name: Run unit tests
   240            command: make -f docker.Makefile test-unit
   241        - persist_to_workspace:
   242            root: /root/
   243            paths:
   244              - 'src/github.com/docker/compose-on-kubernetes/coverage.txt'
   245    coverage-upload:
   246      docker: *public-golang
   247      working_directory: /root/src/github.com/docker/compose-on-kubernetes
   248      environment:
   249        GOPATH: "/root"
   250        GOPROXY: "direct"
   251      steps:
   252        - attach_workspace:
   253            at: /root
   254        - run:
   255            name: Upload coverage
   256            command: bash <(curl -s https://codecov.io/bash) -t 30879c0b-96d4-4dec-bb62-b053f96b8726
   257    push-to-hub:
   258      docker: *compose-ci-docker
   259      working_directory: /root/src/github.com/docker/compose-on-kubernetes
   260      steps:
   261        - attach_workspace:
   262            at: /root
   263        - setup_remote_docker:
   264            version: 20.10.11
   265        - deploy:
   266            name: push-to-hub
   267            command: |
   268              echo "Logging in with $DOCKER_USER"
   269              echo "$DOCKER_PASS" | docker login -u "$DOCKER_USER" --password-stdin
   270              if [ "$CI_PULL_REQUEST" != "" ]; then
   271                # case where a pull request from a fork's master
   272                exit 0
   273              fi
   274              export IMAGE_REPOSITORY=${CIRCLE_TAG:+docker}
   275              export IMAGE_REPOSITORY=${IMAGE_REPOSITORY:-dockereng}
   276              export IMAGE_PREFIX=kube-compose-
   277              export IMAGE_REPO_PREFIX=${IMAGE_REPOSITORY}/${IMAGE_PREFIX}
   278              TAG=${CIRCLE_TAG:-${CIRCLE_SHA1}}
   279              for image in api-server controller installer e2e-tests; do
   280                docker load -i /root/${IMAGE_PREFIX}$image.tar
   281                docker tag ${IMAGE_REPO_PREFIX}$image:$TAG ${IMAGE_REPO_PREFIX}$image:latest
   282                docker push ${IMAGE_REPO_PREFIX}$image:$TAG
   283                # Don't push on latest tag if it's not a stable release
   284                if echo "${CIRCLE_TAG}" | grep -Eq "^v[0-9]+\.[0-9]+\.[0-9]+$"; then
   285                  docker push ${IMAGE_REPO_PREFIX}$image:latest
   286                fi
   287              done
   288    build-and-release-installer:
   289      docker: *compose-ci-golang
   290      working_directory: /root/src/github.com/docker/compose-on-kubernetes
   291      steps:
   292        - attach_workspace:
   293            at: /root
   294        - setup_remote_docker:
   295            version: 20.10.11
   296        - deploy:
   297            name: push-to-hub
   298            command: |
   299              if [ "$CIRCLE_TAG" == "" ]; then
   300                # case where we are not on a tag
   301                exit 0
   302              fi
   303              export IMAGE_REPOSITORY=docker
   304              export IMAGE_PREFIX=kube-compose-
   305              export IMAGE_REPO_PREFIX=${IMAGE_REPOSITORY}/${IMAGE_PREFIX}
   306              TAG=${CIRCLE_TAG:-${CIRCLE_SHA1}}
   307              GOOS=linux make bin/installer
   308              mv bin/installer bin/installer-linux
   309              GOOS=darwin make bin/installer
   310              mv bin/installer bin/installer-darwin
   311              GOOS=windows make bin/installer
   312              mv bin/installer bin/installer-windows.exe
   313              go get -d github.com/tcnksm/ghr
   314              cd /root/src/github.com/tcnksm/ghr
   315              git checkout v0.12.0
   316              go install
   317              cd /root/src/github.com/docker/compose-on-kubernetes
   318              # Mark all unstable releases as draft
   319              if echo "${CIRCLE_TAG}" | grep -v -Eq "^v[0-9]+\.[0-9]+\.[0-9]+$"; then
   320                  OPTIONS="-draft"
   321              fi
   322              ghr -t ${GITHUB_RELEASE_TOKEN} -u ${CIRCLE_PROJECT_USERNAME} -r ${CIRCLE_PROJECT_REPONAME} -c ${CIRCLE_SHA1} -delete ${OPTIONS} ${TAG} ./bin/
   323  
   324  workflows:
   325    version: 2
   326    pr:
   327      jobs:
   328        - checkout-pr:
   329            filters:
   330              branches:
   331                only: /^pull\/.*$/
   332        - test-unit:
   333            requires:
   334              - checkout-pr
   335            filters:
   336              branches:
   337                only: /^pull\/.*$/
   338        - validate:
   339            requires:
   340              - checkout-pr
   341            filters:
   342              branches:
   343                only: /^pull\/.*$/
   344        - validate-vendor:
   345            requires:
   346              - checkout-pr
   347            filters:
   348              branches:
   349                only: /^pull\/.*$/
   350        - check-licenses:
   351            requires:
   352              - checkout-pr
   353            filters:
   354              branches:
   355                only: /^pull\/.*$/
   356        - images:
   357            requires:
   358              - checkout-pr
   359            filters:
   360              branches:
   361                only: /^pull\/.*$/
   362        - e2e-kind:
   363            requires:
   364              - images
   365            filters:
   366              branches:
   367                only: /^pull\/.*$/
   368        - coverage-upload:
   369            requires:
   370              - e2e-kind
   371              - test-unit
   372            filters:
   373              branches:
   374                only: /^pull\/.*$/
   375    master-or-tag:
   376      jobs:
   377        - checkout:
   378            filters:
   379              tags:
   380                only: /v.*/
   381              branches:
   382                only: /^(?!pull\/).*$/
   383        - test-unit:
   384            requires:
   385              - checkout
   386            filters:
   387              tags:
   388                only: /v.*/
   389              branches:
   390                only: /^(?!pull\/).*$/
   391        - images:
   392            requires:
   393              - checkout
   394            filters:
   395              tags:
   396                only: /v.*/
   397              branches:
   398                only: /^(?!pull\/).*$/
   399        - validate:
   400            requires:
   401              - images
   402            filters:
   403              tags:
   404                only: /v.*/
   405              branches:
   406                only: /^(?!pull\/).*$/
   407        - validate-vendor:
   408            requires:
   409              - checkout
   410            filters:
   411              tags:
   412                only: /v.*/
   413              branches:
   414                only: /^(?!pull\/).*$/
   415        - check-licenses:
   416            requires:
   417              - checkout
   418            filters:
   419              tags:
   420                only: /v.*/
   421              branches:
   422                only: /^(?!pull\/).*$/
   423        - test-unit:
   424            requires:
   425              - images
   426            filters:
   427              tags:
   428                only: /v.*/
   429              branches:
   430                only: /^(?!pull\/).*$/
   431        - e2e-kind-1_11:
   432            requires:
   433              - images
   434            filters:
   435              tags:
   436                only: /v.*/
   437              branches:
   438                only: /^(?!pull\/).*$/
   439        - e2e-kind-1_13:
   440            requires:
   441              - images
   442            filters:
   443              tags:
   444                only: /v.*/
   445              branches:
   446                only: /^(?!pull\/).*$/
   447        - e2e-kind-1_14:
   448            requires:
   449              - images
   450            filters:
   451              tags:
   452                only: /v.*/
   453              branches:
   454                only: /^(?!pull\/).*$/
   455        - e2e-kind-1_15:
   456            requires:
   457              - images
   458            filters:
   459              tags:
   460                only: /v.*/
   461              branches:
   462                only: /^(?!pull\/).*$/
   463        - e2e-kind-1_16:
   464            requires:
   465              - images
   466            filters:
   467              tags:
   468                only: /v.*/
   469              branches:
   470                only: /^(?!pull\/).*$/
   471        # - e2e-benchmark-kind:
   472        #     requires:
   473        #       - images
   474        #     filters:
   475        #       tags:
   476        #         only: /v.*/
   477        #       branches:
   478        #         only: /^(?!pull\/).*$/
   479        - coverage-upload:
   480            requires:
   481              - test-unit
   482              - e2e-kind-1_11
   483              - e2e-kind-1_13
   484              - e2e-kind-1_14
   485              - e2e-kind-1_15
   486              - e2e-kind-1_16
   487              # - e2e-benchmark-kind
   488            filters:
   489              tags:
   490                only: /v.*/
   491              branches:
   492                only: /^(?!pull\/).*$/
   493        - push-to-hub:
   494            requires:
   495              - e2e-kind-1_11
   496              - e2e-kind-1_13
   497              - e2e-kind-1_14
   498              - e2e-kind-1_15
   499              - e2e-kind-1_16
   500              # - e2e-benchmark-kind
   501            filters:
   502              branches:
   503                only: master
   504              tags:
   505                only: /v.*/
   506        - build-and-release-installer:
   507            requires:
   508              - e2e-kind-1_11
   509              - e2e-kind-1_13
   510              - e2e-kind-1_14
   511              - e2e-kind-1_15
   512              - e2e-kind-1_16
   513              # - e2e-benchmark-kind
   514            filters:
   515              branches:
   516                only: master
   517              tags:
   518                only: /v.*/
   519