Seed projects and calendars (container deployment)

This guide explains how to seed country calendars and projects from ODS when running Rediflow from the container image. Use this after Deploy QA and production and migrations.

Order: Calendars first, then projects

  1. Migrations — Always run first.
  2. seed-calendars — Country holidays (FI, SE) from bundled JSON. No download needed.
  3. seed_from_ods — Projects (and optional ODS calendar data). Requires a downloaded ODS file.

Both seed steps are idempotent. Running seed-calendars first ensures country holidays are present; seed_from_ods then adds the project and any calendar data from the ODS without duplicating holidays.

Prerequisites

  • App and database running (e.g. via podman compose -f compose.deploy-qa.yml up -d).
  • Migrations applied: podman compose -f compose.deploy-qa.yml run --rm app-qa rediflow migrate head.

Step 1: Seed country calendars

Uses the bundled country_holidays.json (FI, SE 2025–2028). No file download needed.

QA:

podman compose -f compose.deploy-qa.yml run --rm app-qa rediflow seed-calendars

Production:

podman compose -f compose.deploy-prod.yml run --rm app-prod rediflow seed-calendars

Step 2: Seed projects from ODS (optional)

To import a project from an ODS file (organisations, work packages, tasks, milestones, deliverables, EST capacity, and optional calendar data), you need the ODS file and must mount it into the container.

Get the example ODS

Download the example template from the project repository. The file is docs/example.ods or docs/content.xml (an ODS is a ZIP archive; content.xml is the extracted XML used by the importer). Use the raw file from the repository.

Run the import from the container

Mount your ODS file into the container and run the seed script. Replace /path/to/example.ods with the path to your downloaded file on the host.

QA:

podman compose -f compose.deploy-qa.yml run --rm \
  -v /path/to/example.ods:/app/example.ods:ro \
  app-qa python scripts/seed_from_ods.py --ods /app/example.ods

Production:

podman compose -f compose.deploy-prod.yml run --rm \
  -v /path/to/example.ods:/app/example.ods:ro \
  app-prod python scripts/seed_from_ods.py --ods /app/example.ods

Example with a file in the current directory:

podman compose -f compose.deploy-qa.yml run --rm \
  -v "$(pwd)/example.ods:/app/example.ods:ro" \
  app-qa python scripts/seed_from_ods.py --ods /app/example.ods

The ODS can include a calendar sheet; the importer adds country holidays and org non-working days from it. The calendar import is additive (does not overwrite existing dates). Running seed-calendars first (Step 1) is still recommended for the bundled FI/SE data.

Custom project name or begin date

podman compose -f compose.deploy-qa.yml run --rm \
  -v "$(pwd)/my_project.ods:/app/my_project.ods:ro" \
  app-qa python scripts/seed_from_ods.py --ods /app/my_project.ods \
  --project-name "My project" --begin-date 2026-04-01

Step 3: Import people (optional)

After projects exist, import persons and project assignments from a people ODS file. See Import people from ODS for the sheet layout and container commands.

See also