]> Untitled Git - lemmy.git/blob - .drone.yml
Merge pull request #1889 from LemmyNet/update_docker_images
[lemmy.git] / .drone.yml
1 ---
2 kind: pipeline
3 name: amd64
4
5 platform:
6   os: linux
7   arch: amd64
8
9 steps:
10
11   - name: prepare repo
12     image: clux/muslrust:1.56.0
13     user: root
14     commands:
15       - chown 1000:1000 . -R
16       - git fetch --tags
17
18   - name: check formatting
19     image: rustdocker/rust:nightly
20     commands:
21       - /root/.cargo/bin/cargo fmt -- --check
22
23   - name: cargo clippy
24     image: clux/muslrust:1.56.0
25     commands:
26       - rustup component add clippy
27       - cargo clippy --workspace --tests --all-targets --all-features -- -D warnings -D deprecated -D clippy::perf -D clippy::complexity -D clippy::dbg_macro
28       - cargo clippy --workspace -- -D clippy::unwrap_used
29
30   - name: cargo test
31     image: clux/muslrust:1.56.0
32     environment:
33       LEMMY_DATABASE_URL: postgres://lemmy:password@database:5432/lemmy
34       LEMMY_CONFIG_LOCATION: ../../config/config.hjson
35       RUST_BACKTRACE: 1
36       RUST_TEST_THREADS: 1
37     commands:
38       - apt-get update
39       - apt-get -y install --no-install-recommends postgresql-client
40       - cargo test --workspace --no-fail-fast
41
42   - name: check defaults.hjson updated
43     image: clux/muslrust:1.56.0
44     commands:
45       - ./scripts/update_config_defaults.sh config/defaults_current.hjson
46       - diff config/defaults.hjson config/defaults_current.hjson
47
48   - name: cargo build
49     image: clux/muslrust:1.56.0
50     commands:
51       - cargo build
52       - mv target/x86_64-unknown-linux-musl/debug/lemmy_server target/lemmy_server
53
54   - name: run federation tests
55     image: node:alpine
56     environment:
57       LEMMY_DATABASE_URL: postgres://lemmy:password@database:5432
58       DO_WRITE_HOSTS_FILE: 1
59     commands:
60       - apk add bash curl postgresql-client
61       - bash api_tests/prepare-drone-federation-test.sh
62       - cd api_tests/
63       - yarn
64       - yarn api-test
65
66   - name: publish release docker image
67     image: plugins/docker
68     settings:
69       dockerfile: docker/prod/Dockerfile
70       username:
71         from_secret: docker_username
72       password:
73         from_secret: docker_password
74       repo: dessalines/lemmy
75       auto_tag: true
76       auto_tag_suffix: linux-amd64
77     when:
78       ref:
79         - refs/tags/*
80
81   - name: publish release docker manifest
82     image: plugins/manifest
83     settings: 
84       username:
85         from_secret: docker_username
86       password:
87         from_secret: docker_password
88       target: "dessalines/lemmy:${DRONE_TAG}"
89       template: "dessalines/lemmy:${DRONE_TAG}-OS-ARCH"
90       platforms:
91         - linux/amd64
92         - linux/arm64
93       ignore_missing: true
94     when:
95       ref:
96         - refs/tags/*
97
98   # using https://github.com/pksunkara/cargo-workspaces
99   - name: publish to crates.io
100     image: rustlang/rust:nightly
101     environment:
102       CARGO_TOKEN:
103         from_secret: cargo_api_token
104     commands:
105       - cargo install cargo-workspaces
106       - cp -r migrations crates/db_schema/
107       - cargo login "$CARGO_TOKEN"
108       - cargo workspaces publish --from-git --allow-dirty --allow-branch "${DRONE_TAG}" --yes custom "${DRONE_TAG}"
109     when:
110       ref:
111         - refs/tags/*
112
113 services:
114   - name: database
115     image: postgres:12-alpine
116     environment:
117       POSTGRES_USER: lemmy
118       POSTGRES_PASSWORD: password
119
120 ---
121 kind: pipeline
122 name: arm64
123
124 platform:
125   os: linux
126   arch: arm64
127
128 steps:
129
130   - name: prepare repo
131     # Not sure why, but rust ARM64 builds are failing on drone for rust:1.54 and later:
132     # https://discourse.drone.io/t/arm-build-stalls-out-on-cloud-drone-io-ram-issue/9701
133     image: rust:1.56-slim
134     user: root
135     commands:
136       - chown 1000:1000 . -R
137       - apt update
138       - apt install --no-install-recommends --yes git
139       - git fetch --tags
140
141   - name: cargo test
142     image: rust:1.56-slim
143     environment:
144       LEMMY_DATABASE_URL: postgres://lemmy:password@database:5432/lemmy
145       LEMMY_CONFIG_LOCATION: ../../config/config.hjson
146       RUST_BACKTRACE: 1
147       RUST_TEST_THREADS: 1
148     commands:
149       - apt-get update
150       - apt-get -y install --no-install-recommends postgresql-client libssl-dev pkg-config libpq-dev
151       - cargo test --workspace --no-fail-fast
152       - cargo build
153
154   # Using Debian here because there seems to be no official Alpine-based Rust docker image for ARM.
155   - name: cargo build
156     image: rust:1.56-slim
157     commands:
158       - apt-get update
159       - apt-get -y install --no-install-recommends libssl-dev pkg-config libpq-dev
160       - cargo build
161       - mv target/debug/lemmy_server target/lemmy_server
162
163   - name: run federation tests
164     image: node:16-slim
165     environment:
166       LEMMY_DATABASE_URL: postgres://lemmy:password@database:5432
167       DO_WRITE_HOSTS_FILE: 1
168     commands:
169       - mkdir -p /usr/share/man/man1 /usr/share/man/man7
170       - apt-get update
171       - apt-get -y install --no-install-recommends bash curl libssl-dev pkg-config libpq-dev postgresql-client libc6-dev
172       - bash api_tests/prepare-drone-federation-test.sh
173       - cd api_tests/
174       - yarn
175       - yarn api-test
176
177   - name: publish release docker image
178     image: plugins/docker
179     settings:
180       dockerfile: docker/prod/Dockerfile.arm
181       username:
182         from_secret: docker_username
183       password:
184         from_secret: docker_password
185       repo: dessalines/lemmy
186       auto_tag: true
187       auto_tag_suffix: linux-arm64
188     when:
189       ref:
190         - refs/tags/*
191
192   - name: publish release docker manifest
193     image: plugins/manifest
194     settings: 
195       username:
196         from_secret: docker_username
197       password:
198         from_secret: docker_password
199       target: "dessalines/lemmy:${DRONE_TAG}"
200       template: "dessalines/lemmy:${DRONE_TAG}-OS-ARCH"
201       platforms:
202         - linux/amd64
203         - linux/arm64
204       ignore_missing: true
205     when:
206       ref:
207         - refs/tags/*
208
209 services:
210   - name: database
211     image: postgres:12-alpine
212     environment:
213       POSTGRES_USER: lemmy
214       POSTGRES_PASSWORD: password