# https://taskfile.dev version: '3' dotenv: ['.env.local', '.env'] vars: version: '{{ coalesce .version .v "latest" }}' folder: '{{ coalesce .folder .f "nginx" }}' registry: '{{ coalesce .registry .r "gitea.bensherriff.com/bsherriff" }}' platform: '{{ coalesce .platform .p "linux/amd64,linux/arm64" }}' image: '{{.registry}}/aviation-{{.folder}}:{{.version}}' build_date: sh: date -u +%Y-%m-%dT%H:%M:%SZ vcs_ref: sh: git rev-parse HEAD context: '{{ coalesce .context .ctx "." }}' dockerfile: > {{- if or (eq .folder "nginx") (eq .folder "ui") -}} {{.folder}}/Dockerfile {{- else if eq .folder "api" -}} crates/api/Dockerfile {{- else if eq .folder "scheduler" -}} crates/scheduler/Dockerfile {{- else -}} {{ fail (printf "Invalid folder '%s'. Valid: nginx, ui, api, scheduler" .folder) }} {{- end -}} tasks: default: cmds: - task: docker-up silent: true test: cmds: - task: docker-backend - task: dev-servers dev-servers: deps: - task: run-api - task: run-scheduler - task: run-ui # API Commands build-api: dir: crates/api cmd: cargo build format-api: dir: crates/api cmd: cargo fmt run-api: dir: crates/api cmd: cargo run silent: true # Scheduler Commands build-scheduler: dir: crates/scheduler cmd: cargo build format-scheduler: dir: crates/scheduler cmd: cargo fmt run-scheduler: dir: crates/scheduler cmd: cargo run silent: true # UI Commands build-ui: dir: ui cmd: npm run build format-ui: dir: ui cmd: npm run format clean-ui: dir: ui cmd: rm -rf node_modules dist stats.html run-ui: dir: ui cmd: npm run dev silent: true # Docker Commands docker-backend: cmd: docker compose --profile backend up -d docker-up: cmd: docker compose --profile backend --profile api up -d docker-down: cmd: docker compose --profile backend --profile api down docker-clean: cmd: docker compose --profile backend --profile api down -v docker-refresh: cmds: - task: docker-clean - task: docker-up build: desc: Build a specific docker image from a folder cmds: - | docker buildx build \ -f {{.dockerfile}} \ -t {{.image}} \ --load \ --build-arg BUILD_DATE={{.build_date}} \ --build-arg BUILD_VERSION={{.version}} \ --build-arg VCS_REF={{.vcs_ref}} \ {{.context}} push: desc: Build and push a specific docker image from a folder cmds: - | docker buildx create \ --use \ --driver docker-container \ --bootstrap \ --name default-builder \ --platform {{.platform}} \ || true ignore_error: true - | docker buildx build \ -f {{.dockerfile}} \ --platform {{.platform}} \ -t {{.image}} \ --push \ --build-arg BUILD_DATE={{.build_date}} \ --build-arg BUILD_VERSION={{.version}} \ --build-arg VCS_REF={{.vcs_ref}} \ {{.context}} . psql: cmd: docker exec -it aviation-postgres psql -U ${POSTGRES_USER} -d ${POSTGRES_DB} -P pager=off cert: cmds: - ./scripts/generate_ca_cert.sh - ./scripts/generate_server_cert.sh ${TLS_HOST} nginx - ./scripts/generate_server_cert.sh ${API_HOST} api silent: true cert-clean: cmds: - rm -rf ./data/certificates silent: true