feat: init CI

This commit is contained in:
Aravinth Manivannan 2022-10-05 16:09:00 +05:30
parent 28ee8510c3
commit 2a2302c5fe
Signed by: realaravinth
GPG key ID: AD9F0F08E855ED88
3 changed files with 110 additions and 0 deletions

24
.woodpecker.yml Normal file
View file

@ -0,0 +1,24 @@
pipeline:
backend:
image: rust
# environment:
# - DATABASE_URL=postgres://postgres:password@database:5432/postgres
commands:
# - make migrate
- make
- make test
publish:
image: plugins/docker
settings:
username: realaravinth
password:
from_secret: DOCKER_TOKEN
repo: realaravinth/librepages-forms
tags: latest
#services:
# database:
# image: postgres
# environment:
# - POSTGRES_PASSWORD=password

31
Dockerfile Normal file
View file

@ -0,0 +1,31 @@
FROM rust:latest as planner
RUN cargo install cargo-chef
WORKDIR /src
COPY . /src/
RUN cargo chef prepare --recipe-path recipe.json
FROM rust:latest as cacher
WORKDIR /src/
RUN cargo install cargo-chef
COPY --from=planner /src/recipe.json recipe.json
RUN cargo chef cook --release --recipe-path recipe.json
FROM rust:latest as rust
WORKDIR /src
COPY . .
COPY --from=cacher /src/target target
#COPY --from=frontend /src/static/cache/bundle/ /src/static/cache/bundle/
RUN cargo --version
#RUN make cache-bust
RUN cargo build --release
FROM debian:bullseye as conductor
LABEL org.opencontainers.image.source https://git.batsense.net/librepages/conductor
RUN apt-get update && apt-get install -y ca-certificates
RUN useradd -ms /bin/bash -u 1001 conductor
WORKDIR /home/conductor
COPY --from=rust /src/target/release/conductor /usr/local/bin/
#COPY --from=rust /src/config/default.toml /etc/conductor/config.toml
RUN mkdir /var/lib/conductor && chown conductor:conductor /var/lib/conductor
USER conductor
CMD [ "/usr/local/bin/conductor" ]

55
Makefile Normal file
View file

@ -0,0 +1,55 @@
default: ## Build app in debug mode
cargo build
check: ## Check for syntax errors on all workspaces
cargo check --workspace --tests --all-features
clean: ## Delete build artifacts
@cargo clean
coverage: ## Generate code coverage report in HTML format
$(call cache_bust)
cargo tarpaulin -t 1200 --out Html
doc: ## Generate documentation
#yarn doc
cargo doc --no-deps --workspace --all-features
docker: ## Build Docker image
docker build -t realaravinth/librepages-conductor:master -t realaravinth/librepages-conductor:latest .
docker-publish: docker ## Build and publish Docker image
docker push realaravinth/librepages-conductor:master
docker push realaravinth/librepages-conductor:latest
env: ## Setup development environtment
cargo fetch
lint: ## Lint codebase
cargo fmt -v --all -- --emit files
cargo clippy --workspace --tests --all-features
#migrate: ## run migrations
# unset DATABASE_URL && cargo build
# cargo run -- migrate
release: ## Build app with release optimizations
cargo build --release
run: ## Run app in debug mode
cargo run
#sqlx-offline-data: ## prepare sqlx offline data
# cargo sqlx prepare \
# --database-url=${POSTGRES_DATABASE_URL} -- \
# --all-features
test: ## Run all available tests
cargo test --no-fail-fast
xml-test-coverage: ## Generate code coverage report in XML format
cargo tarpaulin -t 1200 --out Xml
help: ## Prints help for targets with comments
@cat $(MAKEFILE_LIST) | grep -E '^[a-zA-Z_-]+:.*?## .*$$' | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'