+++ /dev/null
----
-kind: pipeline
-name: amd64
-
-platform:
- os: linux
- arch: amd64
-
-steps:
-
- # use minimum supported rust version for most steps
- - name: prepare repo
- image: alpine:3
- commands:
- - apk add git
- - git fetch --tags
- - git submodule init
- - git submodule update --recursive --remote
-
- - name: cargo fmt
- image: clux/muslrust:1.67.0
- environment:
- # store cargo data in repo folder so that it gets cached between steps
- CARGO_HOME: .cargo
- commands:
- # need make existing toolchain available
- - cp ~/.cargo . -r
- - rustup toolchain install nightly
- - rustup component add rustfmt --toolchain nightly
- - cargo +nightly fmt -- --check
-
- # check each package to make sure they compile with default features.
- # this is required for crates.io
- - name: cargo check
- image: clux/muslrust:1.67.0
- environment:
- CARGO_HOME: .cargo
- commands:
- - cargo check --package lemmy_utils
- - cargo check --package lemmy_db_schema
- - cargo check --package lemmy_db_views
- - cargo check --package lemmy_db_views_actor
- - cargo check --package lemmy_db_views_moderator
- - cargo check --package lemmy_api_common
- - cargo check --package lemmy_api
- - cargo check --package lemmy_api_crud
- - cargo check --package lemmy_apub
- - cargo check --package lemmy_routes
- - cargo check --workspace
- - cargo check --workspace --features console
- # disabled because it takes too long with pict-rs
- #- cargo check --workspace --all-features
-
- - name: cargo clippy
- image: clux/muslrust:1.67.0
- environment:
- CARGO_HOME: .cargo
- commands:
- # latest rust for clippy to get extra checks
- # when adding new clippy lints, make sure to also add them in scripts/fix-clippy.sh
- - rustup component add clippy
- - cargo clippy --workspace --tests --all-targets --features console --
- -D warnings -D deprecated -D clippy::perf -D clippy::complexity
- -D clippy::style -D clippy::correctness -D clippy::suspicious
- -D clippy::dbg_macro -D clippy::inefficient_to_string
- -D clippy::items-after-statements -D clippy::implicit_clone
- -D clippy::wildcard_imports -D clippy::cast_lossless
- -D clippy::manual_string_new -D clippy::redundant_closure_for_method_calls
- -D clippy::unused_self
- -A clippy::uninlined_format_args
- -D clippy::get_first
- - cargo clippy --workspace --features console --
- -D clippy::unwrap_used
- -D clippy::indexing_slicing
-
- - name: lemmy_api_common doesnt depend on diesel
- image: clux/muslrust:1.67.0
- environment:
- CARGO_HOME: .cargo
- commands:
- - "! cargo tree -p lemmy_api_common --no-default-features -i diesel"
-
- - name: check defaults.hjson updated
- image: clux/muslrust:1.67.0
- environment:
- CARGO_HOME: .cargo
- commands:
- - export LEMMY_CONFIG_LOCATION=./config/config.hjson
- - ./scripts/update_config_defaults.sh config/defaults_current.hjson
- - diff config/defaults.hjson config/defaults_current.hjson
-
- - name: cargo test
- image: clux/muslrust:1.67.0
- environment:
- LEMMY_DATABASE_URL: postgres://lemmy:password@database:5432/lemmy
- RUST_BACKTRACE: 1
- RUST_TEST_THREADS: 1
- CARGO_HOME: .cargo
- commands:
- - export LEMMY_CONFIG_LOCATION=../../config/config.hjson
- - cargo test --workspace --no-fail-fast
-
- - name: cargo build
- image: clux/muslrust:1.67.0
- environment:
- CARGO_HOME: .cargo
- commands:
- - cargo build
- - mv target/x86_64-unknown-linux-musl/debug/lemmy_server target/lemmy_server
-
- - name: run federation tests
- image: node:alpine
- environment:
- LEMMY_DATABASE_URL: postgres://lemmy:password@database:5432
- DO_WRITE_HOSTS_FILE: 1
- commands:
- - apk add bash curl postgresql-client
- - bash api_tests/prepare-drone-federation-test.sh
- - cd api_tests/
- - yarn
- - yarn api-test
-
- - name: nightly build
- image: plugins/docker
- settings:
- dockerfile: docker/Dockerfile
- build_args: RUST_RELEASE_MODE=release
- username:
- from_secret: docker_username
- password:
- from_secret: docker_password
- repo: dessalines/lemmy
- add_host: github.com:140.82.112.3,static.crates.io:18.154.227.73,crates.io:108.138.64.68,dl-cdn.alpinelinux.org:146.75.30.133
- tags:
- - dev
- when:
- event:
- - cron
-
- - name: publish release docker image
- image: plugins/docker
- settings:
- dockerfile: docker/Dockerfile
- build_args: RUST_RELEASE_MODE=release
- username:
- from_secret: docker_username
- password:
- from_secret: docker_password
- repo: dessalines/lemmy
- add_host: github.com:140.82.112.3,static.crates.io:18.154.227.73,crates.io:108.138.64.68,dl-cdn.alpinelinux.org:146.75.30.133
- auto_tag: true
- auto_tag_suffix: linux-amd64
- when:
- ref:
- - refs/tags/*
-
- - name: publish release docker manifest
- image: plugins/manifest
- settings:
- username:
- from_secret: docker_username
- password:
- from_secret: docker_password
- target: "dessalines/lemmy:${DRONE_TAG}"
- template: "dessalines/lemmy:${DRONE_TAG}-OS-ARCH"
- platforms:
- - linux/amd64
- - linux/arm64
- ignore_missing: true
- when:
- ref:
- - refs/tags/*
-
- - name: publish latest release docker manifest
- image: plugins/manifest
- settings:
- username:
- from_secret: docker_username
- password:
- from_secret: docker_password
- target: "dessalines/lemmy:latest"
- template: "dessalines/lemmy:${DRONE_TAG}-OS-ARCH"
- platforms:
- - linux/amd64
- - linux/arm64
- ignore_missing: true
- when:
- ref:
- - refs/tags/*
-
- # using https://github.com/pksunkara/cargo-workspaces
- - name: publish to crates.io
- image: clux/muslrust:1.67.0
- environment:
- CARGO_TOKEN:
- from_secret: cargo_api_token
- commands:
- - cargo install cargo-workspaces
- - cp -r migrations crates/db_schema/
- - cargo login "$CARGO_TOKEN"
- - cargo workspaces publish --from-git --allow-dirty --no-verify --allow-branch "${DRONE_TAG}" --yes custom "${DRONE_TAG}"
- when:
- ref:
- - refs/tags/*
-
- - name: Notify on failure
- image: alpine:3
- commands:
- - apk add curl
- - "curl -d'Drone build failed: ${DRONE_BUILD_LINK}' ntfy.sh/lemmy_drone_ci"
- when:
- status:
- - failure
-
- - name: Notify on tag deploy
- image: alpine:3
- commands:
- - apk add curl
- - "curl -d'lemmy:${DRONE_TAG} deployed' ntfy.sh/lemmy_drone_ci"
- when:
- ref:
- - refs/tags/*
-
-services:
- - name: database
- image: postgres:15-alpine
- environment:
- POSTGRES_USER: lemmy
- POSTGRES_PASSWORD: password
-
----
-kind: pipeline
-name: arm64
-
-platform:
- os: linux
- arch: arm64
-
-steps:
-
- - name: prepare repo
- image: rust:1.57-slim
- user: root
- commands:
- - apt update
- - apt install --no-install-recommends --yes git
- - git fetch --tags
- - git submodule init
- - git submodule update --recursive --remote
-
- # TODO temporarily disable arm tests
- # - name: cargo test
- # image: rust:1.57-slim
- # environment:
- # LEMMY_DATABASE_URL: postgres://lemmy:password@database:5432/lemmy
- # LEMMY_CONFIG_LOCATION: ../../config/config.hjson
- # RUST_BACKTRACE: 1
- # RUST_TEST_THREADS: 1
- # commands:
- # - apt-get update
- # - apt-get -y install --no-install-recommends postgresql-client libssl-dev pkg-config libpq-dev
- # - cargo test --workspace --no-fail-fast
- # - cargo build
-
- # TODO temporarily disable arm tests
- # Using Debian here because there seems to be no official Alpine-based Rust docker image for ARM.
- # - name: cargo build
- # image: rust:1.57-slim
- # commands:
- # - apt-get update
- # - apt-get -y install --no-install-recommends libssl-dev pkg-config libpq-dev
- # - cargo build
- # - mv target/debug/lemmy_server target/lemmy_server
-
- # TODO temporarily disable arm tests
- # - name: run federation tests
- # image: node:16-slim
- # environment:
- # LEMMY_DATABASE_URL: postgres://lemmy:password@database:5432
- # DO_WRITE_HOSTS_FILE: 1
- # commands:
- # - mkdir -p /usr/share/man/man1 /usr/share/man/man7
- # - apt-get update
- # - apt-get -y install --no-install-recommends bash curl libssl-dev pkg-config libpq-dev postgresql-client libc6-dev
- # - bash api_tests/prepare-drone-federation-test.sh
- # - cd api_tests/
- # - yarn
- # - yarn api-test
-
- - name: publish release docker image
- image: plugins/docker
- settings:
- dockerfile: docker/Dockerfile.arm
- username:
- from_secret: docker_username
- password:
- from_secret: docker_password
- repo: dessalines/lemmy
- auto_tag: true
- auto_tag_suffix: linux-arm64
- when:
- ref:
- - refs/tags/*
-
- - name: publish release docker manifest
- image: plugins/manifest
- settings:
- username:
- from_secret: docker_username
- password:
- from_secret: docker_password
- target: "dessalines/lemmy:${DRONE_TAG}"
- template: "dessalines/lemmy:${DRONE_TAG}-OS-ARCH"
- platforms:
- - linux/amd64
- - linux/arm64
- ignore_missing: true
- when:
- ref:
- - refs/tags/*
-
- - name: publish latest release docker manifest
- image: plugins/manifest
- settings:
- username:
- from_secret: docker_username
- password:
- from_secret: docker_password
- target: "dessalines/lemmy:latest"
- template: "dessalines/lemmy:${DRONE_TAG}-OS-ARCH"
- platforms:
- - linux/amd64
- - linux/arm64
- ignore_missing: true
- when:
- ref:
- - refs/tags/*
-
-# TODO temporarily disable arm tests
-# services:
-# - name: database
-# image: postgres:12-alpine
-# environment:
-# POSTGRES_USER: lemmy
-# POSTGRES_PASSWORD: password
--- /dev/null
+# TODO: The when: platform conditionals aren't working currently
+# See https://github.com/woodpecker-ci/woodpecker/issues/1677
+
+pipeline:
+ # use minimum supported rust version for most steps
+ prepare_repo:
+ image: alpine:3
+ commands:
+ - apk add git
+ #- git fetch --tags
+ - git submodule init
+ - git submodule update --recursive --remote
+
+ cargo_fmt:
+ image: clux/muslrust:1.67.0
+ environment:
+ # store cargo data in repo folder so that it gets cached between steps
+ CARGO_HOME: .cargo
+ commands:
+ # need make existing toolchain available
+ - cp ~/.cargo . -r
+ - rustup toolchain install nightly
+ - rustup component add rustfmt --toolchain nightly
+ - cargo +nightly fmt -- --check
+ # when:
+ # platform: linux/amd64
+
+ # check each package to make sure they compile with default features.
+ # this is required for crates.io
+ cargo_check:
+ image: clux/muslrust:1.67.0
+ environment:
+ CARGO_HOME: .cargo
+ commands:
+ - cargo check --package lemmy_utils
+ - cargo check --package lemmy_db_schema
+ - cargo check --package lemmy_db_views
+ - cargo check --package lemmy_db_views_actor
+ - cargo check --package lemmy_db_views_moderator
+ - cargo check --package lemmy_api_common
+ - cargo check --package lemmy_api
+ - cargo check --package lemmy_api_crud
+ - cargo check --package lemmy_apub
+ - cargo check --package lemmy_routes
+ - cargo check --workspace
+ - cargo check --workspace --features console
+ # disabled because it takes too long with pict-rs
+ #- cargo check --workspace --all-features
+ # when:
+ # platform: linux/amd64
+
+ cargo_clippy:
+ image: clux/muslrust:1.67.0
+ environment:
+ CARGO_HOME: .cargo
+ commands:
+ # latest rust for clippy to get extra checks
+ # when adding new clippy lints, make sure to also add them in scripts/fix-clippy.sh
+ - rustup component add clippy
+ - cargo clippy --workspace --tests --all-targets --features console --
+ -D warnings -D deprecated -D clippy::perf -D clippy::complexity
+ -D clippy::style -D clippy::correctness -D clippy::suspicious
+ -D clippy::dbg_macro -D clippy::inefficient_to_string
+ -D clippy::items-after-statements -D clippy::implicit_clone
+ -D clippy::wildcard_imports -D clippy::cast_lossless
+ -D clippy::manual_string_new -D clippy::redundant_closure_for_method_calls
+ -D clippy::unused_self
+ -A clippy::uninlined_format_args
+ -D clippy::get_first
+ - cargo clippy --workspace --features console --
+ -D clippy::unwrap_used
+ -D clippy::indexing_slicing
+ # when:
+ # platform: linux/amd64
+
+ lemmy_api_common_doesnt_depend_on_diesel:
+ image: clux/muslrust:1.67.0
+ environment:
+ CARGO_HOME: .cargo
+ commands:
+ - "! cargo tree -p lemmy_api_common --no-default-features -i diesel"
+ # when:
+ # platform: linux/amd64
+
+ check_defaults_hjson_updated:
+ image: clux/muslrust:1.67.0
+ environment:
+ CARGO_HOME: .cargo
+ commands:
+ - export LEMMY_CONFIG_LOCATION=./config/config.hjson
+ - ./scripts/update_config_defaults.sh config/defaults_current.hjson
+ - diff config/defaults.hjson config/defaults_current.hjson
+ # when:
+ # platform: linux/amd64
+
+ cargo_test:
+ image: clux/muslrust:1.67.0
+ environment:
+ LEMMY_DATABASE_URL: postgres://lemmy:password@database:5432/lemmy
+ RUST_BACKTRACE: "1"
+ RUST_TEST_THREADS: "1"
+ CARGO_HOME: .cargo
+ commands:
+ - export LEMMY_CONFIG_LOCATION=../../config/config.hjson
+ - cargo test --workspace --no-fail-fast
+ # when:
+ # platform: linux/amd64
+
+ cargo_build:
+ image: clux/muslrust:1.67.0
+ environment:
+ CARGO_HOME: .cargo
+ commands:
+ - cargo build
+ - mv target/x86_64-unknown-linux-musl/debug/lemmy_server target/lemmy_server
+ # when:
+ # platform: linux/amd64
+
+ run_federation_tests:
+ image: node:alpine
+ environment:
+ LEMMY_DATABASE_URL: postgres://lemmy:password@database:5432
+ DO_WRITE_HOSTS_FILE: "1"
+ commands:
+ - apk add bash curl postgresql-client
+ - bash api_tests/prepare-drone-federation-test.sh
+ - cd api_tests/
+ - yarn
+ - yarn api-test
+ # when:
+ # platform: linux/amd64
+
+ nightly_build:
+ image: woodpeckerci/plugin-docker-buildx
+ settings:
+ dockerfile: docker/Dockerfile
+ build_args: RUST_RELEASE_MODE=release
+ username:
+ from_secret: docker_username
+ password:
+ from_secret: docker_password
+ repo: dessalines/lemmy
+ # add_host: github.com:140.82.112.3,static.crates.io:18.154.227.73,crates.io:108.138.64.68,dl-cdn.alpinelinux.org:146.75.30.133
+ tag: dev
+ when:
+ event:
+ - cron
+ #platform: linux/amd64
+
+ publish_release_docker_image_amd:
+ image: woodpeckerci/plugin-docker-buildx
+ settings:
+ dockerfile: docker/Dockerfile
+ build_args: RUST_RELEASE_MODE=release
+ username:
+ from_secret: docker_username
+ password:
+ from_secret: docker_password
+ repo: dessalines/lemmy
+ # add_host: github.com:140.82.112.3,static.crates.io:18.154.227.73,crates.io:108.138.64.68,dl-cdn.alpinelinux.org:146.75.30.133
+ auto_tag: true
+ # auto_tag_suffix: linux-amd64
+ when:
+ event: tag
+ #platform: linux/amd64
+
+ publish_release_docker_image_arm:
+ image: woodpeckerci/plugin-docker-buildx
+ settings:
+ dockerfile: docker/Dockerfile
+ build_args: RUST_RELEASE_MODE=release
+ username:
+ from_secret: docker_username
+ password:
+ from_secret: docker_password
+ repo: dessalines/lemmy
+ # add_host: github.com:140.82.112.3,static.crates.io:18.154.227.73,crates.io:108.138.64.68,dl-cdn.alpinelinux.org:146.75.30.133
+ auto_tag: true
+ # auto_tag_suffix: linux-arm64
+ when:
+ event: tag
+ #platform: linux/arm64
+
+ #publish_release_docker_manifest:
+ # image: plugins/manifest
+ # settings:
+ # username:
+ # from_secret: docker_username
+ # password:
+ # from_secret: docker_password
+ # target: "dessalines/lemmy:${CI_COMMIT_TAG}"
+ # template: "dessalines/lemmy:${CI_COMMIT_TAG}-OS-ARCH"
+ # platforms:
+ # - linux/amd64
+ # - linux/arm64
+ # ignore_missing: true
+ # when:
+ # event: tag
+
+ #publish_latest_release_docker_manifest:
+ # image: plugins/manifest
+ # settings:
+ # username:
+ # from_secret: docker_username
+ # password:
+ # from_secret: docker_password
+ # target: "dessalines/lemmy:latest"
+ # template: "dessalines/lemmy:${CI_COMMIT_TAG}-OS-ARCH"
+ # platforms:
+ # - linux/amd64
+ # - linux/arm64
+ # ignore_missing: true
+ # when:
+ # event: tag
+ # #platform: linux/amd64
+
+ # using https://github.com/pksunkara/cargo-workspaces
+ publish_to_crates_io:
+ image: clux/muslrust:1.67.0
+ commands:
+ - cargo install cargo-workspaces
+ - cp -r migrations crates/db_schema/
+ - cargo login "$CARGO_TOKEN"
+ - cargo workspaces publish --from-git --allow-dirty --no-verify --allow-branch "${CI_COMMIT_TAG}" --yes custom "${CI_COMMIT_TAG}"
+ secrets: [cargo_api_token]
+ when:
+ event: tag
+ #platform: linux/amd64
+
+ notify_on_failure:
+ image: alpine:3
+ commands:
+ - apk add curl
+ - "curl -d'Drone build failed: ${CI_BUILD_LINK}' ntfy.sh/lemmy_drone_ci"
+ when:
+ status: [ failure ]
+
+ notify_on_tag_deploy:
+ image: alpine:3
+ commands:
+ - apk add curl
+ - "curl -d'lemmy:${CI_COMMIT_TAG} deployed' ntfy.sh/lemmy_drone_ci"
+ when:
+ event: tag
+
+services:
+ database:
+ image: postgres:15-alpine
+ environment:
+ POSTGRES_USER: lemmy
+ POSTGRES_PASSWORD: password
+ # when:
+ # platform: linux/amd64