From d18bc95b7b92c99bd029604ed7797575f54e6dd4 Mon Sep 17 00:00:00 2001 From: Dessalines Date: Wed, 5 Apr 2023 16:29:35 -0400 Subject: [PATCH] Add woodpecker ci (#2789) * Adding woodpecker. Try 1 * Adding woodpecker. Try 2 * Adding woodpecker. Try 3 * Adding woodpecker. Try 4 * Adding woodpecker. Try 5 * Adding woodpecker. Try 6 * Adding woodpecker. Try 7 * Adding woodpecker. Try 8 * Adding woodpecker. Try 9 * Adding woodpecker. Try 10 * Adding woodpecker. Try 11 * Adding woodpecker. Try 12 * Adding woodpecker. Try 13 * Adding woodpecker. Try 14 * Adding woodpecker. Try 15 * Adding woodpecker. Try 16 * Adding platform when conditionals. * Adding platform when conditionals 2. * Adding woodpecker docker buildx. --- .drone.yml | 345 ------------------------------------------------ .woodpecker.yml | 253 +++++++++++++++++++++++++++++++++++ README.md | 2 +- 3 files changed, 254 insertions(+), 346 deletions(-) delete mode 100644 .drone.yml create mode 100644 .woodpecker.yml diff --git a/.drone.yml b/.drone.yml deleted file mode 100644 index 12630bd30..000000000 --- a/.drone.yml +++ /dev/null @@ -1,345 +0,0 @@ ---- -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 diff --git a/.woodpecker.yml b/.woodpecker.yml new file mode 100644 index 000000000..9b96c52de --- /dev/null +++ b/.woodpecker.yml @@ -0,0 +1,253 @@ +# 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 diff --git a/README.md b/README.md index 5a1c5e579..01bbf3acf 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@
![GitHub tag (latest SemVer)](https://img.shields.io/github/tag/LemmyNet/lemmy.svg) -[![Build Status](https://drone.join-lemmy.org/api/badges/LemmyNet/lemmy/status.svg)](https://drone.join-lemmy.org/LemmyNet/lemmy/) +[![Build Status](https://woodpecker.join-lemmy.org/api/badges/LemmyNet/lemmy/status.svg)](https://woodpecker.join-lemmy.org/LemmyNet/lemmy) [![GitHub issues](https://img.shields.io/github/issues-raw/LemmyNet/lemmy.svg)](https://github.com/LemmyNet/lemmy/issues) [![Docker Pulls](https://img.shields.io/docker/pulls/dessalines/lemmy.svg)](https://cloud.docker.com/repository/docker/dessalines/lemmy/) [![Translation status](http://weblate.join-lemmy.org/widgets/lemmy/-/lemmy/svg-badge.svg)](http://weblate.join-lemmy.org/engage/lemmy/)