]> Untitled Git - lemmy.git/blob - .drone.yml
Set CARGO_HOME for CI so deps arent redownloaded (#1497)
[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: chown repo
12     image: ekidd/rust-musl-builder:1.50.0
13     user: root
14     commands:
15       - chown 1000:1000 . -R
16
17   - name: check formatting
18     image: rustdocker/rust:nightly
19     commands:
20       - /root/.cargo/bin/cargo fmt -- --check
21
22   - name: cargo clippy
23     image: ekidd/rust-musl-builder:1.50.0
24     environment:
25       CARGO_HOME: /drone/src/.cargo
26     commands:
27       - whoami
28       - ls -la ~/.cargo
29       - mv ~/.cargo .
30       - ls -la .cargo
31       - cargo clippy --workspace --tests --all-targets --all-features -- -D warnings -D deprecated -D clippy::perf -D clippy::complexity -D clippy::dbg_macro
32       - cargo clippy --workspace -- -D clippy::unwrap_used
33
34   - name: cargo test
35     image: ekidd/rust-musl-builder:1.50.0
36     environment:
37       LEMMY_DATABASE_URL: postgres://lemmy:password@database:5432/lemmy
38       RUST_BACKTRACE: 1
39       CARGO_HOME: /drone/src/.cargo
40     commands:
41       - sudo apt-get update
42       - sudo apt-get -y install --no-install-recommends espeak postgresql-client
43       - cargo test --workspace --no-fail-fast
44
45   - name: cargo build
46     image: ekidd/rust-musl-builder:1.50.0
47     environment:
48       CARGO_HOME: /drone/src/.cargo
49     commands:
50       - cargo build
51       - mv target/x86_64-unknown-linux-musl/debug/lemmy_server target/lemmy_server
52
53   - name: run federation tests
54     image: node:15-alpine3.12
55     environment:
56       LEMMY_DATABASE_URL: postgres://lemmy:password@database:5432
57       DO_WRITE_HOSTS_FILE: 1
58     commands:
59       - apk add bash curl postgresql-client
60       - bash api_tests/prepare-drone-federation-test.sh
61       - cd api_tests/
62       - yarn
63       - yarn api-test
64
65   - name: make release build and push to docker hub
66     image: plugins/docker
67     settings:
68       dockerfile: docker/prod/Dockerfile
69       username:
70         from_secret: docker_username
71       password:
72         from_secret: docker_password
73       repo: dessalines/lemmy
74       auto_tag: true
75       auto_tag_suffix: linux-amd64
76     when:
77       ref:
78       - refs/tags/*
79
80   - name: push to docker manifest
81     image: plugins/manifest
82     settings: 
83       username:
84         from_secret: docker_username
85       password:
86         from_secret: docker_password
87       target: "dessalines/lemmy:${DRONE_TAG}"
88       template: "dessalines/lemmy:${DRONE_TAG}-OS-ARCH"
89       platforms:
90         - linux/amd64
91         - linux/arm64
92       ignore_missing: true
93     when:
94       ref:
95       - refs/tags/*
96
97 services:
98   - name: database
99     image: postgres:12-alpine
100     environment:
101       POSTGRES_USER: lemmy
102       POSTGRES_PASSWORD: password
103
104 ---
105 kind: pipeline
106 name: arm64
107
108 platform:
109   os: linux
110   arch: arm64
111
112 steps:
113
114   - name: cargo test
115     image: rust:1.50-slim-buster
116     environment:
117       LEMMY_DATABASE_URL: postgres://lemmy:password@database:5432/lemmy
118       RUST_BACKTRACE: 1
119       CARGO_HOME: /drone/src/.cargo
120     commands:
121       - apt-get update
122       - apt-get -y install --no-install-recommends espeak postgresql-client libssl-dev pkg-config libpq-dev
123       - cargo test --workspace --no-fail-fast
124       - cargo build
125
126   # Using Debian here because there seems to be no official Alpine-based Rust docker image for ARM.
127   - name: cargo build
128     image: rust:1.50-slim-buster
129     environment:
130       CARGO_HOME: /drone/src/.cargo
131     commands:
132       - apt-get update
133       - apt-get -y install --no-install-recommends libssl-dev pkg-config libpq-dev
134       - cargo build
135       - mv target/debug/lemmy_server target/lemmy_server
136
137   - name: run federation tests
138     image: node:15-buster-slim
139     environment:
140       LEMMY_DATABASE_URL: postgres://lemmy:password@database:5432
141       DO_WRITE_HOSTS_FILE: 1
142     commands:
143       - mkdir -p /usr/share/man/man1 /usr/share/man/man7
144       - apt-get update
145       - apt-get -y install --no-install-recommends bash curl libssl-dev pkg-config libpq-dev postgresql-client libc6-dev
146       - bash api_tests/prepare-drone-federation-test.sh
147       - cd api_tests/
148       - yarn
149       - yarn api-test
150
151   - name: make release build and push to docker hub
152     image: plugins/docker
153     settings:
154       dockerfile: docker/prod/Dockerfile.arm
155       username:
156         from_secret: docker_username
157       password:
158         from_secret: docker_password
159       repo: dessalines/lemmy
160       auto_tag: true
161       auto_tag_suffix: linux-arm64
162     when:
163       ref:
164         - refs/tags/*
165
166   - name: push to docker manifest
167     image: plugins/manifest
168     settings: 
169       username:
170         from_secret: docker_username
171       password:
172         from_secret: docker_password
173       target: "dessalines/lemmy:${DRONE_TAG}"
174       template: "dessalines/lemmy:${DRONE_TAG}-OS-ARCH"
175       platforms:
176         - linux/amd64
177         - linux/arm64
178       ignore_missing: true
179     when:
180       ref:
181       - refs/tags/*
182
183 services:
184   - name: database
185     image: postgres:12-alpine
186     environment:
187       POSTGRES_USER: lemmy
188       POSTGRES_PASSWORD: password