main 3ca0d9696909 cached
199 files
305.0 KB
79.5k tokens
496 symbols
1 requests
Download .txt
Showing preview only (351K chars total). Download the full file or copy to clipboard to get everything.
Repository: TheDragonCode/laravel-migration-actions
Branch: main
Commit: 3ca0d9696909
Files: 199
Total size: 305.0 KB

Directory structure:
gitextract_mm59vhog/

├── .editorconfig
├── .gitattributes
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.yml
│   │   ├── config.yml
│   │   └── feature_request.yml
│   ├── PULL_REQUEST_TEMPLATE.md
│   ├── dependabot.yml
│   ├── preview-updater.yml
│   └── workflows/
│       ├── code-style.yml
│       ├── docs.yml
│       ├── license.yml
│       ├── preview.yml
│       ├── release-drafter.yml
│       └── tests.yml
├── .gitignore
├── LICENSE
├── README.md
├── biome.json
├── composer.json
├── config/
│   └── deploy-operations.php
├── database/
│   └── migrations/
│       ├── 2022_08_18_180137_change_migration_actions_table.php
│       ├── 2023_01_21_172923_rename_migrations_actions_table_to_actions.php
│       ├── 2024_05_21_112438_rename_actions_table_to_operations.php
│       └── 2024_05_21_114318_rename_column_in_operations_table.php
├── docs/
│   ├── cfg/
│   │   └── buildprofiles.xml
│   ├── do.tree
│   ├── docs_libraries.tree
│   ├── snippets/
│   │   ├── actual_file_names.sh
│   │   ├── ask.sh
│   │   ├── async.php
│   │   ├── before_after.sh
│   │   ├── deployer.php
│   │   ├── di_invoke.php
│   │   ├── di_up_down.php
│   │   ├── empty.php
│   │   ├── event_service_provider.php
│   │   ├── events_list.php
│   │   ├── example.php
│   │   ├── example_artisan.php
│   │   ├── except_environment.php
│   │   ├── failed_status.php
│   │   ├── invokable_status.php
│   │   ├── invoke_and_down.php
│   │   ├── listen_events.php
│   │   ├── make_auto.sh
│   │   ├── need_before.php
│   │   ├── nested.sh
│   │   ├── nested_example.sh
│   │   ├── on_environment.php
│   │   ├── on_environments.php
│   │   ├── once_method.php
│   │   ├── operation_helper_all.php
│   │   ├── operation_helper_directory.php
│   │   ├── operation_helper_file.php
│   │   ├── operations_helper.sh
│   │   ├── operations_status.sh
│   │   ├── order_running_operations.sh
│   │   ├── rollback.sh
│   │   ├── some_listener.php
│   │   ├── success_status.php
│   │   ├── with_operation.php
│   │   ├── with_operation_helper.php
│   │   └── within_transactions.php
│   ├── topics/
│   │   ├── artisan-commands.topic
│   │   ├── creating-operations.topic
│   │   ├── customize-stub.topic
│   │   ├── database-data-dumper.topic
│   │   ├── events.topic
│   │   ├── execution-status.topic
│   │   ├── installation.topic
│   │   ├── introduction.topic
│   │   ├── operation-helper.topic
│   │   ├── operations-status.topic
│   │   ├── rolling-back-operations.topic
│   │   ├── running-operations.topic
│   │   ├── snippets_composer.topic
│   │   ├── upgrade-3.topic
│   │   ├── upgrade-4.topic
│   │   ├── upgrade-5.topic
│   │   ├── upgrade-6.topic
│   │   ├── upgrade-7.topic
│   │   └── usage.topic
│   ├── v.list
│   ├── versions.json
│   └── writerside.cfg
├── ide.json
├── phpunit.xml
├── pint.json
├── resources/
│   └── stubs/
│       └── deploy-operation.stub
├── src/
│   ├── Concerns/
│   │   ├── ConfirmableTrait.php
│   │   ├── HasAbout.php
│   │   ├── HasArtisan.php
│   │   ├── HasIsolatable.php
│   │   └── HasOptionable.php
│   ├── Console/
│   │   ├── Command.php
│   │   ├── FreshCommand.php
│   │   ├── InstallCommand.php
│   │   ├── MakeCommand.php
│   │   ├── OperationsCommand.php
│   │   ├── RollbackCommand.php
│   │   └── StatusCommand.php
│   ├── Constants/
│   │   ├── Names.php
│   │   ├── Options.php
│   │   └── Order.php
│   ├── Data/
│   │   ├── Casts/
│   │   │   ├── BoolCast.php
│   │   │   ├── Config/
│   │   │   │   ├── ExcludeCast.php
│   │   │   │   └── PathCast.php
│   │   │   ├── OperationNameCast.php
│   │   │   └── PathCast.php
│   │   ├── Config/
│   │   │   ├── ConfigData.php
│   │   │   ├── QueueData.php
│   │   │   ├── ShowData.php
│   │   │   └── TransactionsData.php
│   │   └── OptionsData.php
│   ├── Enums/
│   │   ├── MethodEnum.php
│   │   └── StatusEnum.php
│   ├── Events/
│   │   ├── BaseEvent.php
│   │   ├── DeployOperationEnded.php
│   │   ├── DeployOperationFailed.php
│   │   ├── DeployOperationStarted.php
│   │   └── NoPendingDeployOperations.php
│   ├── Helpers/
│   │   ├── GitHelper.php
│   │   ├── OperationHelper.php
│   │   └── SorterHelper.php
│   ├── Jobs/
│   │   └── OperationJob.php
│   ├── Listeners/
│   │   ├── Listener.php
│   │   └── MigrationEndedListener.php
│   ├── Notifications/
│   │   └── Notification.php
│   ├── Operation.php
│   ├── Processors/
│   │   ├── FreshProcessor.php
│   │   ├── InstallProcessor.php
│   │   ├── MakeProcessor.php
│   │   ├── OperationsProcessor.php
│   │   ├── Processor.php
│   │   ├── RollbackProcessor.php
│   │   └── StatusProcessor.php
│   ├── Repositories/
│   │   └── OperationsRepository.php
│   ├── ServiceProvider.php
│   ├── Services/
│   │   ├── MigratorService.php
│   │   └── MutexService.php
│   └── helpers.php
└── tests/
    ├── Commands/
    │   ├── EventsTest.php
    │   ├── FreshTest.php
    │   ├── InstallTest.php
    │   ├── MakeTest.php
    │   ├── MutexTest.php
    │   ├── OperationsTest.php
    │   ├── RollbackTest.php
    │   └── StatusTest.php
    ├── Concerns/
    │   ├── AssertDatabase.php
    │   ├── Database.php
    │   ├── Files.php
    │   └── Some.php
    ├── Helpers/
    │   ├── GitTest.php
    │   ├── OperationTest.php
    │   └── SorterTest.php
    ├── TestCase.php
    └── fixtures/
        ├── app/
        │   ├── async/
        │   │   ├── 2021_04_06_212742_every_time.php
        │   │   └── 2023_04_06_212637_foo_bar.php
        │   ├── di/
        │   │   ├── 2022_10_11_234251_invoke.php
        │   │   ├── 2022_10_11_234251_invoke_down.php
        │   │   └── 2022_10_11_234312_up_down.php
        │   ├── empty/
        │   │   ├── .gitkeep
        │   │   └── some.txt
        │   ├── operations/
        │   │   ├── 2020_12_07_153105_foo_bar.php
        │   │   ├── 2021_01_02_020947_every_time.php
        │   │   ├── 2021_05_24_120003_run_on_all.php
        │   │   ├── 2021_05_24_120003_run_on_many_environments.php
        │   │   ├── 2021_05_24_120003_run_on_production.php
        │   │   ├── 2021_05_24_120003_run_on_testing.php
        │   │   ├── 2021_06_07_132849_run_except_production.php
        │   │   ├── 2021_06_07_132917_run_except_testing.php
        │   │   ├── 2021_06_07_134045_run_except_many_environments.php
        │   │   ├── 2021_10_26_143247_run_allow.php
        │   │   ├── 2021_10_26_143304_run_disallow.php
        │   │   ├── 2021_12_23_165047_run_success.php
        │   │   ├── 2021_12_23_184029_run_failed.php
        │   │   ├── 2022_08_17_135147_test_before_enabled.php
        │   │   ├── 2022_08_17_135153_test_before_disabled.php
        │   │   └── sub_path/
        │   │       ├── 2021_12_15_205804_baz.php
        │   │       └── 2022_10_27_230732_foo.php
        │   ├── operations_failed/
        │   │   ├── 2021_12_23_165048_run_success_on_failed.php
        │   │   └── 2021_12_23_184029_run_failed_failure.php
        │   ├── stubs/
        │   │   ├── 2021_02_15_124237_test_success_transactions.stub
        │   │   ├── 2021_02_15_124852_test_failed_transactions.stub
        │   │   ├── customized.stub
        │   │   └── make_example.stub
        │   └── via_migrations/
        │       ├── 2025_03_31_213407_custom.php
        │       ├── 2025_03_31_234251_invoke.php
        │       └── 2025_03_31_234312_up_down.php
        ├── migrations/
        │   ├── 2020_12_07_164624_create_test_table.php
        │   ├── 2021_01_02_022431_create_every_time_table.php
        │   ├── 2021_02_15_124419_create_transactions_table.php
        │   ├── 2021_05_24_122027_create_environment_table.php
        │   ├── 2021_12_23_165218_create_success_table.php
        │   ├── 2021_12_23_184434_create_failed_table.php
        │   └── 2022_08_17_150549_create_before_table.php
        └── migrations_with_operations/
            ├── 2025_03_31_213847_call_invokable.php
            └── 2025_03_31_213921_call_up_down.php

================================================
FILE CONTENTS
================================================

================================================
FILE: .editorconfig
================================================
[*]
charset = utf-8
end_of_line = lf
indent_size = 4
indent_style = space
insert_final_newline = true
max_line_length = 120
tab_width = 4
trim_trailing_whitespace = false
ij_continuation_indent_size = 8
ij_formatter_off_tag = @formatter:off
ij_formatter_on_tag = @formatter:on
ij_formatter_tags_enabled = true
ij_smart_tabs = false
ij_visual_guides = none
ij_wrap_on_typing = false

[*.blade.php]
ij_continuation_indent_size = 4
ij_blade_keep_indents_on_empty_lines = false

[*.css]
ij_css_align_closing_brace_with_properties = false
ij_css_blank_lines_around_nested_selector = 1
ij_css_blank_lines_between_blocks = 1
ij_css_block_comment_add_space = true
ij_css_brace_placement = end_of_line
ij_css_enforce_quotes_on_format = true
ij_css_hex_color_long_format = true
ij_css_hex_color_lower_case = false
ij_css_hex_color_short_format = false
ij_css_hex_color_upper_case = true
ij_css_keep_blank_lines_in_code = 1
ij_css_keep_indents_on_empty_lines = false
ij_css_keep_single_line_blocks = false
ij_css_properties_order = font,font-family,font-size,font-weight,font-style,font-variant,font-size-adjust,font-stretch,line-height,position,z-index,top,right,bottom,left,display,visibility,float,clear,overflow,overflow-x,overflow-y,clip,zoom,align-content,align-items,align-self,flex,flex-flow,flex-basis,flex-direction,flex-grow,flex-shrink,flex-wrap,justify-content,order,box-sizing,width,min-width,max-width,height,min-height,max-height,margin,margin-top,margin-right,margin-bottom,margin-left,padding,padding-top,padding-right,padding-bottom,padding-left,table-layout,empty-cells,caption-side,border-spacing,border-collapse,list-style,list-style-position,list-style-type,list-style-image,content,quotes,counter-reset,counter-increment,resize,cursor,user-select,nav-index,nav-up,nav-right,nav-down,nav-left,transition,transition-delay,transition-timing-function,transition-duration,transition-property,transform,transform-origin,animation,animation-name,animation-duration,animation-play-state,animation-timing-function,animation-delay,animation-iteration-count,animation-direction,text-align,text-align-last,vertical-align,white-space,text-decoration,text-emphasis,text-emphasis-color,text-emphasis-style,text-emphasis-position,text-indent,text-justify,letter-spacing,word-spacing,text-outline,text-transform,text-wrap,text-overflow,text-overflow-ellipsis,text-overflow-mode,word-wrap,word-break,tab-size,hyphens,pointer-events,opacity,color,border,border-width,border-style,border-color,border-top,border-top-width,border-top-style,border-top-color,border-right,border-right-width,border-right-style,border-right-color,border-bottom,border-bottom-width,border-bottom-style,border-bottom-color,border-left,border-left-width,border-left-style,border-left-color,border-radius,border-top-left-radius,border-top-right-radius,border-bottom-right-radius,border-bottom-left-radius,border-image,border-image-source,border-image-slice,border-image-width,border-image-outset,border-image-repeat,outline,outline-width,outline-style,outline-color,outline-offset,background,background-color,background-image,background-repeat,background-attachment,background-position,background-position-x,background-position-y,background-clip,background-origin,background-size,box-decoration-break,box-shadow,text-shadow
ij_css_space_after_colon = true
ij_css_space_before_opening_brace = true
ij_css_use_double_quotes = true
ij_css_value_alignment = do_not_align

[*.less]
ij_less_align_closing_brace_with_properties = false
ij_less_blank_lines_around_nested_selector = 1
ij_less_blank_lines_between_blocks = 1
ij_less_block_comment_add_space = false
ij_less_brace_placement = 0
ij_less_enforce_quotes_on_format = false
ij_less_hex_color_long_format = true
ij_less_hex_color_lower_case = false
ij_less_hex_color_short_format = false
ij_less_hex_color_upper_case = true
ij_less_keep_blank_lines_in_code = 2
ij_less_keep_indents_on_empty_lines = false
ij_less_keep_single_line_blocks = false
ij_less_line_comment_add_space = false
ij_less_line_comment_at_first_column = false
ij_less_properties_order = font,font-family,font-size,font-weight,font-style,font-variant,font-size-adjust,font-stretch,line-height,position,z-index,top,right,bottom,left,display,visibility,float,clear,overflow,overflow-x,overflow-y,clip,zoom,align-content,align-items,align-self,flex,flex-flow,flex-basis,flex-direction,flex-grow,flex-shrink,flex-wrap,justify-content,order,box-sizing,width,min-width,max-width,height,min-height,max-height,margin,margin-top,margin-right,margin-bottom,margin-left,padding,padding-top,padding-right,padding-bottom,padding-left,table-layout,empty-cells,caption-side,border-spacing,border-collapse,list-style,list-style-position,list-style-type,list-style-image,content,quotes,counter-reset,counter-increment,resize,cursor,user-select,nav-index,nav-up,nav-right,nav-down,nav-left,transition,transition-delay,transition-timing-function,transition-duration,transition-property,transform,transform-origin,animation,animation-name,animation-duration,animation-play-state,animation-timing-function,animation-delay,animation-iteration-count,animation-direction,text-align,text-align-last,vertical-align,white-space,text-decoration,text-emphasis,text-emphasis-color,text-emphasis-style,text-emphasis-position,text-indent,text-justify,letter-spacing,word-spacing,text-outline,text-transform,text-wrap,text-overflow,text-overflow-ellipsis,text-overflow-mode,word-wrap,word-break,tab-size,hyphens,pointer-events,opacity,color,border,border-width,border-style,border-color,border-top,border-top-width,border-top-style,border-top-color,border-right,border-right-width,border-right-style,border-right-color,border-bottom,border-bottom-width,border-bottom-style,border-bottom-color,border-left,border-left-width,border-left-style,border-left-color,border-radius,border-top-left-radius,border-top-right-radius,border-bottom-right-radius,border-bottom-left-radius,border-image,border-image-source,border-image-slice,border-image-width,border-image-outset,border-image-repeat,outline,outline-width,outline-style,outline-color,outline-offset,background,background-color,background-image,background-repeat,background-attachment,background-position,background-position-x,background-position-y,background-clip,background-origin,background-size,box-decoration-break,box-shadow,text-shadow
ij_less_space_after_colon = true
ij_less_space_before_opening_brace = true
ij_less_use_double_quotes = true
ij_less_value_alignment = 0

[*.sass]
ij_sass_align_closing_brace_with_properties = false
ij_sass_blank_lines_around_nested_selector = 1
ij_sass_blank_lines_between_blocks = 1
ij_sass_brace_placement = 0
ij_sass_enforce_quotes_on_format = false
ij_sass_hex_color_long_format = false
ij_sass_hex_color_lower_case = false
ij_sass_hex_color_short_format = false
ij_sass_hex_color_upper_case = false
ij_sass_keep_blank_lines_in_code = 2
ij_sass_keep_indents_on_empty_lines = false
ij_sass_keep_single_line_blocks = false
ij_sass_line_comment_add_space = false
ij_sass_line_comment_at_first_column = false
ij_sass_properties_order = font,font-family,font-size,font-weight,font-style,font-variant,font-size-adjust,font-stretch,line-height,position,z-index,top,right,bottom,left,display,visibility,float,clear,overflow,overflow-x,overflow-y,clip,zoom,align-content,align-items,align-self,flex,flex-flow,flex-basis,flex-direction,flex-grow,flex-shrink,flex-wrap,justify-content,order,box-sizing,width,min-width,max-width,height,min-height,max-height,margin,margin-top,margin-right,margin-bottom,margin-left,padding,padding-top,padding-right,padding-bottom,padding-left,table-layout,empty-cells,caption-side,border-spacing,border-collapse,list-style,list-style-position,list-style-type,list-style-image,content,quotes,counter-reset,counter-increment,resize,cursor,user-select,nav-index,nav-up,nav-right,nav-down,nav-left,transition,transition-delay,transition-timing-function,transition-duration,transition-property,transform,transform-origin,animation,animation-name,animation-duration,animation-play-state,animation-timing-function,animation-delay,animation-iteration-count,animation-direction,text-align,text-align-last,vertical-align,white-space,text-decoration,text-emphasis,text-emphasis-color,text-emphasis-style,text-emphasis-position,text-indent,text-justify,letter-spacing,word-spacing,text-outline,text-transform,text-wrap,text-overflow,text-overflow-ellipsis,text-overflow-mode,word-wrap,word-break,tab-size,hyphens,pointer-events,opacity,color,border,border-width,border-style,border-color,border-top,border-top-width,border-top-style,border-top-color,border-right,border-right-width,border-right-style,border-right-color,border-bottom,border-bottom-width,border-bottom-style,border-bottom-color,border-left,border-left-width,border-left-style,border-left-color,border-radius,border-top-left-radius,border-top-right-radius,border-bottom-right-radius,border-bottom-left-radius,border-image,border-image-source,border-image-slice,border-image-width,border-image-outset,border-image-repeat,outline,outline-width,outline-style,outline-color,outline-offset,background,background-color,background-image,background-repeat,background-attachment,background-position,background-position-x,background-position-y,background-clip,background-origin,background-size,box-decoration-break,box-shadow,text-shadow
ij_sass_space_after_colon = true
ij_sass_space_before_opening_brace = true
ij_sass_use_double_quotes = true
ij_sass_value_alignment = 0

[*.scss]
ij_scss_align_closing_brace_with_properties = false
ij_scss_blank_lines_around_nested_selector = 1
ij_scss_blank_lines_between_blocks = 1
ij_scss_block_comment_add_space = true
ij_scss_brace_placement = 0
ij_scss_enforce_quotes_on_format = true
ij_scss_hex_color_long_format = true
ij_scss_hex_color_lower_case = false
ij_scss_hex_color_short_format = false
ij_scss_hex_color_upper_case = true
ij_scss_keep_blank_lines_in_code = 1
ij_scss_keep_indents_on_empty_lines = false
ij_scss_keep_single_line_blocks = false
ij_scss_line_comment_add_space = false
ij_scss_line_comment_at_first_column = false
ij_scss_properties_order = font,font-family,font-size,font-weight,font-style,font-variant,font-size-adjust,font-stretch,line-height,position,z-index,top,right,bottom,left,display,visibility,float,clear,overflow,overflow-x,overflow-y,clip,zoom,align-content,align-items,align-self,flex,flex-flow,flex-basis,flex-direction,flex-grow,flex-shrink,flex-wrap,justify-content,order,box-sizing,width,min-width,max-width,height,min-height,max-height,margin,margin-top,margin-right,margin-bottom,margin-left,padding,padding-top,padding-right,padding-bottom,padding-left,table-layout,empty-cells,caption-side,border-spacing,border-collapse,list-style,list-style-position,list-style-type,list-style-image,content,quotes,counter-reset,counter-increment,resize,cursor,user-select,nav-index,nav-up,nav-right,nav-down,nav-left,transition,transition-delay,transition-timing-function,transition-duration,transition-property,transform,transform-origin,animation,animation-name,animation-duration,animation-play-state,animation-timing-function,animation-delay,animation-iteration-count,animation-direction,text-align,text-align-last,vertical-align,white-space,text-decoration,text-emphasis,text-emphasis-color,text-emphasis-style,text-emphasis-position,text-indent,text-justify,letter-spacing,word-spacing,text-outline,text-transform,text-wrap,text-overflow,text-overflow-ellipsis,text-overflow-mode,word-wrap,word-break,tab-size,hyphens,pointer-events,opacity,color,border,border-width,border-style,border-color,border-top,border-top-width,border-top-style,border-top-color,border-right,border-right-width,border-right-style,border-right-color,border-bottom,border-bottom-width,border-bottom-style,border-bottom-color,border-left,border-left-width,border-left-style,border-left-color,border-radius,border-top-left-radius,border-top-right-radius,border-bottom-right-radius,border-bottom-left-radius,border-image,border-image-source,border-image-slice,border-image-width,border-image-outset,border-image-repeat,outline,outline-width,outline-style,outline-color,outline-offset,background,background-color,background-image,background-repeat,background-attachment,background-position,background-position-x,background-position-y,background-clip,background-origin,background-size,box-decoration-break,box-shadow,text-shadow
ij_scss_space_after_colon = true
ij_scss_space_before_opening_brace = true
ij_scss_use_double_quotes = true
ij_scss_value_alignment = 0

[*.twig]
ij_twig_keep_indents_on_empty_lines = false
ij_twig_spaces_inside_comments_delimiters = true
ij_twig_spaces_inside_delimiters = true
ij_twig_spaces_inside_variable_delimiters = true

[*.vue]
ij_continuation_indent_size = 4
ij_vue_indent_children_of_top_level = template
ij_vue_interpolation_new_line_after_start_delimiter = true
ij_vue_interpolation_new_line_before_end_delimiter = true
ij_vue_interpolation_wrap = off
ij_vue_keep_indents_on_empty_lines = false
ij_vue_spaces_within_interpolation_expressions = true

[.editorconfig]
ij_editorconfig_align_group_field_declarations = false
ij_editorconfig_space_after_colon = false
ij_editorconfig_space_after_comma = true
ij_editorconfig_space_before_colon = false
ij_editorconfig_space_before_comma = false
ij_editorconfig_spaces_around_assignment_operators = true

[{*.ant,*.fxml,*.jhm,*.jnlp,*.jrxml,*.rng,*.tld,*.wsdl,*.xml,*.xsd,*.xsl,*.xslt,*.xul,phpunit.xml.dist}]
ij_xml_align_attributes = true
ij_xml_align_text = false
ij_xml_attribute_wrap = normal
ij_xml_block_comment_add_space = true
ij_xml_block_comment_at_first_column = true
ij_xml_keep_blank_lines = 2
ij_xml_keep_indents_on_empty_lines = false
ij_xml_keep_line_breaks = true
ij_xml_keep_line_breaks_in_text = true
ij_xml_keep_whitespaces = false
ij_xml_keep_whitespaces_around_cdata = preserve
ij_xml_keep_whitespaces_inside_cdata = false
ij_xml_line_comment_at_first_column = true
ij_xml_space_after_tag_name = false
ij_xml_space_around_equals_in_attribute = false
ij_xml_space_inside_empty_tag = true
ij_xml_text_wrap = normal

[{*.ats,*.cts,*.mts,*.ts}]
ij_continuation_indent_size = 4
ij_typescript_align_imports = false
ij_typescript_align_multiline_array_initializer_expression = false
ij_typescript_align_multiline_binary_operation = false
ij_typescript_align_multiline_chained_methods = false
ij_typescript_align_multiline_extends_list = false
ij_typescript_align_multiline_for = true
ij_typescript_align_multiline_parameters = true
ij_typescript_align_multiline_parameters_in_calls = false
ij_typescript_align_multiline_ternary_operation = false
ij_typescript_align_object_properties = 0
ij_typescript_align_union_types = false
ij_typescript_align_var_statements = 0
ij_typescript_array_initializer_new_line_after_left_brace = false
ij_typescript_array_initializer_right_brace_on_new_line = false
ij_typescript_array_initializer_wrap = off
ij_typescript_assignment_wrap = off
ij_typescript_binary_operation_sign_on_next_line = false
ij_typescript_binary_operation_wrap = off
ij_typescript_blacklist_imports = rxjs/Rx,node_modules/**,**/node_modules/**,@angular/material,@angular/material/typings/**
ij_typescript_blank_lines_after_imports = 1
ij_typescript_blank_lines_around_class = 1
ij_typescript_blank_lines_around_field = 0
ij_typescript_blank_lines_around_field_in_interface = 0
ij_typescript_blank_lines_around_function = 1
ij_typescript_blank_lines_around_method = 1
ij_typescript_blank_lines_around_method_in_interface = 1
ij_typescript_block_brace_style = end_of_line
ij_typescript_block_comment_add_space = false
ij_typescript_block_comment_at_first_column = true
ij_typescript_call_parameters_new_line_after_left_paren = false
ij_typescript_call_parameters_right_paren_on_new_line = false
ij_typescript_call_parameters_wrap = off
ij_typescript_catch_on_new_line = false
ij_typescript_chained_call_dot_on_new_line = true
ij_typescript_class_brace_style = next_line
ij_typescript_comma_on_new_line = false
ij_typescript_do_while_brace_force = never
ij_typescript_else_on_new_line = false
ij_typescript_enforce_trailing_comma = remove
ij_typescript_enum_constants_wrap = on_every_item
ij_typescript_extends_keyword_wrap = off
ij_typescript_extends_list_wrap = off
ij_typescript_field_prefix = _
ij_typescript_file_name_style = relaxed
ij_typescript_finally_on_new_line = false
ij_typescript_for_brace_force = never
ij_typescript_for_statement_new_line_after_left_paren = false
ij_typescript_for_statement_right_paren_on_new_line = false
ij_typescript_for_statement_wrap = off
ij_typescript_force_quote_style = true
ij_typescript_force_semicolon_style = true
ij_typescript_function_expression_brace_style = end_of_line
ij_typescript_if_brace_force = never
ij_typescript_import_merge_members = global
ij_typescript_import_prefer_absolute_path = global
ij_typescript_import_sort_members = true
ij_typescript_import_sort_module_name = false
ij_typescript_import_use_node_resolution = true
ij_typescript_imports_wrap = on_every_item
ij_typescript_indent_case_from_switch = true
ij_typescript_indent_chained_calls = true
ij_typescript_indent_package_children = 0
ij_typescript_jsdoc_include_types = false
ij_typescript_jsx_attribute_value = braces
ij_typescript_keep_blank_lines_in_code = 1
ij_typescript_keep_first_column_comment = true
ij_typescript_keep_indents_on_empty_lines = false
ij_typescript_keep_line_breaks = true
ij_typescript_keep_simple_blocks_in_one_line = false
ij_typescript_keep_simple_methods_in_one_line = false
ij_typescript_line_comment_add_space = true
ij_typescript_line_comment_at_first_column = false
ij_typescript_method_brace_style = next_line
ij_typescript_method_call_chain_wrap = off
ij_typescript_method_parameters_new_line_after_left_paren = false
ij_typescript_method_parameters_right_paren_on_new_line = false
ij_typescript_method_parameters_wrap = off
ij_typescript_object_literal_wrap = on_every_item
ij_typescript_object_types_wrap = on_every_item
ij_typescript_parentheses_expression_new_line_after_left_paren = false
ij_typescript_parentheses_expression_right_paren_on_new_line = false
ij_typescript_place_assignment_sign_on_next_line = false
ij_typescript_prefer_as_type_cast = false
ij_typescript_prefer_explicit_types_function_expression_returns = false
ij_typescript_prefer_explicit_types_function_returns = false
ij_typescript_prefer_explicit_types_vars_fields = false
ij_typescript_prefer_parameters_wrap = false
ij_typescript_reformat_c_style_comments = false
ij_typescript_space_after_colon = true
ij_typescript_space_after_comma = true
ij_typescript_space_after_dots_in_rest_parameter = false
ij_typescript_space_after_generator_mult = true
ij_typescript_space_after_property_colon = true
ij_typescript_space_after_quest = true
ij_typescript_space_after_type_colon = true
ij_typescript_space_after_unary_not = true
ij_typescript_space_before_async_arrow_lparen = true
ij_typescript_space_before_catch_keyword = true
ij_typescript_space_before_catch_left_brace = true
ij_typescript_space_before_catch_parentheses = true
ij_typescript_space_before_class_lbrace = true
ij_typescript_space_before_class_left_brace = true
ij_typescript_space_before_colon = true
ij_typescript_space_before_comma = false
ij_typescript_space_before_do_left_brace = true
ij_typescript_space_before_else_keyword = true
ij_typescript_space_before_else_left_brace = true
ij_typescript_space_before_finally_keyword = true
ij_typescript_space_before_finally_left_brace = true
ij_typescript_space_before_for_left_brace = true
ij_typescript_space_before_for_parentheses = true
ij_typescript_space_before_for_semicolon = false
ij_typescript_space_before_function_left_parenth = true
ij_typescript_space_before_generator_mult = false
ij_typescript_space_before_if_left_brace = true
ij_typescript_space_before_if_parentheses = true
ij_typescript_space_before_method_call_parentheses = false
ij_typescript_space_before_method_left_brace = true
ij_typescript_space_before_method_parentheses = false
ij_typescript_space_before_property_colon = false
ij_typescript_space_before_quest = true
ij_typescript_space_before_switch_left_brace = true
ij_typescript_space_before_switch_parentheses = true
ij_typescript_space_before_try_left_brace = true
ij_typescript_space_before_type_colon = false
ij_typescript_space_before_unary_not = false
ij_typescript_space_before_while_keyword = true
ij_typescript_space_before_while_left_brace = true
ij_typescript_space_before_while_parentheses = true
ij_typescript_spaces_around_additive_operators = true
ij_typescript_spaces_around_arrow_function_operator = true
ij_typescript_spaces_around_assignment_operators = true
ij_typescript_spaces_around_bitwise_operators = true
ij_typescript_spaces_around_equality_operators = true
ij_typescript_spaces_around_logical_operators = true
ij_typescript_spaces_around_multiplicative_operators = true
ij_typescript_spaces_around_relational_operators = true
ij_typescript_spaces_around_shift_operators = true
ij_typescript_spaces_around_unary_operator = false
ij_typescript_spaces_within_array_initializer_brackets = false
ij_typescript_spaces_within_brackets = false
ij_typescript_spaces_within_catch_parentheses = false
ij_typescript_spaces_within_for_parentheses = false
ij_typescript_spaces_within_if_parentheses = false
ij_typescript_spaces_within_imports = true
ij_typescript_spaces_within_interpolation_expressions = true
ij_typescript_spaces_within_method_call_parentheses = false
ij_typescript_spaces_within_method_parentheses = false
ij_typescript_spaces_within_object_literal_braces = true
ij_typescript_spaces_within_object_type_braces = true
ij_typescript_spaces_within_parentheses = false
ij_typescript_spaces_within_switch_parentheses = false
ij_typescript_spaces_within_type_assertion = false
ij_typescript_spaces_within_union_types = true
ij_typescript_spaces_within_while_parentheses = false
ij_typescript_special_else_if_treatment = true
ij_typescript_ternary_operation_signs_on_next_line = false
ij_typescript_ternary_operation_wrap = off
ij_typescript_union_types_wrap = on_every_item
ij_typescript_use_chained_calls_group_indents = false
ij_typescript_use_double_quotes = false
ij_typescript_use_explicit_js_extension = auto
ij_typescript_use_path_mapping = always
ij_typescript_use_public_modifier = false
ij_typescript_use_semicolon_after_statement = false
ij_typescript_var_declaration_wrap = normal
ij_typescript_while_brace_force = never
ij_typescript_while_on_new_line = false
ij_typescript_wrap_comments = false

[{*.bash,*.sh,*.zsh}]
ij_shell_binary_ops_start_line = false
ij_shell_keep_column_alignment_padding = false
ij_shell_minify_program = false
ij_shell_redirect_followed_by_space = false
ij_shell_switch_cases_indented = false
ij_shell_use_unix_line_separator = true

[{*.cjs,*.js}]
ij_continuation_indent_size = 4
ij_javascript_align_imports = false
ij_javascript_align_multiline_array_initializer_expression = false
ij_javascript_align_multiline_binary_operation = false
ij_javascript_align_multiline_chained_methods = false
ij_javascript_align_multiline_extends_list = false
ij_javascript_align_multiline_for = true
ij_javascript_align_multiline_parameters = true
ij_javascript_align_multiline_parameters_in_calls = false
ij_javascript_align_multiline_ternary_operation = false
ij_javascript_align_object_properties = 0
ij_javascript_align_union_types = false
ij_javascript_align_var_statements = 1
ij_javascript_array_initializer_new_line_after_left_brace = true
ij_javascript_array_initializer_right_brace_on_new_line = true
ij_javascript_array_initializer_wrap = on_every_item
ij_javascript_assignment_wrap = off
ij_javascript_binary_operation_sign_on_next_line = false
ij_javascript_binary_operation_wrap = off
ij_javascript_blacklist_imports = rxjs/Rx,node_modules/**,**/node_modules/**,@angular/material,@angular/material/typings/**
ij_javascript_blank_lines_after_imports = 1
ij_javascript_blank_lines_around_class = 1
ij_javascript_blank_lines_around_field = 0
ij_javascript_blank_lines_around_function = 1
ij_javascript_blank_lines_around_method = 1
ij_javascript_block_brace_style = end_of_line
ij_javascript_block_comment_add_space = false
ij_javascript_block_comment_at_first_column = true
ij_javascript_call_parameters_new_line_after_left_paren = false
ij_javascript_call_parameters_right_paren_on_new_line = false
ij_javascript_call_parameters_wrap = off
ij_javascript_catch_on_new_line = false
ij_javascript_chained_call_dot_on_new_line = true
ij_javascript_class_brace_style = next_line
ij_javascript_comma_on_new_line = false
ij_javascript_do_while_brace_force = never
ij_javascript_else_on_new_line = false
ij_javascript_enforce_trailing_comma = remove
ij_javascript_extends_keyword_wrap = off
ij_javascript_extends_list_wrap = off
ij_javascript_field_prefix = _
ij_javascript_file_name_style = lisp_case
ij_javascript_finally_on_new_line = false
ij_javascript_for_brace_force = never
ij_javascript_for_statement_new_line_after_left_paren = false
ij_javascript_for_statement_right_paren_on_new_line = false
ij_javascript_for_statement_wrap = off
ij_javascript_force_quote_style = true
ij_javascript_force_semicolon_style = true
ij_javascript_function_expression_brace_style = end_of_line
ij_javascript_if_brace_force = never
ij_javascript_import_merge_members = global
ij_javascript_import_prefer_absolute_path = true
ij_javascript_import_sort_members = true
ij_javascript_import_sort_module_name = false
ij_javascript_import_use_node_resolution = true
ij_javascript_imports_wrap = on_every_item
ij_javascript_indent_case_from_switch = true
ij_javascript_indent_chained_calls = true
ij_javascript_indent_package_children = 0
ij_javascript_jsx_attribute_value = braces
ij_javascript_keep_blank_lines_in_code = 1
ij_javascript_keep_first_column_comment = true
ij_javascript_keep_indents_on_empty_lines = false
ij_javascript_keep_line_breaks = true
ij_javascript_keep_simple_blocks_in_one_line = false
ij_javascript_keep_simple_methods_in_one_line = false
ij_javascript_line_comment_add_space = false
ij_javascript_line_comment_at_first_column = false
ij_javascript_method_brace_style = end_of_line
ij_javascript_method_call_chain_wrap = off
ij_javascript_method_parameters_new_line_after_left_paren = false
ij_javascript_method_parameters_right_paren_on_new_line = false
ij_javascript_method_parameters_wrap = off
ij_javascript_object_literal_wrap = on_every_item
ij_javascript_object_types_wrap = on_every_item
ij_javascript_parentheses_expression_new_line_after_left_paren = false
ij_javascript_parentheses_expression_right_paren_on_new_line = false
ij_javascript_place_assignment_sign_on_next_line = false
ij_javascript_prefer_as_type_cast = false
ij_javascript_prefer_explicit_types_function_expression_returns = false
ij_javascript_prefer_explicit_types_function_returns = false
ij_javascript_prefer_explicit_types_vars_fields = false
ij_javascript_prefer_parameters_wrap = false
ij_javascript_reformat_c_style_comments = false
ij_javascript_space_after_colon = true
ij_javascript_space_after_comma = true
ij_javascript_space_after_dots_in_rest_parameter = false
ij_javascript_space_after_generator_mult = true
ij_javascript_space_after_property_colon = true
ij_javascript_space_after_quest = true
ij_javascript_space_after_type_colon = true
ij_javascript_space_after_unary_not = true
ij_javascript_space_before_async_arrow_lparen = true
ij_javascript_space_before_catch_keyword = true
ij_javascript_space_before_catch_left_brace = true
ij_javascript_space_before_catch_parentheses = true
ij_javascript_space_before_class_lbrace = true
ij_javascript_space_before_class_left_brace = true
ij_javascript_space_before_colon = true
ij_javascript_space_before_comma = false
ij_javascript_space_before_do_left_brace = true
ij_javascript_space_before_else_keyword = true
ij_javascript_space_before_else_left_brace = true
ij_javascript_space_before_finally_keyword = true
ij_javascript_space_before_finally_left_brace = true
ij_javascript_space_before_for_left_brace = true
ij_javascript_space_before_for_parentheses = true
ij_javascript_space_before_for_semicolon = false
ij_javascript_space_before_function_left_parenth = true
ij_javascript_space_before_generator_mult = false
ij_javascript_space_before_if_left_brace = true
ij_javascript_space_before_if_parentheses = true
ij_javascript_space_before_method_call_parentheses = false
ij_javascript_space_before_method_left_brace = true
ij_javascript_space_before_method_parentheses = false
ij_javascript_space_before_property_colon = false
ij_javascript_space_before_quest = true
ij_javascript_space_before_switch_left_brace = true
ij_javascript_space_before_switch_parentheses = true
ij_javascript_space_before_try_left_brace = true
ij_javascript_space_before_type_colon = false
ij_javascript_space_before_unary_not = false
ij_javascript_space_before_while_keyword = true
ij_javascript_space_before_while_left_brace = true
ij_javascript_space_before_while_parentheses = true
ij_javascript_spaces_around_additive_operators = true
ij_javascript_spaces_around_arrow_function_operator = true
ij_javascript_spaces_around_assignment_operators = true
ij_javascript_spaces_around_bitwise_operators = true
ij_javascript_spaces_around_equality_operators = true
ij_javascript_spaces_around_logical_operators = true
ij_javascript_spaces_around_multiplicative_operators = true
ij_javascript_spaces_around_relational_operators = true
ij_javascript_spaces_around_shift_operators = true
ij_javascript_spaces_around_unary_operator = false
ij_javascript_spaces_within_array_initializer_brackets = false
ij_javascript_spaces_within_brackets = false
ij_javascript_spaces_within_catch_parentheses = false
ij_javascript_spaces_within_for_parentheses = false
ij_javascript_spaces_within_if_parentheses = false
ij_javascript_spaces_within_imports = true
ij_javascript_spaces_within_interpolation_expressions = true
ij_javascript_spaces_within_method_call_parentheses = false
ij_javascript_spaces_within_method_parentheses = false
ij_javascript_spaces_within_object_literal_braces = true
ij_javascript_spaces_within_object_type_braces = true
ij_javascript_spaces_within_parentheses = false
ij_javascript_spaces_within_switch_parentheses = false
ij_javascript_spaces_within_type_assertion = false
ij_javascript_spaces_within_union_types = true
ij_javascript_spaces_within_while_parentheses = false
ij_javascript_special_else_if_treatment = true
ij_javascript_ternary_operation_signs_on_next_line = false
ij_javascript_ternary_operation_wrap = off
ij_javascript_union_types_wrap = on_every_item
ij_javascript_use_chained_calls_group_indents = false
ij_javascript_use_double_quotes = false
ij_javascript_use_explicit_js_extension = auto
ij_javascript_use_path_mapping = always
ij_javascript_use_public_modifier = false
ij_javascript_use_semicolon_after_statement = false
ij_javascript_var_declaration_wrap = on_every_item
ij_javascript_while_brace_force = never
ij_javascript_while_on_new_line = false
ij_javascript_wrap_comments = false

[{*.ctp,*.hphp,*.inc,*.module,*.php,*.php4,*.php5,*.phtml}]
ij_continuation_indent_size = 4
ij_php_align_assignments = true
ij_php_align_class_constants = true
ij_php_align_enum_cases = true
ij_php_align_group_field_declarations = false
ij_php_align_inline_comments = false
ij_php_align_key_value_pairs = true
ij_php_align_match_arm_bodies = true
ij_php_align_multiline_array_initializer_expression = true
ij_php_align_multiline_binary_operation = false
ij_php_align_multiline_chained_methods = false
ij_php_align_multiline_extends_list = true
ij_php_align_multiline_for = false
ij_php_align_multiline_parameters = false
ij_php_align_multiline_parameters_in_calls = false
ij_php_align_multiline_ternary_operation = false
ij_php_align_named_arguments = true
ij_php_align_phpdoc_comments = false
ij_php_align_phpdoc_param_names = false
ij_php_anonymous_brace_style = end_of_line
ij_php_api_weight = 28
ij_php_array_initializer_new_line_after_left_brace = true
ij_php_array_initializer_right_brace_on_new_line = true
ij_php_array_initializer_wrap = on_every_item
ij_php_assignment_wrap = on_every_item
ij_php_attributes_wrap = split_into_lines
ij_php_author_weight = 3
ij_php_binary_operation_sign_on_next_line = true
ij_php_binary_operation_wrap = on_every_item
ij_php_blank_lines_after_class_header = 0
ij_php_blank_lines_after_function = 1
ij_php_blank_lines_after_imports = 1
ij_php_blank_lines_after_opening_tag = 1
ij_php_blank_lines_after_package = 1
ij_php_blank_lines_around_class = 1
ij_php_blank_lines_around_constants = 0
ij_php_blank_lines_around_enum_cases = 0
ij_php_blank_lines_around_field = 1
ij_php_blank_lines_around_method = 1
ij_php_blank_lines_before_class_end = 0
ij_php_blank_lines_before_imports = 1
ij_php_blank_lines_before_method_body = 0
ij_php_blank_lines_before_package = 1
ij_php_blank_lines_before_return_statement = 1
ij_php_blank_lines_between_imports = 1
ij_php_block_brace_style = end_of_line
ij_php_call_parameters_new_line_after_left_paren = true
ij_php_call_parameters_right_paren_on_new_line = true
ij_php_call_parameters_wrap = on_every_item
ij_php_catch_on_new_line = true
ij_php_category_weight = 28
ij_php_class_brace_style = next_line
ij_php_comma_after_last_argument = false
ij_php_comma_after_last_array_element = true
ij_php_comma_after_last_closure_use_var = false
ij_php_comma_after_last_match_arm = true
ij_php_comma_after_last_parameter = false
ij_php_concat_spaces = true
ij_php_copyright_weight = 4
ij_php_deprecated_weight = 0
ij_php_do_while_brace_force = always
ij_php_else_if_style = combine
ij_php_else_on_new_line = true
ij_php_example_weight = 28
ij_php_extends_keyword_wrap = normal
ij_php_extends_list_wrap = on_every_item
ij_php_fields_default_visibility = protected
ij_php_filesource_weight = 28
ij_php_finally_on_new_line = true
ij_php_for_brace_force = always
ij_php_for_statement_new_line_after_left_paren = false
ij_php_for_statement_right_paren_on_new_line = false
ij_php_for_statement_wrap = normal
ij_php_force_empty_methods_in_one_line = true
ij_php_force_short_declaration_array_style = true
ij_php_getters_setters_naming_style = camel_case
ij_php_getters_setters_order_style = getters_first
ij_php_global_weight = 28
ij_php_group_use_wrap = on_every_item
ij_php_if_brace_force = always
ij_php_if_lparen_on_next_line = true
ij_php_if_rparen_on_next_line = true
ij_php_ignore_weight = 28
ij_php_import_sorting = alphabetic
ij_php_indent_break_from_case = true
ij_php_indent_case_from_switch = true
ij_php_indent_code_in_php_tags = false
ij_php_internal_weight = 1
ij_php_keep_blank_lines_after_lbrace = 1
ij_php_keep_blank_lines_before_right_brace = 0
ij_php_keep_blank_lines_in_code = 1
ij_php_keep_blank_lines_in_declarations = 0
ij_php_keep_control_statement_in_one_line = false
ij_php_keep_first_column_comment = false
ij_php_keep_indents_on_empty_lines = false
ij_php_keep_line_breaks = true
ij_php_keep_rparen_and_lbrace_on_one_line = true
ij_php_keep_simple_classes_in_one_line = true
ij_php_keep_simple_methods_in_one_line = true
ij_php_lambda_brace_style = end_of_line
ij_php_license_weight = 5
ij_php_line_comment_add_space = false
ij_php_line_comment_at_first_column = false
ij_php_link_weight = 7
ij_php_lower_case_boolean_const = true
ij_php_lower_case_keywords = true
ij_php_lower_case_null_const = true
ij_php_method_brace_style = next_line
ij_php_method_call_chain_wrap = on_every_item
ij_php_method_parameters_new_line_after_left_paren = true
ij_php_method_parameters_right_paren_on_new_line = true
ij_php_method_parameters_wrap = on_every_item
ij_php_method_weight = 13
ij_php_modifier_list_wrap = false
ij_php_multiline_chained_calls_semicolon_on_new_line = false
ij_php_namespace_brace_style = 2
ij_php_new_line_after_php_opening_tag = true
ij_php_null_type_position = in_the_end
ij_php_package_weight = 28
ij_php_param_weight = 9
ij_php_parameters_attributes_wrap = split_into_lines
ij_php_parentheses_expression_new_line_after_left_paren = false
ij_php_parentheses_expression_right_paren_on_new_line = false
ij_php_phpdoc_blank_line_before_tags = true
ij_php_phpdoc_blank_lines_around_parameters = true
ij_php_phpdoc_keep_blank_lines = true
ij_php_phpdoc_param_spaces_between_name_and_description = 2
ij_php_phpdoc_param_spaces_between_tag_and_type = 2
ij_php_phpdoc_param_spaces_between_type_and_name = 2
ij_php_phpdoc_use_fqcn = true
ij_php_phpdoc_wrap_long_lines = true
ij_php_place_assignment_sign_on_next_line = false
ij_php_place_parens_for_constructor = 1
ij_php_property_read_weight = 11
ij_php_property_weight = 10
ij_php_property_write_weight = 12
ij_php_return_type_on_new_line = false
ij_php_return_weight = 15
ij_php_see_weight = 6
ij_php_since_weight = 2
ij_php_sort_phpdoc_elements = true
ij_php_space_after_colon = true
ij_php_space_after_colon_in_enum_backed_type = true
ij_php_space_after_colon_in_named_argument = true
ij_php_space_after_colon_in_return_type = true
ij_php_space_after_comma = true
ij_php_space_after_for_semicolon = true
ij_php_space_after_quest = true
ij_php_space_after_type_cast = true
ij_php_space_after_unary_not = true
ij_php_space_before_array_initializer_left_brace = true
ij_php_space_before_catch_keyword = true
ij_php_space_before_catch_left_brace = true
ij_php_space_before_catch_parentheses = true
ij_php_space_before_class_left_brace = true
ij_php_space_before_closure_left_parenthesis = true
ij_php_space_before_colon = true
ij_php_space_before_colon_in_enum_backed_type = false
ij_php_space_before_colon_in_named_argument = false
ij_php_space_before_colon_in_return_type = false
ij_php_space_before_comma = false
ij_php_space_before_do_left_brace = true
ij_php_space_before_else_keyword = true
ij_php_space_before_else_left_brace = true
ij_php_space_before_finally_keyword = true
ij_php_space_before_finally_left_brace = true
ij_php_space_before_for_left_brace = true
ij_php_space_before_for_parentheses = true
ij_php_space_before_for_semicolon = false
ij_php_space_before_if_left_brace = true
ij_php_space_before_if_parentheses = true
ij_php_space_before_method_call_parentheses = false
ij_php_space_before_method_left_brace = true
ij_php_space_before_method_parentheses = false
ij_php_space_before_quest = true
ij_php_space_before_short_closure_left_parenthesis = true
ij_php_space_before_switch_left_brace = true
ij_php_space_before_switch_parentheses = true
ij_php_space_before_try_left_brace = true
ij_php_space_before_unary_not = false
ij_php_space_before_while_keyword = true
ij_php_space_before_while_left_brace = true
ij_php_space_before_while_parentheses = true
ij_php_space_between_ternary_quest_and_colon = false
ij_php_spaces_around_additive_operators = true
ij_php_spaces_around_arrow = false
ij_php_spaces_around_assignment_in_declare = false
ij_php_spaces_around_assignment_operators = true
ij_php_spaces_around_bitwise_operators = true
ij_php_spaces_around_equality_operators = true
ij_php_spaces_around_logical_operators = true
ij_php_spaces_around_multiplicative_operators = true
ij_php_spaces_around_null_coalesce_operator = true
ij_php_spaces_around_pipe_in_union_type = false
ij_php_spaces_around_relational_operators = true
ij_php_spaces_around_shift_operators = true
ij_php_spaces_around_unary_operator = false
ij_php_spaces_around_var_within_brackets = false
ij_php_spaces_within_array_initializer_braces = false
ij_php_spaces_within_brackets = false
ij_php_spaces_within_catch_parentheses = false
ij_php_spaces_within_for_parentheses = false
ij_php_spaces_within_if_parentheses = false
ij_php_spaces_within_method_call_parentheses = false
ij_php_spaces_within_method_parentheses = false
ij_php_spaces_within_parentheses = false
ij_php_spaces_within_short_echo_tags = true
ij_php_spaces_within_switch_parentheses = false
ij_php_spaces_within_while_parentheses = false
ij_php_special_else_if_treatment = true
ij_php_subpackage_weight = 28
ij_php_ternary_operation_signs_on_next_line = true
ij_php_ternary_operation_wrap = on_every_item
ij_php_throws_weight = 14
ij_php_todo_weight = 28
ij_php_treat_multiline_arrays_and_lambdas_multiline = false
ij_php_unknown_tag_weight = 28
ij_php_upper_case_boolean_const = false
ij_php_upper_case_null_const = false
ij_php_uses_weight = 28
ij_php_var_weight = 28
ij_php_variable_naming_style = camel_case
ij_php_version_weight = 8
ij_php_while_brace_force = always
ij_php_while_on_new_line = true

[{*.har,*.jsb2,*.jsb3,*.json,.babelrc,.eslintrc,.prettierrc,.stylelintrc,bowerrc,composer.lock,jest.config}]
ij_continuation_indent_size = 4
ij_json_array_wrapping = on_every_item
ij_json_keep_blank_lines_in_code = 1
ij_json_keep_indents_on_empty_lines = false
ij_json_keep_line_breaks = true
ij_json_keep_trailing_comma = false
ij_json_object_wrapping = on_every_item
ij_json_property_alignment = do_not_align
ij_json_space_after_colon = true
ij_json_space_after_comma = true
ij_json_space_before_colon = false
ij_json_space_before_comma = false
ij_json_spaces_within_braces = true
ij_json_spaces_within_brackets = false
ij_json_wrap_long_lines = false

[{*.htm,*.html,*.sht,*.shtm,*.shtml}]
ij_continuation_indent_size = 4
ij_visual_guides = 160
ij_html_add_new_line_before_tags = body,div,p,form,h1,h2,h3
ij_html_align_attributes = false
ij_html_align_text = false
ij_html_attribute_wrap = on_every_item
ij_html_block_comment_add_space = false
ij_html_block_comment_at_first_column = true
ij_html_do_not_align_children_of_min_lines = 0
ij_html_do_not_break_if_inline_tags = title,h1,h2,h3,h4,h5,h6,p
ij_html_do_not_indent_children_of_tags = html,body,thead,tbody,tfoot
ij_html_enforce_quotes = true
ij_html_inline_tags = a,abbr,acronym,b,basefont,bdo,big,br,cite,cite,code,dfn,em,font,i,img,input,kbd,label,q,s,samp,select,small,span,strike,strong,sub,sup,textarea,tt,u,var
ij_html_keep_blank_lines = 2
ij_html_keep_indents_on_empty_lines = false
ij_html_keep_line_breaks = true
ij_html_keep_line_breaks_in_text = true
ij_html_keep_whitespaces = false
ij_html_keep_whitespaces_inside = span,pre,textarea
ij_html_line_comment_at_first_column = true
ij_html_new_line_after_last_attribute = never
ij_html_new_line_before_first_attribute = when_multiline
ij_html_quote_style = double
ij_html_remove_new_line_before_tags = br
ij_html_space_after_tag_name = false
ij_html_space_around_equality_in_attribute = false
ij_html_space_inside_empty_tag = true
ij_html_text_wrap = off

[{*.http,*.rest}]
indent_size = 0
ij_continuation_indent_size = 4
ij_http request_call_parameters_wrap = on_every_item

[{*.markdown,*.md}]
ij_markdown_force_one_space_after_blockquote_symbol = true
ij_markdown_force_one_space_after_header_symbol = true
ij_markdown_force_one_space_after_list_bullet = true
ij_markdown_force_one_space_between_words = true
ij_markdown_format_tables = true
ij_markdown_insert_quote_arrows_on_wrap = true
ij_markdown_keep_indents_on_empty_lines = false
ij_markdown_keep_line_breaks_inside_text_blocks = true
ij_markdown_max_lines_around_block_elements = 1
ij_markdown_max_lines_around_header = 1
ij_markdown_max_lines_between_paragraphs = 1
ij_markdown_min_lines_around_block_elements = 1
ij_markdown_min_lines_around_header = 2
ij_markdown_min_lines_between_paragraphs = 1
ij_markdown_wrap_text_if_long = true
ij_markdown_wrap_text_inside_blockquotes = true

[{*.yaml,*.yml}]
ij_yaml_align_values_properties = do_not_align
ij_yaml_autoinsert_sequence_marker = true
ij_yaml_block_mapping_on_new_line = false
ij_yaml_indent_sequence_value = true
ij_yaml_keep_indents_on_empty_lines = false
ij_yaml_keep_line_breaks = true
ij_yaml_sequence_on_new_line = true
ij_yaml_space_before_colon = false
ij_yaml_spaces_within_braces = true
ij_yaml_spaces_within_brackets = true


================================================
FILE: .gitattributes
================================================
* text=auto

.github/ export-ignore
docs/ export-ignore
tests/ export-ignore

*.stub linguist-language=php

.editorconfig export-ignore
.gitattributes export-ignore
.gitignore export-ignore

phpunit.xml export-ignore


================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.yml
================================================
name: Bug Report
description: Report a bug or other issue

body:
    -   type: markdown
        attributes:
            value: |
                Thanks for taking the time to fill out this bug report!

                ⚠️Review existing issues to see whether someone else has already reported your issue.

    -   type: textarea
        id: environment
        attributes:
            label: Environment
            description: |
                Tip: Use the `composer info dragon-code/laravel-deploy-operations` command to get information for Laravel Lang.
                Tip: Use the `php artisan --version` command to get information for Laravel Framework.
                Tip: Use the `php -v` command to get information for PHP.
            value: |
                - PHP Version:
                - Database Driver & Version:
                - Deploy Operations Version:
                - Laravel Version:
        validations:
            required: true

    -   type: textarea
        id: description
        attributes:
            label: Issue description
            description: |
                Be as specific and detailed as possible to help us triaging your issue. Screenshots and/or animations can be very useful in helping to understand the issue you're facing.

                Tip: You can attach images or log files by clicking this area to highlight it and then dragging files in.
                Tip: You can use https://www.screentogif.com to record animations and videos.
        validations:
            required: true

    -   type: textarea
        id: steps
        attributes:
            label: Steps to reproduce
            description: Take some time to try and reproduce the issue, then explain how to do so here.
        validations:
            required: true

    -   type: markdown
        attributes:
            value: |
                ❤️ The Dragon Code? Please consider supporting [`our collective`](https://boosty.to/dragon-code).


================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
contact_links:
    -   name: Laravel issue
        url: https://github.com/laravel/framework/issues
        about: 'If you have a question about your Laravel implementation, ask it in your Laravel project.'


================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.yml
================================================
name: Feature Proposal
description: Propose a new feature

body:
    -   type: textarea
        id: description
        attributes:
            label: Feature description
            description: |
                Think through your proposal and describe it clearly.

                Note that features are only added to the most recent version of Laravel Lang.
        validations:
            required: true

    -   type: markdown
        attributes:
            value: |
                ❤️ The Dragon Code? Please consider supporting [`our collective`](https://boosty.to/dragon-code).


================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
<!--
Pull requests without a descriptive title, thorough description, or tests will be closed.

In addition, please describe the benefit to end users; the reasons it does not break any existing features; how it makes building web applications easier, etc.
-->


================================================
FILE: .github/dependabot.yml
================================================
version: 2
updates:
    - package-ecosystem: github-actions
      directory: /
      schedule:
          interval: daily
      labels:
          - dependabot


================================================
FILE: .github/preview-updater.yml
================================================
image:
    parameters:
        title: 'Deploy Operations'


================================================
FILE: .github/workflows/code-style.yml
================================================
name: Code Style

on: [ push, pull_request ]

permissions: write-all

jobs:
    check:
        uses: TheDragonCode/.github/.github/workflows/code-style.yml@main


================================================
FILE: .github/workflows/docs.yml
================================================
name: Documentation

on:
    push:
    workflow_dispatch:

permissions:
    id-token: write
    pages: write

env:
    COMPOSER_TOKEN: ${{ secrets.COMPOSER_TOKEN }}
    ARTIFACT_DOCS: webHelpDO2-all.zip
    INSTANCE: docs/do
    DOMAIN_NAME: deploy-operations.dragon-code.pro
    BUILDER_VERSION: 2025.04.8412

jobs:
    build:
        name: Build application
        runs-on: ubuntu-latest

        steps:
            -   uses: actions/checkout@v6
                with:
                    fetch-depth: 0

            -   name: Build documentation
                uses: JetBrains/writerside-github-action@v4
                with:
                    instance: ${{ env.INSTANCE }}
                    artifact: ${{ env.ARTIFACT_DOCS }}
                    docker-version: ${{ env.BUILDER_VERSION }}

            -   name: Upload artifacts
                uses: actions/upload-artifact@v7
                with:
                    name: docs
                    path: |
                        artifacts/${{ env.ARTIFACT_DOCS }}
                        artifacts/report.json
                    retention-days: 7

    test:
        needs: build
        name: Testing
        runs-on: ubuntu-latest

        steps:
            -   name: Download docs artifact
                uses: actions/download-artifact@v8
                with:
                    name: docs
                    path: artifacts

            -   name: Test documentation
                uses: JetBrains/writerside-checker-action@v1
                with:
                    instance: ${{ env.INSTANCE }}

    robots:
        needs: build
        name: Generate robots.txt
        runs-on: ubuntu-latest
        if: github.ref == 'refs/heads/main'

        steps:
            -   name: Create robots.txt
                run: |
                    touch robots.txt
                    echo "User-Agent: *" >> robots.txt
                    echo "Disallow: " >> robots.txt
                    echo "Host: https://${{ env.DOMAIN_NAME }}" >> robots.txt
                    echo "Sitemap: https://${{ env.DOMAIN_NAME }}/sitemap.xml" >> robots.txt

            -   name: Upload artifacts
                uses: actions/upload-artifact@v7
                with:
                    name: robots
                    path: robots.txt
                    retention-days: 7

    deploy-pages:
        environment:
            name: deploy
            url: ${{ steps.deployment.outputs.page_url }}

        needs:
            - test
            - robots

        name: Deploy to pages
        runs-on: ubuntu-latest
        if: github.ref == 'refs/heads/main'

        steps:
            -   name: Download docs artifact
                uses: actions/download-artifact@v8
                with:
                    name: docs

            -   name: Download robots artifact
                uses: actions/download-artifact@v8
                with:
                    name: robots

            -   name: Unzip artifact
                run: unzip -O UTF-8 -qq '${{ env.ARTIFACT_DOCS }}' -d dir

            -   name: Move robots
                run: |
                    sudo mv robots.txt dir/robots.txt

            -   name: Setup Pages
                uses: actions/configure-pages@v6

            -   name: Upload artifact
                uses: actions/upload-pages-artifact@v5
                with:
                    path: dir

            -   name: Deploy to GitHub Pages
                id: deployment
                uses: actions/deploy-pages@v5


================================================
FILE: .github/workflows/license.yml
================================================
name: Update license

on:
  schedule:
    - cron: '0 3 1 1 *'
  workflow_dispatch:

jobs:
  Update:
    uses: TheDragonCode/.github/.github/workflows/license.yml@main

================================================
FILE: .github/workflows/preview.yml
================================================
name: Preview Updater

on:
    schedule:
        -   cron: '20 2 * * *'
    workflow_dispatch:

permissions:
    contents: write
    pull-requests: write

jobs:
    preview:
        uses: TheDragonCode/.github/.github/workflows/preview.yml@main

================================================
FILE: .github/workflows/release-drafter.yml
================================================
name: Release Drafter

on:
  push:
    branches:
      - main
  workflow_dispatch:

jobs:
    Update:
        uses: TheDragonCode/.github/.github/workflows/release-drafter.yml@main


================================================
FILE: .github/workflows/tests.yml
================================================
name: Tests

on: [ push, pull_request ]

jobs:
    build:
        runs-on: ubuntu-latest

        strategy:
            fail-fast: true
            matrix:
                php: [ "8.2", "8.3", "8.4", "8.5" ]
                laravel: [ "11.0", "12.0", "13.0" ]
                exclude:
                    - laravel: "13.0"
                      php: "8.2"

        name: PHP ${{ matrix.php }}, Laravel ${{ matrix.laravel }}

        steps:
            -   name: Checkout code
                uses: actions/checkout@v6

            -   name: Setup PHP
                uses: shivammathur/setup-php@v2
                with:
                    php-version: ${{ matrix.php }}
                    extensions: curl, mbstring, zip, pcntl, pdo, pdo_sqlite, iconv
                    coverage: xdebug

            -   name: Install dependencies
                run: composer require --dev laravel/framework:^${{ matrix.laravel }}

            -   name: Execute tests
                run: sudo vendor/bin/phpunit


================================================
FILE: .gitignore
================================================
.idea/
_site/
build/
node_modules/
tmp/
vendor/

.cache
.DS_Store
.env
.php_cs.cache
.phpintel
.temp

*.bak
*.cache
*.clover
*.orig

composer.lock
package-lock.json


================================================
FILE: LICENSE
================================================
MIT License

Copyright (c) 2020-2026 Andrey Helldar

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: README.md
================================================
# 🚀 Laravel Deploy Operations

<picture>
    <source media="(prefers-color-scheme: dark)" srcset="https://banners.beyondco.de/Laravel%20Deploy%20Operations.png?pattern=topography&style=style_2&fontSize=100px&md=1&showWatermark=1&theme=dark&packageManager=composer+require&packageName=dragon-code%2Flaravel-deploy-operations&description=Performing+any+actions+during+the+deployment+process&images=https%3A%2F%2Flaravel.com%2Fimg%2Flogomark.min.svg">
    <img src="https://banners.beyondco.de/Deploy%20Operations.png?pattern=topography&style=style_2&fontSize=100px&md=1&showWatermark=1&theme=light&packageManager=composer+require&packageName=dragon-code%2Flaravel-deploy-operations&description=Performing+any+actions+during+the+deployment+process&images=https%3A%2F%2Flaravel.com%2Fimg%2Flogomark.min.svg" alt="Laravel Deploy Operations">
</picture>

[![Stable Version][badge_stable]][link_packagist]
[![Total Downloads][badge_downloads]][link_packagist]
[![Github Workflow Status][badge_build]][link_build]
[![License][badge_license]][link_license]

⚡ **Performing any actions during the deployment process**

Create specific classes for a one-time or more-time usage, that can be executed automatically after each deployment.
Perfect for seeding or updating some data instantly after some database changes, feature updates, or perform any
actions.

This package is for you if...

- you regularly need to update specific data after you deploy new code
- you often perform jobs after deployment
- you sometimes forget to execute that one specific job and stuff gets crazy
- your code gets cluttered with jobs that are not being used anymore
- your co-workers always need to be reminded to execute that one job after some database changes
- you often seed or process data in a migration file (which is a big no-no!)

## Installation

To get the latest version of **Deploy Operations**, simply require the project using [Composer](https://getcomposer.org):

```Bash
composer require dragon-code/laravel-deploy-operations
```

## Documentation

📚 [Check out the full documentation to learn everything that Laravel Deploy Operations has to offer.][link_website]

## Basic Usage

Create your first operation using `php artisan make:operation` console command and define the actions it should
perform.

```php
use App\Models\Article;
use DragonCode\LaravelDeployOperations\Operation;

return new class extends Operation {
    public function __invoke(): void
    {
        Article::query()
            ->lazyById(chunkSize: 100, column: 'id')
            ->each->update(['is_active' => true]);

        // and/or any actions...
    }
};
```

Next, you can run the console command to start operations:

```Bash
php artisan operations
```

## Downloads Stats

This project has gone the way of several names, and here are the number of downloads of each of them:

- ![](https://img.shields.io/packagist/dt/dragon-code/laravel-deploy-operations?style=flat-square&label=dragon-code%2Flaravel-deploy-operations)
- ![](https://img.shields.io/packagist/dt/dragon-code/laravel-actions?style=flat-square&label=dragon-code%2Flaravel-actions)
- ![](https://img.shields.io/packagist/dt/dragon-code/laravel-migration-actions?style=flat-square&label=dragon-code%2Flaravel-migration-actions)
- ![](https://img.shields.io/packagist/dt/andrey-helldar/laravel-actions?style=flat-square&label=andrey-helldar%2Flaravel-actions)

## License

This package is licensed under the [MIT License](LICENSE).


[badge_build]:          https://img.shields.io/github/actions/workflow/status/TheDragonCode/laravel-deploy-operations/tests.yml?style=flat-square

[badge_downloads]:      https://img.shields.io/packagist/dt/dragon-code/laravel-deploy-operations.svg?style=flat-square

[badge_license]:        https://img.shields.io/packagist/l/dragon-code/laravel-deploy-operations.svg?style=flat-square

[badge_stable]:         https://img.shields.io/github/v/release/TheDragonCode/laravel-deploy-operations?label=packagist&style=flat-square

[link_build]:           https://github.com/TheDragonCode/laravel-deploy-operations/actions

[link_license]:         LICENSE

[link_packagist]:       https://packagist.org/packages/dragon-code/laravel-deploy-operations

[link_website]:         https://deploy-operations.dragon-code.pro


================================================
FILE: biome.json
================================================
{
    "$schema": "./node_modules/@biomejs/biome/configuration_schema.json",
    "vcs": {
        "enabled": false,
        "clientKind": "git",
        "useIgnoreFile": false
    },
    "files": {
        "ignoreUnknown": false,
        "includes": [
            "**",
            "!node_modules",
            "!vendor",
            "!composer.json",
            "!composer.lock",
            "!package.json",
            "!package-lock.json",
            "!**/analytics.*",
            "!**/metrics.*",
            "!coverage",
            "!dist",
            "!build",
            "!public"
        ]
    },
    "formatter": {
        "enabled": true,
        "indentStyle": "space",
        "indentWidth": 4
    },
    "linter": {
        "enabled": true,
        "rules": {
            "recommended": true
        }
    },
    "javascript": {
        "formatter": {
            "quoteStyle": "double"
        }
    },
    "json": {
        "formatter": {
            "enabled": true,
            "bracketSpacing": true,
            "expand": "always"
        },
        "parser": {
            "allowComments": true
        }
    },
    "assist": {
        "enabled": true,
        "actions": {
            "source": {
                "organizeImports": "on"
            }
        }
    }
}


================================================
FILE: composer.json
================================================
{
    "name": "dragon-code/laravel-deploy-operations",
    "description": "Performing any actions during the deployment process",
    "license": "MIT",
    "type": "library",
    "keywords": [
        "laravel",
        "deploy",
        "deployment",
        "operations",
        "action",
        "actions",
        "migration",
        "migrations",
        "dragon-code",
        "dragon",
        "andrey-helldar"
    ],
    "authors": [
        {
            "name": "Andrey Helldar",
            "email": "helldar@dragon-code.pro",
            "homepage": "https://dragon-code.pro"
        }
    ],
    "support": {
        "issues": "https://github.com/TheDragonCode/laravel-deploy-operations/issues",
        "source": "https://github.com/TheDragonCode/laravel-deploy-operations"
    },
    "funding": [
        {
            "type": "boosty",
            "url": "https://boosty.to/dragon-code"
        },
        {
            "type": "yoomoney",
            "url": "https://yoomoney.ru/to/410012608840929"
        }
    ],
    "require": {
        "php": "^8.2",
        "composer-runtime-api": "^2.2",
        "dragon-code/support": "^6.6",
        "laravel/framework": "^11.0 || ^12.0 || ^13.0",
        "laravel/prompts": ">=0.1",
        "spatie/laravel-data": "^4.14"
    },
    "require-dev": {
        "mockery/mockery": "^1.3.1",
        "nesbot/carbon": "^2.62.1 || ^3.0",
        "orchestra/testbench": "^9.0 || ^10.0 || ^11.0",
        "phpunit/phpunit": "^11.0 || ^12.0"
    },
    "conflict": {
        "andrey-helldar/laravel-actions": "*",
        "dragon-code/laravel-actions": "*",
        "dragon-code/laravel-migration-actions": "*"
    },
    "suggest": {
        "dragon-code/laravel-data-dumper": "Required if you want to save the execution state using the `schema:dump` console command"
    },
    "minimum-stability": "stable",
    "prefer-stable": true,
    "autoload": {
        "psr-4": {
            "DragonCode\\LaravelDeployOperations\\": "src/"
        },
        "files": [
            "src/helpers.php"
        ]
    },
    "autoload-dev": {
        "psr-4": {
            "Tests\\": "tests/"
        }
    },
    "config": {
        "allow-plugins": {
            "ergebnis/composer-normalize": true,
            "laravel/pint": true,
            "symfony/thanks": true
        },
        "preferred-install": "dist",
        "sort-packages": true
    },
    "extra": {
        "laravel": {
            "providers": [
                "DragonCode\\LaravelDeployOperations\\ServiceProvider"
            ]
        }
    }
}


================================================
FILE: config/deploy-operations.php
================================================
<?php

declare(strict_types=1);

return [
    /*
    |--------------------------------------------------------------------------
    | Operations Repository Connection
    |--------------------------------------------------------------------------
    |
    | This option controls the database connection used to store the table
    | of executed operations.
    |
    */

    'connection' => env('DB_CONNECTION'),

    /*
    |--------------------------------------------------------------------------
    | Operations Repository Table
    |--------------------------------------------------------------------------
    |
    | This table keeps track of all the operations that have already run for
    | your application. Using this information, we can determine which of
    | the operations on disk haven't actually been run in the database.
    |
    */

    'table' => 'operations',

    /*
    |--------------------------------------------------------------------------
    | Database Transactions
    |--------------------------------------------------------------------------
    |
    | This setting defines the rules for working with database transactions.
    | This specifies a common value for all operations, but you can override this
    | value directly in the class of the operation itself.
    */

    'transactions' => [
        // Determines whether the use of database transactions is enabled.

        'enabled' => false,

        // The number of attempts to execute a request within a transaction before throwing an error.

        'attempts' => 1,
    ],

    /*
    |--------------------------------------------------------------------------
    | Operations Path
    |--------------------------------------------------------------------------
    |
    | This option defines the path to the operation directory.
    |
    */

    'path' => base_path('operations'),

    /*
    |--------------------------------------------------------------------------
    | Path Exclusion
    |--------------------------------------------------------------------------
    |
    | This option determines which directory and/or file paths should be
    | excluded when processing files.
    |
    | Valid values: array, string or null
    |
    | Specify `null` to disable.
    |
    | For example,
    |    ['foo', 'bar']
    |    'foo'
    |    null
    |
    */

    'exclude' => null,

    /*
    |--------------------------------------------------------------------------
    | Asynchronous settings
    |--------------------------------------------------------------------------
    |
    | Defines whether the operation will run synchronously or asynchronously.
    |
    | When this option is activated, each operation will be performed through jobs.
    */

    'async' => false,

    /*
    |--------------------------------------------------------------------------
    | Queue
    |--------------------------------------------------------------------------
    |
    | This option specifies the queue settings that will process
    | asynchronous operations.
    |
    */

    'queue' => [
        /*
        |--------------------------------------------------------------------------
        | Queue Connection
        |--------------------------------------------------------------------------
        |
        | This parameter defines the default connection.
        |
        */

        'connection' => env('DEPLOY_OPERATIONS_QUEUE_CONNECTION', env('QUEUE_CONNECTION', 'sync')),

        /*
        |--------------------------------------------------------------------------
        | Queue Name
        |--------------------------------------------------------------------------
        |
        | This parameter specifies the name of the queue to which asynchronous
        | jobs will be sent.
        |
        */

        'name' => env('DEPLOY_OPERATIONS_QUEUE_NAME'),
    ],

    /*
    |--------------------------------------------------------------------------
    | Show
    |--------------------------------------------------------------------------
    |
    | This option determines the display settings for various information messages.
    |
    */

    'show' => [
        /*
        |--------------------------------------------------------------------------
        | Full Path
        |--------------------------------------------------------------------------
        |
        | This parameter determines how exactly the link to the created file should
        | be displayed - the full path to the file or a relative one.
        |
        */

        'full_path' => (bool) env('DEPLOY_OPERATIONS_SHOW_FULL_PATH', false),
    ],
];


================================================
FILE: database/migrations/2022_08_18_180137_change_migration_actions_table.php
================================================
<?php

declare(strict_types=1);

use DragonCode\LaravelDeployOperations\Data\Config\ConfigData;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration {
    public function up(): void
    {
        if ($this->hasTable()) {
            Schema::table($this->table(), function (Blueprint $table) {
                if ($this->hasColumn('migration') && $this->doesntHaveColumn('action')) {
                    $table->renameColumn('migration', 'action');
                }

                $table->unsignedInteger('batch')->change();
            });
        }
    }

    public function down(): void
    {
        if ($this->hasTable()) {
            Schema::table($this->table(), function (Blueprint $table) {
                $table->renameColumn('action', 'migration');

                $table->integer('batch')->change();
            });
        }
    }

    protected function hasTable(): bool
    {
        return Schema::hasTable($this->table());
    }

    protected function hasColumn(string $column): bool
    {
        return Schema::hasColumn($this->table(), $column);
    }

    protected function doesntHaveColumn(string $column): bool
    {
        return ! $this->hasColumn($column);
    }

    protected function table(): string
    {
        return app(ConfigData::class)->table;
    }
};


================================================
FILE: database/migrations/2023_01_21_172923_rename_migrations_actions_table_to_actions.php
================================================
<?php

declare(strict_types=1);

use DragonCode\LaravelDeployOperations\Data\Config\ConfigData;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\Schema;

return new class extends Migration {
    public function up(): void
    {
        if (Schema::hasTable('migration_actions') && $this->doesntSame('migration_actions', $this->table())) {
            $this->validateTable($this->table());

            Schema::rename('migration_actions', $this->table());
        }
    }

    public function down(): void
    {
        if (Schema::hasTable($this->table()) && $this->doesntSame('migration_actions', $this->table())) {
            $this->validateTable('migration_actions');

            Schema::rename($this->table(), 'migration_actions');
        }
    }

    protected function validateTable(string $name): void
    {
        if (Schema::hasTable($name)) {
            throw new RuntimeException(sprintf('A table named [%s] already exists. Change the table name settings in the [%s] configuration file.', $name, 'config/actions.php'));
        }
    }

    protected function doesntSame(string $first, string $second): bool
    {
        return $first !== $second;
    }

    protected function table(): string
    {
        return app(ConfigData::class)->table;
    }
};


================================================
FILE: database/migrations/2024_05_21_112438_rename_actions_table_to_operations.php
================================================
<?php

declare(strict_types=1);

use DragonCode\LaravelDeployOperations\Data\Config\ConfigData;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\Schema;

return new class extends Migration {
    public function up(): void
    {
        if (Schema::hasTable('actions') && $this->doesntSame('actions', $this->table())) {
            $this->validateTable($this->table());

            Schema::rename('actions', $this->table());
        }
    }

    public function down(): void
    {
        if (Schema::hasTable($this->table()) && $this->doesntSame('actions', $this->table())) {
            $this->validateTable('actions');

            Schema::rename($this->table(), 'actions');
        }
    }

    protected function validateTable(string $name): void
    {
        if (Schema::hasTable($name)) {
            throw new RuntimeException(sprintf('A table named [%s] already exists. Change the table name settings in the [%s] configuration file.', $name, 'config/deploy-operations.php'));
        }
    }

    protected function doesntSame(string $first, string $second): bool
    {
        return $first !== $second;
    }

    protected function table(): string
    {
        return app(ConfigData::class)->table;
    }
};


================================================
FILE: database/migrations/2024_05_21_114318_rename_column_in_operations_table.php
================================================
<?php

declare(strict_types=1);

use DragonCode\LaravelDeployOperations\Data\Config\ConfigData;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration {
    public function up(): void
    {
        $this->rename('action', 'operation');
    }

    public function down(): void
    {
        $this->rename('operation', 'action');
    }

    protected function rename(string $from, string $to): void
    {
        if (Schema::hasColumn($this->table(), $from)) {
            Schema::table($this->table(), fn (Blueprint $table) => $table->renameColumn($from, $to));
        }
    }

    protected function table(): string
    {
        return app(ConfigData::class)->table;
    }
};


================================================
FILE: docs/cfg/buildprofiles.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE buildprofiles SYSTEM "https://resources.jetbrains.com/writerside/1.0/build-profiles.dtd">
<buildprofiles xsi:noNamespaceSchemaLocation="https://resources.jetbrains.com/writerside/1.0/build-profiles.xsd"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    <variables>
        <generate-canonicals>true</generate-canonicals>
        <locale-code>en_US</locale-code>
        <header-logo>logo.svg</header-logo>
        <!-- <og-image> -->
        <!--     https://raw.githubusercontent.com/Laravel-Lang/docs/main/docs/images/social-logo.png -->
        <!-- </og-image> -->
        <web-root>https://deploy-operations.dragon-code.pro</web-root>
        <enable-contribution>true</enable-contribution>
        <code-soft-wrap>true</code-soft-wrap>
        <contribute-url>
            https://github.com/TheDragonCode/laravel-deploy-operations/edit/main/docs/
        </contribute-url>
        <custom-favicons>
            logo.svg,logo.svg,logo.svg,logo.svg
        </custom-favicons>
        <!-- <analytics-head-script-file> -->
        <!--     analytics.html -->
        <!-- </analytics-head-script-file> -->
        <versions-switcher>
            https://raw.githubusercontent.com/TheDragonCode/laravel-deploy-operations/refs/heads/main/docs/versions.json
        </versions-switcher>
        <content-max-width>
            1280
        </content-max-width>
    </variables>
    <build-profile instance="do">
        <variables>
            <product-web-url>https://deploy-operations.dragon-code.pro/</product-web-url>
            <noindex-content>false</noindex-content>
            <!-- <og-image> -->
            <!--     https://raw.githubusercontent.com/TheDragonCode/laravel-deploy-operations/main/docs/images/social-logo.png -->
            <!-- </og-image> -->
        </variables>
    </build-profile>
    <sitemap priority="0.5" change-frequency="weekly" />
    <footer>
        <social type="github" href="https://github.com/TheDragonCode">
            GitHub
        </social>
        <link href="https://boosty.to/dragon-code">
            Boosty
        </link>
        <link href="https://github.com/TheDragonCode/laravel-deploy-operations/issues">
            Issues
        </link>
    </footer>
</buildprofiles>


================================================
FILE: docs/do.tree
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE instance-profile
        SYSTEM "https://resources.jetbrains.com/writerside/1.0/product-profile.dtd">

<instance-profile id="do"
                  name="Laravel Deploy Operations"
                  start-page="introduction.topic">

    <toc-element toc-title="Prologue">
        <toc-element topic="introduction.topic" />
        <toc-element toc-title="Upgrade Guide" sort-children="descending">
            <toc-element topic="upgrade-7.topic" toc-title="Upgrade to 7.x" />
            <toc-element topic="upgrade-6.topic" toc-title="Upgrade to 6.x" />
            <toc-element topic="upgrade-5.topic" toc-title="Upgrade to 5.x" />
            <toc-element topic="upgrade-4.topic" toc-title="Upgrade to 4.x" />
            <toc-element topic="upgrade-3.topic" toc-title="Upgrade to 3.x" />
        </toc-element>
    </toc-element>
    <toc-element toc-title="Getting Started">
        <toc-element topic="installation.topic" />
        <toc-element topic="usage.topic" />
    </toc-element>
    <toc-element toc-title="Guide">
        <toc-element topic="running-operations.topic" />
        <toc-element topic="creating-operations.topic" />
        <toc-element topic="rolling-back-operations.topic" />
        <toc-element topic="operations-status.topic" />
        <toc-element topic="customize-stub.topic" />
    </toc-element>
    <toc-element toc-title="Helpers">
        <toc-element topic="artisan-commands.topic" />
        <toc-element topic="operation-helper.topic" />
        <toc-element topic="events.topic" />
        <toc-element topic="execution-status.topic" />
    </toc-element>
    <toc-element toc-title="Extras">
        <toc-element topic="database-data-dumper.topic" />
    </toc-element>
</instance-profile>


================================================
FILE: docs/docs_libraries.tree
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE instance-profile
        SYSTEM "https://resources.jetbrains.com/writerside/1.0/product-profile.dtd">

<instance-profile id="docs_libraries"
                  name="docs_libraries" is-library="true" start-page="snippets_composer.topic">

    <toc-element topic="snippets_composer.topic" />
</instance-profile>


================================================
FILE: docs/snippets/actual_file_names.sh
================================================
# actual file names
2022_10_14_000001_test1      # 1
2022_10_14_000004_test4      # 4
bar/2022_10_14_000003_test3  # 3
foo/2022_10_14_000002_test2  # 2


================================================
FILE: docs/snippets/ask.sh
================================================
php artisan make:operation
  Creating an operation 

 ┌ What should the operation be named? ─────────────────────────┐
 │ E.g. activate articles                                       │
 └──────────────────────────────────────────────────────────────┘
  Press Enter to autodetect


================================================
FILE: docs/snippets/async.php
================================================
<?php

declare(strict_types=1);

use DragonCode\LaravelDeployOperations\Operation;

return new class extends Operation {
    public function __invoke()
    {
        // some
    }

    public function shouldBeAsync(): bool
    {
        return true;
    }
};


================================================
FILE: docs/snippets/before_after.sh
================================================
php artisan operations --before

# some commands

php artisan operations


================================================
FILE: docs/snippets/deployer.php
================================================
<?php

declare(strict_types=1);

task('deploy', [
    // ...
    'artisan:migrate',
    'artisan:operation --before', // here
    'deploy:publish',
    'php-fpm:reload',
    'artisan:queue:restart',
    'artisan:operations', // here
]);


================================================
FILE: docs/snippets/di_invoke.php
================================================
<?php

declare(strict_types=1);

use DragonCode\LaravelDeployOperations\Operation;
use Tests\Concerns\Some;

return new class extends Operation {
    public function __invoke(Some $some): void
    {
        $value = $some->get('qwerty');
    }
};


================================================
FILE: docs/snippets/di_up_down.php
================================================
<?php

declare(strict_types=1);

use DragonCode\LaravelDeployOperations\Operation;
use Tests\Concerns\Some;

return new class extends Operation {
    public function up(Some $some): void
    {
        $value = $some->get('qwerty');
    }

    public function down(Some $some): void
    {
        $value = $some->get('qwerty');
    }
};


================================================
FILE: docs/snippets/empty.php
================================================
<?php

declare(strict_types=1);

use DragonCode\LaravelDeployOperations\Operation;

return new class extends Operation {
    public function __invoke(): void
    {
        // some code
    }
};


================================================
FILE: docs/snippets/event_service_provider.php
================================================
<?php

declare(strict_types=1);

namespace App\Providers;

use App\Listeners\SomeOperationsListener;
use DragonCode\LaravelDeployOperations\Events\DeployOperationEnded;
use DragonCode\LaravelDeployOperations\Events\DeployOperationFailed;
use DragonCode\LaravelDeployOperations\Events\DeployOperationStarted;
use DragonCode\LaravelDeployOperations\Events\NoPendingDeployOperations;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;

class EventServiceProvider extends ServiceProvider
{
    protected $listen = [
        DeployOperationStarted::class    => [SomeOperationsListener::class],
        DeployOperationEnded::class      => [SomeOperationsListener::class],
        DeployOperationFailed::class     => [SomeOperationsListener::class],
        NoPendingDeployOperations::class => [SomeOperationsListener::class],
    ];
}


================================================
FILE: docs/snippets/events_list.php
================================================
<?php

declare(strict_types=1);

DragonCode\LaravelDeployOperations\Events\DeployOperationStarted::class;
DragonCode\LaravelDeployOperations\Events\DeployOperationEnded::class;
DragonCode\LaravelDeployOperations\Events\DeployOperationFailed::class;
DragonCode\LaravelDeployOperations\Events\NoPendingDeployOperations::class;


================================================
FILE: docs/snippets/example.php
================================================
<?php

declare(strict_types=1);

use App\Models\Article;
use DragonCode\LaravelDeployOperations\Operation;

return new class extends Operation {
    public function __invoke(): void
    {
        Article::query()
            ->lazyById(chunkSize: 100, column: 'id')
            ->each->update(['is_active' => true]);
        // and/or any actions...
    }
};


================================================
FILE: docs/snippets/example_artisan.php
================================================
<?php

declare(strict_types=1);

use DragonCode\LaravelDeployOperations\Operation;

return new class extends Operation {
    public function __invoke(): void
    {
        $this->artisan('some_command', [
            // parameters
        ]);
    }
};


================================================
FILE: docs/snippets/except_environment.php
================================================
<?php

declare(strict_types=1);

use DragonCode\LaravelDeployOperations\Operation;

return new class extends Operation {
    public function __invoke()
    {
        // some
    }

    public function shouldRun(): bool
    {
        return ! in_array(app()->environment(), ['testing', 'staging'], true);
    }
};


================================================
FILE: docs/snippets/failed_status.php
================================================
<?php

declare(strict_types=1);

use DragonCode\LaravelDeployOperations\Operation;
use Illuminate\Support\Facade\Log;

return new class extends Operation {
    public function up(): void
    {
        throw new Exeption;
    }

    public function down(): void
    {
        throw new Exeption;
    }

    public function success(): void
    {
        Log::info('success');
    }

    public function failed(): void
    {
        Log::info('failed');
    }
};


================================================
FILE: docs/snippets/invokable_status.php
================================================
<?php

declare(strict_types=1);

use DragonCode\LaravelDeployOperations\Operation;
use Illuminate\Support\Facade\Log;

return new class extends Operation {
    public function __invoke(): void
    {
        // some
    }

    public function success(): void
    {
        Log::info('success');
    }

    public function failed(): void
    {
        Log::info('failed');
    }
};


================================================
FILE: docs/snippets/invoke_and_down.php
================================================
<?php

declare(strict_types=1);

use DragonCode\LaravelDeployOperations\Operation;

return new class extends Operation {
    // called when `php artisan operations` running
    public function __invoke(): void {}

    // doesn't call when `php artisan migrate:rollback` running
    // and any other commands to revert the operation.
    public function down(): void {}
};


================================================
FILE: docs/snippets/listen_events.php
================================================
<?php

declare(strict_types=1);

use App\Listeners\SomeOperationsListener;
use DragonCode\LaravelDeployOperations\Events\DeployOperationEnded;
use DragonCode\LaravelDeployOperations\Events\DeployOperationFailed;
use DragonCode\LaravelDeployOperations\Events\DeployOperationStarted;
use DragonCode\LaravelDeployOperations\Events\NoPendingDeployOperations;
use Illuminate\Support\Facades\Event;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    public function boot(): void
    {
        Event::listen([
            DeployOperationStarted::class,
            DeployOperationEnded::class,
            DeployOperationFailed::class,
            NoPendingDeployOperations::class,
        ], SomeOperationsListener::class);
    }
}


================================================
FILE: docs/snippets/make_auto.sh
================================================
php artisan make:operation

### When the git repository is found (`base_path('.git')` directory is exists) and HEAD branch name is 'qwerty'
# 2022_10_11_225116_qwerty.php
# 2022_10_11_225118_qwerty.php
# 2022_10_11_225227_qwerty.php

### When the git repository is not found (`base_path('.git')` directory doesn't exists).
# 2022_10_11_225116_auto.php
# 2022_10_11_225118_auto.php
# 2022_10_11_225227_auto.php


================================================
FILE: docs/snippets/need_before.php
================================================
<?php

declare(strict_types=1);

use DragonCode\LaravelDeployOperations\Operation;

return new class extends Operation {
    public function __invoke()
    {
        // some
    }

    public function needBefore(): bool
    {
        return false;
    }
};


================================================
FILE: docs/snippets/nested.sh
================================================
php artisan make:operation Foo/Bar/QweRty
php artisan make:operation Foo/Bar/QweRty.php

php artisan make:operation Foo\Bar\QweRty
php artisan make:operation Foo\Bar\QweRty.php

php artisan make:operation foo\bar\QweRty
php artisan make:operation foo\bar\QweRty.php


================================================
FILE: docs/snippets/nested_example.sh
================================================
php artisan make:operation foo\bar\QweRty
# operations/foo/bar/2022_10_11_225734_qwe_rty.php

php artisan make:operation foo\bar\QweRty.php
# operations/foo/bar/2022_10_11_225734_qwe_rty.php

php artisan make:operation foo/bar/QweRty
# operations/foo/bar/2022_10_11_225734_qwe_rty.php

php artisan make:operation foo/bar/QweRty.php
# operations/foo/bar/2022_10_11_225734_qwe_rty.php


================================================
FILE: docs/snippets/on_environment.php
================================================
<?php

declare(strict_types=1);

use DragonCode\LaravelDeployOperations\Operation;

return new class extends Operation {
    public function __invoke()
    {
        // some
    }

    public function shouldRun(): bool
    {
        return app()->isProduction();
    }
};


================================================
FILE: docs/snippets/on_environments.php
================================================
<?php

declare(strict_types=1);

use DragonCode\LaravelDeployOperations\Operation;

return new class extends Operation {
    public function __invoke()
    {
        // some
    }

    public function shouldRun(): bool
    {
        return in_array(app()->environment(), ['testing', 'staging'], true);
    }
};


================================================
FILE: docs/snippets/once_method.php
================================================
<?php

declare(strict_types=1);

use DragonCode\LaravelDeployOperations\Operation;

return new class extends Operation {
    public function __invoke()
    {
        // some
    }

    public function shouldOnce(): bool
    {
        return false;
    }
};


================================================
FILE: docs/snippets/operation_helper_all.php
================================================
<?php

declare(strict_types=1);

use DragonCode\LaravelDeployOperations\Helpers\OperationHelper;

OperationHelper::run();


================================================
FILE: docs/snippets/operation_helper_directory.php
================================================
<?php

declare(strict_types=1);

use DragonCode\LaravelDeployOperations\Helpers\OperationHelper;

OperationHelper::run('foo');

// also you can use a real path
OperationHelper::run(__DIR__ . '/../foo', realpath: true);


================================================
FILE: docs/snippets/operation_helper_file.php
================================================
<?php

declare(strict_types=1);

use DragonCode\LaravelDeployOperations\Helpers\OperationHelper;

OperationHelper::run('foo/2022_10_14_000002_test2');
// or
OperationHelper::run('foo/2022_10_14_000002_test2.php');

// also you can use a real path
OperationHelper::run(__DIR__ . '/../foo/2022_10_14_000002_test2', realpath: true);
// or
OperationHelper::run(__DIR__ . '/../foo/2022_10_14_000002_test2.php', realpath: true);


================================================
FILE: docs/snippets/operations_helper.sh
================================================
2022_10_14_000001_test1
foo/2022_10_14_000002_test2
foo/2022_10_14_000003_test3
bar/2022_10_14_000004_test4
2022_10_14_000004_test5


================================================
FILE: docs/snippets/operations_status.sh
================================================
2025_04_02_100000_some ............................................ [1] Ran
2025_04_02_100001_some ............................................ [1] Ran
2025_04_02_100002_some ............................................ [2] Ran
2025_04_02_100003_some............................................. [3] Ran
2025_04_02_100004_some............................................. [3] Ran
2025_04_02_100005_some............................................. Pending
2025_04_02_100006_some............................................. Pending


================================================
FILE: docs/snippets/order_running_operations.sh
================================================
# order of running operations at startup
2022_10_14_000001_test1      # 1
foo/2022_10_14_000002_test2  # 2
bar/2022_10_14_000003_test3  # 3
2022_10_14_000004_test4      # 4


================================================
FILE: docs/snippets/rollback.sh
================================================
php artisan operations:rollback
# operation                 batch
# 2022_10_12_021837_some    1
# 2022_10_12_021838_some    2
# 2022_10_12_021839_some    2
# 2022_10_12_021840_some    3  // will be canceled
# 2022_10_12_021841_some    3  // will be canceled

php artisan operations:rollback --step=1
# operation                 batch
# 2022_10_12_021837_some    1
# 2022_10_12_021838_some    2
# 2022_10_12_021839_some    2
# 2022_10_12_021840_some    3  // will be canceled
# 2022_10_12_021841_some    3  // will be canceled

php artisan operations:rollback --step=2
# operation                 batch
# 2022_10_12_021837_some    1
# 2022_10_12_021838_some    2  // will be canceled
# 2022_10_12_021839_some    2  // will be canceled
# 2022_10_12_021840_some    3  // will be canceled
# 2022_10_12_021841_some    3  // will be canceled


================================================
FILE: docs/snippets/some_listener.php
================================================
<?php

declare(strict_types=1);

namespace App\Listeners;

use DragonCode\LaravelDeployOperations\Events\BaseEvent;

class SomeOperationsListener
{
    public function handle(BaseEvent $event): void
    {
        $method   = $event->method; // MethodEnum object value
        $isBefore = $event->before; // boolean
    }
}


================================================
FILE: docs/snippets/success_status.php
================================================
<?php

declare(strict_types=1);

use DragonCode\LaravelDeployOperations\Operation;
use Illuminate\Support\Facade\Log;

return new class extends Operation {
    public function up(): void
    {
        // some
    }

    public function down(): void
    {
        // some
    }

    public function success(): void
    {
        Log::info('success');
    }

    public function failed(): void
    {
        Log::info('failed');
    }
};


================================================
FILE: docs/snippets/with_operation.php
================================================
<?php

declare(strict_types=1);

use Illuminate\Database\Migrations\Migration;

return new class extends Migration {
    public function __invoke()
    {
        // some
    }

    public function withOperation(): string
    {
        return 'foo/2022_10_14_000002_test2';
    }
};


================================================
FILE: docs/snippets/with_operation_helper.php
================================================
<?php

declare(strict_types=1);

use Illuminate\Database\Migrations\Migration;

use function DragonCode\LaravelDeployOperations\operation;

return new class extends Migration {
    public function withOperation(): string
    {
        return operation('foo/2022_10_14_000002_test2');
    }
};


================================================
FILE: docs/snippets/within_transactions.php
================================================
<?php

declare(strict_types=1);

use DragonCode\LaravelDeployOperations\Operation;

return new class extends Operation {
    public function __invoke()
    {
        // some
    }

    public function withinTransactions(): bool
    {
        return true;
    }
};


================================================
FILE: docs/topics/artisan-commands.topic
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE topic
    SYSTEM "https://resources.jetbrains.com/writerside/1.0/xhtml-entities.dtd">
<topic
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="https://resources.jetbrains.com/writerside/1.0/topic.v2.xsd"
    title="Artisan Commands" id="artisan-commands">

    <link-summary>Information on how to call Artisan commands from operations</link-summary>
    <card-summary>Information on how to call Artisan commands from operations</card-summary>
    <web-summary>Information on how to call Artisan commands from operations</web-summary>

    <show-structure depth="2" />

    <p>
        Quite often, when working with operations, it becomes necessary to run one or another console command, and each time you have to write the following code:
    </p>

    <code-block lang="php" src="example_artisan.php" include-lines="5-" />
</topic>


================================================
FILE: docs/topics/creating-operations.topic
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE topic
    SYSTEM "https://resources.jetbrains.com/writerside/1.0/xhtml-entities.dtd">
<topic
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="https://resources.jetbrains.com/writerside/1.0/topic.v2.xsd"
    title="Creating Operations" id="creating-operations" help-id="creating-operations">

    <link-summary>Information on how to create operations</link-summary>
    <card-summary>Information on how to create operations</card-summary>
    <web-summary>Information on how to create operations</web-summary>

    <show-structure depth="2" />

    <snippet id="creating">
        <p>
            To create an operation use the <code>%command_make%</code> artisan command:
        </p>

        <code-block lang="bash">
        %artisan% %command_make% some_name
    </code-block>

        <p>
            The new operation's file will be placed in your
            <code>%directory%</code> directory in the base path of your app.
        </p>

        <p>
            Each operation file name contains a timestamp, which allows Laravel to determine the order of the operations.
            For example,
        </p>

        <code-block lang="bash">
            2025_04_02_121627_some_name.php
        </code-block>
    </snippet>

    <chapter title="Asks For File Name" id="asks_for_file_name">
        <tip>
            The question will not be asked when calling a console command passing the <code>--quiet</code> parameter.
        </tip>

        <p>
            When calling the <code>%command_run%</code> console command without passing a name in the name parameter,
            you will be asked for a <code>name</code> for the file.
        </p>

        <code-block lang="bash" src="ask.sh" />

        <p>
            You can enter your own or simply press <code>Enter</code> to continue.
            In this case, automatic file name generation will be applied
        </p>
    </chapter>

    <chapter title="Automatically Generate A File Name" id="automatically_generate_a_file_name">
        <p>
            If you do not specify the <code>name</code> attribute,
            then the file name will be generated automatically according to the rule:
        </p>

        <code-block lang="bash" src="make_auto.sh" />

        <tip>
            <p>
                The name for the file will be automatically obtained from the currently active git repository branch at the root of the project.
            </p>
            <p>
                If the branch name cannot be determined, the word “auto” will be used.
            </p>
        </tip>
    </chapter>

    <chapter title="Nested Files" id="nested_files">
        <p>
            You can use nested paths to create operations:
        </p>

        <code-block lang="bash" src="nested.sh" />

        <p>
            All of these commands will create a file called <code>%directory%/foo/bar/Y_m_d_His_qwe_rty.php.</code>
        </p>

        <p>
            For example:
        </p>

        <code-block lang="bash" src="nested_example.sh" />
    </chapter>

    <chapter title="Invokable Method" id="invokable_method">
        <p>
            By default, the new operation class will contain the <code>__invoke</code> method,
            but you can easily replace it with public <code>up</code> name.
        </p>

        <code-block lang="php" src="empty.php" include-lines="5-" />

        <note>
            <p>
                Note that the <code>__invoke</code> method has been added as a single call.
                This means that when the operation is running, it will be called, but not when it is rolled back.
            </p>

            <p>
                You should also pay attention to the fact that if there is an <code>__invoke</code> method in the class,
                the <code>down</code> method will not be called.
            </p>
        </note>

        <code-block lang="php" src="invoke_and_down.php" include-lines="5-" />
    </chapter>

    <chapter title="Dependency Injection" id="dependency_injection">
        <p>
            You can also use the dependency injection with <code>__invoke</code>, <code>up</code> and
            <code>down</code> methods:
        </p>

        <code-block lang="php" src="di_invoke.php" include-lines="5-" />
        <code-block lang="php" src="di_up_down.php" include-lines="5-" />
    </chapter>
</topic>


================================================
FILE: docs/topics/customize-stub.topic
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE topic
    SYSTEM "https://resources.jetbrains.com/writerside/1.0/xhtml-entities.dtd">
<topic
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="https://resources.jetbrains.com/writerside/1.0/topic.v2.xsd"
    title="Customize Stub" id="customize-stub">

    <link-summary>Information on how to publish a template file for changes</link-summary>
    <card-summary>Information on how to publish a template file for changes</card-summary>
    <web-summary>Information on how to publish a template file for changes</web-summary>

    <show-structure depth="2" />

    <p>
        You may publish the stub used by the <code>make:operation</code> command and/or
        <a href="https://laravel-idea.com">Laravel Idea</a> plugin for
        <a href="https://www.jetbrains.com/phpstorm/">JetBrains PhpStorm</a> if you want to modify it.
    </p>

    <code-block lang="bash">
        %vendor_publish%
    </code-block>

    <p>
        This will create the file <code>stubs/deploy-operation.stub</code>, which you can modify to suit you.

    </p>

    <code-block
        lang="php"
        src="https://raw.githubusercontent.com/TheDragonCode/laravel-deploy-operations/refs/heads/main/resources/stubs/deploy-operation.stub"
    />
</topic>


================================================
FILE: docs/topics/database-data-dumper.topic
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE topic
    SYSTEM "https://resources.jetbrains.com/writerside/1.0/xhtml-entities.dtd">
<topic
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="https://resources.jetbrains.com/writerside/1.0/topic.v2.xsd"
    title="Database Data Dumper" id="database-data-dumper">

    <link-summary>Adding data from certain tables when executing the `php artisan schema:dump` console command</link-summary>
    <card-summary>Adding data from certain tables when executing the `php artisan schema:dump` console command</card-summary>
    <web-summary>Adding data from certain tables when executing the `php artisan schema:dump` console command</web-summary>

    <show-structure depth="2" />

    <p>
        As you build your application, you may accumulate more and more migrations over time.
        This can lead to your
        <code>database/migrations</code> directory becoming bloated with potentially hundreds of migrations.
        If you would like, you may "squash" your migrations into a single SQL file.
        To get started, execute the <code>schema:dump</code> command:
    </p>

    <code-block lang="bash">
        %artisan% schema:dump
    </code-block>

    <p>
        You can read more about the operation of this console command in the
        <a href="https://laravel.com/docs/migrations#squashing-migrations">Laravel documentation</a>.
    </p>

    <p>
        Here we mention this console command because operations tend to save the execution state in order to prevent re-runs where this is not explicitly allowed.
        But if you run sequentially the console commands <code>%artisan% schema:dump</code> and
        <code>%artisan% migrate:fresh</code>, you will see that all actions will be called again.
    </p>

    <p>
        This is due to the fact that the dump mechanism saves the contents of just one table - <code>migrations</code>.
    </p>

    <p>
        To solve this problem, there is a
        <a href="https://github.com/TheDragonCode/laravel-data-dumper">Database Data Dumper</a>
        project that allows you to specify a list of tables required for export to a dump.
    </p>

    <p>
        In addition to those that you can easily specify in its configuration file,
        we recommend that you also specify the
        <code>operations</code> database table from this project in order to save the state of the operations when performing a clean deployment of the database from a dump.
    </p>

    <code-block lang="bash">
        composer require dragon-code/laravel-data-dumper --dev
    </code-block>
</topic>


================================================
FILE: docs/topics/events.topic
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE topic
    SYSTEM "https://resources.jetbrains.com/writerside/1.0/xhtml-entities.dtd">
<topic
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="https://resources.jetbrains.com/writerside/1.0/topic.v2.xsd"
    title="Events" id="events">

    <link-summary>Information about events sent when operations are running</link-summary>
    <card-summary>Information about events sent when operations are running</card-summary>
    <web-summary>Information about events sent when operations are running</web-summary>

    <show-structure depth="2" />

    <p>
        You can also handle events when executing operations:
    </p>

    <code-block lang="php" src="events_list.php" include-lines="5-" />

    <p>
        If there are no operation files to execute, the <code>NoPendingDeployOperations</code> event will be sent.
    </p>

    <p>
        In other cases, the <code>DeployOperationStarted</code> event will be sent before processing starts,
        and the <code>DeployOperationEnded</code> event will be sent after processing.
    </p>

    <p>
        For example:
    </p>


    <code-block lang="php" src="event_service_provider.php" include-lines="5-" />
    <code-block lang="php" src="some_listener.php" include-lines="5-" />

    <p>
        It is also possible to subscribe to events manually:
    </p>

    <code-block lang="php" src="listen_events.php" include-lines="5-" />
</topic>


================================================
FILE: docs/topics/execution-status.topic
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE topic
    SYSTEM "https://resources.jetbrains.com/writerside/1.0/xhtml-entities.dtd">
<topic
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="https://resources.jetbrains.com/writerside/1.0/topic.v2.xsd"
    title="Execution Status" id="execution-status">

    <link-summary>Information about the execution of actions during successful and unsuccessful operation launches</link-summary>
    <card-summary>Information about the execution of actions during successful and unsuccessful operation launches</card-summary>
    <web-summary>Information about the execution of actions during successful and unsuccessful operation launches</web-summary>

    <show-structure depth="2" />

    <p>
        You can also override the <code>success</code> and <code>failed</code> methods,
        which are called on success or failure processing.
    </p>

    <chapter title="Success" id="success">
        <code-block lang="php" src="success_status.php" include-lines="5-" />

        <p>
            Call the <code>%artisan% %command_run%</code> command.
        </p>

        <p>
            The log file will contain one <code>success</code> record.
        </p>
    </chapter>

    <chapter title="Failed" id="failed">
        <code-block lang="php" src="failed_status.php" include-lines="5-" />

        <p>
            Call the <code>%artisan% %command_run%</code> command.
        </p>

        <p>
            The log file will contain one <code>failed</code> record.
        </p>
    </chapter>

    <chapter title="Invokable" id="invokable">
        <p>
            The methods will work in the same way in conjunction with the <code>__invoke</code> magic method.
            The only difference is that in this case the down method will not be executed.
        </p>

        <code-block lang="php" src="invokable_status.php" include-lines="5-" />
    </chapter>
</topic>


================================================
FILE: docs/topics/installation.topic
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE topic
    SYSTEM "https://resources.jetbrains.com/writerside/1.0/xhtml-entities.dtd">
<topic
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="https://resources.jetbrains.com/writerside/1.0/topic.v2.xsd"
    title="Installation" id="installation">

    <link-summary>Installation and configuration</link-summary>
    <card-summary>Installation and configuration</card-summary>
    <web-summary>Installation and configuration</web-summary>

    <show-structure depth="2" />

    <p>
        To get the latest version of
        <format style="bold">%product_short%</format>
        , simply require the project using
        <a href="https://getcomposer.org">Composer</a>:
    </p>

    <code-block lang="bash">
    composer require %package_name%
    </code-block>

    <p>
        If necessary, you can publish the configuration file by calling the console command:
    </p>

    <code-block lang="bash">
        %vendor_publish%
    </code-block>

    <p>
        Now you can
        <a href="creating-operations.topic">
            <format style="bold">create</format>
        </a>
        new operations.
    </p>

    <chapter title="Compatibility Table" id="compatibility_table">
        <table>
            <tr>
                <td>PHP</td>
                <td>Laravel</td>
                <td>Package</td>
                <td>Documentation</td>
                <td>Status</td>
            </tr>
            <tr>
                <td>^8.2</td>
                <td>11, 12, 13</td>
                <td>^7.0</td>
                <td><a href="introduction.topic" /></td>
                <td><img src="%badge_supported%" alt="supported" /></td>
            </tr>
            <tr>
                <td>^8.2</td>
                <td>10, 11, 12</td>
                <td>^6.0</td>
                <td><a href="https://github.com/TheDragonCode/laravel-deploy-operations/tree/6.x/docs">Documentation</a>
                </td>
                <td><img src="%badge_not_supported%" alt="not supported" /></td>
            </tr>
            <tr>
                <td>^8.2</td>
                <td>10, 11</td>
                <td>^5.0</td>
                <td><a href="https://github.com/TheDragonCode/laravel-deploy-operations/tree/5.x/docs">Documentation</a>
                </td>
                <td><img src="%badge_not_supported%" alt="not supported" /></td>
            </tr>
            <tr>
                <td>^8.0</td>
                <td>7, 8, 9, 10, 11</td>
                <td>^4.0</td>
                <td><a href="https://github.com/TheDragonCode/laravel-deploy-operations/tree/4.x/docs">Documentation</a>
                </td>
                <td><img src="%badge_not_supported%" alt="not supported" /></td>
            </tr>
            <tr>
                <td>^8.0</td>
                <td>7, 8, 9</td>
                <td>^3.0</td>
                <td><a href="https://github.com/TheDragonCode/laravel-deploy-operations/tree/3.x/docs">Documentation</a>
                </td>
                <td><img src="%badge_not_supported%" alt="not supported" /></td>
            </tr>
            <tr>
                <td>^7.3, ^8.0</td>
                <td>6, 7, 8, 9</td>
                <td>^2.0</td>
                <td>---</td>
                <td><img src="%badge_not_supported%" alt="not supported" /></td>
            </tr>
            <tr>
                <td>^7.3, ^8.0</td>
                <td>6, 7, 8</td>
                <td>^1.0</td>
                <td>---</td>
                <td><img src="%badge_not_supported%" alt="not supported" /></td>
            </tr>
        </table>
    </chapter>
</topic>


================================================
FILE: docs/topics/introduction.topic
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE topic
    SYSTEM "https://resources.jetbrains.com/writerside/1.0/xhtml-entities.dtd">
<topic
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="https://resources.jetbrains.com/writerside/1.0/topic.v2.xsd"
    title="Introduction" id="introduction">

    <section-starting-page>
        <title>%product%</title>

        <description>
            ⚡ Performing any actions during the deployment process
        </description>

        <spotlight>
            <a href="installation.topic" type="development" />
            <a href="usage.topic" type="integration" />
        </spotlight>

        <primary>
            <title>Guide</title>

            <a href="running-operations.topic" type="start" />
            <a href="creating-operations.topic" type="tools" />
            <a href="rolling-back-operations.topic" type="turn-on" />
            <a href="operations-status.topic" type="check-list" />
        </primary>

        <secondary>
            <title>Helpers</title>

            <a href="artisan-commands.topic" />
            <a href="events.topic" />
            <a href="execution-status.topic" />
        </secondary>

        <misc>
            <cards>
                <title>Extras</title>

                <a href="database-data-dumper.topic" />
            </cards>
        </misc>
    </section-starting-page>
</topic>


================================================
FILE: docs/topics/operation-helper.topic
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE topic
    SYSTEM "https://resources.jetbrains.com/writerside/1.0/xhtml-entities.dtd">
<topic
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="https://resources.jetbrains.com/writerside/1.0/topic.v2.xsd"
    title="Operation Helper" id="operation-helper">

    <link-summary>Information about launching operations with the help of the helper</link-summary>
    <card-summary>Information about launching operations with the help of the helper</card-summary>
    <web-summary>Information about launching operations with the help of the helper</web-summary>

    <show-structure depth="2" />

    <p>
        To quickly call operations from other code, you can use the <code>OperationHelper</code> helper function.
    </p>

    <chapter title="Execution of all" id="execution_of_all">
        <p>
            This will execute any operations not performed earlier:
        </p>

        <code-block lang="php" src="operation_helper_all.php" include-lines="5-" />

        <p>
            For example,
        </p>

        <code-block lang="bash" src="operations_helper.sh" />
    </chapter>

    <chapter title="Performing operations in a folder" id="performing_operations_in_a_folder">
        <p>
            This will execute all previously unexecuted operations in the specified folder:
        </p>

        <code-block lang="php" src="operation_helper_directory.php" include-lines="5-" />

        <p>
            For example,
        </p>

        <code-block lang="bash" src="operations_helper.sh" include-lines="2-3" />
    </chapter>

    <chapter title="Performing a specific operation" id="performing_a_specific_operation">
        <warning>
            This will execute the defined operation file even if it was previously called.
            Be careful about calling it again.
        </warning>

        <code-block lang="php" src="operation_helper_file.php" include-lines="5-" />

        <p>
            For example,
        </p>

        <code-block lang="bash" src="operations_helper.sh" include-lines="2" />
    </chapter>

    <chapter title="Laravel Idea support" id="laravel_idea_support">
        <p>
            If you are using
            <a href="https://www.jetbrains.com/phpstorm/">JetBrains PhpStorm</a>
            with the
            <a href="https://laravel-idea.com">Laravel Idea</a> plugin installed,
            you can use the <code>operation</code> function to autocomplete.
        </p>

        <img src="operation_helper_class.png" alt="operation helper" />
    </chapter>
</topic>


================================================
FILE: docs/topics/operations-status.topic
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE topic
    SYSTEM "https://resources.jetbrains.com/writerside/1.0/xhtml-entities.dtd">
<topic
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="https://resources.jetbrains.com/writerside/1.0/topic.v2.xsd"
    title="Operations Status" id="operations-status">

    <link-summary>Information on how to view the status of performed operations</link-summary>
    <card-summary>Information on how to view the status of performed operations</card-summary>
    <web-summary>Information on how to view the status of performed operations</web-summary>

    <show-structure depth="2" />

    <p>
        The <code>%command_status%</code> command displays the execution status of operations.
        In it you can see which operations were executed and which were not:
    </p>

    <code-block lang="bash">
        %artisan% %command_status%
    </code-block>

    <p>
        For example,
    </p>

    <code-block lang="bash" src="operations_status.sh" />
</topic>


================================================
FILE: docs/topics/rolling-back-operations.topic
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE topic
    SYSTEM "https://resources.jetbrains.com/writerside/1.0/xhtml-entities.dtd">
<topic
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="https://resources.jetbrains.com/writerside/1.0/topic.v2.xsd"
    title="Rolling Back Operations" id="rolling-back-operations">

    <link-summary>Information on how to roll back operations</link-summary>
    <card-summary>Information on how to roll back operations</card-summary>
    <web-summary>Information on how to roll back operations</web-summary>

    <show-structure depth="2" />

    <p>
        To roll back the latest operation, you may use the <code>%command_rollback%</code> command.
        This command rolls back the last "batch" of operations, which may include multiple operation files:
    </p>

    <code-block lang="bash">
        %artisan% %command_rollback%
    </code-block>

    <p>
        You may roll back a limited number of operations by providing the
        <code>step</code> option to the rollback command.
        For example, the following command will roll back the last five operations:
    </p>

    <code-block lang="bash">
        %artisan% %command_rollback% --step=5
    </code-block>

    <p>
        For example:
    </p>

    <code-block lang="bash" src="rollback.sh" />

    <chapter title="Drop All &amp; Rerun Operations" id="drop_all_amp_rerun_operations">
        <p>
            The
            <code>%command_fresh%</code> command will drop all operation records from the operation table and then execute the operations command:
        </p>

        <code-block lang="bash">
            %artisan% %command_fresh%
        </code-block>
    </chapter>
</topic>


================================================
FILE: docs/topics/running-operations.topic
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE topic
    SYSTEM "https://resources.jetbrains.com/writerside/1.0/xhtml-entities.dtd">
<topic
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="https://resources.jetbrains.com/writerside/1.0/topic.v2.xsd"
    title="Running Operations" id="running-operations">

    <link-summary>Information on how to invoke operations during a deployment</link-summary>
    <card-summary>Information on how to invoke operations during a deployment</card-summary>
    <web-summary>Information on how to invoke operations during a deployment</web-summary>

    <show-structure depth="2" />

    <snippet id="run_all">

        <p>
            To run all of your outstanding operations, execute the <code>%command_run%</code> artisan command:
        </p>

        <code-block lang="bash">
            %artisan% %command_run%
        </code-block>

        <p>
            The order in which operations are called is checked by file name in alphabetical order, without taking into account directory names:
        </p>

        <code-block lang="bash" src="actual_file_names.sh" />
        <code-block lang="bash" src="order_running_operations.sh" />
    </snippet>

    <chapter title="Isolating Execution" id="isolating_execution">
        <p>
            If you are deploying your application across multiple servers and running operations as part of your deployment process,
            you likely do not want two servers attempting to run the database at the same time.
            To avoid this, you may use the <code>isolated</code> option when invoking the
            <code>%command_run%</code> command.
        </p>

        <code-block lang="bash">
            %artisan% %command_run% --isolated
        </code-block>
    </chapter>

    <chapter title="Split Execution" id="split_execution">
        <p>
            Sometimes it becomes necessary to launch operations separately, for example, to notify about the successful deployment of a project.
        </p>

        <p>
            There is a <code>before</code> option for this when calling operations:
        </p>

        <code-block lang="bash">
            %artisan% %command_run% --before
        </code-block>

        <p>
            When you call the <code>%command_run%</code> command with the <code>before</code> parameter,
            the script will only perform operations for which the <code>needBefore</code> method is <code>true</code>.
        </p>

        <p>
            For backwards compatibility, the <code>needBefore</code> method returns <code>true</code> by default,
            but operations will only be executed if the option is explicitly passed.
        </p>

        <code-block lang="php" src="need_before.php" include-lines="5-" />

        <p>
            For example, you need to call operations when deploying an application. Some operations should be run after the operations are deployed, and others after the application is fully launched.
        </p>

        <p>
            To run, you need to pass the <code>before</code> parameter.
            For example, when using
            <a href="https://github.com/deployphp/deployer">Deployer</a> it would look like this:
        </p>

        <code-block lang="php" src="deployer.php" include-lines="5-" />

        <p>
            Thus, when <code>%command_run%</code> is called, all operations whose
            <code>before</code> parameter is <code>true</code> will be executed,
            and after that, the remaining tasks will be executed.
        </p>

        <note>
            If you call the <code>%command_run%</code> command without the <code>before</code> parameter,
            then all tasks will be executed regardless of the value of the
            <code>needBefore</code> method inside the operation class.
        </note>
    </chapter>

    <chapter title="Forcing Operations" id="forcing_operations">
        <tip>
            Some commands cannot be executed in production without confirmation.
            These include all commands except <code>%command_status%</code> and <code>%command_run%</code>.
        </tip>

        <p>
            Some operations are destructive, which means they may cause you to lose data.
            In order to protect you from running these commands against your production database,
            you will be prompted for confirmation before the commands are executed.
            To force the commands to run without a prompt, use the <code>--force</code> flag:
        </p>

        <code-block lang="bash">
            %artisan% %command_install% --force
        </code-block>
    </chapter>

    <chapter title="Every Time" id="every_time">
        <p>
            In some cases, you need to call the code every time you deploy the application. For example, to call reindexing.
        </p>

        <p>
            To do this, override the <code>shouldOnce</code> method in the operation file:
        </p>

        <code-block lang="php" src="once_method.php" include-lines="5-" />

        <p>
            If the value is <code>shouldOnce</code> is <code>false</code>,
            the up method will be called every time the <code>%command_run%</code> command called.
        </p>

        <p>
            In this case, information about it will not be written to the
            <code>%table%</code> table and, therefore, the
            <code>down</code> method will not be called when the rollback command is called.
        </p>

        <note>
            When using the <code>before</code> parameter to run command,
            it is recommended to override the value of the <code>needBefore</code> method to <code>false</code>,
            otherwise this operation will be executed twice.
        </note>
    </chapter>

    <chapter title="Specific Environment" id="specific_environment">
        <note>
            By default, the operation will run in all environments.
        </note>

        <p>
            In some cases, it becomes necessary to execute an operation in a specific environment.
            For example <code>production</code>.
        </p>

        <p>
            For this you can override the <code>shouldRun</code> method:
        </p>

        <code-block lang="php" src="on_environment.php" include-lines="5-" />

        <p>
            You can also specify multiple environment names:
        </p>

        <code-block lang="php" src="on_environments.php" include-lines="5-" />

        <p>
            You can work with exceptions in the same way:
        </p>

        <code-block lang="php" src="except_environment.php" include-lines="5-" />
    </chapter>

    <chapter title="Database Transactions" id="database_transactions">
        <p>
            In some cases, it becomes necessary to undo previously performed operations in the database.
            For example, when code execution throws an error. To do this, the code must be wrapped in a transaction.
        </p>

        <p>
            By setting the <code>withinTransactions</code> to <code>true</code> parameter,
            you will ensure that your code is wrapped in a transaction without having to manually call the
            <code>DB::transaction()</code> method.
            This will reduce the time it takes to create the operation.
        </p>

        <code-block lang="php" src="within_transactions.php" include-lines="5-" />

        <tip>
            <p>
                The number of code execution attempts in case of transaction errors is set in the
                <a href="%config_url%">settings</a> file.
            </p>
            <p>
                By default, the number of attempts is %transactions_attempts%.
            </p>
        </tip>
    </chapter>

    <chapter title="Asynchronous Call" id="asynchronous_call">
        <p>
            In some cases, it becomes necessary to execute operations in an asynchronous manner without delaying the deployment process.
        </p>

        <p>
            To do this, you need to override the <code>shouldBeAsync</code> method in the operation class:
        </p>

        <code-block lang="php" src="async.php" include-lines="5-" />

        <p>
            In this case, the operation file that defines this parameter will run asynchronously using the
            <code>DragonCode\LaravelDeployOperations\Jobs\OperationJob</code> job.
        </p>

        <p>
            The name of the connection and queue can be changed through the <a href="%config_url%">settings</a>.
        </p>

        <note>
            We remind you that in this case the
            <a href="https://laravel.com/docs/queues">queuing system</a> must work in your application.
        </note>
    </chapter>

    <chapter title="Interaction with migrations" id="interaction_with_migrations">
        <p>
            Operations can also be invoked when Laravel migrations are completed (<code>php artisan migrate</code>).
            The Laravel event system is used for this purpose.
        </p>

        <p>
            To do this, add a <code>withOperation</code> public method to your migration file that
            will return the name of the file or folder to call.
            For example:
        </p>

        <code-block lang="php" src="with_operation.php" include-lines="5-" />

        <p>
            Now, once the migration is done, Laravel will send a <code>MigrationEnded</code> event, catching which the
            <code>%artisan% %command_run%</code> console command will be called passing this parameter.
        </p>

        <p>
            The same thing will happen if you invoke the following console command:
        </p>

        <code-block lang="bash">
            %artisan% %command_run% --path="foo/2022_10_14_000002_test2"
        </code-block>

        <p>
            This method works with all three migration methods: <code>up</code>, <code>down</code> and
            <code>__invoke</code>.
        </p>

        <p>
            When the <code>%artisan% migrate</code> console command is called,
            the operation will call the <code>up</code> or <code>__invoke</code> method.
        </p>

        <p>
            When the <code>%artisan% migrate:rollback</code> console command is called,
            the operation will call the <code>down</code> method if it exists in the operation file.
        </p>

        <chapter title="Laravel Idea support" id="laravel_idea_support">
            <p>
                If you are using
                <a href="https://www.jetbrains.com/phpstorm/">JetBrains PhpStorm</a>
                with the
                <a href="https://laravel-idea.com">Laravel Idea</a> plugin installed,
                then autocomplete will be available to you:
            </p>
            <p>
                To avoid entering file names manually, you can use the <code>operation</code> helper function.
                All it does is to suggest IDE paths to operation files with recursive search.
            </p>

            <code-block lang="php" src="with_operation_helper.php" include-lines="7-" />

            <img src="operations_helper_function.png" alt="operation helper"/>
        </chapter>
    </chapter>
</topic>


================================================
FILE: docs/topics/snippets_composer.topic
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE topic SYSTEM "https://resources.jetbrains.com/writerside/1.0/html-entities.dtd">
<topic
    xsi:noNamespaceSchemaLocation="https://resources.jetbrains.com/writerside/1.0/topic.v2.xsd"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    is-library="true"
    id="snippets_composer"
    title="snippets composer">

    <snippet id="update">
        <p>
            Then you need to update the dependencies:
        </p>

        <code-block lang="bash">
            composer update
        </code-block>
    </snippet>
</topic>


================================================
FILE: docs/topics/upgrade-3.topic
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE topic
    SYSTEM "https://resources.jetbrains.com/writerside/1.0/xhtml-entities.dtd">
<topic
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="https://resources.jetbrains.com/writerside/1.0/topic.v2.xsd"
    title="Upgrading To 3.x from 2.x" id="upgrade-3">

    <link-summary>Guide for upgrading to version 3.x from 2.x</link-summary>
    <card-summary>Guide for upgrading to version 3.x from 2.x</card-summary>
    <web-summary>Guide for upgrading to version 3.x from 2.x</web-summary>

    <show-structure depth="2" />

    <procedure title="High-Impact Changes" id="high_impact_changes">
        <step><a href="#updating_dependencies" /></step>
        <step><a href="#configuration" /></step>
        <step><a href="#anonymous_classes" /></step>
        <step><a href="#parent_namespace" /></step>
        <step><a href="#changed_properties" /></step>
        <step><a href="#added_recursive_search_for_actions_in_a_folder" /></step>
        <step><a href="#php_8_0_2_required" /></step>
        <step>Laravel 6.0 support was ended</step>
        <step>Dragon Code: Contracts (<code>dragon-code/contracts</code>) support was ended</step>
    </procedure>

    <procedure title="Minor-Impact Changes" id="minor_impact_changes">
        <step><a href="#changed_action_repository" /></step>
        <step><a href="#actions_location" /></step>
    </procedure>

    <chapter title="The easiest way to upgrade" id="the_easiest_way_to_upgrade">
        <note>
            If you used inheritance of actions from other actions, then you will need to process these files manually.
        </note>

        <p>
            For your convenience, we have created an upgrade console command:
        </p>

        <code-block lang="bash">
            composer require dragon-code/laravel-migration-actions:^3.0
            %artisan% migrate:actions:upgrade
            %artisan% migrate
        </code-block>

        <p>
            It will do the following:
        </p>

        <list>
            <li>Change the namespace of the abstract class</li>
            <li>Add a strict type declaration</li>
            <li>Replace the <code>up</code> method with <code>__invoke</code> if the class does not have a
                <code>down</code> method
            </li>
            <li>Replace named classes with anonymous ones</li>
            <li>Create a configuration file according to the data saved in your project</li>
            <li>Changes properties from <code>snake_case</code> to <code>camelCase</code></li>
        </list>
    </chapter>

    <chapter title="Updating Dependencies" id="updating_dependencies">
        <chapter title="PHP 8.0.2 Required" id="php_8_0_2_required">
            <p>
                Deploy Actions for Laravel now requires PHP 8.0.2 or greater.
            </p>
        </chapter>

        <chapter title="Composer Dependencies" id="composer_dependencies">
            <p>
                You should update the following dependency in your application's <code>composer.json</code> file:
            </p>

            <code-block lang="json">
                {
                    "require": {
                        "dragon-code/laravel-migration-actions": "^3.0"
                    }
                }
            </code-block>
        </chapter>
    </chapter>

    <chapter title="Configuration" id="configuration">
        <p>
            Publish the config file and migrate the settings from the <code>config/database.php</code> file to
            <code>config/actions.php</code>.
        </p>

        <code-block lang="bash">
            %artisan% vendor:publish --provider="DragonCode\LaravelActions\ServiceProvider"
        </code-block>
    </chapter>

    <chapter title="Actions Location" id="actions_location">
        Move the action files to the <code>actions</code> folder in the project root,
        or update the <code>actions.path</code> option in the configuration file.
    </chapter>

    <chapter title="Parent Namespace" id="parent_namespace">
        Replace <code>DragonCode\LaravelActions\Support\Actionable</code> with
        <code>DragonCode\LaravelActions\Action</code>.
    </chapter>

    <chapter title="Anonymous Classes" id="anonymous_classes">
        <p>
            Replace named calls to your application's classes with anonymous ones.
        </p>

        <p>
            For example:
        </p>

        <code-block lang="php">
            // before
            use DragonCode\LaravelActions\Support\Actionable;

            class Some extends Actionable { }

            // after
            use DragonCode\LaravelActions\Action;

            return new class extends Action { };
        </code-block>
    </chapter>

    <chapter title="Invokable Method" id="invokable_method">
        If your class does not contain a <code>down</code> method, then you can replace the <code>up</code> method with
        <code>__invoke</code>.
    </chapter>

    <chapter title="Changed Action Repository" id="changed_action_repository">
        Just call the <code>%artisan% migrate</code> command to make changes to the action repository table.
    </chapter>

    <chapter title="Changed Properties" id="changed_properties">
        <p>
            Make sure all overridden properties are typed:
        </p>

        <table>
            <tr>
                <td>New Name</td>
                <td>Old Name</td>
            </tr>
            <tr>
                <td>protected bool $once</td>
                <td>protected $once</td>
            </tr>
            <tr>
                <td>protected bool $transactions</td>
                <td>protected $transactions</td>
            </tr>
            <tr>
                <td>protected int $transactionAttempts</td>
                <td>protected $transaction_attempts</td>
            </tr>
            <tr>
                <td>protected string\|array\|null $environment</td>
                <td>protected $environment</td>
            </tr>
            <tr>
                <td>protected string\|array\|null $exceptEnvironment</td>
                <td>protected $except_environment</td>
            </tr>
            <tr>
                <td>protected bool $before</td>
                <td>protected $before</td>
            </tr>
        </table>
    </chapter>

    <chapter title="Added recursive search for actions in a folder" id="added_recursive_search_for_actions_in_a_folder">
        <p>
            Before:
        </p>

        <code-block lang="bash">
            2022_10_13_013321_test1
            2022_10_13_013326_test2
            bar/2022_10_13_013323_test3 # will not be called
        </code-block>

        <p>
            After:
        </p>

        <code-block lang="bash">
            2022_10_13_013321_test1
            2022_10_13_013326_test2
            bar/2022_10_13_013323_test3 # will be called
        </code-block>
    </chapter>
</topic>


================================================
FILE: docs/topics/upgrade-4.topic
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE topic
    SYSTEM "https://resources.jetbrains.com/writerside/1.0/xhtml-entities.dtd">
<topic
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="https://resources.jetbrains.com/writerside/1.0/topic.v2.xsd"
    title="Upgrading To 4.x from 3.x" id="upgrade-4">

    <link-summary>Guide for upgrading to version 4.x from 3.x</link-summary>
    <card-summary>Guide for upgrading to version 4.x from 3.x</card-summary>
    <web-summary>Guide for upgrading to version 4.x from 3.x</web-summary>

    <show-structure depth="2" />

    <procedure title="High-Impact Changes" id="high_impact_changes">
        <step><a href="#updating_dependencies" /></step>
        <step><a href="#rename_package_name" /></step>
        <step><a href="#changing_the_names_of_console_commands" /></step>
    </procedure>

    <procedure title="Minor-Impact Changes" id="minor_impact_changes">
        <step><a href="#names_migrate_constant_name_changed" /></step>
    </procedure>

    <procedure title="Low-Impact Changes" id="low_impact_changes">
        <step><a href="#changed_the_default_name_of_the_table_for_storing_actions" /></step>
    </procedure>

    <chapter title="The easiest way to upgrade" id="the_easiest_way_to_upgrade">
        <note>
            If you used inheritance of actions from other actions, then you will need to process these files manually.
        </note>

        <p>
            For your convenience, we have created an `upgrade` console command:
        </p>

        <code-block lang="bash">
            composer remove dragon-code/laravel-migration-actions
            composer require dragon-code/laravel-actions:^4.0

            %artisan% actions:upgrade
            %artisan% migrate
        </code-block>

        <p>
            It will do the following:
        </p>

        <list>
            <li>Renaming manually invoked commands in a project to a new name</li>
        </list>
    </chapter>

    <chapter title="Updating Dependencies" id="updating_dependencies">
        <chapter title="Rename package name" id="rename_package_name">
            <p>
                You should update the following dependency in your application's <code>composer.json</code> file:
            </p>

            <p>
                Replace:
            </p>

            <code-block lang="json">
                {
                    "require": {
                        "dragon-code/laravel-migration-actions": "^3.0"
                    }
                }
            </code-block>

            <p>
                with:
            </p>

            <code-block lang="json">
                {
                    "require": {
                        "dragon-code/laravel-actions": "^4.0"
                    }
                }
            </code-block>

            <include from="snippets_composer.topic" element-id="update" />
        </chapter>
    </chapter>

    <chapter title="Changing the names of console commands" id="changing_the_names_of_console_commands">
        <table>
            <tr>
                <td>New Name</td>
                <td>Old Name</td>
            </tr>
            <tr>
                <td>%artisan% make:action</td>
                <td>%artisan% make:migration:action</td>
            </tr>
            <tr>
                <td>%artisan% actions</td>
                <td>%artisan% migrate:actions</td>
            </tr>
            <tr>
                <td>%artisan% actions:install</td>
                <td>%artisan% migrate:actions:install</td>
            </tr>
            <tr>
                <td>%artisan% actions:fresh</td>
                <td>%artisan% migrate:actions:fresh</td>
            </tr>
            <tr>
                <td>%artisan% actions:refresh</td>
                <td>%artisan% migrate:actions:refresh</td>
            </tr>
            <tr>
                <td>%artisan% actions:reset</td>
                <td>%artisan% migrate:actions:reset</td>
            </tr>
            <tr>
                <td>%artisan% actions:rollback</td>
                <td>%artisan% migrate:actions:rollback</td>
            </tr>
            <tr>
                <td>%artisan% actions:status</td>
                <td>%artisan% migrate:actions:status</td>
            </tr>
            <tr>
                <td>%artisan% actions:upgrade</td>
                <td>%artisan% migrate:actions:upgrade</td>
            </tr>
        </table>
    </chapter>

    <chapter title="Names::MIGRATE constant name changed" id="names_migrate_constant_name_changed">
        Replace <code>DragonCode\LaravelActions\Constants\Names::MIGRATE</code>
        with <code>DragonCode\LaravelActions\Constants\Names::ACTIONS</code>
    </chapter>

    <chapter
        title="Changed the default name of the table for storing actions"
        id="changed_the_default_name_of_the_table_for_storing_actions">
        <p>
            The new table name is `actions`.
        </p>

        <p>
            You can also specify any name in the application
            <a href="https://github.com/TheDragonCode/laravel-deploy-operations/blob/4.x/config/actions.php">settings</a> file.
        </p>
    </chapter>
</topic>


================================================
FILE: docs/topics/upgrade-5.topic
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE topic
    SYSTEM "https://resources.jetbrains.com/writerside/1.0/xhtml-entities.dtd">
<topic
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="https://resources.jetbrains.com/writerside/1.0/topic.v2.xsd"
    title="Upgrading To 5.x from 4.x" id="upgrade-5">

    <link-summary>Guide for upgrading to version 5.x from 4.x</link-summary>
    <card-summary>Guide for upgrading to version 5.x from 4.x</card-summary>
    <web-summary>Guide for upgrading to version 5.x from 4.x</web-summary>

    <show-structure depth="2" />

    <procedure title="High-Impact Changes" id="high_impact_changes">
        <step><a href="#updating_dependencies" /></step>
    </procedure>

    <chapter title="Updating Dependencies" id="updating_dependencies">
        <chapter title="PHP 8.2+ Required" id="php_8_2_required">
            <format style="bold">Deploy Actions</format>
            now requires PHP 8.2.0 or greater.
        </chapter>

        <chapter title="Laravel 10+ Required" id="laravel_10_required">
            <p>
                <format style="bold">Deploy Actions</format>
                now requires Laravel 10.0 or greater.
            </p>

            <tip>
                <p>
                    If you are using Laravel 10, then you need to install the dependency:
                </p>

                <code-block lang="bash">
                    composer require doctrine/dbal
                </code-block>
            </tip>
        </chapter>

        <chapter title="Composer Dependencies" id="composer_dependencies">
            <p>
                You should update the following dependencies in your application's <code>composer.json</code> file:
            </p>

            <code-block lang="json">
                {
                    "require": {
                        "dragon-code/laravel-actions": "^5.0"
                    }
                }
            </code-block>

            <include from="snippets_composer.topic" element-id="update" />
        </chapter>
    </chapter>
</topic>


================================================
FILE: docs/topics/upgrade-6.topic
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE topic
    SYSTEM "https://resources.jetbrains.com/writerside/1.0/xhtml-entities.dtd">
<topic
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="https://resources.jetbrains.com/writerside/1.0/topic.v2.xsd"
    title="Upgrading To 6.x from 5.x" id="upgrade-6">

    <link-summary>Guide for upgrading to version 6.x from 5.x</link-summary>
    <card-summary>Guide for upgrading to version 6.x from 5.x</card-summary>
    <web-summary>Guide for upgrading to version 6.x from 5.x</web-summary>

    <show-structure depth="2" />

    <procedure title="High-Impact Changes" id="high_impact_changes" type="choices">
        <step><a href="#updating_dependencies" /></step>
        <step><a href="#changed_the_namespace" /></step>
        <step><a href="#changed_the_name_of_the_main_class" /></step>
        <step><a href="#changed_names_of_console_commands" /></step>
        <step><a href="#changed_event_names" /></step>
        <step><a href="#configuration_file_name_changed" /></step>
    </procedure>

    <procedure title="Minor-Impact Changes" id="minor_impact_changes">
        <step><a href="#changed_directory_location" /></step>
        <step><a href="#database_transactions" /></step>
        <step><a href="#removed_async_property" /></step>
        <step><a href="#changed_property_typing_for_events" /></step>
        <step><a href="#removed_operations_stub_command" /></step>
    </procedure>

    <procedure title="Low-Impact Changes" id="low_impact_changes">
        <step><a href="#stub_name_changed" /></step>
    </procedure>

    <chapter title="The Easiest way to upgrade" id="the_easiest_way_to_upgrade">
        <note>
            If you used inheritance of actions from other actions, then you will need to process these files manually.
        </note>

        <p>
            For your convenience, we have created an <code>operations:upgrade</code> console command:
        </p>

        <code-block lang="bash">
            composer remove dragon-code/laravel-actions
            composer require dragon-code/laravel-deploy-operations:^6.0
            
            %artisan% operations:upgrade
            %artisan% migrate
        </code-block>

        <p>
            It will do the following:
        </p>

        <list>
            <li>Changing the old namespace of “actions” to a new one</li>
            <li>Moves files to a new location</li>
            <li>Updates the configuration file</li>
            <li>Rename the stub file (if published)</li>
        </list>

        <p>
            Please note that the script allows you to automate most of the actions, but may not complete them completely.
            Therefore, you will need to manually check the result of the upgrade by checking this guide.
        </p>
    </chapter>

    <chapter title="Updating Dependencies" id="updating_dependencies">
        <p>
            You should change the package name in the <code>composer.json</code> file from
            <code>dragon-code/laravel-actions</code> to
            <code>dragon-code/laravel-deploy-operations</code>, and also change its version to <code>^6.0</code>:
        </p>

        <code-block lang="json">
            {
                "require": {
                    "dragon-code/laravel-deploy-operations": "^6.0"
                }
            }
        </code-block>

        <include from="snippets_composer.topic" element-id="update" />
    </chapter>

    <chapter title="Changed the namespace" id="changed_the_namespace">
        <p>
            The namespace has been changed from <code>DragonCode\LaravelActions</code> to
            <code>DragonCode\LaravelDeployOperations</code>.
        </p>

        You need to replace it in all actions of your application, as well as when using
        <a href="events.topic" />.
    </chapter>

    <chapter title="Changed the name of the main class" id="changed_the_name_of_the_main_class">
        You should replace <code>DragonCode\LaravelActions\Action</code> namespace with
        <code>DragonCode\LaravelDeployOperations\Operation</code>.
    </chapter>

    <chapter title="Changed names of console commands" id="changed_names_of_console_commands">
        <table>
            <tr>
                <td>New Name</td>
                <td>Old Name</td>
            </tr>
            <tr>
                <td>make:operation</td>
                <td>make:action</td>
            </tr>
            <tr>
                <td>operations</td>
                <td>actions</td>
            </tr>
            <tr>
                <td>operations:fresh</td>
                <td>actions:fresh</td>
            </tr>
            <tr>
                <td>operations:install</td>
                <td>actions:install</td>
            </tr>
            <tr>
                <td>operations:refresh</td>
                <td>actions:refresh</td>
            </tr>
            <tr>
                <td>operations:reset</td>
                <td>actions:reset</td>
            </tr>
            <tr>
                <td>operations:rollback</td>
                <td>actions:rollback</td>
            </tr>
            <tr>
                <td>operations:status</td>
                <td>actions:status</td>
            </tr>
            <tr>
                <td>operations:stub</td>
                <td>actions:stub</td>
            </tr>
            <tr>
                <td>operations:upgrade</td>
                <td>actions:upgrade</td>
            </tr>
        </table>
    </chapter>

    <chapter title="Changed event names" id="changed_event_names">
        <table>
            <tr>
                <td>New Name</td>
                <td>Old Name</td>
            </tr>

            <tr>
                <td>DeployOperationStarted</td>
                <td>ActionStarted</td>
            </tr>
            <tr>
                <td>DeployOperationEnded</td>
                <td>ActionEnded</td>
            </tr>
            <tr>
                <td>DeployOperationFailed</td>
                <td>ActionFailed</td>
            </tr>
            <tr>
                <td>NoPendingDeployOperations</td>
                <td>NoPendingActions</td>
            </tr>
        </table>

        <p>
            Don't forget to also change the namespace from <code>DragonCode\LaravelActions\Events</code> to
            <code>DragonCode\LaravelDeployOperations\Events</code>.
        </p>
    </chapter>

    <chapter title="Changed property typing for events" id="changed_property_typing_for_events">
        <p>
            The type of the <code>method</code> property for events has been changed.
        </p>

        <chapter title="Before" id="before">
            <code-block lang="php">
                use DragonCode\LaravelActions\Events\ActionEnded;
                use DragonCode\LaravelDeployOperations\Enums\MethodEnum;

                /** @var ActionEnded */
                $event->method; // is string
            </code-block>
        </chapter>

        <chapter title="After" id="after">
            <code-block lang="php">
                use DragonCode\LaravelDeployOperations\Enums\MethodEnum;
                use DragonCode\LaravelDeployOperations\Events\DeployOperationEnded;

                /** @var DeployOperationEnded */
                $event->method; // is MethodEnum
            </code-block>
        </chapter>
    </chapter>

    <chapter title="Configuration file name changed" id="configuration_file_name_changed">
        <p>
            We recommend that you delete the old configuration file
            <code>config/actions.php</code> and publish a new one.
            This way you will see the changes made to it.
        </p>

        <code-block lang="bash">
            %artisan% vendor:publish --provider="DragonCode\LaravelDeployOperations\ServiceProvider"
        </code-block>
    </chapter>

    <chapter title="Changed names of constants" id="changed_names_of_constants">
        <p>
            If you use package constant references, you must also rename them.
        </p>

        <p>
            The old name was in <code>UPPER_CASE</code>, the new one was in <code>PascalCase</code>.
        </p>

        <p>
            For example:
        </p>

        <code-block lang="php">
            // Old
            class Names
            {
                public const ACTIONS = 'actions';
                public const FRESH   = 'actions:fresh';
                // ...
            }
        </code-block>
        <code-block lang="php">
            // New
            class Names
            {
                public const Fresh      = 'operations:fresh';
                public const Operations = 'operations';
                // ...
            }
        </code-block>
    </chapter>

    <chapter title="Changed directory location" id="changed_directory_location">
        File storage directory changed to <code>/operations</code> from <code>/actions</code>.
    </chapter>

    <chapter title="Database transactions" id="database_transactions">
        <p>
            The following properties have been removed:
        </p>

        <list>
            <li><code>$transactions</code></li>
            <li><code>$transactionAttempts</code></li>
        </list>

        <p>
            Instead, you can use the <code>hasTransactions</code> and <code>transactionAttempts</code> methods.
        </p>

        <p>
            The <code>enabledTransactions</code> method has been renamed to <code>hasTransactions</code>.
        </p>
    </chapter>

    <chapter title="Removed $async property" id="removed_async_property">
        The <code>$async</code> property has been removed from the base class.
        You can use the previously available <code>isAsync</code> method instead.
    </chapter>

    <chapter title="Stub name changed" id="stub_name_changed">
        If you published a stub file, then you also need to rename it from <code>stubs/action.stub</code> to
        <code>stubs/deploy-operation.stub</code> and make changes to its structure.
    </chapter>

    <chapter title="Removed operations:stub command" id="removed_operations_stub_command">
        <p>
            The <code>%artisan% operations:stub</code> console command has been removed. Use another command instead:
        </p>

        <code-block lang="bash">
            %artisan% vendor:publish --tag=stubs --provider="DragonCode\LaravelDeployOperations\ServiceProvider"
        </code-block>
    </chapter>
</topic>


================================================
FILE: docs/topics/upgrade-7.topic
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE topic
    SYSTEM "https://resources.jetbrains.com/writerside/1.0/xhtml-entities.dtd">
<topic
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="https://resources.jetbrains.com/writerside/1.0/topic.v2.xsd"
    title="Upgrading To 7.x from 6.x" id="upgrade-7">

    <link-summary>Guide for upgrading to version 7.x from 6.x</link-summary>
    <card-summary>Guide for upgrading to version 7.x from 6.x</card-summary>
    <web-summary>Guide for upgrading to version 7.x from 6.x</web-summary>

    <show-structure depth="2" />

    <procedure title="High-Impact Changes" id="high_impact_changes" type="choices">
        <step><a href="#updating_dependencies" /></step>
        <step><a href="#strict_typification" /></step>
        <step><a href="#removed_deprecated_methods_and_properties" /></step>
    </procedure>

    <procedure title="Minor-Impact Changes" id="minor_impact_changes">
        <step><a href="#laravel_10_is_now_unsupported" /></step>
        <step><a href="#removed_operations_upgrade_console_command" /></step>
        <step><a href="#removed_operations_refresh_console_command" /></step>
        <step><a href="#removed_operations_reset_console_command" /></step>
    </procedure>

    <procedure title="Low-Impact Changes" id="low_impact_changes">
        <step><a href="#added_suffixes_for_classes" /></step>
        <step><a href="#renamed_traits" /></step>
        <step><a href="#replaced_config_helper_with_config_data" /></step>
        <step><a href="#replaced_dragon_code_simple_dto_with_spatie_laravel_data" /></step>
    </procedure>

    <chapter title="Updating Dependencies" id="updating_dependencies">
        <p>
            You should update the following dependencies in your application's <code>composer.json</code> file:
        </p>

        <code-block lang="json">
            {
                "require": {
                    "dragon-code/laravel-deploy-operations": "^7.0"
                }
            }
        </code-block>

        <include from="snippets_composer.topic" element-id="update" />
    </chapter>

    <chapter title="Laravel 10 is now unsupported" id="laravel_10_is_now_unsupported">
        Laravel 10 version is no longer supported due to the lack of event classes required for
        <format style="bold">%product_short%</format>
        .
    </chapter>

    <chapter title="Removed `operations:upgrade` console command" id="removed_operations_upgrade_console_command">
        We decided to drop support for the <code>php artisan operations:upgrade</code> console command.
        It does not exist now.
    </chapter>

    <chapter title="Removed `operations:refresh` console command" id="removed_operations_refresh_console_command">
        We decided to drop support for the <code>php artisan operations:refresh</code> console command.
        It does not exist now.
    </chapter>

    <chapter title="Removed `operations:reset` console command" id="removed_operations_reset_console_command">
        We decided to drop support for the <code>php artisan operations:reset</code> console command.
        It does not exist now.
    </chapter>

    <chapter title="Strict typification" id="strict_typification">
        <p>
            A strict typification has been added to all the project files.
        </p>

        <code-block lang="php">
            declare(strict_types=1);
        </code-block>
    </chapter>

    <chapter title="Replaced `ConfigHelper` with `ConfigData`" id="replaced_config_helper_with_config_data">
        <p>
            The <code>DragonCode\LaravelDeployOperations\Helpers\ConfigHelper</code> class has been removed and
            <code>DragonCode\LaravelDeployOperations\Data\Config\ConfigData</code>, which is a Data object, is now used instead.
        </p>

        <p>
            For example,
        </p>

        <code-block lang="diff">
            - $this->config->path('some'); // /operations/some
            - config('deploy-operations.transactions.enabled'); // false
            - config('deploy-operations.async'); // false
            
            + $this->config->path . 'some'; // /operations/some
            + $this->config->transactions->enabled; // false
            + $this->config->async; // false
        </code-block>
    </chapter>

    <chapter
        title="Replaced `dragon-code/simple-dto` with `spatie/laravel-data
    `" id="replaced_dragon_code_simple_dto_with_spatie_laravel_data">
        <p>
            This tidied up the handling of settings and options.
        </p>
        <p>
            If you used a direct reference to the <code>Helpers/Config</code> and
            <code>Values/Options</code> classes, update your code.
        </p>
    </chapter>

    <chapter title="Added suffixes for classes" id="added_suffixes_for_classes">
        <compare>
            <code-block lang="php">
                Console\Install
                Console\Make
                Console\Operations
                Console\Fresh
                Console\Rollback
                Console\Status
                Processors\Fresh
                Processors\Install
                Processors\Make
                Processors\Operations
                Processors\Rollback
                Processors\Status
                Helpers\Config
                Helpers\Git
                Helpers\Sorter
                Services\Migrator
                Services\Mutex
                Values\Options
            </code-block>
            <code-block lang="php">
                Console\InstallCommand
                Console\MakeCommand
                Console\OperationsCommand
                Console\FreshCommand
                Console\RollbackCommand
                Console\StatusCommand
                Processors\FreshProcessor
                Processors\InstallProcessor
                Processors\MakeProcessor
                Processors\OperationsProcessor
                Processors\RollbackProcessor
                Processors\StatusProcessor
                Data\Config\ConfigData
                Helpers\GitHelper
                Helpers\SorterHelper
                Services\MigratorService
                Services\MutexService
                Data\OptionsData
            </code-block>
        </compare>
    </chapter>

    <chapter title="Renamed traits" id="renamed_traits">
        <compare>
            <code-block lang="php">
                Concerns\About
                Concerns\Artisan
                Concerns\Isolatable
                Concerns\Optionable
            </code-block>
            <code-block lang="php">
                Concerns\HasAbout
                Concerns\HasArtisan
                Concerns\HasIsolatable
                Concerns\HasOptionable
            </code-block>
        </compare>
    </chapter>

    <chapter title="Removed deprecated methods and properties" id="removed_deprecated_methods_and_properties">
        <p>
            The following properties and methods have been removed from the
            <code>DragonCode\LaravelDeployOperations\Operation</code>
            class:
        </p>

        <compare>
            <code-block lang="php">
                protected bool $once
                protected array|string | null $environment
                protected array|string | null $exceptEnvironment
                protected bool $before
                public function getConnection(): ?string
                public function isOnce(): bool
                public function enabledTransactions(): bool
                public function transactionAttempts(): int
                public function onEnvironment(): array
                public function exceptEnvironment(): array
                public function allow(): bool
                public function hasBefore(): bool
                public function isAsync(): bool
            </code-block>
            <code-block lang="php">
                public function shouldOnce(): bool
                public function shouldRun(): bool
                public function shouldRun(): bool
                public function needBefore(): bool
                Not used
                public bool shouldOnce(): bool
                public function withinTransactions(): bool
                It is indicated in the settings
                public function shouldRun(): bool
                public function shouldRun(): bool
                public function shouldRun(): bool
                public function needBefore(): bool
                public function needAsync(): bool
            </code-block>
        </compare>
    </chapter>
</topic>


================================================
FILE: docs/topics/usage.topic
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE topic
    SYSTEM "https://resources.jetbrains.com/writerside/1.0/xhtml-entities.dtd">
<topic
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="https://resources.jetbrains.com/writerside/1.0/topic.v2.xsd"
    title="Usage" id="usage">

    <link-summary>Information on how to use %product_short%</link-summary>
    <card-summary>Information on how to use %product_short%</card-summary>
    <web-summary>Information on how to use %product_short%</web-summary>

    <show-structure depth="2" />

    <chapter title="Creating Operation" id="creating_operation">
        <include from="creating-operations.topic" element-id="creating" />
    </chapter>

    <chapter title="Running Operation" id="running_operation">
        <include from="running-operations.topic" element-id="run_all" />
    </chapter>
</topic>


================================================
FILE: docs/v.list
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE vars SYSTEM "https://resources.jetbrains.com/writerside/1.0/vars.dtd">
<vars>
    <var name="product" value="🚀 Laravel Deploy Operations" />
    <var name="product_short" value="Deploy Operations" />

    <var name="package_name" value="dragon-code/laravel-deploy-operations" />

    <var name="command_make" value="make:operation" />
    <var name="command_run" value="operations" />
    <var name="command_fresh" value="operations:fresh" />
    <var name="command_rollback" value="operations:rollback" />
    <var name="command_status" value="operations:status" />
    <var name="command_install" value="operations:install" />

    <var name="artisan" value="php artisan" />

    <var name="vendor_publish" value="%artisan% vendor:publish --tag deploy-operations" />

    <var name="config" value="config/localization.php" />
    <var name="directory" value="/operations" />
    <var name="table" value="operations" />
    <var name="transactions_attempts" value="1" />

    <var name="badge_not_supported" value="badge-not-supported.svg" />
    <var name="badge_supported" value="badge-supported.svg" />

    <var
            name="config_url"
            value="https://github.com/TheDragonCode/laravel-deploy-operations/blob/main/config/deploy-operations.php"
    />

    <var name="year" value="2025" />
</vars>


================================================
FILE: docs/versions.json
================================================
[
    {
        "version": "7.x",
        "url": "https://deploy-operations.dragon-code.pro",
        "isCurrent": true
    },
    {
        "version": "6.x",
        "url": "https://github.com/TheDragonCode/laravel-deploy-operations/tree/6.x/docs",
        "isCurrent": false
    },
    {
        "version": "5.x",
        "url": "https://github.com/TheDragonCode/laravel-deploy-operations/tree/5.x/docs",
        "isCurrent": false
    },
    {
        "version": "4.x",
        "url": "https://github.com/TheDragonCode/laravel-deploy-operations/tree/4.x/docs",
        "isCurrent": false
    },
    {
        "version": "3.x",
        "url": "https://github.com/TheDragonCode/laravel-deploy-operations/tree/3.x/docs",
        "isCurrent": false
    }
]


================================================
FILE: docs/writerside.cfg
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ihp SYSTEM "https://resources.jetbrains.com/writerside/1.0/ihp.dtd">

<ihp version="2.0">
    <topics dir="topics" />
    <images dir="images" />
    <snippets src="snippets" />

    <instance src="do.tree" version="7.x" />
    <instance src="docs_libraries.tree" />
</ihp>


================================================
FILE: ide.json
================================================
{
    "$schema": "https://laravel-ide.com/schema/laravel-ide-v2.json",
    "codeGenerations": [
        {
            "id": "dragon-code.create-deploy-operation",
            "name": "Create Deploy Operation",
            "inputFilter": "deploy-operations",
            "regex": ".+",
            "files": [
                {
                    "directory": "/operations",
                    "name": "${CURRENT_TIME|format:yyyy_MM_dd_HHmmss}_${INPUT_CLASS|className|replace: ,_|upperCamelCase|snakeCase}.php",
                    "template": {
                        "type": "stub",
                        "path": "/stubs/deploy-operation.stub",
                        "fallbackPath": "resources/stubs/deploy-operation.stub"
                    }
                }
            ]
        }
    ],
    "completions": [
        {
            "complete": "directoryFiles",
            "condition": [
                {
                    "classFqn": [
                        "DragonCode\\LaravelDeployOperations\\Helpers\\OperationHelper"
                    ],
                    "methodNames": [
                        "run"
                    ],
                    "functionFqn": [
                        "DragonCode\\LaravelDeployOperations\\operation"
                    ],
                    "place": "parameter",
                    "parameters": [
                        1
                    ]
                }
            ],
            "options": {
                "directory": "/operations",
                "suffixToClear": ".php",
                "recursive": true
            }
        }
    ]
}


================================================
FILE: phpunit.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<phpunit
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd"
        bootstrap="vendor/autoload.php"
        cacheResult="false"
        colors="true"
>
    <php>
        <env name="APP_KEY" value="AckfSECXIvnK5r28GVIWUAxmbBSjTsmF"/>
        <env name="APP_ENV" value="testing"/>
    </php>
    <testsuites>
        <testsuite name="Test Suite">
            <directory>./tests</directory>
        </testsuite>
    </testsuites>
    <source>
        <include>
            <directory>./src</directory>
        </include>
    </source>
</phpunit>


================================================
FILE: pint.json
================================================
{
    "preset": "laravel",
    "exclude": [
        "tests/Fixtures"
    ],
    "rules": {
        "@PHP7x1Migration": true,
        "@PHP7x3Migration": true,
        "@PHP7x4Migration": true,
        "@PHP8x0Migration": true,
        "@PHP8x1Migration": true,
        "@PHP8x2Migration": true,
        "concat_space": {
            "spacing": "one"
        },
        "blank_line_before_statement": {
            "statements": [
                "declare",
                "phpdoc",
                "continue",
                "return"
            ]
        },
        "class_attributes_separation": {
            "elements": {
                "case": "none",
                "const": "none",
                "method": "one",
                "property": "one",
                "trait_import": "none"
            }
        },
        "class_definition": {
            "multi_line_extends_each_single_line": true,
            "single_item_single_line": true,
            "single_line": true,
            "space_before_parenthesis": true
        },
        "combine_consecutive_issets": true,
        "combine_consecutive_unsets": true,
        "braces_position": {
            "allow_single_line_anonymous_functions": true,
            "allow_single_line_empty_anonymous_classes": true,
            "anonymous_classes_opening_brace": "same_line"
        },
        "escape_implicit_backslashes": {
            "double_quoted": true,
            "heredoc_syntax": true,
            "single_quoted": false
        },
        "global_namespace_import": {
            "import_classes": true,
            "import_constants": true,
            "import_functions": true
        },
        "multiline_comment_opening_closing": true,
        "no_superfluous_elseif": true,
        "no_useless_else": true,
        "operator_linebreak": {
            "only_booleans": false
        },
        "ordered_types": {
            "null_adjustment": "always_last",
            "sort_algorithm": "alpha"
        },
        "phpdoc_line_span": {
            "case": "single",
            "class": "single",
            "const": "single",
            "method": "single",
            "property": "single",
            "other": "single"
        },
        "return_assignment": true,
        "simplified_if_return": true,
        "phpdoc_param_order": true,
        "fully_qualified_strict_types": true,
        "declare_strict_types": true,
        "types_spaces": {
            "space_multiple_catch": "none"
        },
        "binary_operator_spaces": {
            "default": "align_single_space_minimal"
        },
        "php_unit_method_casing": {
            "case": "camel_case"
        }
    }
}


================================================
FILE: resources/stubs/deploy-operation.stub
================================================
<?php

declare(strict_types=1);

use DragonCode\LaravelDeployOperations\Operation;

return new class extends Operation {
    public function __invoke(): void
    {
        //
    }
};


================================================
FILE: src/Concerns/ConfirmableTrait.php
================================================
<?php

declare(strict_types=1);

namespace DragonCode\LaravelDeployOperations\Concerns;

use Illuminate\Console\ConfirmableTrait as BaseConfirmableTrait;

trait ConfirmableTrait
{
    use BaseConfirmableTrait;

    protected bool $secure = true;

    protected function allowToProceed(): bool
    {
        return ! $this->secure || $this->confirmToProceed();
    }
}


================================================
FILE: src/Concerns/HasAbout.php
================================================
<?php

declare(strict_types=1);

namespace DragonCode\LaravelDeployOperations\Concerns;

use Composer\InstalledVersions;
use DragonCode\Support\Facades\Helpers\Str;
use Illuminate\Foundation\Console\AboutCommand;

trait HasAbout
{
    protected string $packageName = 'dragon-code/laravel-deploy-operations';

    protected function registerAbout(): void
    {
        AboutCommand::add($this->getPackageName(), fn () => [
            'Version' => $this->getPackageVersion(),
        ]);
    }

    protected function getPackageName(): string
    {
        return Str::of($this->packageName)
            ->after('/')
            ->snake()
            ->replace('_', ' ')
            ->title()
            ->toString();
    }

    protected function getPackageVersion(): string
    {
        return InstalledVersions::getPrettyVersion($this->packageName);
    }
}


================================================
FILE: src/Concerns/HasArtisan.php
================================================
<?php

declare(strict_types=1);

namespace DragonCode\LaravelDeployOperations\Concerns;

use Illuminate\Console\OutputStyle;
use Illuminate\Support\Facades\Artisan;

trait HasArtisan
{
    protected function artisan(string $command, array $parameters = [], ?OutputStyle $outputBuffer = null): void
    {
        Artisan::call($command, $parameters, $outputBuffer);
    }
}


================================================
FILE: src/Concerns/HasIsolatable.php
================================================
<?php

declare(strict_types=1);

namespace DragonCode\LaravelDeployOperations\Concerns;

use DragonCode\LaravelDeployOperations\Constants\Options;
use DragonCode\LaravelDeployOperations\Services\MutexService;

use function app;
use function is_numeric;

trait HasIsolatable
{
    protected function isolationMutex(): MutexService
    {
        return app(MutexService::class);
    }

    protected function isolatedStatusCode(): int
    {
        if ($isolate = $this->getIsolateOption()) {
            return is_numeric($isolate) ? $isolate : self::SUCCESS;
        }

        return self::SUCCESS;
    }

    protected function getIsolateOption(): bool|int
    {
        return $this->hasIsolateOption() ? (int) $this->option(Options::Isolated) : false;
    }

    protected function hasIsolateOption(): bool
    {
        return $this->hasOption(Options::Isolated) && $this->option(Options::Isolated);
    }
}


================================================
FILE: src/Concerns/HasOptionable.php
================================================
<?php

declare(strict_types=1);

namespace DragonCode\LaravelDeployOperations\Concerns;

use DragonCode\LaravelDeployOperations\Constants\Options;
use DragonCode\Support\Facades\Helpers\Arr;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputOption;

use function in_array;

/** @mixin \DragonCode\LaravelDeployOperations\Console\Command */
trait HasOptionable
{
    protected array $arguments = [];

    protected array $options = [
        Options::Connection,
        Options::Force,
        Options::Mute,
        Options::Isolated,
    ];

    protected function configure(): void
    {
        $this->specifyParameters();
    }

    protected function getOptions(): array
    {
        return Arr::of($this->availableOptions())
            ->filter(fn (array $option) => in_array($option[0], $this->options, true))
            ->toArray();
    }

    protected function getArguments(): array
    {
        return Arr::of($this->availableArguments())
            ->filter(fn (array $argument) => in_array($argument[0], $this->arguments, true))
            ->toArray();
    }

    protected function availableArguments(): array
    {
        return [
            [
                Options::Name,
                InputArgument::OPTIONAL,
                'The name of the operation',
            ],
        ];
    }

    protected function availableOptions(): array
    {
        return [
            [
                Options::Before,
                null,
                InputOption::VALUE_NONE,
                'Run operations marked as before',
            ],
            [
                Options::Connection,
                null,
                InputOption::VALUE_OPTIONAL,
                'The database connection to use',
            ],
            [
                Options::Force,
                null,
                InputOption::VALUE_NONE,
                'Force the operation to run when in production',
            ],
            [
                Options::Path,
                null,
                InputOption::VALUE_OPTIONAL,
                'The path to the operations files to be executed',
            ],
            [
                Options::Realpath,
                null,
                InputOption::VALUE_NONE,
                'Indicate any provided operation file paths are pre-resolved absolute path',
            ],
            [
                Options::Step,
                null,
                InputOption::VALUE_OPTIONAL,
                'Force the operations to be run so they can be rolled back individually',
            ],
            [
                Options::Mute,
                null,
                InputOption::VALUE_NONE,
                'Turns off the output of informational messages',
            ],
            [
                Options::Isolated,
                null,
                InputOption::VALUE_OPTIONAL,
                'Do not run the operations command if another instance of the operations command is already running',
                false,
            ],
            [
                Options::Sync,
                null,
                InputOption::VALUE_OPTIONAL,
                'Makes all operations run synchronously',
                false,
            ],
        ];
    }
}


================================================
FILE: src/Console/Command.php
================================================
<?php

declare(strict_types=1);

namespace DragonCode\LaravelDeployOperations\Console;

use DragonCode\LaravelDeployOperations\Concerns\ConfirmableTrait;
use DragonCode\LaravelDeployOperations\Concerns\HasIsolatable;
use DragonCode\LaravelDeployOperations\Concerns\HasOptionable;
use DragonCode\LaravelDeployOperations\Data\OptionsData;
use DragonCode\LaravelDeployOperations\Processors\Processor;
use Illuminate\Console\Command as BaseCommand;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

use function app;
use function array_merge;
use function sprintf;

abstract class Command extends BaseCommand
{
    use ConfirmableTrait;
    use HasIsolatable;
    use HasOptionable;

    protected Processor|string $processor;

    public function handle(): int
    {
        if ($this->allowToProceed()) {
            $this->resolveProcessor()->handle();

            return self::SUCCESS;
        }

        return self::FAILURE;
    }

    protected function execute(InputInterface $input, OutputInterface $output): int
    {
        if ($this->getIsolateOption() !== false && ! $this->isolationMutex()->create($this)) {
            $this->comment(sprintf('The [%s] command is already running.', $this->getName()));

            return $this->isolatedStatusCode();
        }

        try {
            return parent::execute($input, $output);
        } finally {
            if ($this->getIsolateOption() !== false) {
                $this->isolationMutex()->forget($this);
            }
        }
    }

    protected function resolveProcessor(): Processor
    {
        return app($this->processor, [
            'options' => $this->getOptionsData(),
            'input'   => $this->input,
            'output'  => $this->output,
        ]);
    }

    protected function getOptionsData(): OptionsData
    {
        return OptionsData::from(array_merge($this->options(), $this->arguments()));
    }
}


================================================
FILE: src/Console/FreshCommand.php
================================================
<?php

declare(strict_types=1);

namespace DragonCode\LaravelDeployOperations\Console;

use DragonCode\LaravelDeployOperations\Constants\Names;
use DragonCode\LaravelDeployOperations\Constants\Options;
use DragonCode\LaravelDeployOperations\Processors\FreshProcessor;
use DragonCode\LaravelDeployOperations\Processors\Processor;

class FreshCommand extends Command
{
    protected $name = Names::Fresh;

    protected $description = 'Drop and re-run all deploy operations';

    protected Processor|string $processor = FreshProcessor::class;

    protected array $options = [
        Options::Connection,
        Options::Force,
        Options::Path,
        Options::Realpath,
        Options::Mute,
        Options::Isolated,
    ];
}


================================================
FILE: src/Console/InstallCommand.php
================================================
<?php

declare(strict_types=1);

namespace DragonCode\LaravelDeployOperations\Console;

use DragonCode\LaravelDeployOperations\Constants\Names;
use DragonCode\LaravelDeployOperations\Processors\InstallProcessor;
use DragonCode\LaravelDeployOperations\Processors\Processor;

class InstallCommand extends Command
{
    protected $name = Names::Install;

    protected $description = 'Create the deploy operations repository';

    protected Processor|string $processor = InstallProcessor::class;
}


================================================
FILE: src/Console/MakeCommand.php
================================================
<?php

declare(strict_types=1);

namespace DragonCode\LaravelDeployOperations\Console;

use DragonCode\LaravelDeployOperations\Constants\Names;
use DragonCode\LaravelDeployOperations\Constants\Options;
use DragonCode\LaravelDeployOperations\Processors\MakeProcessor;
use DragonCode\LaravelDeployOperations\Processors\Processor;

class MakeCommand extends Command
{
    protected $signature = Names::Make;

    protected $description = 'Create a new deploy operation file';

    protected Processor|string $processor = MakeProcessor::class;

    protected array $arguments = [
        Options::Name,
    ];

    protected array $options = [
        Options::Connection,
        Options::Force,
        Options::Path,
        Options::Realpath,
        Options::Mute,
    ];
}


================================================
FILE: src/Console/OperationsCommand.php
================================================
<?php

declare(strict_types=1);

namespace DragonCode\LaravelDeployOperations\Console;

use DragonCode\LaravelDeployOperations\Constants\Names;
use DragonCode\LaravelDeployOperations\Constants\Options;
use DragonCode\LaravelDeployOperations\Processors\OperationsProcessor;
use DragonCode\LaravelDeployOperations\Processors\Processor;

class OperationsCommand extends Command
{
    protected $signature = Names::Operations;

    protected $description = 'Run the deploy operations';

    protected Processor|string $processor = OperationsProcessor::class;

    protected bool $secure = false;

    protected array $options = [
        Options::Before,
        Options::Connection,
        Options::Path,
        Options::Realpath,
        Options::Mute,
        Options::Isolated,
        Options::Sync,
    ];
}


================================================
FILE: src/Console/RollbackCommand.php
================================================
<?php

declare(strict_types=1);

namespace DragonCode\LaravelDeployOperations\Console;

use DragonCode\LaravelDeployOperations\Constants\Names;
use DragonCode\LaravelDeployOperations\Constants\Options;
use DragonCode\LaravelDeployOperations\Processors\Processor;
use DragonCode\LaravelDeployOperations\Processors\RollbackProcessor;

class RollbackCommand extends Command
{
    protected $name = Names::Rollback;

    protected $description = 'Rollback the last deploy operation';

    protected Processor|string $processor = RollbackProcessor::class;

    protected array $options = [
        Options::Connection,
        Options::Force,
        Options::Path,
        Options::Realpath,
        Options::Step,
        Options::Mute,
        Options::Isolated,
    ];
}


================================================
FILE: src/Console/StatusCommand.php
================================================
<?php

declare(strict_types=1);

namespace DragonCode\LaravelDeployOperations\Console;

use DragonCode\LaravelDeployOperations\Constants\Names;
use DragonCode\LaravelDeployOperations\Constants\Options;
use DragonCode\LaravelDeployOperations\Processors\Processor;
use DragonCode\LaravelDeployOperations\Processors\StatusProcessor;

class StatusCommand extends Command
{
    protected $name = Names::Status;

    protected $description = 'Show the status of each deploy operation';

    protected Processor|string $processor = StatusProcessor::class;

    protected bool $secure = false;

    protected array $options = [
        Options::Connection,
        Options::Path,
        Options::Realpath,
        Options::Mute,
    ];
}


================================================
FILE: src/Constants/Names.php
================================================
<?php

declare(strict_types=1);

namespace DragonCode\LaravelDeployOperations\Constants;

class Names
{
    public const Operations = 'operations';
    public const Fresh      = 'operations:fresh';
    public const Install    = 'operations:install';
    public const Make       = 'make:operation';
    public const Rollback   = 'operations:rollback';
    public const Status     = 'operations:status';
}


================================================
FILE: src/Constants/Options.php
================================================
<?php

declare(strict_types=1);

namespace DragonCode\LaravelDeployOperations\Constants;

class Options
{
    public const Before     = 'before';
    public const Connection = 'connection';
    public const Force      = 'force';
    public const Isolated   = 'isolated';
    public const Mute       = 'mute';
    public const Name       = 'name';
    public const Path       = 'path';
    public const Realpath   = 'realpath';
    public const Step       = 'step';
    public const Sync       = 'sync';
}


================================================
FILE: src/Constants/Order.php
================================================
<?php

declare(strict_types=1);

namespace DragonCode\LaravelDeployOperations\Constants;

class Order
{
    public const Asc  = 'asc';
    public const Desc = 'desc';
}


================================================
FILE: src/Data/Casts/BoolCast.php
================================================
<?php

declare(strict_types=1);

namespace DragonCode\LaravelDeployOperations\Data\Casts;

use DragonCode\Support\Facades\Helpers\Boolean;
use Spatie\LaravelData\Casts\Cast;
use Spatie\LaravelData\Support\Creation\CreationContext;
use Spatie\LaravelData\Support\DataProperty;

class BoolCast implements Cast
{
    public function cast(DataProperty $property, mixed $value, array $properties, CreationContext $context): bool
    {
        return Boolean::parse($value);
    }
}


================================================
FILE: src/Data/Casts/Config/ExcludeCast.php
================================================
<?php

declare(strict_types=1);

namespace DragonCode\LaravelDeployOperations\Data\Casts\Config;

use Illuminate\Support\Collection;
use Illuminate\Support\Str;
use Spatie\LaravelData\Casts\Cast;
use Spatie\LaravelData\Support\Creation\CreationContext;
use Spatie\LaravelData\Support\DataProperty;

class ExcludeCast implements Cast
{
    public function cast(DataProperty $property, mixed $value, array $properties, CreationContext $context): array
    {
        return (new Collection($value))
            ->map(static fn (string $path) => Str::replace(['\\', '/'], DIRECTORY_SEPARATOR, $path))
            ->filter()
            ->all();
    }
}


================================================
FILE: src/Data/Casts/Config/PathCast.php
================================================
<?php

declare(strict_types=1);

namespace DragonCode\LaravelDeployOperations\Data\Casts\Config;

use Spatie\LaravelData\Casts\Cast;
use Spatie\LaravelData\Support\Creation\CreationContext;
use Spatie\LaravelData\Support\DataProperty;

use function rtrim;

class PathCast implements Cast
{
    public function cast(DataProperty $property, mixed $value, array $properties, CreationContext $context): string
    {
        return rtrim($value, '\\/') . DIRECTORY_SEPARATOR;
    }
}


================================================
FILE: src/Data/Casts/OperationNameCast.php
================================================
<?php

declare(strict_types=1);

namespace DragonCode\LaravelDeployOperations\Data\Casts;

use DragonCode\Support\Facades\Helpers\Str;
use Spatie\LaravelData\Casts\Cast;
use Spatie\LaravelData\Support\Creation\CreationContext;
use Spatie\LaravelData\Support\DataProperty;

class OperationNameCast implements Cast
{
    public function cast(DataProperty $property, mixed $value, array $properties, CreationContext $context): ?string
    {
        if (empty($value)) {
            return null;
        }

        return Str::of($value)
            ->replace('\\', '/')
            ->replace('.php', '')
            ->explode('/')
            ->map(fn (string $path) => Str::snake($path))
            ->implode(DIRECTORY_SEPARATOR)
            ->toString();
    }
}


================================================
FILE: src/Data/Casts/PathCast.php
================================================
<?php

declare(strict_types=1);

namespace DragonCode\LaravelDeployOperations\Data\Casts;

use DragonCode\LaravelDeployOperations\Data\Config\ConfigData;
use Illuminate\Support\Str;
use Spatie\LaravelData\Casts\Cast;
use Spatie\LaravelData\Support\Creation\CreationContext;
use Spatie\LaravelData\Support\DataProperty;

use function app;
use function realpath;

class PathCast implements Cast
{
    public function cast(DataProperty $property, mixed $value, array $properties, CreationContext $context): string
    {
        $path = $this->config()->path . $value;

        if ($properties['realpath'] ?? false) {
            return $value ?: $path;
        }

        return $this->filename($path) ?: $path;
    }

    protected function filename(string $path): false|string
    {
        return realpath(Str::finish($path, '.php'));
    }

    protected function config(): ConfigData
    {
        return app(ConfigData::class);
    }
}


================================================
FILE: src/Data/Config/ConfigData.php
================================================
<?php

declare(strict_types=1);

namespace DragonCode\LaravelDeployOperations\Data\Config;

use DragonCode\LaravelDeployOperations\Data\Casts\Config\ExcludeCast;
use DragonCode\LaravelDeployOperations\Data\Casts\Config\PathCast;
use Spatie\LaravelData\Attributes\WithCast;
use Spatie\LaravelData\Data;

class ConfigData extends Data
{
    public ?string $connection;

    public string $table;

    #[WithCast(PathCast::class)]
    public string $path;

    #[WithCast(ExcludeCast::class)]
    public ?array $exclude;

    public bool $async;

    public TransactionsData $transactions;

    public QueueData $queue;

    public ShowData $show;
}


================================================
FILE: src/Data/Config/QueueData.php
================================================
<?php

declare(strict_types=1);

namespace DragonCode\LaravelDeployOperations\Data\Config;

use Spatie\LaravelData\Data;

class QueueData extends Data
{
    public ?string $connection;

    public ?string $name;
}


================================================
FILE: src/Data/Config/ShowData.php
================================================
<?php

declare(strict_types=1);

namespace DragonCode\LaravelDeployOperations\Data\Config;

use Spatie\LaravelData\Attributes\MapInputName;
use Spatie\LaravelData\Data;
use Spatie\LaravelData\Mappers\SnakeCaseMapper;

#[MapInputName(SnakeCaseMapper::class)]
class ShowData extends Data
{
    public bool $fullPath;
}


================================================
FILE: src/Data/Config/TransactionsData.php
================================================
<?php

declare(strict_types=1);

namespace DragonCode\LaravelDeployOperations\Data\Config;

use Spatie\LaravelData\Data;

class TransactionsData extends Data
{
    public bool $enabled;

    public int $attempts;
}


================================================
FILE: src/Data/OptionsData.php
================================================
<?php

declare(strict_types=1);

namespace DragonCode\LaravelDeployOperations\Data;

use DragonCode\LaravelDeployOperations\Data\Casts\BoolCast;
use DragonCode\LaravelDeployOperations\Data\Casts\OperationNameCast;
use DragonCode\LaravelDeployOperations\Data\Casts\PathCast;
use Spatie\LaravelData\Attributes\WithCast;
use Spatie\LaravelData\Data;

class OptionsData extends Data
{
    #[WithCast(BoolCast::class)]
    public bool $before = false;

    public ?string $connection = null;

    #[WithCast(BoolCast::class)]
    public bool $force = false;

    #[WithCast(OperationNameCast::class)]
    public ?string $name = null;

    #[WithCast(PathCast::class)]
    public ?string $path = null;

    #[WithCast(BoolCast::class)]
    public bool $realpath = false;

    public ?int $step = null;

    public bool $mute = false;

    public bool $sync = false;

    public static function prepareForPipeline(array $properties): array
    {
        $properties['path'] ??= '';

        return $properties;
    }
}


================================================
FILE: src/Enums/MethodEnum.php
================================================
<?php

declare(strict_types=1);

namespace DragonCode\LaravelDeployOperations\Enums;

enum MethodEnum: string
{
    case Up   = 'up';
    case Down = 'down';
}


================================================
FILE: src/Enums/StatusEnum.php
================================================
<?php

declare(strict_types=1);

namespace DragonCode\LaravelDeployOperations\Enums;

enum StatusEnum
{
    case Ran;
    case Pending;
    case Skipped;

    public function toColor(
Download .txt
gitextract_mm59vhog/

├── .editorconfig
├── .gitattributes
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.yml
│   │   ├── config.yml
│   │   └── feature_request.yml
│   ├── PULL_REQUEST_TEMPLATE.md
│   ├── dependabot.yml
│   ├── preview-updater.yml
│   └── workflows/
│       ├── code-style.yml
│       ├── docs.yml
│       ├── license.yml
│       ├── preview.yml
│       ├── release-drafter.yml
│       └── tests.yml
├── .gitignore
├── LICENSE
├── README.md
├── biome.json
├── composer.json
├── config/
│   └── deploy-operations.php
├── database/
│   └── migrations/
│       ├── 2022_08_18_180137_change_migration_actions_table.php
│       ├── 2023_01_21_172923_rename_migrations_actions_table_to_actions.php
│       ├── 2024_05_21_112438_rename_actions_table_to_operations.php
│       └── 2024_05_21_114318_rename_column_in_operations_table.php
├── docs/
│   ├── cfg/
│   │   └── buildprofiles.xml
│   ├── do.tree
│   ├── docs_libraries.tree
│   ├── snippets/
│   │   ├── actual_file_names.sh
│   │   ├── ask.sh
│   │   ├── async.php
│   │   ├── before_after.sh
│   │   ├── deployer.php
│   │   ├── di_invoke.php
│   │   ├── di_up_down.php
│   │   ├── empty.php
│   │   ├── event_service_provider.php
│   │   ├── events_list.php
│   │   ├── example.php
│   │   ├── example_artisan.php
│   │   ├── except_environment.php
│   │   ├── failed_status.php
│   │   ├── invokable_status.php
│   │   ├── invoke_and_down.php
│   │   ├── listen_events.php
│   │   ├── make_auto.sh
│   │   ├── need_before.php
│   │   ├── nested.sh
│   │   ├── nested_example.sh
│   │   ├── on_environment.php
│   │   ├── on_environments.php
│   │   ├── once_method.php
│   │   ├── operation_helper_all.php
│   │   ├── operation_helper_directory.php
│   │   ├── operation_helper_file.php
│   │   ├── operations_helper.sh
│   │   ├── operations_status.sh
│   │   ├── order_running_operations.sh
│   │   ├── rollback.sh
│   │   ├── some_listener.php
│   │   ├── success_status.php
│   │   ├── with_operation.php
│   │   ├── with_operation_helper.php
│   │   └── within_transactions.php
│   ├── topics/
│   │   ├── artisan-commands.topic
│   │   ├── creating-operations.topic
│   │   ├── customize-stub.topic
│   │   ├── database-data-dumper.topic
│   │   ├── events.topic
│   │   ├── execution-status.topic
│   │   ├── installation.topic
│   │   ├── introduction.topic
│   │   ├── operation-helper.topic
│   │   ├── operations-status.topic
│   │   ├── rolling-back-operations.topic
│   │   ├── running-operations.topic
│   │   ├── snippets_composer.topic
│   │   ├── upgrade-3.topic
│   │   ├── upgrade-4.topic
│   │   ├── upgrade-5.topic
│   │   ├── upgrade-6.topic
│   │   ├── upgrade-7.topic
│   │   └── usage.topic
│   ├── v.list
│   ├── versions.json
│   └── writerside.cfg
├── ide.json
├── phpunit.xml
├── pint.json
├── resources/
│   └── stubs/
│       └── deploy-operation.stub
├── src/
│   ├── Concerns/
│   │   ├── ConfirmableTrait.php
│   │   ├── HasAbout.php
│   │   ├── HasArtisan.php
│   │   ├── HasIsolatable.php
│   │   └── HasOptionable.php
│   ├── Console/
│   │   ├── Command.php
│   │   ├── FreshCommand.php
│   │   ├── InstallCommand.php
│   │   ├── MakeCommand.php
│   │   ├── OperationsCommand.php
│   │   ├── RollbackCommand.php
│   │   └── StatusCommand.php
│   ├── Constants/
│   │   ├── Names.php
│   │   ├── Options.php
│   │   └── Order.php
│   ├── Data/
│   │   ├── Casts/
│   │   │   ├── BoolCast.php
│   │   │   ├── Config/
│   │   │   │   ├── ExcludeCast.php
│   │   │   │   └── PathCast.php
│   │   │   ├── OperationNameCast.php
│   │   │   └── PathCast.php
│   │   ├── Config/
│   │   │   ├── ConfigData.php
│   │   │   ├── QueueData.php
│   │   │   ├── ShowData.php
│   │   │   └── TransactionsData.php
│   │   └── OptionsData.php
│   ├── Enums/
│   │   ├── MethodEnum.php
│   │   └── StatusEnum.php
│   ├── Events/
│   │   ├── BaseEvent.php
│   │   ├── DeployOperationEnded.php
│   │   ├── DeployOperationFailed.php
│   │   ├── DeployOperationStarted.php
│   │   └── NoPendingDeployOperations.php
│   ├── Helpers/
│   │   ├── GitHelper.php
│   │   ├── OperationHelper.php
│   │   └── SorterHelper.php
│   ├── Jobs/
│   │   └── OperationJob.php
│   ├── Listeners/
│   │   ├── Listener.php
│   │   └── MigrationEndedListener.php
│   ├── Notifications/
│   │   └── Notification.php
│   ├── Operation.php
│   ├── Processors/
│   │   ├── FreshProcessor.php
│   │   ├── InstallProcessor.php
│   │   ├── MakeProcessor.php
│   │   ├── OperationsProcessor.php
│   │   ├── Processor.php
│   │   ├── RollbackProcessor.php
│   │   └── StatusProcessor.php
│   ├── Repositories/
│   │   └── OperationsRepository.php
│   ├── ServiceProvider.php
│   ├── Services/
│   │   ├── MigratorService.php
│   │   └── MutexService.php
│   └── helpers.php
└── tests/
    ├── Commands/
    │   ├── EventsTest.php
    │   ├── FreshTest.php
    │   ├── InstallTest.php
    │   ├── MakeTest.php
    │   ├── MutexTest.php
    │   ├── OperationsTest.php
    │   ├── RollbackTest.php
    │   └── StatusTest.php
    ├── Concerns/
    │   ├── AssertDatabase.php
    │   ├── Database.php
    │   ├── Files.php
    │   └── Some.php
    ├── Helpers/
    │   ├── GitTest.php
    │   ├── OperationTest.php
    │   └── SorterTest.php
    ├── TestCase.php
    └── fixtures/
        ├── app/
        │   ├── async/
        │   │   ├── 2021_04_06_212742_every_time.php
        │   │   └── 2023_04_06_212637_foo_bar.php
        │   ├── di/
        │   │   ├── 2022_10_11_234251_invoke.php
        │   │   ├── 2022_10_11_234251_invoke_down.php
        │   │   └── 2022_10_11_234312_up_down.php
        │   ├── empty/
        │   │   ├── .gitkeep
        │   │   └── some.txt
        │   ├── operations/
        │   │   ├── 2020_12_07_153105_foo_bar.php
        │   │   ├── 2021_01_02_020947_every_time.php
        │   │   ├── 2021_05_24_120003_run_on_all.php
        │   │   ├── 2021_05_24_120003_run_on_many_environments.php
        │   │   ├── 2021_05_24_120003_run_on_production.php
        │   │   ├── 2021_05_24_120003_run_on_testing.php
        │   │   ├── 2021_06_07_132849_run_except_production.php
        │   │   ├── 2021_06_07_132917_run_except_testing.php
        │   │   ├── 2021_06_07_134045_run_except_many_environments.php
        │   │   ├── 2021_10_26_143247_run_allow.php
        │   │   ├── 2021_10_26_143304_run_disallow.php
        │   │   ├── 2021_12_23_165047_run_success.php
        │   │   ├── 2021_12_23_184029_run_failed.php
        │   │   ├── 2022_08_17_135147_test_before_enabled.php
        │   │   ├── 2022_08_17_135153_test_before_disabled.php
        │   │   └── sub_path/
        │   │       ├── 2021_12_15_205804_baz.php
        │   │       └── 2022_10_27_230732_foo.php
        │   ├── operations_failed/
        │   │   ├── 2021_12_23_165048_run_success_on_failed.php
        │   │   └── 2021_12_23_184029_run_failed_failure.php
        │   ├── stubs/
        │   │   ├── 2021_02_15_124237_test_success_transactions.stub
        │   │   ├── 2021_02_15_124852_test_failed_transactions.stub
        │   │   ├── customized.stub
        │   │   └── make_example.stub
        │   └── via_migrations/
        │       ├── 2025_03_31_213407_custom.php
        │       ├── 2025_03_31_234251_invoke.php
        │       └── 2025_03_31_234312_up_down.php
        ├── migrations/
        │   ├── 2020_12_07_164624_create_test_table.php
        │   ├── 2021_01_02_022431_create_every_time_table.php
        │   ├── 2021_02_15_124419_create_transactions_table.php
        │   ├── 2021_05_24_122027_create_environment_table.php
        │   ├── 2021_12_23_165218_create_success_table.php
        │   ├── 2021_12_23_184434_create_failed_table.php
        │   └── 2022_08_17_150549_create_before_table.php
        └── migrations_with_operations/
            ├── 2025_03_31_213847_call_invokable.php
            └── 2025_03_31_213921_call_up_down.php
Download .txt
SYMBOL INDEX (496 symbols across 128 files)

FILE: database/migrations/2022_08_18_180137_change_migration_actions_table.php
  method up (line 11) | public function up(): void
  method down (line 24) | public function down(): void
  method hasTable (line 35) | protected function hasTable(): bool
  method hasColumn (line 40) | protected function hasColumn(string $column): bool
  method doesntHaveColumn (line 45) | protected function doesntHaveColumn(string $column): bool
  method table (line 50) | protected function table(): string

FILE: database/migrations/2023_01_21_172923_rename_migrations_actions_table_to_actions.php
  method up (line 10) | public function up(): void
  method down (line 19) | public function down(): void
  method validateTable (line 28) | protected function validateTable(string $name): void
  method doesntSame (line 35) | protected function doesntSame(string $first, string $second): bool
  method table (line 40) | protected function table(): string

FILE: database/migrations/2024_05_21_112438_rename_actions_table_to_operations.php
  method up (line 10) | public function up(): void
  method down (line 19) | public function down(): void
  method validateTable (line 28) | protected function validateTable(string $name): void
  method doesntSame (line 35) | protected function doesntSame(string $first, string $second): bool
  method table (line 40) | protected function table(): string

FILE: database/migrations/2024_05_21_114318_rename_column_in_operations_table.php
  method up (line 11) | public function up(): void
  method down (line 16) | public function down(): void
  method rename (line 21) | protected function rename(string $from, string $to): void
  method table (line 28) | protected function table(): string

FILE: docs/snippets/async.php
  method __invoke (line 8) | public function __invoke()
  method shouldBeAsync (line 13) | public function shouldBeAsync(): bool

FILE: docs/snippets/di_invoke.php
  method __invoke (line 9) | public function __invoke(Some $some): void

FILE: docs/snippets/di_up_down.php
  method up (line 9) | public function up(Some $some): void
  method down (line 14) | public function down(Some $some): void

FILE: docs/snippets/empty.php
  method __invoke (line 8) | public function __invoke(): void

FILE: docs/snippets/event_service_provider.php
  class EventServiceProvider (line 14) | class EventServiceProvider extends ServiceProvider

FILE: docs/snippets/example.php
  method __invoke (line 9) | public function __invoke(): void

FILE: docs/snippets/example_artisan.php
  method __invoke (line 8) | public function __invoke(): void

FILE: docs/snippets/except_environment.php
  method __invoke (line 8) | public function __invoke()
  method shouldRun (line 13) | public function shouldRun(): bool

FILE: docs/snippets/failed_status.php
  method up (line 9) | public function up(): void
  method down (line 14) | public function down(): void
  method success (line 19) | public function success(): void
  method failed (line 24) | public function failed(): void

FILE: docs/snippets/invokable_status.php
  method __invoke (line 9) | public function __invoke(): void
  method success (line 14) | public function success(): void
  method failed (line 19) | public function failed(): void

FILE: docs/snippets/invoke_and_down.php
  method __invoke (line 9) | public function __invoke(): void {}
  method down (line 13) | public function down(): void {}

FILE: docs/snippets/listen_events.php
  class AppServiceProvider (line 13) | class AppServiceProvider extends ServiceProvider
    method boot (line 15) | public function boot(): void

FILE: docs/snippets/need_before.php
  method __invoke (line 8) | public function __invoke()
  method needBefore (line 13) | public function needBefore(): bool

FILE: docs/snippets/on_environment.php
  method __invoke (line 8) | public function __invoke()
  method shouldRun (line 13) | public function shouldRun(): bool

FILE: docs/snippets/on_environments.php
  method __invoke (line 8) | public function __invoke()
  method shouldRun (line 13) | public function shouldRun(): bool

FILE: docs/snippets/once_method.php
  method __invoke (line 8) | public function __invoke()
  method shouldOnce (line 13) | public function shouldOnce(): bool

FILE: docs/snippets/some_listener.php
  class SomeOperationsListener (line 9) | class SomeOperationsListener
    method handle (line 11) | public function handle(BaseEvent $event): void

FILE: docs/snippets/success_status.php
  method up (line 9) | public function up(): void
  method down (line 14) | public function down(): void
  method success (line 19) | public function success(): void
  method failed (line 24) | public function failed(): void

FILE: docs/snippets/with_operation.php
  method __invoke (line 8) | public function __invoke()
  method withOperation (line 13) | public function withOperation(): string

FILE: docs/snippets/with_operation_helper.php
  method withOperation (line 10) | public function withOperation(): string

FILE: docs/snippets/within_transactions.php
  method __invoke (line 8) | public function __invoke()
  method withinTransactions (line 13) | public function withinTransactions(): bool

FILE: src/Concerns/ConfirmableTrait.php
  type ConfirmableTrait (line 9) | trait ConfirmableTrait
    method allowToProceed (line 15) | protected function allowToProceed(): bool

FILE: src/Concerns/HasAbout.php
  type HasAbout (line 11) | trait HasAbout
    method registerAbout (line 15) | protected function registerAbout(): void
    method getPackageName (line 22) | protected function getPackageName(): string
    method getPackageVersion (line 32) | protected function getPackageVersion(): string

FILE: src/Concerns/HasArtisan.php
  type HasArtisan (line 10) | trait HasArtisan
    method artisan (line 12) | protected function artisan(string $command, array $parameters = [], ?O...

FILE: src/Concerns/HasIsolatable.php
  type HasIsolatable (line 13) | trait HasIsolatable
    method isolationMutex (line 15) | protected function isolationMutex(): MutexService
    method isolatedStatusCode (line 20) | protected function isolatedStatusCode(): int
    method getIsolateOption (line 29) | protected function getIsolateOption(): bool|int
    method hasIsolateOption (line 34) | protected function hasIsolateOption(): bool

FILE: src/Concerns/HasOptionable.php
  type HasOptionable (line 15) | trait HasOptionable
    method configure (line 26) | protected function configure(): void
    method getOptions (line 31) | protected function getOptions(): array
    method getArguments (line 38) | protected function getArguments(): array
    method availableArguments (line 45) | protected function availableArguments(): array
    method availableOptions (line 56) | protected function availableOptions(): array

FILE: src/Console/Command.php
  class Command (line 20) | abstract class Command extends BaseCommand
    method handle (line 28) | public function handle(): int
    method execute (line 39) | protected function execute(InputInterface $input, OutputInterface $out...
    method resolveProcessor (line 56) | protected function resolveProcessor(): Processor
    method getOptionsData (line 65) | protected function getOptionsData(): OptionsData

FILE: src/Console/FreshCommand.php
  class FreshCommand (line 12) | class FreshCommand extends Command

FILE: src/Console/InstallCommand.php
  class InstallCommand (line 11) | class InstallCommand extends Command

FILE: src/Console/MakeCommand.php
  class MakeCommand (line 12) | class MakeCommand extends Command

FILE: src/Console/OperationsCommand.php
  class OperationsCommand (line 12) | class OperationsCommand extends Command

FILE: src/Console/RollbackCommand.php
  class RollbackCommand (line 12) | class RollbackCommand extends Command

FILE: src/Console/StatusCommand.php
  class StatusCommand (line 12) | class StatusCommand extends Command

FILE: src/Constants/Names.php
  class Names (line 7) | class Names

FILE: src/Constants/Options.php
  class Options (line 7) | class Options

FILE: src/Constants/Order.php
  class Order (line 7) | class Order

FILE: src/Data/Casts/BoolCast.php
  class BoolCast (line 12) | class BoolCast implements Cast
    method cast (line 14) | public function cast(DataProperty $property, mixed $value, array $prop...

FILE: src/Data/Casts/Config/ExcludeCast.php
  class ExcludeCast (line 13) | class ExcludeCast implements Cast
    method cast (line 15) | public function cast(DataProperty $property, mixed $value, array $prop...

FILE: src/Data/Casts/Config/PathCast.php
  class PathCast (line 13) | class PathCast implements Cast
    method cast (line 15) | public function cast(DataProperty $property, mixed $value, array $prop...

FILE: src/Data/Casts/OperationNameCast.php
  class OperationNameCast (line 12) | class OperationNameCast implements Cast
    method cast (line 14) | public function cast(DataProperty $property, mixed $value, array $prop...

FILE: src/Data/Casts/PathCast.php
  class PathCast (line 16) | class PathCast implements Cast
    method cast (line 18) | public function cast(DataProperty $property, mixed $value, array $prop...
    method filename (line 29) | protected function filename(string $path): false|string
    method config (line 34) | protected function config(): ConfigData

FILE: src/Data/Config/ConfigData.php
  class ConfigData (line 12) | class ConfigData extends Data

FILE: src/Data/Config/QueueData.php
  class QueueData (line 9) | class QueueData extends Data

FILE: src/Data/Config/ShowData.php
  class ShowData (line 11) | #[MapInputName(SnakeCaseMapper::class)]

FILE: src/Data/Config/TransactionsData.php
  class TransactionsData (line 9) | class TransactionsData extends Data

FILE: src/Data/OptionsData.php
  class OptionsData (line 13) | class OptionsData extends Data
    method prepareForPipeline (line 38) | public static function prepareForPipeline(array $properties): array

FILE: src/Enums/StatusEnum.php
  method toColor (line 13) | public function toColor(): string

FILE: src/Events/BaseEvent.php
  class BaseEvent (line 9) | abstract class BaseEvent
    method __construct (line 11) | public function __construct(

FILE: src/Events/DeployOperationEnded.php
  class DeployOperationEnded (line 7) | class DeployOperationEnded extends BaseEvent {}

FILE: src/Events/DeployOperationFailed.php
  class DeployOperationFailed (line 7) | class DeployOperationFailed extends BaseEvent {}

FILE: src/Events/DeployOperationStarted.php
  class DeployOperationStarted (line 7) | class DeployOperationStarted extends BaseEvent {}

FILE: src/Events/NoPendingDeployOperations.php
  class NoPendingDeployOperations (line 7) | class NoPendingDeployOperations extends BaseEvent {}

FILE: src/Helpers/GitHelper.php
  class GitHelper (line 15) | class GitHelper
    method currentBranch (line 17) | public function currentBranch(?string $path = null): ?string
    method exec (line 26) | protected function exec(string $command, ?string $path = null): ?string
    method hasGitDirectory (line 31) | protected function hasGitDirectory(?string $path = null): bool
    method resolvePath (line 40) | protected function resolvePath(?string $path = null): string

FILE: src/Helpers/OperationHelper.php
  class OperationHelper (line 12) | class OperationHelper
    method run (line 14) | public static function run(?string $path = null, ?bool $realpath = nul...

FILE: src/Helpers/SorterHelper.php
  class SorterHelper (line 13) | class SorterHelper
    method byValues (line 15) | public function byValues(array $items): array
    method byKeys (line 20) | public function byKeys(array $items): array
    method byRan (line 25) | public function byRan(array $values, array $completed): array
    method callback (line 36) | protected function callback(): Closure

FILE: src/Jobs/OperationJob.php
  class OperationJob (line 20) | class OperationJob implements ShouldBeUnique, ShouldQueue
    method __construct (line 27) | public function __construct(
    method handle (line 34) | public function handle(): void
    method uniqueId (line 42) | public function uniqueId(): string
    method config (line 47) | protected function config(): ConfigData

FILE: src/Listeners/Listener.php
  class Listener (line 15) | abstract class Listener
    method withOperation (line 17) | protected function withOperation(Migration $migration): ?string
    method run (line 26) | protected function run(string $method, string $operation): void
    method call (line 34) | protected function call(string $command, string $filename, array $para...

FILE: src/Listeners/MigrationEndedListener.php
  class MigrationEndedListener (line 9) | class MigrationEndedListener extends Listener
    method handle (line 11) | public function handle(MigrationEnded $event): void

FILE: src/Notifications/Notification.php
  class Notification (line 12) | class Notification
    method line (line 22) | public function line(string $string, ?string $style = null): void
    method info (line 29) | public function info(string $string): void
    method warning (line 36) | public function warning(string $string): void
    method task (line 43) | public function task(string $description, Closure $task): void
    method twoColumn (line 54) | public function twoColumn(string $first, string $second): void
    method components (line 61) | protected function components(): Factory
    method setOutput (line 66) | public function setOutput(OutputStyle $output, bool $silent = false): ...
    method canSpeak (line 74) | protected function canSpeak(): bool

FILE: src/Operation.php
  class Operation (line 12) | abstract class Operation
    method shouldOnce (line 22) | public function shouldOnce(): bool
    method withinTransactions (line 28) | public function withinTransactions(): bool
    method shouldRun (line 34) | public function shouldRun(): bool
    method needBefore (line 40) | public function needBefore(): bool
    method needAsync (line 46) | public function needAsync(): bool
    method success (line 52) | public function success(): void {}
    method failed (line 55) | public function failed(): void {}

FILE: src/Processors/FreshProcessor.php
  class FreshProcessor (line 10) | class FreshProcessor extends Processor
    method handle (line 12) | public function handle(): void
    method drop (line 18) | protected function drop(): void
    method operations (line 25) | protected function operations(): void

FILE: src/Processors/InstallProcessor.php
  class InstallProcessor (line 11) | class InstallProcessor extends Processor
    method handle (line 13) | public function handle(): void
    method isFile (line 27) | protected function isFile(string $path): bool
    method exists (line 32) | protected function exists(): bool
    method create (line 37) | protected function create(): void
    method ensureDirectory (line 42) | protected function ensureDirectory(): void

FILE: src/Processors/MakeProcessor.php
  class MakeProcessor (line 17) | class MakeProcessor extends Processor
    method handle (line 23) | public function handle(): void
    method message (line 30) | protected function message(string $path): string
    method create (line 35) | protected function create(string $path): void
    method displayName (line 40) | protected function displayName(string $path): string
    method getName (line 49) | protected function getName(): string
    method getPath (line 56) | protected function getPath(): string
    method getFullPath (line 61) | protected function getFullPath(): string
    method getFilename (line 66) | protected function getFilename(string $branch): string
    method getBranchName (line 81) | protected function getBranchName(): string
    method askForName (line 94) | protected function askForName(): string
    method promptForName (line 101) | protected function promptForName(): array
    method getTime (line 106) | protected function getTime(): string
    method stubPath (line 111) | protected function stubPath(): string
    method showFullPath (line 120) | protected function showFullPath(): bool

FILE: src/Processors/OperationsProcessor.php
  class OperationsProcessor (line 17) | class OperationsProcessor extends Processor
    method handle (line 19) | public function handle(): void
    method showCaption (line 26) | protected function showCaption(): void
    method ensureRepository (line 31) | protected function ensureRepository(): void
    method runOperations (line 40) | protected function runOperations(array $completed): void
    method runEach (line 61) | protected function runEach(array $files, int $batch): void
    method run (line 68) | protected function run(string $filename, int $batch): void
    method getNewFiles (line 73) | protected function getNewFiles(array $completed): array
    method getCompleted (line 81) | protected function getCompleted(): array
    method getBatch (line 86) | protected function getBatch(): int

FILE: src/Processors/Processor.php
  class Processor (line 26) | abstract class Processor
    method handle (line 30) | abstract public function handle(): void;
    method __construct (line 32) | public function __construct(
    method getFiles (line 50) | protected function getFiles(string $path, ?Closure $filter = null): array
    method runCommand (line 66) | protected function runCommand(string $command, array $options = []): void
    method tableNotFound (line 71) | protected function tableNotFound(): bool
    method fireEvent (line 82) | protected function fireEvent(string $event, MethodEnum $method): void
    method isFile (line 87) | protected function isFile(string $path): bool

FILE: src/Processors/RollbackProcessor.php
  class RollbackProcessor (line 12) | class RollbackProcessor extends Processor
    method handle (line 14) | public function handle(): void
    method showCaption (line 36) | protected function showCaption(): void
    method run (line 41) | protected function run(array $rows): void
    method getOperations (line 48) | protected function getOperations(?int $step): array
    method rollback (line 55) | protected function rollback(string $item): void
    method nothingToRollback (line 60) | protected function nothingToRollback(): bool
    method count (line 71) | protected function count(): int

FILE: src/Processors/StatusProcessor.php
  class StatusProcessor (line 12) | class StatusProcessor extends Processor
    method handle (line 18) | public function handle(): void
    method showCaption (line 37) | protected function showCaption(): void
    method showHeaders (line 42) | protected function showHeaders(): void
    method showStatus (line 47) | protected function showStatus(array $items, array $completed): void
    method merge (line 56) | protected function merge(array $items, array $completed): array
    method getData (line 61) | protected function getData(): array
    method getStatusFor (line 69) | protected function getStatusFor(array $completed, string $item): string
    method getCompleted (line 78) | protected function getCompleted(): array
    method isEmpty (line 85) | protected function isEmpty(array $items, array $completed): bool

FILE: src/Repositories/OperationsRepository.php
  class OperationsRepository (line 18) | class OperationsRepository
    method __construct (line 22) | public function __construct(
    method getCompleted (line 27) | public function getCompleted(): Collection
    method getByStep (line 32) | public function getByStep(int $steps): array
    method getLast (line 40) | public function getLast(): array
    method getNextBatchNumber (line 48) | public function getNextBatchNumber(): int
    method getLastBatchNumber (line 53) | public function getLastBatchNumber(): int
    method log (line 58) | public function log(string $operation, int $batch): void
    method delete (line 63) | public function delete(string $operation): void
    method createRepository (line 68) | public function createRepository(): void
    method repositoryExists (line 79) | public function repositoryExists(): bool
    method deleteRepository (line 84) | public function deleteRepository(): void
    method getBatchNumbers (line 90) | protected function getBatchNumbers(int $steps): array
    method sortedTable (line 99) | protected function sortedTable(string $order = Order::Asc): Query
    method schema (line 106) | protected function schema(): Builder
    method table (line 111) | protected function table(): Query
    method getConnection (line 116) | protected function getConnection(): ConnectionInterface
    method setConnection (line 123) | public function setConnection(?string $connection): self

FILE: src/ServiceProvider.php
  class ServiceProvider (line 16) | class ServiceProvider extends BaseServiceProvider
    method boot (line 20) | public function boot(): void
    method register (line 35) | public function register(): void
    method registerCommands (line 40) | protected function registerCommands(): void
    method registerEvents (line 52) | protected function registerEvents(): void
    method registerMigrations (line 57) | protected function registerMigrations(): void
    method publishConfig (line 62) | protected function publishConfig(): void
    method publishStub (line 69) | protected function publishStub(): void
    method registerConfig (line 78) | protected function registerConfig(): void
    method bootConfig (line 83) | protected function bootConfig(): void

FILE: src/Services/MigratorService.php
  class MigratorService (line 27) | class MigratorService
    method __construct (line 29) | public function __construct(
    method setConnection (line 37) | public function setConnection(?string $connection): self
    method setOutput (line 44) | public function setOutput(OutputStyle $output): self
    method runUp (line 51) | public function runUp(string $filename, int $batch, OptionsData $optio...
    method runDown (line 82) | public function runDown(string $filename, OptionsData $options): void
    method runOperation (line 94) | protected function runOperation(Operation $operation, string $method):...
    method hasMethod (line 109) | protected function hasMethod(Operation $operation, string $method): bool
    method needAsync (line 114) | protected function needAsync(Operation $operation, OptionsData $option...
    method runMethod (line 119) | protected function runMethod(Operation $operation, string $method, boo...
    method log (line 126) | protected function log(string $name, int $batch): void
    method deleteLog (line 131) | protected function deleteLog(string $name): void
    method allowOperation (line 136) | protected function allowOperation(Operation $operation, OptionsData $o...
    method disallowBefore (line 145) | protected function disallowBefore(Operation $operation, OptionsData $o...
    method resolvePath (line 150) | protected function resolvePath(string $filename, string $path): string
    method resolveOperation (line 165) | protected function resolveOperation(string $path): Operation
    method resolveOperationName (line 174) | protected function resolveOperationName(string $path): string

FILE: src/Services/MutexService.php
  class MutexService (line 12) | class MutexService
    method __construct (line 16) | public function __construct(
    method create (line 20) | public function create(Command $command): bool
    method forget (line 25) | public function forget(Command $command): void
    method store (line 32) | protected function store(): Repository
    method ttl (line 37) | protected function ttl(): CarbonInterval
    method name (line 42) | protected function name(Command $command): string

FILE: src/helpers.php
  function operation (line 8) | function operation(string $filename): string

FILE: tests/Commands/EventsTest.php
  class EventsTest (line 16) | class EventsTest extends TestCase
    method testSuccess (line 18) | public function testSuccess(): void
    method testFailed (line 32) | public function testFailed(): void

FILE: tests/Commands/FreshTest.php
  class FreshTest (line 10) | class FreshTest extends TestCase
    method testFreshCommand (line 12) | public function testFreshCommand(): void

FILE: tests/Commands/InstallTest.php
  class InstallTest (line 11) | class InstallTest extends TestCase
    method testCreate (line 13) | public function testCreate(): void
    method testAlreadyCreated (line 22) | public function testAlreadyCreated(): void
    method testMutedCreate (line 32) | public function testMutedCreate(): void
    method testMutedAlreadyCreated (line 41) | public function testMutedAlreadyCreated(): void

FILE: tests/Commands/MakeTest.php
  class MakeTest (line 11) | class MakeTest extends TestCase
    method testMakingFiles (line 13) | public function testMakingFiles(): void
    method testAskedName (line 31) | public function testAskedName(): void
    method testAutoName (line 44) | public function testAutoName(): void
    method testNestedRightSlashWithoutExtension (line 57) | public function testNestedRightSlashWithoutExtension(): void
    method testNestedRightSlashWithExtension (line 75) | public function testNestedRightSlashWithExtension(): void
    method testNestedLeftSlashWithoutExtension (line 93) | public function testNestedLeftSlashWithoutExtension(): void
    method testNestedLeftSlashWithExtension (line 111) | public function testNestedLeftSlashWithExtension(): void
    method testFromCustomizedStub (line 129) | public function testFromCustomizedStub(): void

FILE: tests/Commands/MutexTest.php
  class MutexTest (line 16) | class MutexTest extends TestCase
    method setUp (line 22) | protected function setUp(): void
    method testCanRunIsolatedCommandIfNotBlocked (line 42) | public function testCanRunIsolatedCommandIfNotBlocked(): void
    method testCannotRunIsolatedCommandIfBlocked (line 56) | public function testCannotRunIsolatedCommandIfBlocked(): void
    method testCanRunCommandAgainAfterOtherCommandFinished (line 70) | public function testCanRunCommandAgainAfterOtherCommandFinished(): void
    method testCanRunCommandAgainNonAutomated (line 85) | public function testCanRunCommandAgainNonAutomated(): void
    method runCommand (line 94) | protected function runCommand($withIsolated = true)

FILE: tests/Commands/OperationsTest.php
  class OperationsTest (line 18) | class OperationsTest extends TestCase
    method testSuccess (line 20) | public function testSuccess(): void
    method testSameName (line 36) | public function testSameName(): void
    method testOnce (line 56) | public function testOnce(): void
    method testSuccessTransaction (line 89) | public function testSuccessTransaction(): void
    method testFailedTransaction (line 107) | public function testFailedTransaction(): void
    method testSingleEnvironment (line 131) | public function testSingleEnvironment(): void
    method testManyEnvironments (line 166) | public function testManyEnvironments(): void
    method testAllow (line 207) | public function testAllow(): void
    method testUpSuccess (line 233) | public function testUpSuccess(): void
    method testUpSuccessOnFailed (line 251) | public function testUpSuccessOnFailed(): void
    method testUpFailed (line 285) | public function testUpFailed(): void
    method testUpFailedOnException (line 303) | public function testUpFailedOnException(): void
    method testPathAsFileWithExtension (line 337) | public function testPathAsFileWithExtension(): void
    method testPathAsFileWithoutExtension (line 359) | public function testPathAsFileWithoutExtension(): void
    method testPathAsDirectory (line 381) | public function testPathAsDirectory(): void
    method testOperationsNotFound (line 403) | public function testOperationsNotFound(): void
    method testDisabledBefore (line 414) | public function testDisabledBefore(): void
    method testEnabledBefore (line 440) | public function testEnabledBefore(): void
    method testMixedBefore (line 466) | public function testMixedBefore(): void
    method testDI (line 504) | public function testDI(): void
    method testSorting (line 532) | public function testSorting(): void
    method testDirectoryExclusion (line 564) | public function testDirectoryExclusion(): void
    method testFileExclusion (line 616) | public function testFileExclusion(): void
    method testEmptyDirectory (line 663) | public function testEmptyDirectory(): void
    method testAsync (line 680) | public function testAsync(): void
    method testSync (line 716) | public function testSync(): void
    method testViaMigrationMethod (line 753) | public function testViaMigrationMethod(): void

FILE: tests/Commands/RollbackTest.php
  class RollbackTest (line 13) | class RollbackTest extends TestCase
    method testRollbackCommand (line 15) | public function testRollbackCommand(): void
    method testEnvironment (line 57) | public function testEnvironment(): void
    method testDownSuccess (line 90) | public function testDownSuccess(): void
    method testDownSuccessOnFailed (line 113) | public function testDownSuccessOnFailed(): void
    method testDownFailed (line 153) | public function testDownFailed(): void
    method testUpFailedOnException (line 176) | public function testUpFailedOnException(): void
    method testDisabledBefore (line 212) | public function testDisabledBefore(): void
    method testEnabledBefore (line 240) | public function testEnabledBefore(): void
    method testDI (line 268) | public function testDI(): void

FILE: tests/Commands/StatusTest.php
  class StatusTest (line 10) | class StatusTest extends TestCase
    method testNotFound (line 12) | public function testNotFound(): void
    method testStatusCommand (line 21) | public function testStatusCommand(): void

FILE: tests/Concerns/AssertDatabase.php
  type AssertDatabase (line 11) | trait AssertDatabase
    method assertDatabaseHasTable (line 13) | protected function assertDatabaseHasTable(string $table): void
    method assertDatabaseDoesntTable (line 20) | protected function assertDatabaseDoesntTable(string $table): void
    method assertDatabaseOperationHas (line 27) | protected function assertDatabaseOperationHas(
    method assertDatabaseHasLike (line 36) | protected function assertDatabaseHasLike(string $table, string $column...
    method assertDatabaseOperationDoesntLike (line 46) | protected function assertDatabaseOperationDoesntLike(
    method assertDatabaseDoesntLike (line 55) | protected function assertDatabaseDoesntLike(string $table, string $col...
    method hasTable (line 65) | protected function hasTable(string $table): bool

FILE: tests/Concerns/Database.php
  type Database (line 7) | trait Database
    method setDatabase (line 13) | protected function setDatabase($app): void
    method freshDatabase (line 27) | protected function freshDatabase(): void

FILE: tests/Concerns/Files.php
  type Files (line 11) | trait Files
    method freshFiles (line 13) | protected function freshFiles(): void
    method copyFiles (line 21) | protected function copyFiles(): void
    method copyAsync (line 29) | protected function copyAsync(): void
    method copyEmptyDirectory (line 37) | protected function copyEmptyDirectory(): void
    method copyDI (line 45) | protected function copyDI(): void
    method copyViaMigrations (line 53) | protected function copyViaMigrations(): void
    method copySuccessFailureMethod (line 61) | protected function copySuccessFailureMethod(): void
    method copyFailedMethod (line 69) | protected function copyFailedMethod(): void
    method copySuccessTransaction (line 77) | protected function copySuccessTransaction(): void
    method copyFailedTransaction (line 85) | protected function copyFailedTransaction(): void
    method targetDirectory (line 93) | protected function targetDirectory(string $path = ''): string
    method stubsDirectory (line 102) | protected function stubsDirectory(): string
    method getOperationsPath (line 107) | protected function getOperationsPath(): string

FILE: tests/Concerns/Some.php
  class Some (line 7) | class Some
    method get (line 9) | public function get(string $value): string

FILE: tests/Helpers/GitTest.php
  class GitTest (line 10) | class GitTest extends TestCase
    method testCurrentBranchNull (line 12) | public function testCurrentBranchNull(): void
    method testCurrentBranch (line 17) | public function testCurrentBranch(): void
    method git (line 24) | protected function git(): GitHelper

FILE: tests/Helpers/OperationTest.php
  class OperationTest (line 11) | class OperationTest extends TestCase
    method testSuccess (line 13) | public function testSuccess(): void
    method testPath (line 30) | public function testPath(): void

FILE: tests/Helpers/SorterTest.php
  class SorterTest (line 10) | class SorterTest extends TestCase
    method testByValues (line 12) | public function testByValues(): void
    method testByKeys (line 35) | public function testByKeys(): void
    method testByRan (line 58) | public function testByRan(): void
    method sorter (line 87) | protected function sorter(): SorterHelper

FILE: tests/TestCase.php
  class TestCase (line 19) | abstract class TestCase extends BaseTestCase
    method setUp (line 26) | protected function setUp(): void
    method getPackageProviders (line 34) | protected function getPackageProviders($app): array
    method getEnvironmentSetUp (line 42) | protected function getEnvironmentSetUp($app): void
    method table (line 49) | protected function table(): Builder
    method repository (line 54) | protected function repository(): OperationsRepository

FILE: tests/fixtures/app/async/2021_04_06_212742_every_time.php
  method __invoke (line 11) | public function __invoke(): void
  method table (line 18) | protected function table(): Builder
  method shouldOnce (line 23) | public function shouldOnce(): bool
  method needAsync (line 28) | public function needAsync(): bool

FILE: tests/fixtures/app/async/2023_04_06_212637_foo_bar.php
  method __invoke (line 11) | public function __invoke(): void
  method table (line 18) | protected function table(): Builder
  method needAsync (line 23) | public function needAsync(): bool

FILE: tests/fixtures/app/di/2022_10_11_234251_invoke.php
  method __invoke (line 11) | public function __invoke(Some $some): void
  method table (line 18) | protected function table(): Builder

FILE: tests/fixtures/app/di/2022_10_11_234251_invoke_down.php
  method __invoke (line 11) | public function __invoke(Some $some): void
  method down (line 18) | public function down(Some $some): void
  method table (line 25) | protected function table(): Builder

FILE: tests/fixtures/app/di/2022_10_11_234312_up_down.php
  method up (line 11) | public function up(Some $some): void
  method down (line 18) | public function down(Some $some): void
  method table (line 25) | protected function table(): Builder

FILE: tests/fixtures/app/operations/2020_12_07_153105_foo_bar.php
  method up (line 11) | public function up(): void
  method down (line 18) | public function down(): void
  method table (line 23) | protected function table(): Builder

FILE: tests/fixtures/app/operations/2021_01_02_020947_every_time.php
  method up (line 11) | public function up(): void
  method table (line 18) | protected function table(): Builder
  method shouldOnce (line 23) | public function shouldOnce(): bool

FILE: tests/fixtures/app/operations/2021_05_24_120003_run_on_all.php
  method up (line 11) | public function up(): void
  method down (line 18) | public function down(): void
  method table (line 25) | protected function table(): Builder

FILE: tests/fixtures/app/operations/2021_05_24_120003_run_on_many_environments.php
  method up (line 11) | public function up(): void
  method down (line 18) | public function down(): void
  method table (line 25) | protected function table(): Builder
  method shouldRun (line 30) | public function shouldRun(): bool

FILE: tests/fixtures/app/operations/2021_05_24_120003_run_on_production.php
  method up (line 11) | public function up(): void
  method down (line 18) | public function down(): void
  method table (line 25) | protected function table(): Builder
  method shouldRun (line 30) | public function shouldRun(): bool

FILE: tests/fixtures/app/operations/2021_05_24_120003_run_on_testing.php
  method up (line 11) | public function up(): void
  method down (line 18) | public function down(): void
  method table (line 25) | protected function table(): Builder
  method shouldRun (line 30) | public function shouldRun(): bool

FILE: tests/fixtures/app/operations/2021_06_07_132849_run_except_production.php
  method up (line 11) | public function up(): void
  method down (line 18) | public function down(): void
  method table (line 25) | protected function table(): Builder
  method shouldRun (line 30) | public function shouldRun(): bool

FILE: tests/fixtures/app/operations/2021_06_07_132917_run_except_testing.php
  method up (line 11) | public function up(): void
  method down (line 18) | public function down(): void
  method table (line 25) | protected function table(): Builder
  method shouldRun (line 30) | public function shouldRun(): bool

FILE: tests/fixtures/app/operations/2021_06_07_134045_run_except_many_environments.php
  method up (line 11) | public function up(): void
  method down (line 18) | public function down(): void
  method table (line 25) | protected function table(): Builder
  method shouldRun (line 30) | public function shouldRun(): bool

FILE: tests/fixtures/app/operations/2021_10_26_143247_run_allow.php
  method up (line 11) | public function up(): void
  method down (line 18) | public function down(): void
  method table (line 25) | protected function table(): Builder

FILE: tests/fixtures/app/operations/2021_10_26_143304_run_disallow.php
  method up (line 11) | public function up(): void
  method down (line 18) | public function down(): void
  method table (line 25) | protected function table(): Builder
  method shouldRun (line 30) | public function shouldRun(): bool

FILE: tests/fixtures/app/operations/2021_12_23_165047_run_success.php
  method up (line 11) | public function up(): void
  method down (line 18) | public function down(): void
  method success (line 25) | public function success(): void
  method table (line 32) | protected function table(): Builder

FILE: tests/fixtures/app/operations/2021_12_23_184029_run_failed.php
  method up (line 11) | public function up(): void {}
  method down (line 13) | public function down(): void {}
  method failed (line 15) | public function failed(): void
  method table (line 22) | protected function table(): Builder

FILE: tests/fixtures/app/operations/2022_08_17_135147_test_before_enabled.php
  method up (line 11) | public function up(): void
  method down (line 18) | public function down(): void
  method table (line 25) | protected function table(): Builder
  method needBefore (line 30) | public function needBefore(): bool

FILE: tests/fixtures/app/operations/2022_08_17_135153_test_before_disabled.php
  method up (line 11) | public function up(): void
  method down (line 18) | public function down(): void
  method table (line 25) | protected function table(): Builder
  method needBefore (line 30) | public function needBefore(): bool

FILE: tests/fixtures/app/operations/sub_path/2021_12_15_205804_baz.php
  method up (line 11) | public function up(): void
  method down (line 18) | public function down(): void
  method table (line 23) | protected function table(): Builder

FILE: tests/fixtures/app/operations/sub_path/2022_10_27_230732_foo.php
  method up (line 11) | public function up(): void
  method down (line 18) | public function down(): void
  method table (line 23) | protected function table(): Builder

FILE: tests/fixtures/app/operations_failed/2021_12_23_165048_run_success_on_failed.php
  method up (line 11) | public function up(): void
  method down (line 16) | public function down(): void
  method success (line 21) | public function success(): void
  method table (line 28) | protected function table(): Builder

FILE: tests/fixtures/app/operations_failed/2021_12_23_184029_run_failed_failure.php
  method up (line 11) | public function up(): void
  method down (line 16) | public function down(): void
  method failed (line 21) | public function failed(): void
  method table (line 28) | protected function table(): Builder

FILE: tests/fixtures/app/via_migrations/2025_03_31_213407_custom.php
  method __invoke (line 11) | public function __invoke(Some $some): void
  method table (line 18) | protected function table(): Builder

FILE: tests/fixtures/app/via_migrations/2025_03_31_234251_invoke.php
  method __invoke (line 11) | public function __invoke(Some $some): void
  method table (line 18) | protected function table(): Builder

FILE: tests/fixtures/app/via_migrations/2025_03_31_234312_up_down.php
  method up (line 11) | public function up(Some $some): void
  method down (line 18) | public function down(Some $some): void
  method table (line 25) | protected function table(): Builder

FILE: tests/fixtures/migrations/2020_12_07_164624_create_test_table.php
  method up (line 10) | public function up(): void
  method down (line 17) | public function down(): void

FILE: tests/fixtures/migrations/2021_01_02_022431_create_every_time_table.php
  method up (line 10) | public function up(): void
  method down (line 17) | public function down(): void

FILE: tests/fixtures/migrations/2021_02_15_124419_create_transactions_table.php
  method up (line 10) | public function up(): void
  method down (line 17) | public function down(): void

FILE: tests/fixtures/migrations/2021_05_24_122027_create_environment_table.php
  method up (line 10) | public function up(): void
  method down (line 17) | public function down(): void

FILE: tests/fixtures/migrations/2021_12_23_165218_create_success_table.php
  method up (line 10) | public function up(): void
  method down (line 17) | public function down(): void

FILE: tests/fixtures/migrations/2021_12_23_184434_create_failed_table.php
  method up (line 10) | public function up(): void
  method down (line 17) | public function down(): void

FILE: tests/fixtures/migrations/2022_08_17_150549_create_before_table.php
  method up (line 10) | public function up(): void
  method down (line 17) | public function down(): void

FILE: tests/fixtures/migrations_with_operations/2025_03_31_213847_call_invokable.php
  method up (line 10) | public function up(): void {}
  method withOperation (line 12) | public function withOperation(): string

FILE: tests/fixtures/migrations_with_operations/2025_03_31_213921_call_up_down.php
  method up (line 10) | public function up(): void {}
  method down (line 12) | public function down(): void {}
  method withOperation (line 14) | public function withOperation(): string
Condensed preview — 199 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (339K chars).
[
  {
    "path": ".editorconfig",
    "chars": 43549,
    "preview": "[*]\ncharset = utf-8\nend_of_line = lf\nindent_size = 4\nindent_style = space\ninsert_final_newline = true\nmax_line_length = "
  },
  {
    "path": ".gitattributes",
    "chars": 217,
    "preview": "* text=auto\n\n.github/ export-ignore\ndocs/ export-ignore\ntests/ export-ignore\n\n*.stub linguist-language=php\n\n.editorconfi"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.yml",
    "chars": 1975,
    "preview": "name: Bug Report\ndescription: Report a bug or other issue\n\nbody:\n    -   type: markdown\n        attributes:\n            "
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "chars": 235,
    "preview": "blank_issues_enabled: false\ncontact_links:\n    -   name: Laravel issue\n        url: https://github.com/laravel/framework"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.yml",
    "chars": 589,
    "preview": "name: Feature Proposal\ndescription: Propose a new feature\n\nbody:\n    -   type: textarea\n        id: description\n        "
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE.md",
    "chars": 260,
    "preview": "<!--\nPull requests without a descriptive title, thorough description, or tests will be closed.\n\nIn addition, please desc"
  },
  {
    "path": ".github/dependabot.yml",
    "chars": 158,
    "preview": "version: 2\nupdates:\n    - package-ecosystem: github-actions\n      directory: /\n      schedule:\n          interval: daily"
  },
  {
    "path": ".github/preview-updater.yml",
    "chars": 58,
    "preview": "image:\n    parameters:\n        title: 'Deploy Operations'\n"
  },
  {
    "path": ".github/workflows/code-style.yml",
    "chars": 161,
    "preview": "name: Code Style\n\non: [ push, pull_request ]\n\npermissions: write-all\n\njobs:\n    check:\n        uses: TheDragonCode/.gith"
  },
  {
    "path": ".github/workflows/docs.yml",
    "chars": 3510,
    "preview": "name: Documentation\n\non:\n    push:\n    workflow_dispatch:\n\npermissions:\n    id-token: write\n    pages: write\n\nenv:\n    C"
  },
  {
    "path": ".github/workflows/license.yml",
    "chars": 166,
    "preview": "name: Update license\n\non:\n  schedule:\n    - cron: '0 3 1 1 *'\n  workflow_dispatch:\n\njobs:\n  Update:\n    uses: TheDragonC"
  },
  {
    "path": ".github/workflows/preview.yml",
    "chars": 244,
    "preview": "name: Preview Updater\n\non:\n    schedule:\n        -   cron: '20 2 * * *'\n    workflow_dispatch:\n\npermissions:\n    content"
  },
  {
    "path": ".github/workflows/release-drafter.yml",
    "chars": 181,
    "preview": "name: Release Drafter\n\non:\n  push:\n    branches:\n      - main\n  workflow_dispatch:\n\njobs:\n    Update:\n        uses: TheD"
  },
  {
    "path": ".github/workflows/tests.yml",
    "chars": 1003,
    "preview": "name: Tests\n\non: [ push, pull_request ]\n\njobs:\n    build:\n        runs-on: ubuntu-latest\n\n        strategy:\n            "
  },
  {
    "path": ".gitignore",
    "chars": 165,
    "preview": ".idea/\n_site/\nbuild/\nnode_modules/\ntmp/\nvendor/\n\n.cache\n.DS_Store\n.env\n.php_cs.cache\n.phpintel\n.temp\n\n*.bak\n*.cache\n*.cl"
  },
  {
    "path": "LICENSE",
    "chars": 1076,
    "preview": "MIT License\n\nCopyright (c) 2020-2026 Andrey Helldar\n\nPermission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "README.md",
    "chars": 4285,
    "preview": "# 🚀 Laravel Deploy Operations\n\n<picture>\n    <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://banners.beyond"
  },
  {
    "path": "biome.json",
    "chars": 1296,
    "preview": "{\n    \"$schema\": \"./node_modules/@biomejs/biome/configuration_schema.json\",\n    \"vcs\": {\n        \"enabled\": false,\n     "
  },
  {
    "path": "composer.json",
    "chars": 2567,
    "preview": "{\n    \"name\": \"dragon-code/laravel-deploy-operations\",\n    \"description\": \"Performing any actions during the deployment "
  },
  {
    "path": "config/deploy-operations.php",
    "chars": 4684,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nreturn [\n    /*\n    |------------------------------------------------------------------"
  },
  {
    "path": "database/migrations/2022_08_18_180137_change_migration_actions_table.php",
    "chars": 1409,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse DragonCode\\LaravelDeployOperations\\Data\\Config\\ConfigData;\nuse Illuminate\\Database\\"
  },
  {
    "path": "database/migrations/2023_01_21_172923_rename_migrations_actions_table_to_actions.php",
    "chars": 1300,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse DragonCode\\LaravelDeployOperations\\Data\\Config\\ConfigData;\nuse Illuminate\\Database\\"
  },
  {
    "path": "database/migrations/2024_05_21_112438_rename_actions_table_to_operations.php",
    "chars": 1250,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse DragonCode\\LaravelDeployOperations\\Data\\Config\\ConfigData;\nuse Illuminate\\Database\\"
  },
  {
    "path": "database/migrations/2024_05_21_114318_rename_column_in_operations_table.php",
    "chars": 786,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse DragonCode\\LaravelDeployOperations\\Data\\Config\\ConfigData;\nuse Illuminate\\Database\\"
  },
  {
    "path": "docs/cfg/buildprofiles.xml",
    "chars": 2308,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE buildprofiles SYSTEM \"https://resources.jetbrains.com/writerside/1.0/bu"
  },
  {
    "path": "docs/do.tree",
    "chars": 1786,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE instance-profile\n        SYSTEM \"https://resources.jetbrains.com/writer"
  },
  {
    "path": "docs/docs_libraries.tree",
    "chars": 359,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE instance-profile\n        SYSTEM \"https://resources.jetbrains.com/writer"
  },
  {
    "path": "docs/snippets/actual_file_names.sh",
    "chars": 152,
    "preview": "# actual file names\n2022_10_14_000001_test1      # 1\n2022_10_14_000004_test4      # 4\nbar/2022_10_14_000003_test3  # 3\nf"
  },
  {
    "path": "docs/snippets/ask.sh",
    "chars": 279,
    "preview": "php artisan make:operation\n  Creating an operation \n\n ┌ What should the operation be named? ─────────────────────────┐\n "
  },
  {
    "path": "docs/snippets/async.php",
    "chars": 259,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse DragonCode\\LaravelDeployOperations\\Operation;\n\nreturn new class extends Operation {"
  },
  {
    "path": "docs/snippets/before_after.sh",
    "chars": 73,
    "preview": "php artisan operations --before\n\n# some commands\n\nphp artisan operations\n"
  },
  {
    "path": "docs/snippets/deployer.php",
    "chars": 237,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\ntask('deploy', [\n    // ...\n    'artisan:migrate',\n    'artisan:operation --before', //"
  },
  {
    "path": "docs/snippets/di_invoke.php",
    "chars": 247,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse DragonCode\\LaravelDeployOperations\\Operation;\nuse Tests\\Concerns\\Some;\n\nreturn new "
  },
  {
    "path": "docs/snippets/di_up_down.php",
    "chars": 336,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse DragonCode\\LaravelDeployOperations\\Operation;\nuse Tests\\Concerns\\Some;\n\nreturn new "
  },
  {
    "path": "docs/snippets/empty.php",
    "chars": 194,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse DragonCode\\LaravelDeployOperations\\Operation;\n\nreturn new class extends Operation {"
  },
  {
    "path": "docs/snippets/event_service_provider.php",
    "chars": 863,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Providers;\n\nuse App\\Listeners\\SomeOperationsListener;\nuse DragonCode\\Lara"
  },
  {
    "path": "docs/snippets/events_list.php",
    "chars": 325,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nDragonCode\\LaravelDeployOperations\\Events\\DeployOperationStarted::class;\nDragonCode\\Lar"
  },
  {
    "path": "docs/snippets/example.php",
    "chars": 359,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Models\\Article;\nuse DragonCode\\LaravelDeployOperations\\Operation;\n\nreturn new c"
  },
  {
    "path": "docs/snippets/example_artisan.php",
    "chars": 252,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse DragonCode\\LaravelDeployOperations\\Operation;\n\nreturn new class extends Operation {"
  },
  {
    "path": "docs/snippets/except_environment.php",
    "chars": 313,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse DragonCode\\LaravelDeployOperations\\Operation;\n\nreturn new class extends Operation {"
  },
  {
    "path": "docs/snippets/failed_status.php",
    "chars": 460,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse DragonCode\\LaravelDeployOperations\\Operation;\nuse Illuminate\\Support\\Facade\\Log;\n\nr"
  },
  {
    "path": "docs/snippets/invokable_status.php",
    "chars": 380,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse DragonCode\\LaravelDeployOperations\\Operation;\nuse Illuminate\\Support\\Facade\\Log;\n\nr"
  },
  {
    "path": "docs/snippets/invoke_and_down.php",
    "chars": 372,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse DragonCode\\LaravelDeployOperations\\Operation;\n\nreturn new class extends Operation {"
  },
  {
    "path": "docs/snippets/listen_events.php",
    "chars": 771,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Listeners\\SomeOperationsListener;\nuse DragonCode\\LaravelDeployOperations\\Events"
  },
  {
    "path": "docs/snippets/make_auto.sh",
    "chars": 410,
    "preview": "php artisan make:operation\n\n### When the git repository is found (`base_path('.git')` directory is exists) and HEAD bran"
  },
  {
    "path": "docs/snippets/need_before.php",
    "chars": 257,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse DragonCode\\LaravelDeployOperations\\Operation;\n\nreturn new class extends Operation {"
  },
  {
    "path": "docs/snippets/nested.sh",
    "chars": 266,
    "preview": "php artisan make:operation Foo/Bar/QweRty\nphp artisan make:operation Foo/Bar/QweRty.php\n\nphp artisan make:operation Foo\\"
  },
  {
    "path": "docs/snippets/nested_example.sh",
    "chars": 383,
    "preview": "php artisan make:operation foo\\bar\\QweRty\n# operations/foo/bar/2022_10_11_225734_qwe_rty.php\n\nphp artisan make:operation"
  },
  {
    "path": "docs/snippets/on_environment.php",
    "chars": 272,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse DragonCode\\LaravelDeployOperations\\Operation;\n\nreturn new class extends Operation {"
  },
  {
    "path": "docs/snippets/on_environments.php",
    "chars": 311,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse DragonCode\\LaravelDeployOperations\\Operation;\n\nreturn new class extends Operation {"
  },
  {
    "path": "docs/snippets/once_method.php",
    "chars": 257,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse DragonCode\\LaravelDeployOperations\\Operation;\n\nreturn new class extends Operation {"
  },
  {
    "path": "docs/snippets/operation_helper_all.php",
    "chars": 122,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse DragonCode\\LaravelDeployOperations\\Helpers\\OperationHelper;\n\nOperationHelper::run()"
  },
  {
    "path": "docs/snippets/operation_helper_directory.php",
    "chars": 219,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse DragonCode\\LaravelDeployOperations\\Helpers\\OperationHelper;\n\nOperationHelper::run('"
  },
  {
    "path": "docs/snippets/operation_helper_file.php",
    "chars": 423,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse DragonCode\\LaravelDeployOperations\\Helpers\\OperationHelper;\n\nOperationHelper::run('"
  },
  {
    "path": "docs/snippets/operations_helper.sh",
    "chars": 132,
    "preview": "2022_10_14_000001_test1\nfoo/2022_10_14_000002_test2\nfoo/2022_10_14_000003_test3\nbar/2022_10_14_000004_test4\n2022_10_14_0"
  },
  {
    "path": "docs/snippets/operations_status.sh",
    "chars": 532,
    "preview": "2025_04_02_100000_some ............................................ [1] Ran\n2025_04_02_100001_some ....................."
  },
  {
    "path": "docs/snippets/order_running_operations.sh",
    "chars": 173,
    "preview": "# order of running operations at startup\n2022_10_14_000001_test1      # 1\nfoo/2022_10_14_000002_test2  # 2\nbar/2022_10_1"
  },
  {
    "path": "docs/snippets/rollback.sh",
    "chars": 836,
    "preview": "php artisan operations:rollback\n# operation                 batch\n# 2022_10_12_021837_some    1\n# 2022_10_12_021838_some"
  },
  {
    "path": "docs/snippets/some_listener.php",
    "chars": 323,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Listeners;\n\nuse DragonCode\\LaravelDeployOperations\\Events\\BaseEvent;\n\ncla"
  },
  {
    "path": "docs/snippets/success_status.php",
    "chars": 436,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse DragonCode\\LaravelDeployOperations\\Operation;\nuse Illuminate\\Support\\Facade\\Log;\n\nr"
  },
  {
    "path": "docs/snippets/with_operation.php",
    "chars": 282,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Database\\Migrations\\Migration;\n\nreturn new class extends Migration {\n   "
  },
  {
    "path": "docs/snippets/with_operation_helper.php",
    "chars": 293,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Database\\Migrations\\Migration;\n\nuse function DragonCode\\LaravelDeployOpe"
  },
  {
    "path": "docs/snippets/within_transactions.php",
    "chars": 264,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse DragonCode\\LaravelDeployOperations\\Operation;\n\nreturn new class extends Operation {"
  },
  {
    "path": "docs/topics/artisan-commands.topic",
    "chars": 926,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE topic\n    SYSTEM \"https://resources.jetbrains.com/writerside/1.0/xhtml-"
  },
  {
    "path": "docs/topics/creating-operations.topic",
    "chars": 4449,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE topic\n    SYSTEM \"https://resources.jetbrains.com/writerside/1.0/xhtml-"
  },
  {
    "path": "docs/topics/customize-stub.topic",
    "chars": 1326,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE topic\n    SYSTEM \"https://resources.jetbrains.com/writerside/1.0/xhtml-"
  },
  {
    "path": "docs/topics/database-data-dumper.topic",
    "chars": 2650,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE topic\n    SYSTEM \"https://resources.jetbrains.com/writerside/1.0/xhtml-"
  },
  {
    "path": "docs/topics/events.topic",
    "chars": 1491,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE topic\n    SYSTEM \"https://resources.jetbrains.com/writerside/1.0/xhtml-"
  },
  {
    "path": "docs/topics/execution-status.topic",
    "chars": 1965,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE topic\n    SYSTEM \"https://resources.jetbrains.com/writerside/1.0/xhtml-"
  },
  {
    "path": "docs/topics/installation.topic",
    "chars": 3706,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE topic\n    SYSTEM \"https://resources.jetbrains.com/writerside/1.0/xhtml-"
  },
  {
    "path": "docs/topics/introduction.topic",
    "chars": 1430,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE topic\n    SYSTEM \"https://resources.jetbrains.com/writerside/1.0/xhtml-"
  },
  {
    "path": "docs/topics/operation-helper.topic",
    "chars": 2617,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE topic\n    SYSTEM \"https://resources.jetbrains.com/writerside/1.0/xhtml-"
  },
  {
    "path": "docs/topics/operations-status.topic",
    "chars": 1048,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE topic\n    SYSTEM \"https://resources.jetbrains.com/writerside/1.0/xhtml-"
  },
  {
    "path": "docs/topics/rolling-back-operations.topic",
    "chars": 1747,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE topic\n    SYSTEM \"https://resources.jetbrains.com/writerside/1.0/xhtml-"
  },
  {
    "path": "docs/topics/running-operations.topic",
    "chars": 11268,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE topic\n    SYSTEM \"https://resources.jetbrains.com/writerside/1.0/xhtml-"
  },
  {
    "path": "docs/topics/snippets_composer.topic",
    "chars": 585,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE topic SYSTEM \"https://resources.jetbrains.com/writerside/1.0/html-entit"
  },
  {
    "path": "docs/topics/upgrade-3.topic",
    "chars": 6991,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE topic\n    SYSTEM \"https://resources.jetbrains.com/writerside/1.0/xhtml-"
  },
  {
    "path": "docs/topics/upgrade-4.topic",
    "chars": 5243,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE topic\n    SYSTEM \"https://resources.jetbrains.com/writerside/1.0/xhtml-"
  },
  {
    "path": "docs/topics/upgrade-5.topic",
    "chars": 2112,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE topic\n    SYSTEM \"https://resources.jetbrains.com/writerside/1.0/xhtml-"
  },
  {
    "path": "docs/topics/upgrade-6.topic",
    "chars": 10532,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE topic\n    SYSTEM \"https://resources.jetbrains.com/writerside/1.0/xhtml-"
  },
  {
    "path": "docs/topics/upgrade-7.topic",
    "chars": 8670,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE topic\n    SYSTEM \"https://resources.jetbrains.com/writerside/1.0/xhtml-"
  },
  {
    "path": "docs/topics/usage.topic",
    "chars": 901,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE topic\n    SYSTEM \"https://resources.jetbrains.com/writerside/1.0/xhtml-"
  },
  {
    "path": "docs/v.list",
    "chars": 1367,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE vars SYSTEM \"https://resources.jetbrains.com/writerside/1.0/vars.dtd\">\n"
  },
  {
    "path": "docs/versions.json",
    "chars": 756,
    "preview": "[\n    {\n        \"version\": \"7.x\",\n        \"url\": \"https://deploy-operations.dragon-code.pro\",\n        \"isCurrent\": true\n"
  },
  {
    "path": "docs/writerside.cfg",
    "chars": 323,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE ihp SYSTEM \"https://resources.jetbrains.com/writerside/1.0/ihp.dtd\">\n\n<"
  },
  {
    "path": "ide.json",
    "chars": 1622,
    "preview": "{\n    \"$schema\": \"https://laravel-ide.com/schema/laravel-ide-v2.json\",\n    \"codeGenerations\": [\n        {\n            \"i"
  },
  {
    "path": "phpunit.xml",
    "chars": 668,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<phpunit\n        xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n        xs"
  },
  {
    "path": "pint.json",
    "chars": 2683,
    "preview": "{\n    \"preset\": \"laravel\",\n    \"exclude\": [\n        \"tests/Fixtures\"\n    ],\n    \"rules\": {\n        \"@PHP7x1Migration\": t"
  },
  {
    "path": "resources/stubs/deploy-operation.stub",
    "chars": 184,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse DragonCode\\LaravelDeployOperations\\Operation;\n\nreturn new class extends Operation {"
  },
  {
    "path": "src/Concerns/ConfirmableTrait.php",
    "chars": 368,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace DragonCode\\LaravelDeployOperations\\Concerns;\n\nuse Illuminate\\Console\\Confirma"
  },
  {
    "path": "src/Concerns/HasAbout.php",
    "chars": 862,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace DragonCode\\LaravelDeployOperations\\Concerns;\n\nuse Composer\\InstalledVersions;"
  },
  {
    "path": "src/Concerns/HasArtisan.php",
    "chars": 373,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace DragonCode\\LaravelDeployOperations\\Concerns;\n\nuse Illuminate\\Console\\OutputSt"
  },
  {
    "path": "src/Concerns/HasIsolatable.php",
    "chars": 913,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace DragonCode\\LaravelDeployOperations\\Concerns;\n\nuse DragonCode\\LaravelDeployOpe"
  },
  {
    "path": "src/Concerns/HasOptionable.php",
    "chars": 3299,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace DragonCode\\LaravelDeployOperations\\Concerns;\n\nuse DragonCode\\LaravelDeployOpe"
  },
  {
    "path": "src/Console/Command.php",
    "chars": 1959,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace DragonCode\\LaravelDeployOperations\\Console;\n\nuse DragonCode\\LaravelDeployOper"
  },
  {
    "path": "src/Console/FreshCommand.php",
    "chars": 738,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace DragonCode\\LaravelDeployOperations\\Console;\n\nuse DragonCode\\LaravelDeployOper"
  },
  {
    "path": "src/Console/InstallCommand.php",
    "chars": 496,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace DragonCode\\LaravelDeployOperations\\Console;\n\nuse DragonCode\\LaravelDeployOper"
  },
  {
    "path": "src/Console/MakeCommand.php",
    "chars": 775,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace DragonCode\\LaravelDeployOperations\\Console;\n\nuse DragonCode\\LaravelDeployOper"
  },
  {
    "path": "src/Console/OperationsCommand.php",
    "chars": 812,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace DragonCode\\LaravelDeployOperations\\Console;\n\nuse DragonCode\\LaravelDeployOper"
  },
  {
    "path": "src/Console/RollbackCommand.php",
    "chars": 770,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace DragonCode\\LaravelDeployOperations\\Console;\n\nuse DragonCode\\LaravelDeployOper"
  },
  {
    "path": "src/Console/StatusCommand.php",
    "chars": 731,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace DragonCode\\LaravelDeployOperations\\Console;\n\nuse DragonCode\\LaravelDeployOper"
  },
  {
    "path": "src/Constants/Names.php",
    "chars": 404,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace DragonCode\\LaravelDeployOperations\\Constants;\n\nclass Names\n{\n    public const"
  },
  {
    "path": "src/Constants/Options.php",
    "chars": 505,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace DragonCode\\LaravelDeployOperations\\Constants;\n\nclass Options\n{\n    public con"
  },
  {
    "path": "src/Constants/Order.php",
    "chars": 169,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace DragonCode\\LaravelDeployOperations\\Constants;\n\nclass Order\n{\n    public const"
  },
  {
    "path": "src/Data/Casts/BoolCast.php",
    "chars": 477,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace DragonCode\\LaravelDeployOperations\\Data\\Casts;\n\nuse DragonCode\\Support\\Facade"
  },
  {
    "path": "src/Data/Casts/Config/ExcludeCast.php",
    "chars": 649,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace DragonCode\\LaravelDeployOperations\\Data\\Casts\\Config;\n\nuse Illuminate\\Support"
  },
  {
    "path": "src/Data/Casts/Config/PathCast.php",
    "chars": 479,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace DragonCode\\LaravelDeployOperations\\Data\\Casts\\Config;\n\nuse Spatie\\LaravelData"
  },
  {
    "path": "src/Data/Casts/OperationNameCast.php",
    "chars": 763,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace DragonCode\\LaravelDeployOperations\\Data\\Casts;\n\nuse DragonCode\\Support\\Facade"
  },
  {
    "path": "src/Data/Casts/PathCast.php",
    "chars": 939,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace DragonCode\\LaravelDeployOperations\\Data\\Casts;\n\nuse DragonCode\\LaravelDeployO"
  },
  {
    "path": "src/Data/Config/ConfigData.php",
    "chars": 647,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace DragonCode\\LaravelDeployOperations\\Data\\Config;\n\nuse DragonCode\\LaravelDeploy"
  },
  {
    "path": "src/Data/Config/QueueData.php",
    "chars": 214,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace DragonCode\\LaravelDeployOperations\\Data\\Config;\n\nuse Spatie\\LaravelData\\Data;"
  },
  {
    "path": "src/Data/Config/ShowData.php",
    "chars": 317,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace DragonCode\\LaravelDeployOperations\\Data\\Config;\n\nuse Spatie\\LaravelData\\Attri"
  },
  {
    "path": "src/Data/Config/TransactionsData.php",
    "chars": 215,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace DragonCode\\LaravelDeployOperations\\Data\\Config;\n\nuse Spatie\\LaravelData\\Data;"
  },
  {
    "path": "src/Data/OptionsData.php",
    "chars": 1012,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace DragonCode\\LaravelDeployOperations\\Data;\n\nuse DragonCode\\LaravelDeployOperati"
  },
  {
    "path": "src/Enums/MethodEnum.php",
    "chars": 160,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace DragonCode\\LaravelDeployOperations\\Enums;\n\nenum MethodEnum: string\n{\n    case"
  },
  {
    "path": "src/Enums/StatusEnum.php",
    "chars": 443,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace DragonCode\\LaravelDeployOperations\\Enums;\n\nenum StatusEnum\n{\n    case Ran;\n  "
  },
  {
    "path": "src/Events/BaseEvent.php",
    "chars": 279,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace DragonCode\\LaravelDeployOperations\\Events;\n\nuse DragonCode\\LaravelDeployOpera"
  },
  {
    "path": "src/Events/DeployOperationEnded.php",
    "chars": 135,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace DragonCode\\LaravelDeployOperations\\Events;\n\nclass DeployOperationEnded extend"
  },
  {
    "path": "src/Events/DeployOperationFailed.php",
    "chars": 136,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace DragonCode\\LaravelDeployOperations\\Events;\n\nclass DeployOperationFailed exten"
  },
  {
    "path": "src/Events/DeployOperationStarted.php",
    "chars": 137,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace DragonCode\\LaravelDeployOperations\\Events;\n\nclass DeployOperationStarted exte"
  },
  {
    "path": "src/Events/NoPendingDeployOperations.php",
    "chars": 140,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace DragonCode\\LaravelDeployOperations\\Events;\n\nclass NoPendingDeployOperations e"
  },
  {
    "path": "src/Helpers/GitHelper.php",
    "chars": 1046,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace DragonCode\\LaravelDeployOperations\\Helpers;\n\nuse DragonCode\\Support\\Facades\\F"
  },
  {
    "path": "src/Helpers/OperationHelper.php",
    "chars": 727,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace DragonCode\\LaravelDeployOperations\\Helpers;\n\nuse DragonCode\\LaravelDeployOper"
  },
  {
    "path": "src/Helpers/SorterHelper.php",
    "chars": 1075,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace DragonCode\\LaravelDeployOperations\\Helpers;\n\nuse Closure;\nuse DragonCode\\Supp"
  },
  {
    "path": "src/Jobs/OperationJob.php",
    "chars": 1302,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace DragonCode\\LaravelDeployOperations\\Jobs;\n\nuse DragonCode\\LaravelDeployOperati"
  },
  {
    "path": "src/Listeners/Listener.php",
    "chars": 1146,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace DragonCode\\LaravelDeployOperations\\Listeners;\n\nuse DragonCode\\LaravelDeployOp"
  },
  {
    "path": "src/Listeners/MigrationEndedListener.php",
    "chars": 386,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace DragonCode\\LaravelDeployOperations\\Listeners;\n\nuse Illuminate\\Database\\Events"
  },
  {
    "path": "src/Notifications/Notification.php",
    "chars": 1828,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace DragonCode\\LaravelDeployOperations\\Notifications;\n\nuse Closure;\nuse Illuminat"
  },
  {
    "path": "src/Operation.php",
    "chars": 1416,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace DragonCode\\LaravelDeployOperations;\n\nuse DragonCode\\LaravelDeployOperations\\C"
  },
  {
    "path": "src/Processors/FreshProcessor.php",
    "chars": 870,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace DragonCode\\LaravelDeployOperations\\Processors;\n\nuse DragonCode\\LaravelDeployO"
  },
  {
    "path": "src/Processors/InstallProcessor.php",
    "chars": 1207,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace DragonCode\\LaravelDeployOperations\\Processors;\n\nuse DragonCode\\Support\\Facade"
  },
  {
    "path": "src/Processors/MakeProcessor.php",
    "chars": 3063,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace DragonCode\\LaravelDeployOperations\\Processors;\n\nuse DragonCode\\Support\\Facade"
  },
  {
    "path": "src/Processors/OperationsProcessor.php",
    "chars": 2644,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace DragonCode\\LaravelDeployOperations\\Processors;\n\nuse DragonCode\\LaravelDeployO"
  },
  {
    "path": "src/Processors/Processor.php",
    "chars": 3050,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace DragonCode\\LaravelDeployOperations\\Processors;\n\nuse Closure;\nuse DragonCode\\L"
  },
  {
    "path": "src/Processors/RollbackProcessor.php",
    "chars": 1938,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace DragonCode\\LaravelDeployOperations\\Processors;\n\nuse DragonCode\\LaravelDeployO"
  },
  {
    "path": "src/Processors/StatusProcessor.php",
    "chars": 2255,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace DragonCode\\LaravelDeployOperations\\Processors;\n\nuse DragonCode\\LaravelDeployO"
  },
  {
    "path": "src/Repositories/OperationsRepository.php",
    "chars": 3232,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace DragonCode\\LaravelDeployOperations\\Repositories;\n\nuse DragonCode\\LaravelDeplo"
  },
  {
    "path": "src/ServiceProvider.php",
    "chars": 2439,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace DragonCode\\LaravelDeployOperations;\n\nuse DragonCode\\LaravelDeployOperations\\C"
  },
  {
    "path": "src/Services/MigratorService.php",
    "chars": 5529,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace DragonCode\\LaravelDeployOperations\\Services;\n\nuse DragonCode\\LaravelDeployOpe"
  },
  {
    "path": "src/Services/MutexService.php",
    "chars": 1040,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace DragonCode\\LaravelDeployOperations\\Services;\n\nuse Carbon\\CarbonInterval;\nuse "
  },
  {
    "path": "src/helpers.php",
    "chars": 243,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace DragonCode\\LaravelDeployOperations;\n\nif (! function_exists('\\DragonCode\\Larav"
  },
  {
    "path": "tests/Commands/EventsTest.php",
    "chars": 1404,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Tests\\Commands;\n\nuse DragonCode\\LaravelDeployOperations\\Constants\\Names;\nuse "
  },
  {
    "path": "tests/Commands/FreshTest.php",
    "chars": 932,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Tests\\Commands;\n\nuse DragonCode\\LaravelDeployOperations\\Constants\\Names;\nuse "
  },
  {
    "path": "tests/Commands/InstallTest.php",
    "chars": 1361,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Tests\\Commands;\n\nuse DragonCode\\LaravelDeployOperations\\Constants\\Names;\nuse "
  },
  {
    "path": "tests/Commands/MakeTest.php",
    "chars": 4614,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Tests\\Commands;\n\nuse DragonCode\\LaravelDeployOperations\\Constants\\Names;\nuse "
  },
  {
    "path": "tests/Commands/MutexTest.php",
    "chars": 2487,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Tests\\Commands;\n\nuse DragonCode\\LaravelDeployOperations\\Console\\Command;\nuse "
  },
  {
    "path": "tests/Commands/OperationsTest.php",
    "chars": 33084,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Tests\\Commands;\n\nuse DragonCode\\LaravelDeployOperations\\Constants\\Names;\nuse "
  },
  {
    "path": "tests/Commands/RollbackTest.php",
    "chars": 12401,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Tests\\Commands;\n\nuse DragonCode\\LaravelDeployOperations\\Constants\\Names;\nuse "
  },
  {
    "path": "tests/Commands/StatusTest.php",
    "chars": 1085,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Tests\\Commands;\n\nuse DragonCode\\LaravelDeployOperations\\Constants\\Names;\nuse "
  },
  {
    "path": "tests/Concerns/AssertDatabase.php",
    "chars": 1746,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Tests\\Concerns;\n\nuse Illuminate\\Support\\Facades\\DB;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "tests/Concerns/Database.php",
    "chars": 810,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Tests\\Concerns;\n\ntrait Database\n{\n    protected string $database = 'testing';"
  },
  {
    "path": "tests/Concerns/Files.php",
    "chars": 2867,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Tests\\Concerns;\n\nuse DragonCode\\Support\\Facades\\Filesystem\\Directory;\nuse Ill"
  },
  {
    "path": "tests/Concerns/Some.php",
    "chars": 157,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Tests\\Concerns;\n\nclass Some\n{\n    public function get(string $value): string\n"
  },
  {
    "path": "tests/Helpers/GitTest.php",
    "chars": 572,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Tests\\Helpers;\n\nuse DragonCode\\LaravelDeployOperations\\Helpers\\GitHelper;\nuse"
  },
  {
    "path": "tests/Helpers/OperationTest.php",
    "chars": 1456,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Tests\\Helpers;\n\nuse DragonCode\\LaravelDeployOperations\\Constants\\Names;\nuse D"
  },
  {
    "path": "tests/Helpers/SorterTest.php",
    "chars": 2588,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Tests\\Helpers;\n\nuse DragonCode\\LaravelDeployOperations\\Helpers\\SorterHelper;\n"
  },
  {
    "path": "tests/TestCase.php",
    "chars": 1368,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Tests;\n\nuse DragonCode\\LaravelDeployOperations\\Repositories\\OperationsReposit"
  },
  {
    "path": "tests/fixtures/app/async/2021_04_06_212742_every_time.php",
    "chars": 598,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse DragonCode\\LaravelDeployOperations\\Operation;\nuse Illuminate\\Database\\Query\\Builder"
  },
  {
    "path": "tests/fixtures/app/async/2023_04_06_212637_foo_bar.php",
    "chars": 518,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse DragonCode\\LaravelDeployOperations\\Operation;\nuse Illuminate\\Database\\Query\\Builder"
  },
  {
    "path": "tests/fixtures/app/di/2022_10_11_234251_invoke.php",
    "chars": 459,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse DragonCode\\LaravelDeployOperations\\Operation;\nuse Illuminate\\Database\\Query\\Builder"
  },
  {
    "path": "tests/fixtures/app/di/2022_10_11_234251_invoke_down.php",
    "chars": 623,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse DragonCode\\LaravelDeployOperations\\Operation;\nuse Illuminate\\Database\\Query\\Builder"
  },
  {
    "path": "tests/fixtures/app/di/2022_10_11_234312_up_down.php",
    "chars": 609,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse DragonCode\\LaravelDeployOperations\\Operation;\nuse Illuminate\\Database\\Query\\Builder"
  },
  {
    "path": "tests/fixtures/app/empty/.gitkeep",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "tests/fixtures/app/empty/some.txt",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "tests/fixtures/app/operations/2020_12_07_153105_foo_bar.php",
    "chars": 522,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse DragonCode\\LaravelDeployOperations\\Operation;\nuse Illuminate\\Database\\Query\\Builder"
  },
  {
    "path": "tests/fixtures/app/operations/2021_01_02_020947_every_time.php",
    "chars": 520,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse DragonCode\\LaravelDeployOperations\\Operation;\nuse Illuminate\\Database\\Query\\Builder"
  },
  {
    "path": "tests/fixtures/app/operations/2021_05_24_120003_run_on_all.php",
    "chars": 577,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse DragonCode\\LaravelDeployOperations\\Operation;\nuse Illuminate\\Database\\Query\\Builder"
  },
  {
    "path": "tests/fixtures/app/operations/2021_05_24_120003_run_on_many_environments.php",
    "chars": 708,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse DragonCode\\LaravelDeployOperations\\Operation;\nuse Illuminate\\Database\\Query\\Builder"
  },
  {
    "path": "tests/fixtures/app/operations/2021_05_24_120003_run_on_production.php",
    "chars": 682,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse DragonCode\\LaravelDeployOperations\\Operation;\nuse Illuminate\\Database\\Query\\Builder"
  },
  {
    "path": "tests/fixtures/app/operations/2021_05_24_120003_run_on_testing.php",
    "chars": 679,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse DragonCode\\LaravelDeployOperations\\Operation;\nuse Illuminate\\Database\\Query\\Builder"
  },
  {
    "path": "tests/fixtures/app/operations/2021_06_07_132849_run_except_production.php",
    "chars": 682,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse DragonCode\\LaravelDeployOperations\\Operation;\nuse Illuminate\\Database\\Query\\Builder"
  },
  {
    "path": "tests/fixtures/app/operations/2021_06_07_132917_run_except_testing.php",
    "chars": 679,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse DragonCode\\LaravelDeployOperations\\Operation;\nuse Illuminate\\Database\\Query\\Builder"
  },
  {
    "path": "tests/fixtures/app/operations/2021_06_07_134045_run_except_many_environments.php",
    "chars": 760,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse DragonCode\\LaravelDeployOperations\\Operation;\nuse Illuminate\\Database\\Query\\Builder"
  },
  {
    "path": "tests/fixtures/app/operations/2021_10_26_143247_run_allow.php",
    "chars": 577,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse DragonCode\\LaravelDeployOperations\\Operation;\nuse Illuminate\\Database\\Query\\Builder"
  },
  {
    "path": "tests/fixtures/app/operations/2021_10_26_143304_run_disallow.php",
    "chars": 650,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse DragonCode\\LaravelDeployOperations\\Operation;\nuse Illuminate\\Database\\Query\\Builder"
  },
  {
    "path": "tests/fixtures/app/operations/2021_12_23_165047_run_success.php",
    "chars": 706,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse DragonCode\\LaravelDeployOperations\\Operation;\nuse Illuminate\\Database\\Query\\Builder"
  },
  {
    "path": "tests/fixtures/app/operations/2021_12_23_184029_run_failed.php",
    "chars": 519,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse DragonCode\\LaravelDeployOperations\\Operation;\nuse Illuminate\\Database\\Query\\Builder"
  },
  {
    "path": "tests/fixtures/app/operations/2022_08_17_135147_test_before_enabled.php",
    "chars": 645,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse DragonCode\\LaravelDeployOperations\\Operation;\nuse Illuminate\\Database\\Query\\Builder"
  },
  {
    "path": "tests/fixtures/app/operations/2022_08_17_135153_test_before_disabled.php",
    "chars": 646,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse DragonCode\\LaravelDeployOperations\\Operation;\nuse Illuminate\\Database\\Query\\Builder"
  },
  {
    "path": "tests/fixtures/app/operations/sub_path/2021_12_15_205804_baz.php",
    "chars": 522,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse DragonCode\\LaravelDeployOperations\\Operation;\nuse Illuminate\\Database\\Query\\Builder"
  },
  {
    "path": "tests/fixtures/app/operations/sub_path/2022_10_27_230732_foo.php",
    "chars": 522,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse DragonCode\\LaravelDeployOperations\\Operation;\nuse Illuminate\\Database\\Query\\Builder"
  },
  {
    "path": "tests/fixtures/app/operations_failed/2021_12_23_165048_run_success_on_failed.php",
    "chars": 636,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse DragonCode\\LaravelDeployOperations\\Operation;\nuse Illuminate\\Database\\Query\\Builder"
  },
  {
    "path": "tests/fixtures/app/operations_failed/2021_12_23_184029_run_failed_failure.php",
    "chars": 634,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse DragonCode\\LaravelDeployOperations\\Operation;\nuse Illuminate\\Database\\Query\\Builder"
  },
  {
    "path": "tests/fixtures/app/stubs/2021_02_15_124237_test_success_transactions.stub",
    "chars": 643,
    "preview": "<?php\n\nuse DragonCode\\LaravelDeployOperations\\Operation;\nuse Illuminate\\Database\\Query\\Builder;\nuse Illuminate\\Support\\F"
  },
  {
    "path": "tests/fixtures/app/stubs/2021_02_15_124852_test_failed_transactions.stub",
    "chars": 691,
    "preview": "<?php\n\nuse DragonCode\\LaravelDeployOperations\\Operation;\nuse Illuminate\\Database\\Query\\Builder;\nuse Illuminate\\Support\\F"
  },
  {
    "path": "tests/fixtures/app/stubs/customized.stub",
    "chars": 157,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse Foo\\Bar\\Some;\n\nreturn new class extends Some {\n    public function __invoke(): void"
  },
  {
    "path": "tests/fixtures/app/stubs/make_example.stub",
    "chars": 184,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse DragonCode\\LaravelDeployOperations\\Operation;\n\nreturn new class extends Operation {"
  },
  {
    "path": "tests/fixtures/app/via_migrations/2025_03_31_213407_custom.php",
    "chars": 459,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse DragonCode\\LaravelDeployOperations\\Operation;\nuse Illuminate\\Database\\Query\\Builder"
  },
  {
    "path": "tests/fixtures/app/via_migrations/2025_03_31_234251_invoke.php",
    "chars": 459,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse DragonCode\\LaravelDeployOperations\\Operation;\nuse Illuminate\\Database\\Query\\Builder"
  },
  {
    "path": "tests/fixtures/app/via_migrations/2025_03_31_234312_up_down.php",
    "chars": 609,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse DragonCode\\LaravelDeployOperations\\Operation;\nuse Illuminate\\Database\\Query\\Builder"
  },
  {
    "path": "tests/fixtures/migrations/2020_12_07_164624_create_test_table.php",
    "chars": 446,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;"
  },
  {
    "path": "tests/fixtures/migrations/2021_01_02_022431_create_every_time_table.php",
    "chars": 448,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;"
  },
  {
    "path": "tests/fixtures/migrations/2021_02_15_124419_create_transactions_table.php",
    "chars": 452,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;"
  },
  {
    "path": "tests/fixtures/migrations/2021_05_24_122027_create_environment_table.php",
    "chars": 450,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;"
  },
  {
    "path": "tests/fixtures/migrations/2021_12_23_165218_create_success_table.php",
    "chars": 444,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;"
  },
  {
    "path": "tests/fixtures/migrations/2021_12_23_184434_create_failed_table.php",
    "chars": 442,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;"
  },
  {
    "path": "tests/fixtures/migrations/2022_08_17_150549_create_before_table.php",
    "chars": 442,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;"
  },
  {
    "path": "tests/fixtures/migrations_with_operations/2025_03_31_213847_call_invokable.php",
    "chars": 325,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Database\\Migrations\\Migration;\n\nuse function DragonCode\\LaravelDeployOpe"
  },
  {
    "path": "tests/fixtures/migrations_with_operations/2025_03_31_213921_call_up_down.php",
    "chars": 363,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Database\\Migrations\\Migration;\n\nuse function DragonCode\\LaravelDeployOpe"
  }
]

About this extraction

This page contains the full source code of the TheDragonCode/laravel-migration-actions GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 199 files (305.0 KB), approximately 79.5k tokens, and a symbol index with 496 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!