aboutsummaryrefslogtreecommitdiff
path: root/.circleci/config.yml
blob: 1138274908a58cc8c091a17e3422a1b97288925e (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
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
---
version: 2

jobs:
  test:
    docker:
    - image: circleci/golang:1.10
    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"

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

    environment:
      DOCKER_IMAGE_NAME: prom/node-exporter
      QUAY_IMAGE_NAME: quay.io/prometheus/node-exporter
      DOCKER_TEST_IMAGE_NAME: quay.io/prometheus/golang-builder:1.10-base
      REPO_PATH: github.com/prometheus/node_exporter

    steps:
    - checkout
    - run: make promu
    - run: promu crossbuild -v
    - 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_NAME=$DOCKER_IMAGE_NAME DOCKER_IMAGE_TAG=$CIRCLE_TAG
            make docker DOCKER_IMAGE_NAME=$QUAY_IMAGE_NAME DOCKER_IMAGE_TAG=$CIRCLE_TAG
          else
            make docker DOCKER_IMAGE_NAME=$DOCKER_IMAGE_NAME
            make docker DOCKER_IMAGE_NAME=$QUAY_IMAGE_NAME
          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.10
    working_directory: /go/src/github.com/prometheus/node_exporter

    environment:
      DOCKER_IMAGE_NAME: prom/node-exporter
      QUAY_IMAGE_NAME: quay.io/prometheus/node-exporter
      DOCKER_TEST_IMAGE_NAME: quay.io/prometheus/golang-builder:1.10-base
      REPO_PATH: 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 DOCKER_IMAGE_NAME=$DOCKER_IMAGE_NAME
    - run: make docker DOCKER_IMAGE_NAME=$QUAY_IMAGE_NAME
    - run: docker images
    - run: docker login -u $DOCKER_LOGIN -p $DOCKER_PASSWORD
    - run: docker login -u $QUAY_LOGIN -p $QUAY_PASSWORD quay.io
    - run: docker push $DOCKER_IMAGE_NAME
    - run: docker push $QUAY_IMAGE_NAME

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

    environment:
      DOCKER_IMAGE_NAME: prom/node-exporter
      QUAY_IMAGE_NAME: quay.io/prometheus/node-exporter
      DOCKER_TEST_IMAGE_NAME: quay.io/prometheus/golang-builder:1.10-base
      REPO_PATH: 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:
        command: |
          if [ -n "$CIRCLE_TAG" ]; then
            make docker DOCKER_IMAGE_NAME=$DOCKER_IMAGE_NAME DOCKER_IMAGE_TAG=$CIRCLE_TAG
            make docker DOCKER_IMAGE_NAME=$QUAY_IMAGE_NAME DOCKER_IMAGE_TAG=$CIRCLE_TAG
          else
            make docker DOCKER_IMAGE_NAME=$DOCKER_IMAGE_NAME
            make docker DOCKER_IMAGE_NAME=$QUAY_IMAGE_NAME
          fi
    - 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
          docker tag "$DOCKER_IMAGE_NAME:$CIRCLE_TAG" "$DOCKER_IMAGE_NAME:latest"
          docker tag "$QUAY_IMAGE_NAME:$CIRCLE_TAG" "$QUAY_IMAGE_NAME:latest"
        fi
    - run: docker push $DOCKER_IMAGE_NAME:$CIRCLE_TAG
    - run: docker push $QUAY_IMAGE_NAME:$CIRCLE_TAG

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: /.*/