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
- Migrations — Always run first.
- seed-calendars — Country holidays (FI, SE) from bundled JSON. No download needed.
- 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
- Import from ODS — overview — When to use, order of steps, local vs container
- Deploy QA and production — Start the stack with the container image
- Import project from ODS — ODS sheet layout and validation
- Import people from ODS — Persons, employee groups, assignments
- Initial data entry after deployment — Manual data entry steps