aboutsummaryrefslogtreecommitdiff
path: root/.circleci/config.yml
blob: abda9db00ef5eb21397fa9a1c1244cd2f8d79859 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
---
version: 2

jobs:
  test:
    docker:
    - image: circleci/golang:1.11
    working_directory: /go/src/github.com/prometheus/node_exporter

    steps:
    - checkout
    - run: make promu
    - run: make
    - run: rm -v node_exporter

  codespell:
    docker:
    - image: circleci/python

    steps:
    - checkout
    - run: sudo pip install codespell
    - run: codespell --skip=".git,./vendor,ttar" -L uint

  build:
    machine: true
    working_directory: /home/circleci/.go_workspace/src/github.com/prometheus/node_exporter

    environment:
      DOCKER_TEST_IMAGE_NAME: quay.io/prometheus/golang-builder:1.11-base
      REPO_PATH: github.com/prometheus/node_exporter

    steps:
    - checkout
    - run: make promu
    - run: promu crossbuild -v --go 1.11
    - run: promu --config .promu-cgo.yml crossbuild -v --go 1.11
    - persist_to_workspace:
        root: .
        paths:
        - .build
    - run: ln -s .build/linux-amd64/node_exporter node_exporter
    - run:
        command: |
          if [ -n "$CIRCLE_TAG" ]; then
            make docker DOCKER_IMAGE_TAG=$CIRCLE_TAG
          else
            make docker
          fi
    - run: docker images
    - run: docker run --rm -t -v "$(pwd):/app" "${DOCKER_TEST_IMAGE_NAME}" -i "${REPO_PATH}" -T
    - run:
        command: |
          if [ -n "$CIRCLE_TAG" ]; then
            make test-docker DOCKER_IMAGE_TAG=$CIRCLE_TAG
          else
            make test-docker
          fi

  docker_hub_master:
    docker:
    - image: circleci/golang:1.11
    working_directory: /go/src/github.com/prometheus/node_exporter

    steps:
    - checkout
    - setup_remote_docker
    - attach_workspace:
        at: .
    - run: ln -s .build/linux-amd64/node_exporter node_exporter
    - run: make docker
    - run: make docker DOCKER_REPO=quay.io/prometheus
    - run: docker images
    - run: docker login -u $DOCKER_LOGIN -p $DOCKER_PASSWORD
    - run: docker login -u $QUAY_LOGIN -p $QUAY_PASSWORD quay.io
    - run: make docker-publish
    - run: make docker-publish DOCKER_REPO=quay.io/prometheus

  docker_hub_release_tags:
    docker:
    - image: circleci/golang:1.11
    working_directory: /go/src/github.com/prometheus/node_exporter

    steps:
    - checkout
    - setup_remote_docker
    - run: mkdir -v -p ${HOME}/bin
    - run: curl -L 'https://github.com/aktau/github-release/releases/download/v0.7.2/linux-amd64-github-release.tar.bz2' | tar xvjf - --strip-components 3 -C ${HOME}/bin
    - run: echo 'export PATH=${HOME}/bin:${PATH}' >> ${BASH_ENV}
    - attach_workspace:
        at: .
    - run: make promu
    - run: promu crossbuild tarballs
    - run: promu checksum .tarballs
    - run: promu release .tarballs
    - store_artifacts:
        path: .tarballs
        destination: releases
    - run: ln -s .build/linux-amd64/node_exporter node_exporter
    - run: make docker DOCKER_IMAGE_TAG=$CIRCLE_TAG
    - run: make docker DOCKER_IMAGE_TAG=$CIRCLE_TAG DOCKER_REPO=quay.io/prometheus
    - run: docker login -u $DOCKER_LOGIN -p $DOCKER_PASSWORD
    - run: docker login -u $QUAY_LOGIN -p $QUAY_PASSWORD quay.io
    - run: |
        if [[ "$CIRCLE_TAG" =~ ^v[0-9]+(\.[0-9]+){2}$ ]]; then
          make docker-tag-latest DOCKER_IMAGE_TAG="$CIRCLE_TAG"
          make docker-tag-latest DOCKER_IMAGE_TAG="$CIRCLE_TAG" DOCKER_REPO=quay.io/prometheus
        fi
    - run: make docker-publish
    - run: make docker-publish DOCKER_REPO=quay.io/prometheus

workflows:
  version: 2
  node_exporter:
    jobs:
    - test:
        filters:
          tags:
            only: /.*/
    - build:
        filters:
          tags:
            only: /.*/
    - codespell:
        filters:
          tags:
            only: /.*/
    - docker_hub_master:
        requires:
        - test
        - build
        filters:
          branches:
            only: master
    - docker_hub_release_tags:
        requires:
        - test
        - build
        filters:
          tags:
            only: /^v.*/
          branches:
            ignore: /.*/