///<inheritdoc/>
        public void Init(string workspace)
        {
            string initDirectoryPath = Path.Combine(workspace, RESERVED_DIRECTORY_NAME.INIT);

            if (!_directoryService.Exists(initDirectoryPath))
            {
                _directoryService.CreateDirectory(initDirectoryPath);
                _fileService.AppendAllText(Path.Combine(initDirectoryPath, RESERVED_FILE_NAME.README), @$ "# The `{RESERVED_DIRECTORY_NAME.INIT}` directory
Initialization scripts. Executed once. This is called the first time you do `yuniql run`.");
                _traceService.Info($"Created script directory {initDirectoryPath}");
            }

            string preDirectoryPath = Path.Combine(workspace, RESERVED_DIRECTORY_NAME.PRE);

            if (!_directoryService.Exists(preDirectoryPath))
            {
                _directoryService.CreateDirectory(preDirectoryPath);
                _fileService.AppendAllText(Path.Combine(preDirectoryPath, RESERVED_FILE_NAME.README), @$ "# The `{RESERVED_DIRECTORY_NAME.PRE}` directory
Pre migration scripts. Executed every time before any version. 
");
                _traceService.Info($"Created script directory {preDirectoryPath}");
            }

            string defaultVersionDirectoryPath = Path.Combine(workspace, RESERVED_DIRECTORY_NAME.BASELINE);

            if (!_directoryService.Exists(defaultVersionDirectoryPath))
            {
                _directoryService.CreateDirectory(defaultVersionDirectoryPath);
                _fileService.AppendAllText(Path.Combine(defaultVersionDirectoryPath, RESERVED_FILE_NAME.README), @"# The `v0.00` directory
Baseline scripts. Executed once. This is called when you do `yuniql run`.");
                _traceService.Info($"Created script directory {defaultVersionDirectoryPath}");
            }

            string draftDirectoryPath = Path.Combine(workspace, RESERVED_DIRECTORY_NAME.DRAFT);

            if (!_directoryService.Exists(draftDirectoryPath))
            {
                _directoryService.CreateDirectory(draftDirectoryPath);
                _fileService.AppendAllText(Path.Combine(draftDirectoryPath, RESERVED_FILE_NAME.README), $@"# The `{RESERVED_DIRECTORY_NAME.DRAFT}` directory
Scripts in progress. Scripts that you are currently working and have not moved to specific version directory yet. Executed every time after the latest version.");
                _traceService.Info($"Created script directory {draftDirectoryPath}");
            }

            string postDirectoryPath = Path.Combine(workspace, RESERVED_DIRECTORY_NAME.POST);

            if (!_directoryService.Exists(postDirectoryPath))
            {
                _directoryService.CreateDirectory(postDirectoryPath);
                _fileService.AppendAllText(Path.Combine(postDirectoryPath, RESERVED_FILE_NAME.README), $@"# The `{RESERVED_DIRECTORY_NAME.POST}` directory
Post migration scripts. Executed every time and always the last batch to run.");
                _traceService.Info($"Created script directory {postDirectoryPath}");
            }

            string eraseDirectoryPath = Path.Combine(workspace, RESERVED_DIRECTORY_NAME.ERASE);

            if (!_directoryService.Exists(eraseDirectoryPath))
            {
                _directoryService.CreateDirectory(eraseDirectoryPath);
                _fileService.AppendAllText(Path.Combine(eraseDirectoryPath, RESERVED_FILE_NAME.README), $@"# The `{RESERVED_DIRECTORY_NAME.ERASE}` directory
Database cleanup scripts. Executed once only when you do `yuniql erase`.");
                _traceService.Info($"Created script directory {eraseDirectoryPath}");
            }

            var readMeFile = Path.Combine(workspace, RESERVED_FILE_NAME.README);

            if (!_fileService.Exists(readMeFile))
            {
                var assembly          = typeof(WorkspaceService).Assembly;
                var embededReadMeFile = $"{assembly.GetName().Name}.TemplateReadMe.md";
                _fileService.AppendAllText(readMeFile, _fileService.ReadAllEmbeddedText(embededReadMeFile));
                _traceService.Info($"Created file {readMeFile}");
            }

            var dockerFile = Path.Combine(workspace, RESERVED_FILE_NAME.DOCKER_FILE);

            if (!_fileService.Exists(dockerFile))
            {
                _fileService.AppendAllText(dockerFile, @"FROM yuniql/yuniql:latest
COPY . ./db                
");
                _traceService.Info($"Created file {dockerFile}");
            }

            var gitIgnoreFile = Path.Combine(workspace, RESERVED_FILE_NAME.GIT_IGNORE_FILE);

            if (!_fileService.Exists(gitIgnoreFile))
            {
                _fileService.AppendAllText(gitIgnoreFile, @"
.plugins
yuniql.exe
yuniql.pdb
yuniqlx.exe
yuniql-log-*.txt
");
                _traceService.Info($"Created file {gitIgnoreFile}");
            }
        }