]> Untitled Git - lemmy.git/blob - .woodpecker.yml
07b0d60bc097c6d2d47dbc5a197dae28838e9e52
[lemmy.git] / .woodpecker.yml
1 # TODO: The when: platform conditionals aren't working currently
2 # See https://github.com/woodpecker-ci/woodpecker/issues/1677
3
4 variables:
5   - &muslrust_image "clux/muslrust:1.70.0"
6
7 # Broken for cron jobs currently, see
8 # https://github.com/woodpecker-ci/woodpecker/issues/1716
9 # clone:
10 #   git:
11 #     image: woodpeckerci/plugin-git
12 #     settings:
13 #       recursive: true
14 #       submodule_update_remote: true
15
16 pipeline:
17   prepare_repo:
18     image: alpine:3
19     commands:
20       - apk add git
21         #- git fetch --tags
22       - git submodule init
23       - git submodule update
24
25   prettier_check:
26     image: tmknom/prettier:3.0.0
27     commands:
28       - prettier -c . '!**/volumes' '!**/dist' '!target' '!**/translations'
29
30   taplo_check:
31     image: tamasfe/taplo:0.8.1
32     commands:
33       - taplo format --check
34
35   # use minimum supported rust version for most steps
36   cargo_fmt:
37     image: *muslrust_image
38     environment:
39       # store cargo data in repo folder so that it gets cached between steps
40       CARGO_HOME: .cargo
41     commands:
42       # need make existing toolchain available
43       - cp ~/.cargo . -r
44       - rustup toolchain install nightly-2023-07-10
45       - rustup component add rustfmt --toolchain nightly-2023-07-10
46       - cargo +nightly-2023-07-10 fmt -- --check
47     # when:
48     #   platform: linux/amd64
49
50   cargo_clippy:
51     image: *muslrust_image
52     environment:
53       CARGO_HOME: .cargo
54     commands:
55       # latest rust for clippy to get extra checks
56       # when adding new clippy lints, make sure to also add them in scripts/fix-clippy.sh
57       - rustup component add clippy
58       - cargo clippy --workspace --tests --all-targets --features console --
59         -D warnings -D deprecated -D clippy::perf -D clippy::complexity
60         -D clippy::style -D clippy::correctness -D clippy::suspicious
61         -D clippy::dbg_macro -D clippy::inefficient_to_string
62         -D clippy::items-after-statements -D clippy::implicit_clone
63         -D clippy::cast_lossless -D clippy::manual_string_new
64         -D clippy::redundant_closure_for_method_calls
65         -D clippy::unused_self
66         -A clippy::uninlined_format_args
67         -D clippy::get_first
68         -D clippy::explicit_into_iter_loop
69         -D clippy::explicit_iter_loop
70         -D clippy::needless_collect
71       - cargo clippy --workspace --features console --
72         -D clippy::unwrap_used
73         -D clippy::indexing_slicing
74     # when:
75     #   platform: linux/amd64
76
77   # make sure api builds with default features (used by other crates relying on lemmy api)
78   cargo_check:
79     image: *muslrust_image
80     environment:
81       CARGO_HOME: .cargo
82     commands:
83       - cargo check --package lemmy_api_common
84     # when:
85     #   platform: linux/amd64
86
87   lemmy_api_common_doesnt_depend_on_diesel:
88     image: *muslrust_image
89     environment:
90       CARGO_HOME: .cargo
91     commands:
92       - "! cargo tree -p lemmy_api_common --no-default-features -i diesel"
93     # when:
94     #   platform: linux/amd64
95   lemmy_api_common_works_with_wasm:
96     image: *muslrust_image
97     environment:
98       CARGO_HOME: .cargo
99     commands:
100       - "rustup target add wasm32-unknown-unknown"
101       - "cargo check --target wasm32-unknown-unknown -p lemmy_api_common"
102
103   check_defaults_hjson_updated:
104     image: *muslrust_image
105     environment:
106       CARGO_HOME: .cargo
107     commands:
108       - export LEMMY_CONFIG_LOCATION=./config/config.hjson
109       - ./scripts/update_config_defaults.sh config/defaults_current.hjson
110       - diff config/defaults.hjson config/defaults_current.hjson
111     # when:
112     #   platform: linux/amd64
113
114   check_diesel_schema:
115     image: willsquire/diesel-cli
116     environment:
117       CARGO_HOME: .cargo
118       DATABASE_URL: postgres://lemmy:password@database:5432/lemmy
119     commands:
120       - diesel migration run
121       - diesel print-schema --config-file=diesel.toml > tmp.schema
122       - diff tmp.schema crates/db_schema/src/schema.rs
123
124   cargo_test:
125     image: *muslrust_image
126     environment:
127       LEMMY_DATABASE_URL: postgres://lemmy:password@database:5432/lemmy
128       RUST_BACKTRACE: "1"
129       RUST_TEST_THREADS: "1"
130       CARGO_HOME: .cargo
131     commands:
132       - export LEMMY_CONFIG_LOCATION=../../config/config.hjson
133       - cargo test --workspace --no-fail-fast
134     # when:
135     #   platform: linux/amd64
136
137   cargo_build:
138     image: *muslrust_image
139     environment:
140       CARGO_HOME: .cargo
141     commands:
142       - cargo build
143       - mv target/x86_64-unknown-linux-musl/debug/lemmy_server target/lemmy_server
144     # when:
145     #   platform: linux/amd64
146
147   run_federation_tests:
148     image: node:alpine
149     environment:
150       LEMMY_DATABASE_URL: postgres://lemmy:password@database:5432
151       DO_WRITE_HOSTS_FILE: "1"
152     commands:
153       - apk add bash curl postgresql-client
154       - bash api_tests/prepare-drone-federation-test.sh
155       - cd api_tests/
156       - yarn
157       - yarn api-test
158     # when:
159     #   platform: linux/amd64
160
161   publish_release_docker:
162     image: woodpeckerci/plugin-docker-buildx
163     secrets: [docker_username, docker_password]
164     settings:
165       repo: dessalines/lemmy
166       dockerfile: docker/Dockerfile
167       platforms: linux/amd64
168       build_args:
169         - RUST_RELEASE_MODE=release
170       auto_tag: true
171     when:
172       event: tag
173
174   nightly_build:
175     image: woodpeckerci/plugin-docker-buildx
176     secrets: [docker_username, docker_password]
177     settings:
178       repo: dessalines/lemmy
179       dockerfile: docker/Dockerfile
180       platforms: linux/amd64
181       build_args:
182         - RUST_RELEASE_MODE=release
183       tag: dev
184     when:
185       event: cron
186
187   # using https://github.com/pksunkara/cargo-workspaces
188   publish_to_crates_io:
189     image: *muslrust_image
190     commands:
191       - 'echo "pub const VERSION: &str = \"$(git describe --tag)\";" > "crates/utils/src/version.rs"'
192       - cargo install cargo-workspaces
193       - cp -r migrations crates/db_schema/
194       - cargo login "$CARGO_API_TOKEN"
195       - cargo workspaces publish --from-git --allow-dirty --no-verify --allow-branch "${CI_COMMIT_TAG}" --yes custom "${CI_COMMIT_TAG}"
196     secrets: [cargo_api_token]
197     when:
198       event: tag
199       #platform: linux/amd64
200
201   notify_on_failure:
202     image: alpine:3
203     commands:
204       - apk add curl
205       - "curl -d'Lemmy CI build failed: ${CI_BUILD_LINK}' ntfy.sh/lemmy_drone_ci"
206     when:
207       status: [failure]
208
209   notify_on_tag_deploy:
210     image: alpine:3
211     commands:
212       - apk add curl
213       - "curl -d'lemmy:${CI_COMMIT_TAG} deployed' ntfy.sh/lemmy_drone_ci"
214     when:
215       event: tag
216
217 services:
218   database:
219     image: postgres:15.2-alpine
220     environment:
221       POSTGRES_USER: lemmy
222       POSTGRES_PASSWORD: password
223     # when:
224     #   platform: linux/amd64