-
Notifications
You must be signed in to change notification settings - Fork 30
/
.gitlab-ci.yml
125 lines (116 loc) · 4.09 KB
/
.gitlab-ci.yml
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
image: golang:latest
variables:
# Please edit to your GitLab project
REPO_NAME: gitlab-sjc.cisco.com/tfprovider/fmc-terraform
# The problem is that to be able to use go get, one needs to put
# the repository in the $GOPATH. So for example if your gitlab domain
# is gitlab.com, and that your repository is namespace/project, and
# the default GOPATH being /go, then you'd need to have your
# repository in /go/src/gitlab.com/namespace/project
# Thus, making a symbolic link corrects this.
before_script:
- mkdir -p $GOPATH/src/$(dirname $REPO_NAME)
- ln -svf $CI_PROJECT_DIR $GOPATH/src/$REPO_NAME
- cd $GOPATH/src/$REPO_NAME
stages:
- test
- test-acc
- tag
- manual-build
- build
- release
test:
stage: test
script:
- 'echo "Config: host: $FMC_HOST, user: $FMC_USERNAME, insecure: $FMC_INSECURE_SKIP_VERIFY"'
- go fmt $(go list ./... | grep -v /vendor/)
- go vet $(go list ./... | grep -v /vendor/)
- make test
test-acc:
stage: test-acc
when: manual
script:
- cd /usr/local/share/ca-certificates
- openssl s_client -showcerts -verify 5 -connect $FMC_HOST:443 < /dev/null | awk '/BEGIN/,/END/{ if(/BEGIN/){a++}; out="cert"a".pem"; print >out}'; for cert in *.pem; do newname=$(openssl x509 -noout -subject -in $cert | sed -nE 's/.*CN ?= ?(.*)/\1/; s/[ ,.*]/_/g; s/__/_/g; s/_-_/-/; s/^_//g;p' | tr '[:upper:]' '[:lower:]').crt; echo "${newname}"; mv "${cert}" "${newname}"; done
- update-ca-certificates
- cd $GOPATH/src/$REPO_NAME
- 'echo "Config: host: $FMC_HOST, user: $FMC_USERNAME, insecure: $FMC_INSECURE_SKIP_VERIFY"'
- go fmt $(go list ./... | grep -v /vendor/)
- go vet $(go list ./... | grep -v /vendor/)
- make testacc
tag:
stage: tag
only:
- release
- master
image:
name: alpine/git
entrypoint: [""]
script:
- 'command -v ssh-agent >/dev/null || ( apt-get update -y && apt-get install openssh-client -y )'
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
- echo "$SSH_KNOWN_HOSTS" >> ~/.ssh/known_hosts
- chmod 644 ~/.ssh/known_hosts
- git config user.email "${GITLAB_USER_EMAIL}"
- git config user.name "${GITLAB_USER_NAME}"
- export CURR_TAG=$(git describe --tags --abbrev=0 | awk -F. '{OFS="."; $NF+=0; print $0}')
- git tag -a "${CURR_TAG}-${CI_COMMIT_REF_NAME}$(date +%Y%m%d%H%M)" -m "Auto-Release for ${CI_COMMIT_REF_NAME}"
- git push git@gitlab-sjc.cisco.com:${CI_PROJECT_PATH} "${CURR_TAG}-${CI_COMMIT_REF_NAME}$(date +%Y%m%d%H%M)"
manual_build:
stage: manual-build
when: manual
image:
name: goreleaser/goreleaser
entrypoint: ['']
only:
- branches
variables:
# Disable shallow cloning so that goreleaser can diff between tags to
# generate a changelog.
GIT_DEPTH: 0
script:
- goreleaser release --snapshot --rm-dist -f .goreleaser.gitlab.manual.yml
artifacts:
paths:
- dist/*.zip
- dist/*SHA256SUMS*
build:
stage: build
image:
name: goreleaser/goreleaser
entrypoint: ['']
only:
- tags
variables:
# Disable shallow cloning so that goreleaser can diff between tags to
# generate a changelog.
GIT_DEPTH: 0
script:
# Install GPG tools and import private key
- apk add --no-cache gnupg
- gpg-agent --daemon --default-cache-ttl 7200
- echo -e "${GPG_PRIVATE_KEY}" | gpg --import --batch --no-tty
# Test if passphrase is correct by using it to sign
- echo "hello world" > temp.txt
- pkill -9 gpg-agent && source <(gpg-agent --daemon --default-cache-ttl 7200) && gpg --detach-sig --yes -v --output=/dev/null --pinentry-mode loopback --passphrase "${PASSPHRASE}" temp.txt
- rm temp.txt
# Export fingerprint
- "export GPG_FINGERPRINT=$(gpg --with-colons --list-keys | awk -F: '/^pub/ { print $5 }')"
# Release
- goreleaser release --rm-dist -f .goreleaser.gitlab.yml
artifacts:
paths:
- dist/*.zip
- dist/*SHA256SUMS*
release:
only:
- tags
image: inetprocess/gitlab-release
stage: release
dependencies:
- build
script:
- gitlab-release --message 'Automatic release' dist/*