summaryrefslogtreecommitdiff
path: root/.drone.yml
blob: 589c20b24a33353f2b2738dee23730872a5079a4 (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
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
---
### Drone configuration file for GoToSocial.
### Connects to https://drone.superseriousbusiness.org to perform testing, linting, and automatic builds/pushes to docker.
###
### For documentation on drone, see: https://docs.drone.io/
### For documentation on drone docker pipelines in particular: https://docs.drone.io/pipeline/docker/overview/
kind: pipeline
type: docker
name: default

steps:
  # We use golangci-lint for linting.
  # See: https://golangci-lint.run/
  - name: lint
    image: golangci/golangci-lint:v1.57.2
    volumes:
      - name: go-build-cache
        path: /root/.cache/go-build
      - name: golangci-lint-cache
        path: /root/.cache/golangci-lint
      - name: go-src
        path: /go
    commands:
      - golangci-lint run
    when:
      event:
        include:
          - pull_request

  - name: test
    image: golang:1.22-alpine
    volumes:
      - name: go-build-cache
        path: /root/.cache/go-build
      - name: go-src
        path: /go
      - name: wazero-compilation-cache
        path: /root/.cache/wazero
    environment:
      CGO_ENABLED: "0"
      GTS_WAZERO_COMPILATION_CACHE: "/root/.cache/wazero"
    commands:
      - apk update --no-cache && apk add git
      - >-
        go test
        -failfast
        -timeout=20m
        -tags "netgo osusergo static_build kvformat timetzdata"
        ./...        
      - ./test/envparsing.sh
      - ./test/swagger.sh
    depends_on:
      - lint
    when:
      event:
        include:
          - pull_request

  - name: web-setup
    image: node:18-alpine
    volumes:
      - name: yarn_cache
        path: /tmp/cache
    commands:
      - yarn --cwd ./web/source install --frozen-lockfile --cache-folder /tmp/cache
      - yarn --cwd ./web/source ts-patch install # https://typia.io/docs/setup/#manual-setup
    depends_on:
      - test
    when:
      event:
        include:
          - pull_request

  - name: web-lint
    image: node:18-alpine
    commands:
      - yarn --cwd ./web/source lint
    depends_on:
      - web-setup
    when:
      event:
        include:
          - pull_request

  - name: web-build
    image: node:18-alpine
    commands:
      - yarn --cwd ./web/source build
    depends_on:
      - web-setup
    when:
      event:
        include:
          - pull_request

  - name: snapshot
    image: superseriousbusiness/gotosocial-drone-build:0.6.2 # https://github.com/superseriousbusiness/gotosocial-drone-build
    volumes:
      - name: go-build-cache
        path: /root/.cache/go-build
      - name: docker
        path: /var/run/docker.sock
    environment:
      DOCKER_USERNAME: gotosocial
      DOCKER_PASSWORD:
        from_secret: gts_docker_password
      S3_ACCESS_KEY_ID:
        from_secret: gts_s3_access_key_id
      S3_SECRET_ACCESS_KEY:
        from_secret: gts_s3_secret_access_key
      S3_HOSTNAME: "https://s3.superseriousbusiness.org"
      S3_BUCKET_NAME: "gotosocial-snapshots"
    commands:
      # Create a snapshot build with GoReleaser.
      - git fetch --tags
      - goreleaser release --clean --snapshot
      
      # Login to Docker, push Docker image snapshots + manifests.
      - /go/dockerlogin.sh
      - docker push superseriousbusiness/gotosocial:snapshot-armv6
      - docker push superseriousbusiness/gotosocial:snapshot-armv7
      - docker push superseriousbusiness/gotosocial:snapshot-arm64v8
      - docker push superseriousbusiness/gotosocial:snapshot-amd64
      - docker manifest create superseriousbusiness/gotosocial:snapshot superseriousbusiness/gotosocial:snapshot-armv6 superseriousbusiness/gotosocial:snapshot-armv7 superseriousbusiness/gotosocial:snapshot-amd64 superseriousbusiness/gotosocial:snapshot-arm64v8
      - docker manifest push superseriousbusiness/gotosocial:snapshot
      - docker push superseriousbusiness/gotosocial:snapshot-armv6-moderncsqlite
      - docker push superseriousbusiness/gotosocial:snapshot-armv7-moderncsqlite
      - docker push superseriousbusiness/gotosocial:snapshot-arm64v8-moderncsqlite
      - docker push superseriousbusiness/gotosocial:snapshot-amd64-moderncsqlite
      - docker manifest create superseriousbusiness/gotosocial:snapshot-moderncsqlite superseriousbusiness/gotosocial:snapshot-armv6-moderncsqlite superseriousbusiness/gotosocial:snapshot-armv7-moderncsqlite superseriousbusiness/gotosocial:snapshot-amd64-moderncsqlite superseriousbusiness/gotosocial:snapshot-arm64v8-moderncsqlite
      - docker manifest push superseriousbusiness/gotosocial:snapshot-moderncsqlite
      
      # Publish binary .tar.gz snapshots to S3.
      - /go/snapshot_publish.sh
    when:
      event:
        include:
          - push
      branch:
        include:
          - main

  - name: release
    image: superseriousbusiness/gotosocial-drone-build:0.6.2 # https://github.com/superseriousbusiness/gotosocial-drone-build
    volumes:
      - name: go-build-cache
        path: /root/.cache/go-build
      - name: docker
        path: /var/run/docker.sock
    environment:
      DOCKER_USERNAME: gotosocial
      DOCKER_PASSWORD:
        from_secret: gts_docker_password
      GITHUB_TOKEN:
        from_secret: github_token
    commands:
      - git fetch --tags
      - /go/dockerlogin.sh
      
      # When releasing, compare commits to the most recent tag that is not the
      # current one AND is not a release candidate tag (ie., no "rc" in the name).
      #
      # The DRONE_TAG env var should point to the tag that triggered this build.
      # See: https://docs.drone.io/pipeline/environment/reference/drone-tag/ 
      #
      # Note, this may cause annoyances when doing backport releases, for example,
      # releasing v0.10.1 when we've already released v0.15.0 or whatever, but
      # they should only be superficial annoyances related to the release notes.
      - GORELEASER_PREVIOUS_TAG=$(git tag -l | grep -v "rc\|${DRONE_TAG}" | sort -V -r | head -n 1) goreleaser release --clean
    when:
      event:
        include:
          - tag

# We can speed up builds significantly by caching build artifacts between runs.
# See: https://docs.drone.io/pipeline/docker/syntax/volumes/host/
volumes:
  - name: go-build-cache
    host:
      path: /drone/gotosocial/go-build
  - name: golangci-lint-cache
    host:
      path: /drone/gotosocial/golangci-lint
  - name: go-src
    host:
      path: /drone/gotosocial/go
  - name: docker
    host:
      path: /var/run/docker.sock

trigger:
  repo:
    - superseriousbusiness/gotosocial
    - NyaaaWhatsUpDoc/gotosocial
    - f0x52/gotosocial

---
kind: pipeline
type: docker
name: cron

trigger:
  event:
    - cron
  cron:
    - nightly

clone:
  disable: true

steps:
  - name: mirror
    image: superseriousbusiness/gotosocial-drone-build:0.6.2
    environment:
      ORIGIN_REPO: https://github.com/superseriousbusiness/gotosocial
      TARGET_REPO: https://codeberg.org/superseriousbusiness/gotosocial
      CODEBERG_USER: gotosocialbot
      CODEBERG_EMAIL: admin@gotosocial.org
      CODEBERG_TOKEN:
        from_secret: gts_codeberg_token
    commands:
      - /go/codeberg_clone.sh

---
kind: signature
hmac: 1b89e3a538fbca72eb9a0b398cd82f09a774ba3649013e19d36012eda327e83f

...