opentide

opentide migrate

Move legacy Configurations/, Objects/, and .opentide/framework paths into the greenfield layout.

Layout migration for detection repositories that still use CoreTide directory names. This does not replace a CoreTide git submodule or Orchestration scripts — see the migration guide for that.

opentide migrate objects            # dry-run (default)
opentide migrate objects --apply    # move
opentide migrate objects --apply --copy

migrate objects

Moves (or copies) well-known legacy directories:

FromTo
Configurations/.opentide/configurations/
.opentide/framework/schemas/.opentide/schemas/
.opentide/framework/templates/.opentide/templates/
Objects/Threat Vectors/objects/threats/
Objects/Detection Objectives/objects/objectives/
Objects/Detection Rules/objects/rules/

Default is a dry-run. Pass --apply to execute. --copy keeps the source tree.

Existing non-empty destinations are skipped (never overwritten). Empty destination directories are replaced. After a move, empty Objects/ and .opentide/framework/ parents are removed.

Case-insensitive filesystems

On macOS and Windows, Objects/ and objects/ are the same folder, so the moves land inside the legacy Objects/ folder. The command then renames that folder to objects/, so a case-sensitive checkout such as a Linux CI runner finds it. The --json output lists the rename under case_renamed, in the dry-run too. Anything left in Objects/ (the legacy folders after --copy, or folders the command does not migrate) ends up in objects/ too, because the two names cannot exist side by side on these filesystems. The rename goes through a temporary Objects.opentide-case-rename/ folder; if one is left over from an interrupted run, the command keeps Objects/ and says so under warnings. That leftover can hold your files: check it before you delete it. On these filesystems the command also lower-cases an object folder such as objects/Rules, and repairs a repository an earlier release migrated into Objects/.

A repository that an earlier release migrated on macOS or Windows can still have objects/threats/, objects/objectives/ or objects/rules/ inside a folder named Objects/, with no legacy folders left to move. Run opentide migrate objects --apply again to rename Objects/ to objects/. Git tracks those files under Objects/, so then follow the check below.

Git keeps the folder case it recorded while the folder still has tracked files, which is the case after --copy or when files stay behind. Check before you commit:

git add -A
git ls-files Objects             # prints nothing once git records objects/
# only when it printed files:
git rm -r --cached -q Objects
git add objects

Flags

FlagPurpose
--applyPerform the planned operations
--copyCopy instead of move

Source

src/opentide/cli/services/migrate_objects.py

On this page