summaryrefslogtreecommitdiff
path: root/.drone.yml
blob: 57bf39502de3672eb8f93be1f51b14e38edb0eb3 (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
---
### 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
    commands:
      - apk update --no-cache && apk add git
      - CGO_ENABLED=0 GTS_DB_TYPE="sqlite" GTS_DB_ADDRESS=":memory:" go test ./...
      - CGO_ENABLED=0 ./test/envparsing.sh
      - CGO_ENABLED=0 ./test/swagger.sh
    when:
      event:
        include:
          - pull_request

  - name: web-setup
    image: node:18-alpine
    when:
      event:
        include:
          - pull_request
    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

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

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

  - name: snapshot
    image: superseriousbusiness/gotosocial-drone-build:0.6.0 # 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
      
      # 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.0 # 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
      - 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.0
    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: c07f32c63cbb8180c1a37e46ff1362c1c45586819b52c6de67366ae3504314e4

...