1version: 2.1
2
3workflows:
4  build-and-deploy:
5    jobs:
6      - build
7      - push:
8          filters:
9            tags:
10              only: /^v.*/
11            branches:
12              ignore: /.*/
13jobs:
14  build:
15    working_directory: /go/src/go.mozilla.org/sops
16    docker:
17      - image: circleci/golang:1.13
18    resource_class: large
19    steps:
20      - checkout
21      - setup_remote_docker
22      - run:
23          name: Build containers
24          command: |
25            docker build -t mozilla/sops .
26            docker tag mozilla/sops "mozilla/sops:$CIRCLE_SHA1"
27
28  push:
29    machine: true
30    resource_class: large
31    steps:
32      - checkout
33      - run:
34          name: semver check
35          command: |
36            MAJOR=$(echo ${CIRCLE_TAG#v} | cut -d"." -f1)
37            MINOR=$(echo ${CIRCLE_TAG#v} | cut -d"." -f2)
38            PATCH=$(echo ${CIRCLE_TAG#v} | cut -d"." -f3)
39            echo "export MAJOR=${MAJOR}" >> $BASH_ENV
40            echo "export MINOR=${MINOR}" >> $BASH_ENV
41            echo "export PATCH=${PATCH}" >> $BASH_ENV
42
43            if [ -z $MAJOR ];then
44            cat \<< EOF
45            Failure Info:
46
47            This job uses the semver from the git TAG as the public version to publish.
48
49            - This should only run on workflows triggered by a tag.
50            - The tag name should be a semver like 'v1.2.3'
51            - The version should follow conventions documented at https://github.com/fsaintjacques/semver-tool
52            EOF
53            exit 1
54            fi
55      - run:
56          name: Build containers
57          command: |
58            docker build -t mozilla/sops .
59            docker build -f Dockerfile.alpine -t mozilla/sops:alpine .
60      - run:
61          name: Tag & Push containers
62          command: |
63            #latest
64            bin/ci/deploy_dockerhub.sh "latest"
65            bin/ci/deploy_dockerhub.sh "alpine"
66
67            # by sha
68            echo "Tag and push mozilla/sops:$CIRCLE_SHA1"
69            docker tag mozilla/sops "mozilla/sops:$CIRCLE_SHA1"
70            bin/ci/deploy_dockerhub.sh "$CIRCLE_SHA1"
71
72            # no sha for alpine
73
74            # by semver
75            # v1.2.3
76            if [ ! -z $PATCH ];then
77              echo "Tag and Push mozilla/sops:v$MAJOR.$MINOR.$PATCH"
78              docker tag mozilla/sops "mozilla/sops:v$MAJOR.$MINOR.$PATCH"
79              bin/ci/deploy_dockerhub.sh "v$MAJOR.$MINOR.$PATCH"
80
81              echo "Tag and Push mozilla/sops:v$MAJOR.$MINOR.$PATCH-alpine"
82              docker tag mozilla/sops:alpine "mozilla/sops:v$MAJOR.$MINOR.$PATCH-alpine"
83              bin/ci/deploy_dockerhub.sh "v$MAJOR.$MINOR.$PATCH-alpine"
84            fi
85            # v1.2
86            if [ ! -z $MINOR ];then
87              echo "Tag and Push mozilla/sops:v$MAJOR.$MINOR"
88              docker tag mozilla/sops "mozilla/sops:v$MAJOR.$MINOR"
89              bin/ci/deploy_dockerhub.sh "v$MAJOR.$MINOR"
90
91              echo "Tag and Push mozilla/sops:v$MAJOR.$MINOR-alpine"
92              docker tag mozilla/sops:alpine "mozilla/sops:v$MAJOR.$MINOR-alpine"
93              bin/ci/deploy_dockerhub.sh "v$MAJOR.$MINOR-alpine"
94            fi
95            # v1
96            echo "Tag and Push mozilla/sops:v$MAJOR"
97            docker tag mozilla/sops "mozilla/sops:v$MAJOR"
98            bin/ci/deploy_dockerhub.sh "v$MAJOR"
99
100            echo "Tag and Push mozilla/sops:v$MAJOR-alpine"
101            docker tag mozilla/sops:alpine "mozilla/sops:v$MAJOR-alpine"
102            bin/ci/deploy_dockerhub.sh "v$MAJOR-alpine"
103