forked from harness/harness
-
Notifications
You must be signed in to change notification settings - Fork 0
/
.drone.script
152 lines (145 loc) · 4.39 KB
/
.drone.script
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
def main(ctx):
return [
pipeline('linux-amd64', 'linux', 'amd64'),
pipeline('linux-arm64', 'linux', 'arm64'),
pipeline('linux-arm', 'linux', 'arm'),
pipeline_windows('1809'),
pipeline_windows('1903'),
manifest(),
]
# defines a pipeline step that builds and publishes a docker
# image to a docker remote registry.
def docker_step(name, os, arch):
repo = 'drone/%s' % name
if repo == 'server':
repo = 'drone/drone'
return {
'name': 'publish_%s' % name,
'image': 'plugins/docker:18',
'settings': {
'repo': repo,
'auto_tag': True,
'auto_tag_suffix': '%s-%s' % (os, arch),
'username': { 'from_secret': 'docker_username' },
'password': { 'from_secret': 'docker_password' },
'dockerfile': 'docker/Dockerfile.%s.%s.%s' % (name, os, arch),
},
'when': {
'event': [ 'push', 'tag' ],
},
}
# defines a pipeline step that executes the Go unit tests.
# this will also download dependencies and cache in /go
def test_step():
return {
'name': 'test',
'image': 'golang:1.12',
'commands': [
'go test ./...',
],
}
# defines a pipeline step that executes the Go unit tests.
# this will also download dependencies and cache in /go
def build_step(os, arch):
return {
'name': 'build',
'image': 'golang:1.12',
'commands': [
'sh scripts/build.sh',
],
'environment': {
'GOOS': os,
'GOARCH': arch,
},
}
# defines a pipeline that builds, tests and publishes
# docker images for the Drone agent, server and controller.
def pipeline(name, os, arch):
return {
'kind': 'pipeline',
'type': 'docker',
'name': 'linux-%s' % arch,
'platform': {
'os': 'linux',
'arch': arch,
},
'steps': [
test_step(),
build_step(os, arch),
docker_step('drone', os, arch),
docker_step('agent', os, arch),
docker_step('controller', os, arch),
],
}
# defines a pipeline that builds and publishes docker images
# for the Drone agent for the Windows kernel.
def pipeline_windows(version):
return {
'kind': 'pipeline',
'type': 'ssh',
'name': 'windows-%s-amd64' % version,
'platform': { 'os': 'windows' },
'server': {
'host': { 'from_secret': 'windows_server_%s' % version },
'user': { 'from_secret': 'windows_username' },
'password': { 'from_secret': 'windows_password' },
},
'steps': [
{
'name': 'build',
'environment': {
'USERNAME': { 'from_secret': 'docker_username' },
'PASSWORD': { 'from_secret': 'docker_password' },
},
# TODO these commands build and publish the latest
# docker tag regardless of git tag.
'commands': [
'powershell.exe scripts/build.ps1',
'docker login -u $env:USERNAME -p $env:PASSWORD',
'docker build -f docker/Dockerfile.agent.windows.%s -t drone/agent:windows-%s-amd64 .' % (version, version),
'docker push drone/agent:windows-%s-amd64' % version,
],
},
],
'trigger': {
'event': ['push']
}
}
# defines a pipeline that updates the docker manifest
# for the architecture-specific images previously published
# to dockerhub.
def manifest():
return {
'kind': 'pipeline',
'type': 'docker',
'name': 'manifest',
'steps': [
manifest_step('server'),
manifest_step('agent'),
manifest_step('controller'),
],
'trigger': {
'event': [ 'push', 'tag' ],
},
'depends_on': [
'linux-amd64',
'linux-arm64',
'linux-arm',
'windows-1903-amd64',
'windows-1809-amd64',
],
}
# defines a pipeline step that creates and publishes
# a docker manifest to a docker remote registry.
def manifest_step(name):
return {
'name': 'publish_%s' % name,
'image': 'plugins/manifest:1',
'settings': {
'auto_tag': True,
'ignore_missing': True,
'spec': 'docker/manifest.%s.tmpl' % name,
'username': { 'from_secret': 'docker_username' },
'password': { 'from_secret': 'docker_password' },
},
}