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:
- 
- 
- 
- 
## 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 & 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(
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
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.