TypeDialog/.woodpecker
Jesús Pérez 813abc057e
Some checks failed
CI / Lint (bash) (push) Has been cancelled
CI / Lint (markdown) (push) Has been cancelled
CI / Lint (nickel) (push) Has been cancelled
CI / Lint (nushell) (push) Has been cancelled
CI / Lint (rust) (push) Has been cancelled
CI / Code Coverage (push) Has been cancelled
CI / Test (macos-latest) (push) Has been cancelled
CI / Test (ubuntu-latest) (push) Has been cancelled
CI / Test (windows-latest) (push) Has been cancelled
CI / Build (macos-latest) (push) Has been cancelled
CI / Build (ubuntu-latest) (push) Has been cancelled
CI / Build (windows-latest) (push) Has been cancelled
CI / Benchmark (push) Has been cancelled
CI / Security Audit (push) Has been cancelled
CI / License Compliance (push) Has been cancelled
fix: add missing multiselect fields to FieldDefinition struct
Add display_mode, searchable, min_selected, and max_selected fields to all
   FieldDefinition struct initializers across core library and tests.
2025-12-25 22:59:45 +00:00
..

Woodpecker CI Configuration

Pipelines for Gitea/Forgejo + Woodpecker CI.

Files

CI Pipeline

  • ci.yml - Main CI pipeline (push, pull requests)
  • ci-advanced.yml - Advanced CI with multi-OS matrix, coverage, benchmarks

Release Pipelines

  • release.yml - Basic release (Linux only, no Docker)
  • release-advanced.yml - Advanced release (multi-OS, Gitea API, auto-upload)
  • release-docker.yml - Docker-based release (uses .woodpecker/Dockerfile.cross)

Docker Images

CI Images (pre-install tools, speed up CI ~5min):

  • Dockerfile - Original (2.47GB, too large)
  • Dockerfile.optimized - Multi-stage build (~800MB)
  • Dockerfile.alpine - Alpine-based (~400MB, smallest)
  • Dockerfile.prebuilt - Pre-compiled binaries (1.68GB, 3min build, recommended)
  • Dockerfile.minimal - Prebuilt without nu (~1.6GB, 2min build, fastest)

Build Images:

  • Dockerfile.cross - Cross-compilation image for multi-platform builds

Setup

1. Activate Woodpecker CI

Enable Woodpecker CI in your Gitea/Forgejo repository settings.

2. (Optional) Build Custom Image

Speeds up CI by pre-installing tools (~5 min faster per run).

Five Dockerfile options available:

Dockerfile Size Build Time Tools Use Case
Dockerfile 2.47GB ~20 min All + cargo cache Too large (original)
Dockerfile.optimized ~800MB ~15 min All (multi-stage) Multi-stage, Debian-based
Dockerfile.alpine ~400MB ~12 min All (Alpine) Alpine-based, smallest
Dockerfile.prebuilt 1.68GB ~3 min All (cargo-binstall) Pre-compiled binaries, fastest
Dockerfile.minimal ~1.6GB ~2 min All except nu Fastest + smallest (no nushell lint)

Recommended: Use Dockerfile.prebuilt (fastest builds, all tools)

For minimal size: Use Dockerfile.minimal if you can skip nushell linting (saves 46MB + 1min build)

# Build optimized image (choose one)
docker build -t your-registry/typedialog-ci:latest -f .woodpecker/Dockerfile.prebuilt .

# Or for smallest size (Alpine)
docker build -t your-registry/typedialog-ci:alpine -f .woodpecker/Dockerfile.alpine .

# Push to your registry
docker push your-registry/typedialog-ci:latest

# Update .woodpecker/ci.yml and ci-advanced.yml
# Change: image: rust:latest
# To: image: your-registry/typedialog-ci:latest

Size comparison breakdown:

Original (Dockerfile):
  Base Debian + buildtools:  1.6GB
  Rust toolchain:            538MB
  cargo install (5 tools):   823MB (includes cargo cache)
  --------------------------------
  TOTAL:                    2.47GB

Optimized (Dockerfile.prebuilt):
  Base Rust slim:            400MB
  Runtime deps:               60MB
  Binaries only:             140MB (no cargo cache)
  --------------------------------
  TOTAL:                    ~600MB

3. Secrets Configuration

Configure these secrets in Gitea/Forgejo repository settings:

  • GITEA_TOKEN - Gitea/Forgejo API token (for auto-creating releases)
  • CARGO_TOKEN - crates.io token (optional, for publishing to crates.io)
  • SONAR_TOKEN - SonarQube token (optional, for ci-advanced.yml coverage)

To create a Gitea token:

  1. Go to Settings → Applications → Manage Access Tokens
  2. Create token with scopes: write:repository, write:issue
  3. Add as secret GITEA_TOKEN in repository settings

4. Docker Access (for release-docker.yml)

The release-docker.yml pipeline requires access to Docker socket. Configure in Woodpecker server:

Option A: Privileged mode (simpler, less secure):

# In Woodpecker server config
WOODPECKER_BACKEND_DOCKER_ENABLE_PRIVILEGED: true

Option B: Volume mount (recommended): Already configured in pipeline via:

volumes:
  - /var/run/docker.sock:/var/run/docker.sock

Ensure Woodpecker agent has permission to access Docker socket.

Pipelines

CI Pipeline (ci.yml)

Triggers: Push to main/develop, Pull Requests

Jobs:

  1. Lint (Rust, Bash, Nickel, Nushell, Markdown) - Parallel
  2. Test (all features)
  3. Build (release)
  4. Security audit
  5. License compliance check

Duration: ~15-20 minutes (without custom image), ~10-15 minutes (with custom image)

Release Pipelines

All release pipelines trigger on Git tags v* (e.g., v0.1.0).

Option 1: Basic Release (release.yml)

Use case: Simple Linux-only releases, no Docker required

Platforms: x86_64-unknown-linux-gnu only

Artifacts:

  • typedialog-${VERSION}-x86_64-linux.tar.gz
  • typedialog-${VERSION}-x86_64-linux.tar.gz.sha256
  • sbom-spdx.json, sbom-cyclonedx.json

Duration: ~20-25 minutes

Option 2: Advanced Release (release-advanced.yml)

Use case: Multi-platform builds with auto-upload to Gitea

Platforms: 5 targets (Linux x86_64/aarch64, macOS x86_64/aarch64, Windows x86_64)

Features:

  • Auto-creates Gitea release via API
  • Matrix builds with cross tool
  • Auto-uploads all artifacts to release
  • Optional crates.io publishing

Requirements: GITEA_TOKEN secret

Duration: ~30-40 minutes (parallel builds)

Option 3: Docker-based Release (release-docker.yml)

Use case: Consistent builds using existing .woodpecker/Dockerfile.cross

Platforms: 5 targets (same as advanced)

Features:

  • Uses project's .woodpecker/Dockerfile.cross for reproducible builds
  • Includes BUILD_INFO.json manifest
  • Auto-creates Gitea release and uploads artifacts
  • Optional crates.io publishing

Requirements:

  • GITEA_TOKEN secret
  • Docker socket access (see Setup section)

Duration: ~35-45 minutes (includes Docker builds)

Comparison:

Feature Basic Advanced Docker-based
Platforms 1 (Linux x86_64) 5 5
Gitea API Manual Auto Auto
Docker required
Build method cargo cross CLI .woodpecker/Dockerfile.cross
Consistency Standard Standard High (containerized)
Manifest BUILD_INFO.json

Differences from GitHub Actions

Feature GitHub Actions Woodpecker CI
Matrix builds 3 OS Linux only*
Coverage Codecov Not configured
Benchmarks On PRs Not configured
Caching Built-in ⚠️ Server-side**
SBOM Auto-upload ⚠️ Manual***

* Multi-OS builds require multiple Woodpecker agents
** Configure in Woodpecker server settings
*** Manual upload to Gitea/Forgejo releases

Triggering Pipelines

# CI pipeline (automatic on push/PR)
git push origin main

# Release pipeline (manual tag)
git tag v0.1.0
git push origin v0.1.0

Selecting Release Pipeline:

By default, all three release pipelines will trigger on tags. To use only one:

  1. Rename the pipeline you want to use to release.yml
  2. Rename others to .release-*.yml.disabled (Woodpecker ignores these)

Example:

# Use Docker-based release only
mv .woodpecker/release.yml .woodpecker/.release-basic.yml.disabled
mv .woodpecker/release-advanced.yml .woodpecker/.release-advanced.yml.disabled
mv .woodpecker/release-docker.yml .woodpecker/release.yml

Or configure in Woodpecker UI to enable/disable specific pipelines.

Viewing Results